R语言回归分析

回归分析可以说是统计学的核心,它其实是一个广义的概念,通指那些用一个或多个预测变量(也称自变量或解释变量)来预测响应变量(也称因变量、效标变量或结果变量)的方法。通常,回归分析可以用来挑选与响应变量相关的解释变量,可以描述两者的关系,也可以生成一个等式,通过解释变量来预测响应变量。下面将通过几篇博客介绍回归分析,这是第一篇:拟合最小二乘法回归模型。

最小二乘法回归是通过预测变量的加权和来预测量化的因变量,其中权重是通过数据估计而得的参
数,目标是通过减少响应变量的真实值与预测值的差值来获得模型参数(截距项和斜率),具体而言,即使得残差平方和最小。

1、使用lm()拟合线性回归模型

在R语言中,lm()函数是拟合线性模型经常使用的函数,格式为:lm.fit <- lm(formula, data)

  • formula:要拟合的模型形式,用~隔离预测变量和响应变量,左侧为响应变量,右侧为预测变量,各个变量之间用+隔离。
  • data:数据框。

下面的表格显示了不同符号修改表达式:

符号

用途

~

分隔符号,左边为响应变量,右边为解释变量。例如,要通过 x 、 z 和 w 预测 y ,代码为 y ~ x + z + w

+

分隔预测变量


表示预测变量的交互项。例如,要通过 x 、 z 及 x 与 z 的交互项预测 y ,代码为 y ~ x + z + x:z

*

表示所有可能交互项的简洁方式。代码 y~ x * z * w 可展开为 y ~ x + z + w + x:z + x:w + z:w +x:z:w

^

表示交互项达到某个次数。代码 y ~ (x + z + w)^2 可展开为 y ~ x + z + w + x:z + x:w + z:w

.

表示包含除因变量外的所有变量。例如,若一个数据框包含变量 x、y、z 和 w ,代码 y ~ .可展开为 y ~x + z + w

-

减号,表示从等式中移除某个变量。例如, y ~ (x + z + w)^2 – x:w 可展开为 y ~ x + z + w +x:z + z:w

-1

删除截距项。例如,表达式 y ~ x - 1 拟合 y 在 x 上的回归,并强制直线通过原点

I()

从算术的角度来解释括号中的元素。例如, y ~ x + (z + w)^2 将展开为 y ~ x + z + w + z:w 。相反, 代码 y ~ x + I((z + w)^2 )将展开为 y ~ x + h , h 是一个由 z 和 w 的平方和创建的新变量

function

可以在表达式中用的数学函数。例如, log(y) ~ x + z + w 表示通过 x 、 z 和 w 来预测 log(y)

除了 lm() ,下表还列出了其他一些对做简单或多元回归分析有用的函数。拟合模型后,将
这些函数应用于 lm() 返回的对象,可以得到更多额外的模型信息:

函数

用途

summary()

展示拟合模型的详细结果

coefficients()

列出拟合模型的模型参数(截距项和斜率)

confint()

提供模型参数的置信区间(默认 95%)

fitted()

列出拟合模型的预测值

residuals()

列出拟合模型的残差值

anova()

生成一个拟合模型的方差分析表,或者比较两个或更多拟合模型的方差分析表

vcov()

列出模型参数的协方差矩阵

AIC()

输出赤池信息统计量

plot()

生成评价拟合模型的诊断图

predict()

用拟合模型对新的数据集预测响应变量值

当回归模型包含一个因变量和一个自变量时,我们称为简单线性回归。当只有一个预测变量,
但同时包含变量的幂(比如,X、X 2 、X 3 )时,我们称为多项式回归。当有不止一个预测变量时,则称为多元线性回归

2、简单线性回归

## 线性回归模型
#加载包
library(psych)
# 数据统计前的准备
head(women) # 首先观察数据集变量信息
dim(women) #显示数据集的大小
summary(women) # 显示数据集基本信息,可以看到最大最小值以及分位点
describe(women) #显示更为详细的信息,还可以看到方差,标准差更多信息
plot(women) #观察到二者之间存在正相关性
# 建立模型
lm.model1 <- lm(weight~height -1 ,data = women) #建立的是一个通过原点的模型
# 模型分析
summary(lm.model1) # 输出统计信息,重点可以看coefficient里面的第一项参数
                   #以及后面有几个星星,下面有解释
                   # R方和调整R方代表的是模型的解释程度,1代表100%
                   # 其中R方会随着变量的增加而增大,但是调整R方不一定
                   # 最后一行的F统计量越大越好,P值越小越好,整体检验
coefficients(lm.model1) # 输出参数,但是已经包含在summary中
confint(lm.model1,level = 0.95) # 输出置信区间,即95%成立的可能性
fitted(lm.model1) # 输出预测值,可以用于和真实值对比
plot(women$weight,fitted(lm.model1)) #作图比较比较真实值和预测值
abline(0,1) # 结合散点图是否在该条直线附近,说明拟合效果
anova(lm.model1) # 方差
vcov(lm.model1) # 协方差
residuals(lm.model1) # 残差
AIC(lm.model1) # AIC准则,越小越好
BIC(lm.model1) #BIC准则,越小越好
par(mfrow = c(2,2)) #将绘图区分割成四个部分
plot(lm.model1) # 左上角是残差和拟合值,若该模型能够很好地拟合真实数据,
                # 则应该是杂乱无章,若有规律,可以通过观察加入其他项
                # 右上角残差QQ图,判断残差是否服从正态分布,服从则一条直线附近45°
                # 左下是标准化残差拟合,若满足不变方差假设,则点在水平线上下随机分布
               # 右下是残差与杠杆值,鉴别离群点、高杠杆指以及强影响点

3、多项式回归

#多项式回归
lm.fit1 <- lm(weight~height+I(height^2),data = women)
summary(lm.fit1)
plot(women$height,women$weight)
lines(women$height,fitted(lm.fit1))
lm.fit2 <- lm(weight~height+I(height^2)+I(height^3),data = women)
summary(lm.fit2)

car包中的 scatterplot() 函数,它可以很容易、方便地绘制二元关系图。这个功能加强的图形,既提供了自变量与因变量的散点图、线性拟合曲线和平滑拟合(loess)曲线,还在相应边界展示了每个变量的箱线图。 spread=FALSE 选项删除了残差正负均方根在平滑曲线上的展开和非对称信息。 smoother.args=list(lty=2) 选项设置loess拟合曲线为虚线。pch=19 选项设置点为实心圆(默认为空心圆)。

library(car)
scatterplot(weight ~ height, data=women,
spread=FALSE, smoother.args=list(lty=2), pch=19,
main="Women Age 30-39",
xlab="Height (inches)",
ylab="Weight (lbs.)")

4、多元线性回归

当预测变量不止一个时,简单线性回归就变成了多元线性回归,从技术上来说,多项式回归可以算是多元线性回归的特例。

#多元线性回归
states <- as.data.frame(state.x77[,c("Murder", "Population",
                                     "Illiteracy", "Income", "Frost")])
head(states)
cor(states) #两两计算变量间的相关系数
scatterplotMatrix(states) #绘制散点图矩阵,可以简单的看出变量之间的关系
pairs(states) #绘制散点图矩阵
lm.fit3 <- lm(Murder ~ Population + Illiteracy + Income + Frost,
          data=states)
summary(lm.fit3)

5、有交互项的多元线性回归

#交互项的多元线性回归
head(mtcars)
lm.fit4 <- lm(mpg~hp+wt+hp:wt,data = mtcars)
summary(lm.fit4)