我希望在我的数据上创建用户定义的对比度。简而言之,数据在数据框中组织,每行具有4个可能条件中的1个,测试中正确答案的一部分,以及称为" Schedule"和#34;集群。"我的数据的头部看起来像这样:
Subjects Condition PC Schedule Cluster
1 1 1 0.5555556 Interleaved Similar
2 2 1 0.3425926 Interleaved Similar
3 3 1 0.7129630 Interleaved Similar
4 4 1 0.5000000 Interleaved Similar
5 5 1 0.6296296 Interleaved Similar
6 6 1 0.6851852 Interleaved Similar
我想要运行两个主要对比。第一个将条件1与条件2,3和4的平均值进行比较。第二个条件将条件4与条件2和3的平均值进行比较。我将这两个条件编码为:
contrast1 = c(1, -1/3, -1/3, -1/3)
contrast2 = c(0, -1/2, -1/2, 1)
然后我将它们放入矩阵中:
cond.contrasts = matrix(c(contrast1, contrast2), ncol = 2)
根据我在其他地方看到的建议,我使用MASS
包中的函数ginv()
得到了此矩阵的一般反函数:
cond.contrasts = t(ginv(cond.contrasts))
show(cond.contrasts)
[,1] [,2]
[1,] 0.75 0.0000000
[2,] -0.25 -0.3333333
[3,] -0.25 -0.3333333
[4,] -0.25 0.6666667
注意这里只有两个对比。但是,我的输出看起来像这样:
lm.experiment = lm(PC ~ Condition, PC)
summary(lm.experiment)
Call:
lm(formula = PC ~ Condition, data = PC)
Residuals:
Min 1Q Median 3Q Max
-0.22099 -0.12069 -0.00926 0.11443 0.35117
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 0.5438470 0.0136786 39.759 <2e-16 ***
Condition1 0.0263110 0.0312175 0.843 0.401
Condition2 0.0279084 0.0335882 0.831 0.408
Condition3 -0.0007032 0.0276090 -0.025 0.980
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 0.1472 on 112 degrees of freedom
Multiple R-squared: 0.01234, Adjusted R-squared: -0.01412
F-statistic: 0.4663 on 3 and 112 DF, p-value: 0.7064
如果我理解这一点,我的对比应该由&#34; Condition1&#34;和&#34;条件2&#34;系数。但是,我不知道&#34; Condition3&#34;是指。如果我让R直接告诉我对比,那就给我这个:
> show(contrasts(PC$Condition))
[,1] [,2] [,3]
1 0.75 0.0000000 8.326673e-17
2 -0.25 -0.3333333 -7.071068e-01
3 -0.25 -0.3333333 7.071068e-01
4 -0.25 0.6666667 -2.498002e-16
第三栏来自哪里?我做错了什么?
答案 0 :(得分:1)
如果您在lm
功能之外指定对比度,R将自动使用最大对比度数。在您的示例中,添加了一个对比度,因为4个因子级别允许3个正交对比。
但是,您可以使用contrasts
中的参数lm
来覆盖默认行为。在这种情况下,使用指定的对比度矩阵。没有添加额外的对比。
命令:
lm(PC ~ Condition, PC, contrasts = list(Condition = cond.contrasts))
这意味着您要将对比矩阵cond.contrasts
用于因子Condition
。