一元线性回归

2022-05-05 13:09:56 浏览数 (2)

⑴简单线性回归

首先可以考虑最简单的情况,也即只有一个自变量和一个因变量。我们使用R自带的数据集women为例进行分析,women数据集中包含了15个年龄30~39岁的女性身高和体重信息,如下所示:

现实生活中身高是更容易观测的一个量,现在我们基于这些数据建模,通过身高来预测体重,如下所示:

代码语言:javascript复制
fit=lm(weight~height, data=women)
summary(fit)

在上面summary的结果中,Residuals为响应变量的残差情况;Coefficients为系数也即模型参数及其检验结果,其中Intercept为截距;最后一部分为复相关系数的平方也即R2的值及其检验结果。

接下来我们可以分别列出因变量观察值、拟合值、残差:

对于回归模型我们可以进行作图展示:

代码语言:javascript复制
library(ggplot2)
ggplot(women, mapping=aes(x=height, y=weight))  
  geom_point(size=2)  
  geom_smooth(method=lm, se=TRUE, fullrange=TRUE, level=0.95)  
  theme(axis.title=element_text(size=15, color="black", face="bold", vjust=0.5, hjust=0.5))

作图结果如下所示:

回归模型构建后,必须要做模型诊断,来对其中的基础假设(正态性、独立性、线性、同方差性)进行检验,从而增强对其预测未知数据的信心。回归诊断最简单的一个方法就是将模型各种情况进行可视化,如下所示:

代码语言:javascript复制
par(mfrow=c(2,2))
plot(fit)

如下图所示:第一幅图是残差随拟合值的变化情况,可以检验线性假设,理论上来说如果线性模型十分吻合,残差应该是均匀分布的(也即残差与拟合值是无关的,红线近似水平),而图中的情况暗示很可能存在更高次项的相关。第二幅图是检验残差正态性假设的Q-Q图,根据正态性假设,当预测变量值固定时,因变量围绕拟合值(预测值)呈正态分布,那么残差应该服从均值为0的正态分布(即图中的点尽可能落在虚线上)。第三幅图是标准化残差绝对值的平方根随拟合值的变化情况,用来检验同方差性假设,如果满足假设,也即不同自变量水平下因变量方差是一样的,那么图中数据点应该是均匀分布的(红线近似水平)。第四幅图用来筛选离群点(包括因变量和自变量),一个点代表一个样品(对象),纵轴为标准化的残差,绝对值越大说明其因变量值与拟合值差别越大,横轴为杠杆值,杠杆值越大说明在自变量中是一个离群点。

⑵多项式回归

虽然各种检验结果均是显著的,但是上面的结果并不是很完美,因为我们从数据点的分布很明显看出weight关于height不完全是线性关系,这时候我们可以添加一个二次项来进行多项式回归

代码语言:javascript复制
fit2=lm(weight~height I(height^2), data=women)
summary(fit2)

这时的回归方程为weight=0.083*height2-7.35*height 261.88。同样我们可以作图展示:

代码语言:javascript复制
ggplot(women, aes(x=height, y=weight))  
  geom_point(size=2)  
  geom_smooth(method=lm, se=TRUE, formula=y~x I(x^2))  
  theme(axis.title=element_text(size=15, color="black", face="bold", vjust=0.5, hjust=0.5))

可以看出,在ggplot2里面通过geom_smooth()函数可以很方便的添加数据的回归线。在构造的多项式里,x与x^2并不一定是独立的,这有可能会产生附加问题,另一种方法是使用poly()函数产生正交多项式,如下所示:

代码语言:javascript复制
library(ggplot2)
N=300
x=1:N rnorm(N, 10, 60)
y=1:N rnorm(N, 10, 60)
colour=sample(c('red','blue'), N, replace=TRUE)
df=data.frame(x=x, y=y, colour=colour)
ggplot(df, aes(x=x,y=y, colour=colour))   
  geom_smooth( method='lm', formula=y~poly(x,3), level=0.95)   
  geom_point(alpha=0.9)
ggplot(df, aes(x=x,y=y, colour=colour))   
  geom_smooth( method='lm', formula=y~x I(x^2) I(x^3), level=0.95)   
  geom_point(alpha=0.9)

一般情况下,上面两种作图方法是等价的,最终作图结果如下所示:

在多项式拟合中,一般最高次项不超过3,否则容易产生过拟合。

0 人点赞