如何在R中正确设置对比度

时间:2014-02-14 04:02:29

标签: r statistics linear polynomial-math contrast

通过使用ANOVA和线性对比,我被要求查看3组数据(每组5个点)是否存在线性趋势。这3个组代表在201020112012中收集的数据。我想在这个程序中使用R,我尝试了以下两种方法:

contrasts(data$groups, how.many=1) <- contr.poly(3)
contrasts(data$groups)  <- contr.poly(3)

两种方式似乎都能正常工作,但就p值而言,答案略有不同。我不知道哪个是正确的,在网上找到这方面的帮助真的很棘手。我想帮助弄清楚不同答案背后的原因是什么。我不确定它是否与分割平方和或诸如此类的东西有关。

2 个答案:

答案 0 :(得分:5)

两种方法在是否使用二次多项式方面都不同。

为了便于说明,请查看此示例,xy都是三个级别的因素。

x <- y <- gl(3, 2)
# [1] 1 1 2 2 3 3
# Levels: 1 2 3

第一种方法为二次多项式创建对比矩阵,即具有线性(.L)和二次趋势(.Q)。 3表示:创建3 - 1多项式。

contrasts(x) <- contr.poly(3)
# [1] 1 1 2 2 3 3
# attr(,"contrasts")
#              .L         .Q
# 1 -7.071068e-01  0.4082483
# 2 -7.850462e-17 -0.8164966
# 3  7.071068e-01  0.4082483
# Levels: 1 2 3

相反,第二种方法产生一阶多项式(即,仅线性趋势)。这是由于参数how.many = 1。因此,仅创建1对比度。

contrasts(y, how.many = 1) <- contr.poly(3)
# [1] 1 1 2 2 3 3
# attr(,"contrasts")
#              .L
# 1 -7.071068e-01
# 2 -7.850462e-17
# 3  7.071068e-01
# Levels: 1 2 3

如果您只对线性趋势感兴趣,第二个选项似乎更适合您。

答案 1 :(得分:1)

更改您要求的对比度会更改模型的自由度。如果一个模型要求线性和二次对比,而第二个模型仅指定线性对比度,那么第二个模型具有额外的自由度:这将增加测试线性假设的能力,(以防止线性假设为代价)模型拟合二次趋势)。

使用完整(“nlevels - 1”)对比组创建一组正交对比,探索全套(独立)响应配置。削减到一个可以防止模型拟合一个配置(在这种情况下,我们的数据实际上拥有的二次分量。

要了解其工作原理,请使用内置数据集mtcars,并测试齿轮与加仑的(混淆)关系。我们假设齿轮越多越好(至少在某一点上)。

df = mtcars # copy the dataset
df$gear = as.ordered(df$gear) # make an ordered factor

有序因子默认为多项式对比,但我们将它们设置为显式:

contrasts(df$gear) <- contr.poly(nlevels(df$gear))

然后我们可以建立关系模型。

m1 = lm(mpg ~ gear, data = df);
summary.lm(m1)
#             Estimate Std. Error t value Pr(>|t|)    
# (Intercept)  20.6733     0.9284  22.267  < 2e-16 ***
# gear.L        3.7288     1.7191   2.169  0.03842 *  
# gear.Q       -4.7275     1.4888  -3.175  0.00353 ** 
# 
# Multiple R-squared:  0.4292,  Adjusted R-squared:  0.3898 
# F-statistic:  10.9 on 2 and 29 DF,  p-value: 0.0002948

注意我们的整体模型有F(2,29)= 10.9,线性效果为p = .038,估计额外增加3.7 mpg /齿轮。

现在让我们只请求线性对比,并运行“相同”分析。

contrasts(df$gear, how.many = 1) <- contr.poly(nlevels(df$gear))
m1 = lm(mpg ~ gear, data = df)
summary.lm(m1)
# Coefficients:
#             Estimate Std. Error t value Pr(>|t|)    
# (Intercept)   21.317      1.034  20.612   <2e-16 ***
# gear.L         5.548      1.850   2.999   0.0054 ** 
# Multiple R-squared:  0.2307,  Adjusted R-squared:  0.205 
# F-statistic: 8.995 on 1 and 30 DF,  p-value: 0.005401

齿轮的线性效应现在更大(5.5 mpg)并且p <&lt;&lt; .05 - 一场胜利?除了整体模型拟合现在显着更差:差异占现在只有23%(是43%)!如果我们绘制关系,为什么很清楚:

plot(mpg ~ gear, data = df) # view the relationship

(confounded) relationship of gears to gallons

因此,如果您对线性趋势感兴趣,但也期望(或不清楚)额外的复杂程度,您还应该测试这些更高的多项式。二次方(或者,一般来说,趋势直到水平-1)。

另外请注意,在这个例子中,物理机制是混乱的:我们忘记了自动与手动变速器相混淆的齿轮数量,以及重量和轿车与跑车的混淆。

如果有人想测试4档比3档好的假设,他们可以回答this问题: - )