参考资料:R语言实战【第2版】
1、简单线性回归
本例使用R语言中基础安装中的数据集women,来通过身高预测体重,获得一个等式帮助我们分辨出那些过重或过轻的个体。
# 拟合数据
fit<-lm(weight~height,data=women)
# 查看数据拟合结果
summary(fit)
# 查看women数据集中的体重数据
women$weight
# 查看women数据集对应的体重预测数据
fitted(fit)
# 查看实际数据与预测数据间的残差
residuals(fit)
# 绘制散点图
plot(women$height,women$weight,
xlab="Height(in inches)",
ylab="Weight(in pounds)")
# 添加拟合曲线
abline(fit)
通过输出的结果,可以得到预测等式为:
Weight=-8751667+3.45000*Height
因为身高不可能为0,所以没有必要给截距项一个物理解释,它仅仅是一个常量调整向。在Pr(>|t|)列,可以看到Height变量对应的回归系数显著不为0(p<<0.0.1),表明身高每增高1英尺,体重将预期增加3..45磅。本例只有一个自变量,查看预测方程的拟合程度看Multiple R-squared,其值为0.991,表明预测模型可以解释体重99.1%的方差,其同时也是实际值和预测值之间的相关系数的平方。残差标准误Residual standard error可以认为是模型用身高预测体重的平均误差。F统计量检验所有的预测变量预测响应变量是否都在某一个几率水平上(即检验预测方程是否统计学意义),由于简单回归只有一个预测变量,此处F检验等同于身高回归系数的t检验。
2、多项式回归
我们还可以通过添加一个二项式来提高回归的预测精度。
# 拟合含二次项的等式
fit2<-lm(weight~height+I(height^2),data=women)
# 查看数据拟合结果
summary(fit2)
# 制作散点图
plot(women$height,women$weight,
xlab="Height (in inches)",
ylab="Weight (in lbs)")
# 添加拟合曲线
lines(women$height,fitted(fit2))
I(height^2)表示向预测等式中添加一个身高的平方项。I()函数将括号中的内容看作R的一个常规表达式,即从算术的角度来解释括号中的元素。因为^在表达式中有特殊的含义(表示自变量的交互项达到某个次数,例如,y~(x+z+w)^2表示y~x+z+w+x:z+x:w+z:w)
结果显示,预测方程为:weight=261.87818-7.34832×height+0.08306×height^2。在p<0.001水平下,回归系数均非常显著。模型的方差解释率(此时应看Adjusted R-squared)为99.94% 。二次项方程的显著性(F-statistic对应的p值<0.01),说明方程具有统计学意义。
多项式等式可以认为是线性回归模型,因为等式仍是预测变量的加权和形式(本例是身高和身高的平方)。一般来说,n次多项式生成一个n-1个弯曲的曲线。拟合三次多项式,可用:
fit3<-lm(height+I(height^2)+I(height^3),data=women)
虽然更高次的多项式也可以用,但通常使用比三次更高的项几乎是没有必要的。
在作图方面,我们还可以使用car包中的scatterplot()函数,它可以很容易、方便地绘制二元关系图。如下:
# 加载car包
library(car)
# 数据绘图
scatterplot(weight~height,data=women,
pch=19,
main="Women Age 30~39",
xlab="Height (in inches)",
ylab="Weight (lbs.)")
这个功能加强的图形,既提供了身高与体重的散点图、线性拟合曲线和平滑拟合曲线,还在相应边界展示了每个变量的箱线图。使数据展示的更加直观。