R中带有对比代码的III型SS ANOVA如何处理?


26

请提供R代码,该代码允许以-3,-1、1、3的对比度进行对象间ANOVA。我了解对于此类分析的适当平方和(SS)类型存在争议。但是,由于SAS和SPSS中使用的默认SS类型(III型)被认为是我所在地区的标准。因此,我希望此分析的结果与那些统计程序生成的结果完全匹配。要被接受,答案必须直接调用aov(),但其他答案可能会被投票(尤其是如果它们易于理解/使用)。

sample.data <- data.frame(IV=rep(1:4,each=20),DV=rep(c(-3,-3,1,3),each=20)+rnorm(80))

编辑:请注意,我要求的对比度不是简单的线性或多项式对比度,而是通过理论预测得出的对比度,即Rosenthal和Rosnow讨论的对比度类型。


5
我了解您需要III型总和,但是这篇文章(stats.ox.ac.uk/pub/MASS3/Exegeses.pdf)很不错。它说明了一些有趣的观点。
suncoolsu

关于您的问题,您可能会对以下讨论感兴趣:stats.stackexchange.com/questions/60362/…在ANOVA类型I,II和III之间进行选择并不像看起来那样容易。
phx 2014年

认为您的问题很有用,因为它激发了一些学到的答案,但是我也注意到您同意受访者的观点,该受访者基本上说问题的前提不正确。我希望我在总结StaGuy的立场时说,定义的对比定义为“类型I”,而其他类型的讨论仅在评估部分回归统计数据时才有意义,这大概是让自动化方法使“机器进行驱动”时最重要的。
DWin 2015年

@DWin:我不确定我是否会完全关注您。一个人可以合法使用其他类型的SS,而无需让“机器来驱动”(至少据我所知)。在这里,我可能会有点生疏,但是如果可以使用内存,则在不使用部分回归的情况下其他类型也可以使用。例如,类型III SS不会从交互中分离出主要效果。类型之间的区别在那里很重要,因为类型III并不部分,而类型I则是部分。所述问题仅包括一个对比,因此SS类型之间的区别是没有争议的。
russellpierce 2015年

我的理解是,SAS选择III型SSS的理由(这似乎就是为什么人们认为III型是首选的原因)是它更好地支持了向后和向前的选择过程。
DWin 2015年

Answers:


22

可通过汽车包装中的Anova()功能轻松获得用于ANOVA的III型平方和。

可以使用C()contr.*系列(由@nico指示)或直接通过contrasts()函数/参数以几种方式完成对比度编码。在带有S的《现代应用统计学》的第6.2节(第144-151页)中有详细介绍(Springer,2002年,第4版)。请注意,这aov()只是该函数的包装lm()函数。当人们想控制模型的误差项时(例如在主体内设计中),这很有趣,但是否则它们都将产生相同的结果(无论采用哪种方式拟合模型,您仍然可以输出ANOVA或LM-例如用summary.aov或总结summary.lm

我没有SPSS可以比较两个输出,但是类似

> library(car)
> sample.data <- data.frame(IV=factor(rep(1:4,each=20)),
                            DV=rep(c(-3,-3,1,3),each=20)+rnorm(80))
> Anova(lm1 <- lm(DV ~ IV, data=sample.data, 
                  contrasts=list(IV=contr.poly)), type="III")
Anova Table (Type III tests)

Response: DV
            Sum Sq Df F value    Pr(>F)    
(Intercept)  18.08  1  21.815  1.27e-05 ***
IV          567.05  3 228.046 < 2.2e-16 ***
Residuals    62.99 76                      
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1   1 

值得一审尝试。

关于R vs. SAS中的因子编码:R将基线或参考级别视为按字典顺序排列的第一级别,而SAS将其视为最后一层。因此,要获得可比的结果,必须使用contr.SAS()或使用relevel()R因子。


1
我不认为此答案使用我指定的-3,-1,1,3对比,也似乎没有提供对比的1 df测试。
russellpierce

@drknexus是的,您是对的。写得太快了。像这样的东西Anova(lm(DV ~ C(IV, c(-3,-1,1,3),1), data=sample.data), type="III")应该更好。如果可以的话,请告诉我。
chl 2010年

谢谢!没关系,我明天将针对SPSS对其进行验证,然后再次与您联系。
russellpierce

1
顺便说一句,看看包装Anova代码的ez软件包(cran.r-project.org/web/packages/ez/index.html)–
Tal Galili 2010年

2
@drknexus:如果只有针对ez的功能请求和问题提交页面... github.com/mike-lawrence/ez/issues :)
Mike Lawrence

11

这可能看起来有点自我促进(我想是的)。但是我为R 开发了一个lsmeans包(可在CRAN上使用),旨在解决这种情况。这是您的示例的工作方式:

