如何在 r 中执行 ols 回归(带有示例)


普通最小二乘 (OLS) 回归是一种方法,可让我们找到最能描述一个或多个预测变量与响应变量之间关系的直线。

该方法使我们能够找到以下方程:

ŷ = b 0 + b 1 x

金子:

  • ŷ : 估计响应值
  • b 0 :回归线的原点
  • b 1 :回归线的斜率

该方程可以帮助我们理解预测变量和响应变量之间的关系,并且可以用于在给定预测变量值的情况下预测响应变量的值。

以下分步示例展示了如何在 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 scatterplot
ggplot(df, aes(x=hours, y=score)) +
  geom_point(size= 2 )

线性回归的四个假设之一是预测变量和响应变量之间存在线性关系。

从图中我们可以看出,这种关系似乎是线性的。随着小时数的增加,分数也趋于线性增加。

然后我们可以创建一个箱线图来可视化考试结果的分布并检查异常值。

:如果观测值是第三个四分位数以上四分位距的 1.5 倍或第一四分位数以下四分位距的 1.5 倍,则 R 将观测值定义为离群值。

如果观察值异常,箱线图中会出现一个小圆圈:

 library (ggplot2)

#create scatterplot
ggplot(df, aes(y=score)) +
  geom_boxplot() 

箱线图中没有小圆圈,这意味着我们的数据集中没有异常值。

步骤 3:执行 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 ***
---
Significant. 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 值。由于小时数(2.25e-06) 的 p 值显着小于 0.05,因此我们可以说小时数分数之间存在统计上显着的关联。
  • 多重 R 平方:这个数字告诉我们,考试成绩的变化百分比可以用学习的小时数来解释。一般来说,回归模型的 R 平方值越大,预测变量对响应变量值的预测效果就越好。在这种情况下, 83.1%的分数差异可以用学习时间来解释。
  • 残差标准误差:这是观测值与回归线之间的平均距离。该值越低,回归线越能与观察到的数据相对应。在这种情况下,考试中观察到的平均分数与回归线预测的分数相差3,641分。
  • F 统计量和 p 值: F 统计量 ( 63.91 ) 和相应的 p 值 ( 2.253e-06 ) 告诉我们回归模型的整体显着性,即模型中的预测变量是否有助于解释变异。在响应变量中。由于此示例中的 p 值小于 0.05,因此我们的模型具有统计显着性,并且小时数被认为有助于解释分数变化。

第 4 步:创建残差图

最后,我们需要创建残差图来检查同方差性正态性的假设。

同方差性假设是回归模型的残差在预测变量的每个水平上具有近似相等的方差。

为了验证这个假设是否得到满足,我们可以创建残差与拟合的图

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)

残差似乎随机分散在零附近,并且没有显示出明显的模式,因此满足此假设。

正态性假设表明回归模型的残差近似呈正态分布。

为了检查这个假设是否满足,我们可以创建一个QQ 图。如果绘图点位于形成 45 度角的大致直线上,则数据呈正态分布:

 #create QQ plot for residuals
qqnorm(res)

#add a straight diagonal line to the plot
qqline(res) 

残差稍微偏离 45 度线,但不足以引起严重关注。我们可以假设满足正态性假设。

由于残差呈正态分布且同方差,我们验证了 OLS 回归模型的假设得到满足。

因此,我们模型的输出是可靠的。

注意:如果一个或多个假设不满足,我们可以尝试转换我们的数据。

其他资源

以下教程解释了如何在 R 中执行其他常见任务:

如何在 R 中执行多元线性回归
如何在 R 中执行指数回归
如何在 R 中执行加权最小二乘回归

添加评论

您的电子邮箱地址不会被公开。 必填项已用*标注