编码自定义对比

时间:2016-02-25 21:59:20

标签: r

我希望在我的数据上创建用户定义的对比度。简而言之,数据在数据框中组织,每行具有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

第三栏来自哪里?我做错了什么?

1 个答案:

答案 0 :(得分:1)

如果您在lm功能之外指定对比度,R将自动使用最大对比度数。在您的示例中,添加了一个对比度,因为4个因子级别允许3个正交对比。

但是,您可以使用contrasts中的参数lm来覆盖默认行为。在这种情况下,使用指定的对比度矩阵。没有添加额外的对比。

命令:

lm(PC ~ Condition, PC, contrasts = list(Condition = cond.contrasts))

这意味着您要将对比矩阵cond.contrasts用于因子Condition