普通最小二乘法(OLS)回归是一种方法,它允许我们找到一条最能描述一个或多个预测变量和一个响应变量之间关系的线。
这种方法使我们能够找到以下方程式。
ŷ = b0 + b1x
其中:
- ŷ:估计的响应值
- b0: 回归线的截点
- b1:回归线的斜率
这个方程可以帮助我们理解预测变量和响应变量之间的关系,它可以用来预测给定的预测变量的值。
下面的例子说明了如何在R中进行OLS回归。
第1步:创建数据
在这个例子中,我们将创建一个数据集,其中包含15名学生的以下两个变量:
- 总学时
- 考试分数
我们将进行OLS回归,用学时作为预测变量,考试分数作为响应变量。
下面的代码显示了如何在R中创建这个假数据集:
#create dataset
df <- data.frame(hours=c(1, 2, 4, 5, 5, 6, 6, 7, 8, 10, 11, 11, 12, 12, 14),
score=c(64, 66, 76, 73, 74, 81, 83, 82, 80, 88, 84, 82, 91, 93, 89))
#view first six rows of dataset
head(df)
hours score
1 1 64
2 2 66
3 4 76
4 5 73
5 5 74
6 6 81
第2步:可视化数据
在我们进行OLS回归之前,让我们创建一个散点图,以可视化时间和考试分数之间的关系:
library(ggplot2)
#create scatter plot
ggplot(df, aes(x=hours, y=score)) +
geom_point(size=2)

线性回归的四个假设之一是,预测变量和响应变量之间存在线性关系。
从图中我们可以看到,这种关系似乎是线性的。随着时间的增加,分数也趋向于以线性方式增加。
接下来,我们可以创建一个boxplot来显示考试分数的分布,并检查是否有异常值。
注意:如果一个观察值大于第三四分位数的1.5倍,或小于第一四分位数的1.5倍,则R将其定义为离群值。
如果一个观察值是离群值,那么在博列表中会出现一个小圆圈:
library(ggplot2)
#create scatter plot
ggplot(df, aes(y=score)) +
geom_boxplot()

在boxplot中没有小圆圈,这意味着我们的数据集中没有离群点。
第三步:进行OLS回归
接下来,我们可以使用R中的**lm()**函数来进行OLS回归,用小时数作为预测变量,用分数作为响应变量:
#fit simple linear regression model
model <- lm(score~hours, data=df)
#view model summary
summary(model)
Call:
lm(formula = score ~ hours)
Residuals:
Min 1Q Median 3Q Max
-5.140 -3.219 -1.193 2.816 5.772
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 65.334 2.106 31.023 1.41e-13 ***
hours 1.982 0.248 7.995 2.25e-06 ***
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Residual standard error: 3.641 on 13 degrees of freedom
Multiple R-squared: 0.831, Adjusted R-squared: 0.818
F-statistic: 63.91 on 1 and 13 DF, p-value: 2.253e-06
从模型摘要中我们可以看到,拟合的回归方程是:
分数=65.334+1.982*(小时)
这意味着,每增加一个小时的学习,考试分数就会平均增加1.982分。
截距值65.334告诉我们一个学习零小时的学生的平均预期考试分数。
我们也可以用这个公式来找出基于学生学习时间的预期考试分数。
例如,一个学习了10小时的学生预计会得到85.15分的考试成绩。
分数=65.334+1.982*(10)=85.15
下面是如何解释模型摘要的其余部分:
- Pr(>|t|):这是与模型系数相关的p值。由于小时数的P值(2.25e-06)明显小于0.05,我们可以说,小时数和分数之间存在着统计学上的重大关联。
- 多重R平方:这个数字告诉我们,考试分数的变化有多大比例可以由学习时数来解释。一般来说,回归模型的R平方值越大,预测变量能够更好地预测响应变量的值。在这种情况下,**83.1%**的分数变化可以用学习时间来解释。
- 残差标准误差:这是观察值与回归线的平均距离。这个值越低,回归线就越能与观测数据相匹配。在这种情况下,观察到的平均考试分数与回归线所预测的分数相差3.641分。
- F-统计量和P值:F统计量(63.91)和相应的P值(2.253e-06)告诉我们回归模型的总体意义,即模型中的预测变量对解释响应变量的变化是否有用。由于本例中的p值小于0.05,我们的模型在统计学上是有意义的,而且小时被认为对解释分数的变化是有用的。
第四步:创建残差图
同方差假设是指回归模型的残差在预测变量的每个水平上具有大致相等的方差。
为了验证这一假设是否得到满足,我们可以创建一个残差与拟合图。
X轴显示拟合值,Y轴显示残差。只要残差看起来是随机地、均匀地分布在整个图表中的零值周围,我们就可以认为没有违反同方差:
#define residuals
res <- resid(model)
#produce residual vs. fitted plot
plot(fitted(model), res)
#add a horizontal line at 0
abline(0,0)

残差似乎是随机地分布在零周围,没有表现出任何明显的模式,所以这个假设得到了满足。
正态性 假设指出,回归模型的残差大致上是正态分布的。
为了检查这一假设是否得到满足,我们可以创建一个Q-Q图。如果图中的点是沿着45度角的大致直线落下的,那么数据就是正态分布。
#create Q-Q plot for residuals
qqnorm(res)
#add a straight diagonal line to the plot
qqline(res)

残差有点偏离45度线,但不足以引起严重关切。我们可以假设正态性假设得到了满足。
由于残差是正态分布和同方差,我们已经验证了OLS回归模型的假设得到了满足。
因此,我们模型的输出是可靠的。
注意:如果一个或多个假设没有得到满足,我们可以尝试转换我们的数据。
其他资源
下面的教程解释了如何在R中执行其他常见任务: