R回归输出不正确的参照物?

时间:2019-04-08 19:28:34

标签: r linear-regression

我希望这个问题与以前的问题不同,但用不同的词。我曾尝试将解决方案用于先前的问题,但它们对我没有用,所以请耐心等待!

因此,我在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个减去该交互项的组合组,该组合组包括两个参照组(C和D均为“否”,“ 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(参照组)的系数估计?

1 个答案:

答案 0 :(得分:0)

由于存在共线性问题,因此您的预期输出无效。使用

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")