如何在R中检查许多预测变量的交互作用

3

我正在尝试在R中拟合一个回归模型,在找出主要预测因子后,我想检查这些预测因子之间的交互作用。然而,总共有14个预测因子,这意味着可能会产生数百种组合。

   lm.fit2=lm(medv~chas*dis*tax*black*rm*lstat*age*nox*zn*crim*rad*indus*ptratio,data=Boston)

summary(lm.fit2)然后出现错误,因为自由度变为负数,这是不可用的。

为了使其正常工作:

lm.fit2=lm(medv~chas*dis*tax*black*rm,data=Boston)
summary(lm.fit2)

然而,这仍然给了我太多的选项:
Coefficients:
                        Estimate Std. Error t value Pr(>|t|)
(Intercept)           -2.082e+02  1.798e+02  -1.158    0.248
chas                  -2.585e+03  1.820e+03  -1.420    0.156
dis                    2.545e+01  6.613e+01   0.385    0.701
tax                    4.098e-01  3.021e-01   1.356    0.176
black                  3.434e-01  4.622e-01   0.743    0.458
rm                     4.234e+01  3.015e+01   1.405    0.161
chas:dis               8.677e+02  6.350e+02   1.367    0.172
chas:tax               6.656e+00  5.232e+00   1.272    0.204
dis:tax               -7.457e-02  1.259e-01  -0.593    0.554
chas:black             6.931e+00  4.936e+00   1.404    0.161
dis:black             -6.838e-02  1.688e-01  -0.405    0.686
tax:black             -7.198e-04  7.791e-04  -0.924    0.356
chas:rm                3.295e+02  2.864e+02   1.150    0.251
dis:rm                -5.586e+00  1.084e+01  -0.515    0.606
tax:rm                -7.681e-02  5.049e-02  -1.521    0.129
black:rm              -6.455e-02  7.744e-02  -0.833    0.405
chas:dis:tax          -1.971e+00  2.520e+00  -0.782    0.435
chas:dis:black        -2.280e+00  1.648e+00  -1.383    0.167
chas:tax:black        -1.835e-02  1.370e-02  -1.339    0.181
dis:tax:black          1.878e-04  3.227e-04   0.582    0.561
chas:dis:rm           -9.001e+01  1.018e+02  -0.884    0.377
chas:tax:rm           -8.002e-01  8.687e-01  -0.921    0.357
dis:tax:rm             1.447e-02  2.063e-02   0.702    0.483
chas:black:rm         -9.037e-01  7.670e-01  -1.178    0.239
dis:black:rm           1.414e-02  2.765e-02   0.511    0.609
tax:black:rm           1.318e-04  1.301e-04   1.013    0.312
chas:dis:tax:black     5.364e-03  6.461e-03   0.830    0.407
chas:dis:tax:rm        1.592e-01  4.289e-01   0.371    0.711
chas:dis:black:rm      2.436e-01  2.619e-01   0.930    0.353
chas:tax:black:rm      2.293e-03  2.250e-03   1.019    0.309
dis:tax:black:rm      -3.452e-05  5.286e-05  -0.653    0.514
chas:dis:tax:black:rm -4.712e-04  1.098e-03  -0.429    0.668

如果我加入更多的预测变量,很可能会导致决策时间更长。 我想问一下是否有任何方法可以更快地检查交互作用效应。


尝试使用预测变量的相关矩阵,例如 cor(Boston)? - GuillaumeL
1
你到底希望得到什么? - pdb
我不太确定我的理解是否正确,但您可能正在寻找model.matrix。https://dev59.com/F3I95IYBdhLWcg3w8y2N - GuillaumeL
我认为model.matrix返回的不是“预测变量的相关矩阵”。 - IRTFM
2个回答

8

一般来说,三阶及以上交互作用很弱且难以解释,因此建议先查看主效应和二阶交互作用。R公式语法使用^2表示“括号内变量的所有二路交互作用”。您应该使用poly来建模多项式转换:

lm.fit2=lm(medv ~ (chas+dis+tax_black+rm+lstat+age+nox+zn+
                                    crim+rad+indus+ptratio)^2,data=Boston)
> anova(lm.fit2)
Analysis of Variance Table

Response: medv
               Df  Sum Sq Mean Sq   F value    Pr(>F)    
