我试图在R中拟合回归模型,在找出主要预测因子之后,我想检查预测变量的交互效应。但是,总共有14个预测变量,这意味着可能有数百种组合。 如果我这样做:
lm.fit2=lm(medv~chas*dis*tax*black*rm*lstat*age*nox*zn*crim*rad*indus*ptratio,data=Boston)
摘要(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
因此,如果我包含更多预测变量,则更有可能花费更多时间来做出决策。 我想询问是否有任何方法可以更快地检查交互效果。
答案 0 :(得分:3)
一般来说,三阶和更高阶的相互作用很弱并且很难解释,所以我的建议是首先看一下主效应和二阶相互作用。 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级别。在将所有可能的变量抛在这样的程序之前,建议您应用一些理论。
但是,考虑到这一点,我可能会将nox
,zn
和crim
“移到”外“,同时保持chad:rad
和chas:tax
互动进一步考虑。由于它们在简化模型中仅表现出适度的强度(一个p = 0.01,另一个p = 0.95),我也可以考虑放弃它。请记住,你会看到一组非常大的假设,并且p&lt; 0.05完全不合理。还要记住,这些只是测试线性关系,这些交互可能是拾取行为,通过样条转换更好地描述。
答案 1 :(得分:1)
跟进@ 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)