全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 R语言论坛
1562 1
2015-10-11

1、线性回归

线性回归就是使用下面的预测函数预测未来观测量:

1.jpg

其中,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:

2.jpg

其中,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"))

预测结果如下:

3.png

上图中红色的三角形就是预测值。


附件列表
7.png

原图尺寸 21.44 KB

7.png

6.jpg

原图尺寸 9.73 KB

6.jpg

5.jpg

原图尺寸 8.78 KB

5.jpg

4.jpg

原图尺寸 9.69 KB

4.jpg

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2015-10-12 20:39:00

感谢分享
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群