chas            1  1312.1  1312.1  161.3513 < 2.2e-16 ***
dis             1  3082.6  3082.6  379.0794 < 2.2e-16 ***
tax             1  6078.7  6078.7  747.5244 < 2.2e-16 ***
black           1   765.8   765.8   94.1700 < 2.2e-16 ***
rm              1 14071.3 14071.3 1730.3969 < 2.2e-16 ***
lstat           1  3819.5  3819.5  469.6923 < 2.2e-16 ***
age             1   112.9   112.9   13.8843 0.0002214 ***
nox             1   109.6   109.6   13.4719 0.0002738 ***
zn              1   687.4   687.4   84.5305 < 2.2e-16 ***
crim            1   106.2   106.2   13.0561 0.0003395 ***
rad             1   288.8   288.8   35.5125 5.426e-09 ***
indus           1     8.6     8.6    1.0541 0.3051555    
ptratio         1  1194.2  1194.2  146.8594 < 2.2e-16 ***
chas:dis        1    78.6    78.6    9.6679 0.0020047 ** 
chas:tax        1   118.8   118.8   14.6093 0.0001526 ***
chas:black      1    50.4    50.4    6.2026 0.0131473 *  
chas:rm         1     5.4     5.4    0.6604 0.4168819    
chas:lstat      1   197.6   197.6   24.3037 1.193e-06 ***
chas:age        1    27.3    27.3    3.3584 0.0675818 .  
chas:nox        1   220.8   220.8   27.1561 2.967e-07 ***
chas:zn         1   131.9   131.9   16.2178 6.717e-05 ***
chas:crim       1   311.2   311.2   38.2735 1.479e-09 ***
chas:rad        1   101.3   101.3   12.4601 0.0004624 ***
chas:indus      1     0.8     0.8    0.1022 0.7493299    
chas:ptratio    1    38.1    38.1    4.6844 0.0310080 *  
dis:tax         1   113.7   113.7   13.9797 0.0002108 ***
dis:black       1    20.7    20.7    2.5508 0.1110013    
dis:rm          1   769.1   769.1   94.5817 < 2.2e-16 ***
dis:lstat       1   178.4   178.4   21.9372 3.826e-06 ***
dis:age         1   201.2   201.2   24.7456 9.607e-07 ***
dis:nox         1    33.1    33.1    4.0712 0.0442657 *  
dis:zn          1    48.1    48.1    5.9169 0.0154195 *  
dis:crim        1    45.2    45.2    5.5527 0.0189169 *  
dis:rad         1     4.8     4.8    0.5956 0.4407156    
dis:indus       1   138.1   138.1   16.9862 4.550e-05 ***
dis:ptratio     1   524.8   524.8   64.5419 9.940e-15 ***
tax:black       1     3.1     3.1    0.3829 0.5363790    
tax:rm          1  1453.4  1453.4  178.7271 < 2.2e-16 ***
tax:lstat       1   541.5   541.5   66.5939 4.046e-15 ***
tax:age         1    49.6    49.6    6.1056 0.0138770 *  
tax:nox         1    40.8    40.8    5.0143 0.0256685 *  
tax:zn          1    24.8    24.8    3.0477 0.0815952 .  
tax:crim        1    41.9    41.9    5.1507 0.0237503 *  
tax:rad         1     2.1     2.1    0.2604 0.6100884    
tax:indus       1    44.4    44.4    5.4549 0.0199899 *  
tax:ptratio     1     7.8     7.8    0.9579 0.3282936    
black:rm        1    10.4    10.4    1.2785 0.2588338    
black:lstat     1   271.8   271.8   33.4254 1.460e-08 ***
black:age       1   102.1   102.1   12.5507 0.0004412 ***
black:nox       1     1.9     1.9    0.2348 0.6282474    
black:zn        1    10.6    10.6    1.2994 0.2549878    
black:crim      1    35.3    35.3    4.3402 0.0378360 *  
black:rad       1     2.8     2.8    0.3503 0.5542756    
black:indus     1    26.9    26.9    3.3045 0.0698112 .  
black:ptratio   1     5.6     5.6    0.6843 0.4085852    
rm:lstat        1   705.8   705.8   86.7990 < 2.2e-16 ***
rm:age          1    13.5    13.5    1.6563 0.1988248    
rm:nox          1     1.2     1.2    0.1453 0.7032901    
rm:zn           1    79.3    79.3    9.7566 0.0019124 ** 
rm:crim         1    37.8    37.8    4.6444 0.0317315 *  
rm:rad          1    39.9    39.9    4.9089 0.0272627 *  
rm:indus        1   106.6   106.6   13.1098 0.0003302 ***
rm:ptratio      1    39.9    39.9    4.9030 0.0273535 *  
lstat:age       1    59.8    59.8    7.3553 0.0069650 ** 
lstat:nox       1     9.2     9.2    1.1301 0.2883636    
lstat:zn        1    31.6    31.6    3.8823 0.0494631 *  
lstat:crim      1   118.1   118.1   14.5196 0.0001598 ***
lstat:rad       1    11.8    11.8    1.4504 0.2291523    
lstat:indus     1     1.5     1.5    0.1814 0.6703950    
lstat:ptratio   1    12.3    12.3    1.5135 0.2192980    
age:nox         1    16.4    16.4    2.0191 0.1560794    
age:zn          1     0.7     0.7    0.0918 0.7620300    
age:crim        1     1.2     1.2    0.1423 0.7061824    
age:rad         1    56.0    56.0    6.8824 0.0090262 ** 
age:indus       1     4.7     4.7    0.5778 0.4476205    
age:ptratio     1    28.5    28.5    3.5049 0.0618937 .  
nox:zn          1     2.7     2.7    0.3290 0.5665511    
nox:crim        1    35.2    35.2    4.3323 0.0380099 *  
nox:rad         1    46.8    46.8    5.7587 0.0168484 *  
nox:indus       1    85.3    85.3   10.4926 0.0012952 ** 
nox:ptratio     1     9.1     9.1    1.1189 0.2907682    
zn:crim         1    23.0    23.0    2.8271 0.0934414 .  
zn:rad          1     0.4     0.4    0.0551 0.8145504    
zn:indus        1     0.0     0.0    0.0012 0.9725670    
zn:ptratio      1     0.0     0.0    0.0017 0.9666820    
crim:rad        1    46.2    46.2    5.6793 0.0176164 *  
crim:indus      1    17.5    17.5    2.1490 0.1434186    
crim:ptratio    1     8.9     8.9    1.0946 0.2960597    
rad:indus       1     1.3     1.3    0.1654 0.6844432    
rad:ptratio     1     3.1     3.1    0.3761 0.5400088    
indus:ptratio   1    20.5    20.5    2.5250 0.1128196    
Residuals     414  3366.6     8.1                        
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

