【发布时间】:2018-12-15 20:38:03
【问题描述】:
我使用leaps::regsubsets 执行了线性回归模型的最佳子集选择。然后我选择了具有 14 个预测变量的模型,并使用 coef(model, 14) 给了我以下输出:
structure(c(16.1303774392893, -0.0787496652705482, -0.104929454314886,
-1.22322411065346, 1.14718778105312, 0.75468065020279, 0.455617836039703,
0.521951041899427, 0.0124590834643436, -0.0002293804247409,
1.26667965342874e-07, 1.4002805624594e-06, -9.90560347112683e-07,
1.8809273394337e-06, 5.48249071436573e-07), .Names = c("(Intercept)", "X1",
"X2", "poly(X4, 2)1", "poly(X5, 2)1", "poly(X6, 2)2", "poly(X7, 2)2",
"poly(X9, 2)1", "X10", "X12", "X13", "X14", "X16", "X17", "X18"))
要获得此模型,我需要将其与lm 匹配。因为poly(X, 2)1 是线性的,poly(X, 2)2 是二次的,所以我做到了:
lm(X20 ~ X1 + X2 + X4 + X5 + I(X6 ^ 2) + I(X7 ^ 2) +
X9 + X10 + X12 + X13 + X14 + X16 + X17 + X18, df)
我想我知道为什么系数不同(请参阅poly() in lm(): difference between raw vs. orthogonal),但为什么它们不给出相同的拟合值和调整后的 R2?
当然,在公式中使用poly(X, 2)[,2] 与regsubsets 输出完全一致。但是只使用第二项正交多项式并指定模型如下是否有效?
lm(X20 ~ X1 + X2 + X4 + X5 + poly(X6, 2)[,2] + poly(X7, 2)[,2] +
X9 + X10 + X12 + X13 + X14 + X16 + X17 + X18, df)
有没有比手动指定模型更直接的方法从regsubsets 输出中检索单个模型?
【问题讨论】:
-
我添加了一些附加链接中未发现的问题。我认为它不再是重复的了。如果“原始”模型和“正交”模型的拟合值应该相同,那么为什么调整后的 R2 不同?最新的
lm公式有效吗?
标签: r regression linear-regression lm polynomials