如何为一个级别与另一个级别的平均值之差指定对比度矩阵(以R为单位)?


9

我有一个看起来像这样的回归模型:

Y=β0+β1X1+β2X2+β3X3+β12X1X2+β13X1X3+β123X1X2X3

...或用R表示法: y ~ x1 + x2 + x3 + x1:x2 + x1:x3 + x1:x2:x3

假设和是分类变量,而是数字。复杂之处在于具有三个级别并且我需要测试以下内容而不是标准对比:X1X2X3X1X1a,X1b,X1c

  • 级的截距是否与和级的平均截距明显不同。X1aX1bX1c
  • 的响应在级与和级的平均值之间是否显着不同。X2X1aX1bX1c
  • 的斜率在级别与级别和的平均值之间是否显着不同。X3X1aX1bX1c

根据这篇文章,看来我想要的矩阵是...

 2
-1
-1

我也是contrasts(mydata$x1)<-t(ginv(cbind(2,-1,-1)))。的估计更改,其他的更改。我可以重现的新的估计通过减去的预测值和组装置(当和处于其基准电平)从值的两倍在这些级别。但是我不能相信自己正确地指定了对比度矩阵,除非我也可以类似地得出其他系数。β1beta1X1bX1cX3=0X2X1a

有人对如何将我的头脑包扎在单元均值和对比度之间的关系上有任何建议吗?谢谢。这种对比有标准名称吗?


啊哈!根据Glen_b答案中发布链接,最重要的是,您可以将想要的组的任何比较转换为R样式的对比度属性,如下所示:

  1. 制作一个方矩阵。行代表因子水平,列代表对比。除了第一个,它告诉模型截距应该代表什么。
  2. 如果您想让截距成为平均值,请在第一列中填写所有相同的非零值,无论如何。如果要让截距成为水平均值之一,则在该行中放置一个数字,并用零填充其余部分。如果您希望截距是多个级别的平均值,则在这些行中输入数字,在其余行中输​​入零。如果希望它是加权平均值,请使用不同的数字,否则请使用相同的数字。您甚至可以在intercept列中输入负值,这也可能意味着某些事情,但是它完全改变了其他对比度,所以我不知道那是什么意思
  3. 在正数和负数中填充其余的列,以指示您要与其他水平进行比较的水平。我忘记了为什么总和为零很重要,但是要调整值以使列的总和为零。
  4. 使用t()函数转置矩阵。
  5. ginv()MASS包装中使用或solve()以获得转置矩阵的逆。
  6. 删除第一列,例如mycontrast<-mycontrast[,-1]。现在您有了apx p-1矩阵,但是在第5步中,您为截取输入的信息被整体编码为矩阵。
  7. 如果您希望摘要输出中的标签比其他lm()人的默认输出更易于阅读,请相应地为矩阵的列命名。截距将始终自动被命名(Intercept)
  8. 使矩阵成为相关因素的新对比,例如 contrasts(mydata$myfactor)<-mymatrix
  9. 运行lm()(和使用公式可能很多其他功能)为在标准的R正常,而无需负载glhtdoBycontrasts

Glen_b,谢谢,也感谢您加州大学洛杉矶分校统计咨询小组。我的应用统计专家花了几天时间研究这个话题,但我仍然不知道如何实际编写自己的对比度矩阵。而现在,一个小时的阅读和使用R的乐趣,我终于觉得我明白了。猜猜我应该改为申请UCLA。或大学StackExchange。

Answers:


5

一个与所有后续变量的均值的比较(除小数位数外)称为Helmert编码Helmert对比。您提供的是第一个对比,另一个是的缩放版本。(0,1,1)

R称为helmert编码,称为“反向Helmert”。它们等效于可变顺序的变化。


应否等同于“按可变顺序改变”?因此,要获得Helmert的SAS / SPSS类型(与剩余水平的平均值进行比较),必须要么反转相关因子的水平顺序,要么必须rev()每列,然后rev()矩阵的每一行返回contra.helmert
蒂姆

@tim“可变顺序的更改”并非旨在表示“ 可变顺序的任何更改”,而实际上是可变顺序更改(即,特别是一个)。
Glen_b-恢复莫妮卡2015年
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.