【发布时间】:2012-12-03 12:15:56
【问题描述】:
假设我想用二次(正交)多项式拟合线性回归模型,然后预测响应。这是第一个模型(m1)的代码
x=1:100
y=-2+3*x-5*x^2+rnorm(100)
m1=lm(y~poly(x,2))
prd.1=predict(m1,newdata=data.frame(x=105:110))
现在让我们尝试相同的模型,但不使用 $poly(x,2)$,我将使用它的列,例如:
m2=lm(y~poly(x,2)[,1]+poly(x,2)[,2])
prd.2=predict(m2,newdata=data.frame(x=105:110))
我们来看看m1和m2的总结。
> summary(m1)
Call:
lm(formula = y ~ poly(x, 2))
Residuals:
Min 1Q Median 3Q Max
-2.50347 -0.48752 -0.07085 0.53624 2.96516
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -1.677e+04 9.912e-02 -169168 <2e-16 ***
poly(x, 2)1 -1.449e+05 9.912e-01 -146195 <2e-16 ***
poly(x, 2)2 -3.726e+04 9.912e-01 -37588 <2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 0.9912 on 97 degrees of freedom
Multiple R-squared: 1, Adjusted R-squared: 1
F-statistic: 1.139e+10 on 2 and 97 DF, p-value: < 2.2e-16
> summary(m2)
Call:
lm(formula = y ~ poly(x, 2)[, 1] + poly(x, 2)[, 2])
Residuals:
Min 1Q Median 3Q Max
-2.50347 -0.48752 -0.07085 0.53624 2.96516
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -1.677e+04 9.912e-02 -169168 <2e-16 ***
poly(x, 2)[, 1] -1.449e+05 9.912e-01 -146195 <2e-16 ***
poly(x, 2)[, 2] -3.726e+04 9.912e-01 -37588 <2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 0.9912 on 97 degrees of freedom
Multiple R-squared: 1, Adjusted R-squared: 1
F-statistic: 1.139e+10 on 2 and 97 DF, p-value: < 2.2e-16
所以 m1 和 m2 基本相同。现在让我们看看预测 prd.1 和 prd.2
> prd.1
1 2 3 4 5 6
-54811.60 -55863.58 -56925.56 -57997.54 -59079.52 -60171.50
> prd.2
1 2 3 4 5 6
49505.92 39256.72 16812.28 -17827.42 -64662.35 -123692.53
Q1:为什么 prd.2 与 prd.1 有很大不同?
Q2:如何使用模型m2获取prd.1?
【问题讨论】:
-
不是答案,但足够高的 R 平方值(0.99 左右)总是让我感到害怕......
-
这根本不是问题。我们可以用 $y=-2+3*x-5*x^2+x^5+rnorm(100,15)$ 来改变 $y$ 并且 R-squared 减少到 95%,但问题仍然存在预测。
-
第一个模型的结果在某处看起来像一个病态矩阵。预测只是根据第一个模型估计的无意义系数得出。
-
共线性很大,这在多项式项中很常见。这可能导致提到的@DeerHunter 病态。在那之后,你用结果来推断,加剧了危险。 prd 的差异可能是由于两个模型的舍入不同。
-
@Peter Flom,poly 创建正交多项式(默认情况下),因此它会显着减少多重共线性(实际上这就是使用 poly 的全部原因!)例如在模型 m2 中,方差膨胀因子(VIF)大约是 1,所以多重共线性不是问题。 (你可以先用包车检查,再用vif(m2))
标签: r regression prediction