> sample.data <- data.frame(IV=rep(1:4,each=20),DV=rep(c(-3,-3,1,3),each=20)+rnorm(80))
> sample.aov <- aov(DV ~ factor(IV), data = sample.data)

> library("lsmeans")
> (sample.lsm <- lsmeans(sample.aov, "IV"))
 IV    lsmean        SE df   lower.CL  upper.CL
  1 -3.009669 0.2237448 76 -3.4552957 -2.564043
  2 -3.046072 0.2237448 76 -3.4916980 -2.600445
  3  1.147080 0.2237448 76  0.7014539  1.592707
  4  3.049153 0.2237448 76  2.6035264  3.494779

> contrast(sample.lsm, list(mycon = c(-3,-1,1,3)))
 contrast estimate       SE df t.ratio p.value
 mycon    22.36962 1.000617 76  22.356  <.0001

如果愿意,可以在列表中指定其他对比度。对于此示例,您将获得与内置线性多项式对比度相同的结果:

> con <- contrast(sample.lsm, "poly")
> con
 contrast   estimate        SE df t.ratio p.value
 linear    22.369618 1.0006172 76  22.356  <.0001
 quadratic  1.938475 0.4474896 76   4.332  <.0001
 cubic     -6.520633 1.0006172 76  -6.517  <.0001

要确认这一点,请注意"poly"规范将其定向为call poly.lsmc,这会产生以下结果:

> poly.lsmc(1:4)
  linear quadratic cubic
1     -3         1    -1
2     -1        -1     3
3      1        -1    -3
4      3         1     1

如果您希望对多个对比进行联合测试,请将此test功能与配合使用joint = TRUE。例如,

> test(con, joint = TRUE)

这将产生“ III型”测试。不同于car::Anova(),无论模型拟合阶段中使用的是哪种对比编码,它都能正确执行。这是因为被测试的线性函数是直接指定的,而不是通过模型简化来隐式指定的。另一个特征是,检测到被测对比度线性相关的情况,并产生正确的测试统计量和自由度。



7

在进行对比时,您是在适当的误差项的上下文中进行单元格平均值的特定,线性声明的组合。因此,“ SS的类型”的概念与对比没有意义。每种对比本质上是使用I型SS的第一个效果。“ SS的类型”与其他术语部分或解释的内容有关。为了形成对比,没有任何东西被分摊或解释。对比本身就存在。


你是绝对正确的。
russellpierce

3

在您的工作场所中使用III型测试的事实是继续使用它们的最弱理由。SAS在这方面严重破坏了统计数据。上面提到的比尔·韦纳布尔斯的训sis法对此很有帮助。只需对III型说不就可以了。它基于错误的平衡概念,并且由于在不平衡情况下愚蠢的电池加权而导致功耗较低。

R rmscontrast.rms函数提供了一种更自然,更不易出错的方式来获得一般对比,并能够描述您所做的事情。对比度可能非常复杂,但对用户而言却非常简单,因为它们是根据预测值的差异来表示的。支持测试和同时对比。它处理非线性回归效应,非线性相互作用效应,局部对比,各种事物。


作为有名望的人,这对您来说很好,也很好。其他人则没有同感不同意审稿人。由于对统计数据的解释不同,因此您会要求新手坚持原则,并付出不合理的费用。我说的是那个在这个(和类似的)山丘上丧生的人。国际海事组织在这方面的变化是关守者(即编辑和审阅者)的责任。
russellpierce

真正精通数据的人可以选择很多工作,并且可以选择在尊重其技能和观点的领域工作。
弗兰克·哈雷尔

1
...这就是我现在要做的。但是,遇到这个问题的人不会经常属于这一类。就像我不是7年前一样。我只主张对新手和他们的情况有点同情。
罗素皮尔斯18'May

2

在汽车库中尝试Anova命令。使用type =“ III”参数,因为它默认为II型。例如:

library(car)
mod <- lm(conformity ~ fcategory*partner.status, data=Moore, contrasts=list(fcategory=contr.sum, partner.status=contr.sum))
Anova(mod, type="III")

3
我知道摩尔在汽车库中,但是如果提供了样本数据,那么如果您使用样本数据,提问者将更容易理解您的回答。
russellpierce

0

同样是自我推广,我为此编写了一个函数:https : //github.com/samuelfranssens/type3anova

安装如下:

library(devtools)
install_github(samuelfranssens/type3anova)
library(type3anova)

sample.data <- data.frame(IV=rep(1:4,each=20),DV=rep(c(-3,-3,1,3),each=20)+rnorm(80))

type3anova(lm(DV ~ IV, data = sample.data))

您还需要car安装该软件包。


您如何将其应用于问题的对比部分?
拉塞尔皮尔斯18'May

1
抱歉,我没有正确阅读问题。我的功能只会简化III型Anova的执行。像上面的StatGuy一样,在测试特定对比时,我看不到SS在哪里起作用。
sam_f
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.