1、线性回归
线性回归就是使用下面的预测函数预测未来观测量:
 
其中,x1,x2,...,xk都是预测变量(影响预测的因素),y是需要预测的目标变量(被预测变量)。
线性回归模型的数据来源于澳大利亚的CPI数据,选取的是2008年到2011年的季度数据。
> year <- rep(2008:2010, each=4)> quarter <- rep(1:4, 3)> cpi <- c(162.2, 164.6, 166.5, 166.0,+ 166.2, 167.0, 168.6, 169.5,+ 171.0, 172.1, 173.3, 174.0)> plot(cpi, xaxt="n", ylab="CPI", xlab="")# 绘制横坐标轴> axis(1, labels=paste(year,quarter,sep="Q"), at=1:12, las=3)接下来,观察CPI与其他变量例如‘year(年份)’和‘quarter(季度)’之间的相关关系。
> cor(year,cpi)> cor(quarter,cpi)输出如下:
> cor(quarter,cpi)
[1] 0.3738028
> cor(year,cpi)
[1] 0.9096316
> cor(quarter,cpi)
[1] 0.3738028
由上图可知,CPI与年度之间的关系是正相关,并且非常紧密,相关系数接近1;而它与季度之间的相关系数大约为0.37,只是有着微弱的正相关,关系并不明显。
然后使用lm()函数建立一个线性回归模型,其中年份和季度为预测因素,CPI为预测目标。
# 建立模型fit> fit <- lm(cpi ~ year + quarter)> fit输出结果如下:
Call:
lm(formula = cpi ~ year + quarter)
Coefficients:
(Intercept)         year     quarter  
-7644.488        3.888        1.167
由上面的输出结果可以建立以下模型公式计算CPI:
 
其中,c0、c1和c2都是模型fit的参数分别是-7644.488、3.888和1.167。因此2011年的CPI可以通过以下方式计算:
> (cpi2011 <-fit$coefficients[[1]] + fit$coefficients[[2]]*2011 ++ fit$coefficients[[3]]*(1:4))输出的2011年的季度CPI数据分别是174.4417、175.6083、176.7750和177.9417。
模型的具体参数可以通过以下代码查看:
# 查看模型的属性> attributes(fit)$names [1] "coefficients"  "residuals"     "effects"       "rank"          "fitted.values" [6] "assign"        "qr"            "df.residual"   "xlevels"       "call"         [11] "terms"         "model"        $class[1] "lm"# 模型的参数> fit$coefficients# 观测值与拟合的线性模型之间的误差,也称为残差> residuals(fit)          1           2           3           4           5           6           7 -0.57916667  0.65416667  1.38750000 -0.27916667 -0.46666667 -0.83333333 -0.40000000           8           9          10          11          12 -0.66666667  0.44583333  0.37916667  0.41250000 -0.05416667除了将数据代入建立的预测模型公式中,还可以通过使用predict()预测未来的值。
# 输入预测时间> data2011 <- data.frame(year=2011, quarter=1:4)> cpi2011 <- predict(fit, newdata=data2011)# 设置散点图上的观测值和预测值对应点的风格(颜色和形状)> style <- c(rep(1,12), rep(2,4))> plot(c(cpi, cpi2011), xaxt="n", ylab="CPI", xlab="", pch=style, col=style)> axis(1, at=1:16, las=3,+ labels=c(paste(year,quarter,sep="Q"), "2011Q1", "2011Q2", "2011Q3", "2011Q4"))预测结果如下:
 
上图中红色的三角形就是预测值。
