首先,先来一篇文章:回归分析的七种武器 ,这里详细地讲解了回归分析的各种类型,我就不要在这里啰嗦了。接下来,我先说说简单线性回归。
所用数据为R中基础安装中的数据集women,提供了15个年龄在30~39岁间女性的身高体重信息。
> women
height weight
1 58 115
2 59 117
3 60 120
4 61 123
5 62 126
6 63 129
7 64 132
8 65 135
9 66 139
10 67 142
11 68 146
12 69 150
13 70 154
14 71 159
15 72 164
单从数字上看不出什么,我们先做一个图来看看它们之间到底有没有相关性,有相关性的话再开始进一步的回归分析。
plot(women)
嗯,很好,明显的正相关,接下来,就可以欢欢喜喜地去做相关模型啦~
现在,我们要用R中的lm()函数进行回归。
lm()用法:
lm(formula, data,...)
参数是formula模型公式,例如y ~ x。公式中波浪号(~)左侧的是响应变量,右侧是预测变量。函数会估计回归系数β0和β1,分别以截距(intercept)和x的系数表示。
fit<-lm(weight~height,data=women)
summary(fit)
Call:
lm(formula = weight ~ height, data = women)
Residuals:
Min 1Q Median 3Q Max
-1.7333 -1.1333 -0.3833 0.7417 3.1167
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -87.51667 5.93694 -14.74 1.71e-09 ***
height 3.45000 0.09114 37.85 1.09e-14 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 1.525 on 13 degrees of freedom
Multiple R-squared: 0.991, Adjusted R-squared: 0.9903
F-statistic: 1433 on 1 and 13 DF, p-value: 1.091e-14
以上,我们先用lm()拟合结果,然后用summary()对结果进行展示。
Coefficients列出了拟合模型的截距项(-87.51667)和斜率( 3.45000); 1.525为残差标准误,即模型用身高预测体重的平均误差; 0.991为R^2项,即实际和预测之间的相关系数,表明模型可以解释体重99.1%的方差;另从p值(1.09e-14<0.001)可以看出不可以拒绝回归系数为0的推断。
所以,可以得到回归模型为:
Weight=-87.52+3.45*Height
表明身高每增加1英寸,体重将预计增加3.45磅。
最后,我们列出由模型得到的预测值并画出曲线图:
fitted(fit)
1 2 3 4 5 6 7 8 9 10
112.5833 116.0333 119.4833 122.9333 126.3833 129.8333 133.2833 136.7333 140.1833 143.6333
11 12 13 14 15
147.0833 150.5333 153.9833 157.4333 160.8833
> plot(women$height,women$weight)
> abline(fit)
从图中可以看出,模型基本很好地拟合了原始数据,但是并没有提供关于模型在多大程度满足统计假设的信息,我们需要对其进行回归诊断。
对返回的fit使用plot()函数,可以生成评价模型拟合情况的四幅诊断图。
par(mfrow=c(2,2))
plot(fit)
以上四幅图分别为残差图与拟合图(判断线性)、正态QQ图(判断正态性)、位置R度图(判断同方差性)、残差与杠杆图(检验异常点)。
根据OLS回归的统计假设,我们对以上图形一次进行判断:
- 正态性 :若满足正态性的要求,则图中的点应落在呈45度角的直线上
- 独立性:根据题目要求,由于女性的身高体重相互独立,固满足要求
- 线性:若因变量与自变量线性相关,则残差值与预测值就没有任何系统关联,很明显,图中呈现一条曲线关系。
- 同方差性:若满足不变方差的假设,则图中水平线周围的点应随机分布。
根据上述分析,我们的模型并没有达到最优,还可以进行改良。
根据经验,选择在拟合模型上加一个二次项:
fit2<-lm(weight~height+I(height^2),data=women)
par(mfrow=c(2,2))
plot(fit2)
这一次的诊断效果明显比过去好了,那么我们就来看看这个模型的参数吧:
summary(fit2)
Call:
lm(formula = weight ~ height + I(height^2), data = women)
Residuals:
Min 1Q Median 3Q Max
-0.50941 -0.29611 -0.00941 0.28615 0.59706
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 261.87818 25.19677 10.393 2.36e-07 ***
height -7.34832 0.77769 -9.449 6.58e-07 ***
I(height^2) 0.08306 0.00598 13.891 9.32e-09 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 0.3841 on 12 degrees of freedom
Multiple R-squared: 0.9995, Adjusted R-squared: 0.9994
F-statistic: 1.139e+04 on 2 and 12 DF, p-value: < 2.2e-16
根据p值斜率与方差显著,R^2值99.95%,模型拟合的更好了。
Weight=261.88-7.35*Height+0.08*Height^2
最后,我们来总结一下简单线性回归的一般步骤吧:
哦,对了,参考书就是那本评分很高的《R in Action》