我希望这个问题与之前的问题不同,但用不同的话来说。我已经尝试过使用以前问题的解决方案但他们没有为我工作,所以请耐心等待!
所以我在R中使用线性回归模型输出时遇到了一些问题。我担心模型使用不正确的指示组作为我放入模型的交互项的一部分,尽管我已经尝试过在将各个术语放入交互术语之前将其重新排列,我没有得到我预期的输出。
我有一个包含连续和分类变量的数据集。假设变量A和B是连续的,变量C,D和E是分类的(0 =否,1 =是)。分类变量的参考组已设置为“否”(0)。这是一个例子:
ID A B C D E
1 53.6 25 No Yes No
2 51.1 12 Yes No Yes
3 50.9 NA Yes Yes No
4 49.3 2 No No No
5 48.1 NA No Yes No
我尝试了几种不同的方法来获取交互条件,因此我的模型设置如下:
lm1 <- lm(A ~ C*D + E + B, data=example)
lm2 <- lm(A ~ C:D + E + B, data=example)
我希望得到一个输出表,列出截距的回归系数,标准误差等,单独的C,单独的D,E,B,然后是C * D,分解为该交互的4个可能组合组中的3个term,减去包含两个指示组的组合组(C和D都为“No”,“C_No:D_No”)。
预期:
Coefficient Estimate Std. Error t value Pr(>|t|)
Intercept 90.76369 0.54308 167.127 < 2e-16 ***
C_Yes -0.28639 0.62044 -0.462 0.644465
D_Yes -3.01242 1.14733 -2.626 0.008771 **
E_Yes 0.05865 0.01691 3.468 0.000544 ***
B -0.20891 0.35982 -0.581 0.561634
C_No:D_Yes -0.42116 0.47213 2.617 0.01674 *
C_Yes:D_Yes 2.01208 1.43154 1.406 0.160148
C_Yes:D_No -0.02877 0.65271 -0.345 0.672531
对于第一个模型,我得到了截距的输出,单独的C,单独的D,E,B,然后是C * D的一个组合组。
实际:
Coefficient Estimate Std. Error t value Pr(>|t|)
Intercept 90.76369 0.54308 167.127 < 2e-16 ***
C_Yes -0.28639 0.62044 -0.462 0.644465
D_Yes -3.01242 1.14733 -2.626 0.008771 **
E_Yes 0.05865 0.01691 3.468 0.000544 ***
B -0.20891 0.35982 -0.581 0.561634
C_No:D_Yes -0.42116 0.47213 2.617 0.01674 *
对于第二个模型,我获得截距的输出,E,B,然后是C * D的所有组合组。
实际:
Coefficient Estimate Std. Error t value Pr(>|t|)
Intercept 90.76369 0.54308 167.127 < 2e-16 ***
E_Yes 0.05865 0.01691 3.468 0.000544 ***
B -0.20891 0.35982 -0.581 0.561634
C_No:D_Yes -0.42116 0.47213 2.617 0.01674 *
C_Yes:D_Yes NA (all not defined because of singularities)
C_Yes:D_No -0.02877 0.65271 -0.345 0.672531
所以现在我的问题是:
1)是否有不同的代码可以在一个模型而不是两个模型中提供我想要的所有内容?
2)这个模型是否使用C_Yes:D_Yes作为指示组而不是C_No:D_No这就是为什么我得到关于奇点的错误?我的变量是相关的,是的,但并不完美,所以我并不期望多重共线性成为一个问题。
3)如果指示组是正确的,为什么我得到C_No:D_No(指示组)的系数估计?
由于存在共线性问题,您的预期输出无效。运用
lm(A ~ C * D + E + B)
给出了可能的东西。
如果C = 1则C1 = 1,否则C1 = 0。也让C0 = 1-C1。类似地,对于D和E.然后估计我刚刚提到的模型给出包含Intercept,B,C1,D1,E1,C1:D1的输出。注意那些是C1,D1,E1而不是“C,D,E单独”;后者本身会产生共线性。
我们不能添加C1:D0,因为C1:D0 + D1 = C1。类似地,C0:D1 + C1 = D1,因此不能添加C0:D1。那么C0:D0呢?我们得到C0:D0 = 1 - C1 - D1 + C1:D1,再次完全共线性。
因此,您可能只使用截距,是否具有C1或C0(与D和E相同),以及要包括的四个交互项中的哪一个。
运行
lm(A ~ C:D + E + B)
在一些重新排列之后,它等同于之前的模型,除了这个强有力地尝试包括所有四个交互项。其中一个未被识别为四个总和等于1的总和。
是的,在您的估计模型中,C_Yes:D_Yes
可称为参考组。你没有描述你打算如何将C_No:D_No
指定为一个,但显然它没有用;你需要确保levels(C)
是c("Yes", "No")
而不是c("No", "Yes")
。