15.2.2 第一次尝试:回归
<br />
data(co2)<br />
plot(co2)<br />
图略
此处,我们假设回归时,时间项为解释变量,现在让我们将这组数据写成是多项式函
数与正玹函数地和。
<br />
y <- as.vector(co2)<br />
x <- as.vector(time(co2))<br />
r <- lm( y ~ poly(x,1) + cos(2*pi*x) + sin(2*pi*x) )<br />
plot(y~x, type="l", xlab="time", ylab="co2")<br />
lines(predict(r)~x, lty=3, col="red", lwd=3)<br />
图略
趋势项仅仅是一次多项式也许是不够地,虽然观察预测点还不能清楚的看到这一点,
但是让我们看一下残差,结论就一幕了然了。
<br />
plot( y-predict(r),main = "The residuals are not random yet",xlab = "Time",ylab = "Residuals" )<br />
图略
让我把模型变得更加复杂些:二次多项式加正玹函数(如果二次多项式还不够,就就
用样条曲线代替多项式)。
<br />
r <- lm( y ~ poly(x,2) + cos(2*pi*x) + sin(2*pi*x) )<br />
plot(y~x, type="l", xlab="Time", ylab="co2")<br />
lines(predict(r)~x, lty=3, col="red", lwd=3)<br />
图略
<br />
plot( y-predict(r),main = "Better residuals -- but still not random",xlab = "Time",ylab = "Residuals" )<br />
图略
我们也可以重新修正周期成分,但是可能这并不会改善模型效果。
<br />
r <- lm( y ~ poly(x,2) + cos(2*pi*x) + sin(2*pi*x)+ cos(4*pi*x) + sin(4*pi*x) )<br />
plot(y~x, type="l", xlab="Time", ylab="co2")<br />
lines(predict(r)~x, lty=3, col="red", lwd=3)<br />
图略
<br />
plot( y-predict(r),type = "l",xlab = "Time",ylab = "Residuals",main = "Are those residuals any better?" )<br />
图略
然而,通过ACF图我们可以看到,这些模型并不那么如我们所期望的那样好:如果残
差真的是白噪声的,你们ACF图中,将很少有自相关线超过虚线…
<br />
r1 <- lm( y ~ poly(x,2) +cos(2*pi*x) +sin(2*pi*x) )<br />
r2 <- lm( y ~ poly(x,2) +cos(2*pi*x) +sin(2*pi*x) +cos(4*pi*x) +sin(4*pi*x) )<br />
op <- par(mfrow=c(2,1))<br />
acf(y - predict(r1))<br />
acf(y - predict(r2))<br />
par(op)<br />
图略
由这些图形可以得到以下两点事实:第一,毕竟修正周期成分是有益的;第二,模型
仍然存在残差自相关的问题。