我知道内容很长,但是如果你花点时间就能发现哪些组合有一些信息。"星号"非常误导人,你不应该在0.05水平上相信它们。在这样的过程中,你最好先应用一些理论再考虑所有可能的变量。

然而,看到这个,我可能会将 noxzncrim "放在外面",同时保留 chad:radchas:tax 的交互作为进一步考虑的对象。由于它们在简化模型中只显示出了适度的强度(一个的p值为0.01,另一个的p值为0.95),我可能会考虑将它们删除。请记住,你将会查看一个非常大的假设集,而p值小于0.05是完全不合理的。也请记住,这些仅测试线性关系,这些交互可能捕捉到更适合使用样条转换描述的行为。


谢谢,42-,你的评论真的很有帮助。实际上,我已经为“rm”和“lstat”包含了多项式效应,并在我的模型中包括了那些显示显着性的交互项。我得到了一个不错的R平方值,但在我的残差分析中,图表总是显示在索引360-370周围存在高波动性(我也对索引号的含义感到困惑)。你对此有什么想法吗? - T.Joe
非常好。我发现rms/Hmisc软件包组合在这种调查中非常有用,因为它具有集成的图形功能,尽管它确实需要一定的学习曲线(而且图形是基于lattice而不是当前流行的ggplot2函数)。 - IRTFM

2

跟进@42-的回答,考虑进行图形调查(我没有看到Boston数据集来自哪里,所以我在其他地方的包中找到了另一个版本...)

data(boston,package="stima")
m1 <- lm(c.medv~.^2,data=boston)
scboston <- boston
scboston[-2] <- scale(boston[-2])
m2 <- lm(c.medv~(chas+dis+tax+b+rm+lstat+age+nox+zn+
                crim+rad+indus+ptratio)^2,data=scboston)
library(dotwhisker)
dwplot(m2)+geom_vline(xintercept=0,lty=2)

我从MASS获取了我的副本。我的IDE允许我在我的软件包数据集中进行搜索。 - IRTFM
谢谢,Ben。这真的很有帮助。你能教我如何解释这个图吗?我想知道每个术语线的长度代表什么。 - T.Joe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接