- 💂 个人信息:酷在前行
- 👍 版权: 博文由【酷在前行】原创、需要转载请联系博主
- 👀 如果博文对您有帮助,欢迎点赞、关注、收藏 + 订阅专栏
- 🔖 本文收录于【R模型】,该专栏主要介绍R语言各类型机器学习,如线性回归模型、广义线性模型、混合线性模型、随机森林模型、支持向量机模型、决策树模型等。请大家多多关注点赞和支持,共同进步~ 欢迎大家订阅!
📋 文章目录
- 🐣 一、线性回归的介绍
- 🐤 二、线性回归的R语言实例
- 🍎 1. 数据读取及探索
- 🍎 2. 简单线性回归模型 (Simple linear regression model)
- 2.1 单个输入和输出之间的线性关系
- 2.2 最小化误差
- 2.3 确定最佳拟合
- 2.4 评估模型的拟合程度
线性回归是统计学家最早提出的学习方法之一,也是最容易理解的方法之一。尽管它很简单(实际上正是因为它简单),但在许多情况下它都是一个非常强大的工具。线性回归通常是在给定问题上试验的第一种方法,它可以立即给出一个基准,用来判断其他更复杂的建模技术的效果。考虑到解释的简单性,大家更会选择线性回归模型而不是更复杂的方法,即使这些方法的拟合效果稍好。
🐣 一、线性回归的介绍
线性回归,又称普通最小二乘线性回归或简称OLS回归,是由数学家高斯和勒让德在19世纪初左右独立发展起来的,至今仍有关于谁应该为其发现负责的争论。然而,在它被发现的时候,它实际上并不被称为“回归”。这个词在弗朗西斯·高尔顿(Francis galton)的作品之后变得更加流行。高尔顿是英国知识分子中的多面手,也是查尔斯·达尔文的表亲。19世纪晚期,高尔顿研究了近1000名儿童的身高与其父母平均身高(父母中等身高)之间的关系。他惊讶地发现,孩子的身高和父母的平均身高之间并没有完美的关系,一般来说,孩子的身高更有可能在一个接近总体平均身高的范围内。他将这种统计现象描述为“向平庸的回归”(“回归”来自一个拉丁语术语,近似于“回到过去”)。
图1 是高尔顿数据的散点图,黑色实线表示完美的关系,黑色虚线表示儿童平均身高,红色虚线表示Galton17确定的实际关系。你可以把红色虚线视为完美关系的“倒退”(用黑线表示)。这可能会给你一种直觉,有助于你理解本章后面的内容。在任意数据集中,红色虚线可以位于黑色虚点线(没有关系)和黑色实线(完美关系)之间的任何位置。线性回归是指在数据中找到红色虚线,并用它来解释输入数据(x轴)对结果数据(y轴)的解释程度。
图1 高尔顿对儿童身高的研究引入了“回归”这个术语
🐤 二、线性回归的R语言实例
线性回归特别适用于我们感兴趣的结果在某种连续尺度上的问题(例如数量、金钱、身高、体重)。对于这种类型的结果,它可以是尝试更复杂的建模方法之前的第一站。线性回归简单且易于解释,分析师通常会接受拟合较差的线性回归,以避免解释更复杂的模型。
下面是一些可以用线性回归方法解决的问题:
- 给定一组人口统计数据、工作数据和当前工资数据,剩余的数据能在多大程度上解释当前工资?
- 给定一组学生在四年期间的年度考试成绩,最终考试成绩和早期考试成绩之间的关系是什么?
- 给定一组GPA数据、SAT数据和一组求职者的能力倾向测试百分位分数数据,GPA和SAT数据能在多大程度上解释能力倾向测试分数?
你在一家提供四年制本科学位的大型学术机构的生物系担任分析师。本系的学术领导感兴趣的是了解学生在学位课程期末考试中的表现与前三年的表现之间的关系。为了解决这个问题,我们为您提供了过去三年975名毕业生的数据,并要求您创建一个模型,根据每个人在项目前三年的考试成绩来解释每个人的期末考试成绩。第一年的考试分数是0-100分,第二年和第三年的分数是0-200分,最后一年的分数是0-300分。我们将把ugtests数据集加载到会话中,并简要地看一下它。
🍎 1. 数据读取及探索
# 下载数据
url <- "http://peopleanalytics-regression-book.org/data/ugtests.csv"
# 读取数据
ugtests <- read.csv(url)
# 查看数据前六行
head(ugtests)
## Yr1 Yr2 Yr3 Final
## 1 27 50 52 93
## 2 70 104 126 207
## 3 27 36 148 175
## 4 26 75 115 125
## 5 46 77 75 114
## 6 86 122 119 159
数据看起来和预期的一样,四年的考试成绩都被读入为数值类型,但当然这只是几行。我们需要对数据进行一个快速的统计和结构概述。
# 查看数据结构
str(ugtests)
## 'data.frame': 975 obs. of 4 variables:
## $ Yr1 : int 27 70 27 26 46 86 40 60 49 80 ...
## $ Yr2 : int 50 104 36 75 77 122 100 92 98 127 ...
## $ Yr3 : int 52 126 148 115 75 119 125 78 119 67 ...
## $ Final: int 93 207 175 125 114 159 153 84 147 80 ...
# 查看数据摘要
summary(ugtests)
## Yr1 Yr2 Yr3 Final
## Min. : 3.00 Min. : 6.0 Min. : 8.0 Min. : 8
## 1st Qu.:42.00 1st Qu.: 73.0 1st Qu.: 81.0 1st Qu.:118
## Median :53.00 Median : 94.0 Median :105.0 Median :147
## Mean :52.15 Mean : 92.4 Mean :105.1 Mean :149
## 3rd Qu.:62.00 3rd Qu.:112.0 3rd Qu.:130.0 3rd Qu.:175
## Max. :99.00 Max. :188.0 Max. :198.0 Max. :295
我们可以看到,正如我们所了解的,不同年份的成绩似乎有不同的尺度,从这种方式来看,学生似乎发现二年级考试更具挑战性。我们还可以确保没有缺失数据,因为如果存在,这些数据将在我们的汇总中显示为NA计数。我们还可以成对地绘制四年的考试成绩,以查看任何感兴趣的初始关系,如图2所示。
library(GGally)
# 展示数据变量之间的相关关系
ggpairs(ugtests)
图2 ugtests
数据集的pairs图
在对角线上,我们可以看到每列数据的分布。我们在每年观察到相对正态分布。我们可以在对角线上看到散点图和成对的相关性统计信息。例如,我们看到Yr3和期末考试成绩之间的相关性特别强,Yr2和期末考试成绩之间的相关性中等,其他地方的相对独立性也比较强。
🍎 2. 简单线性回归模型 (Simple linear regression model)
为了将我们的方法可视化并提高我们的直觉,我们将从简单线性回归开始,即只有一个输入变量和一个结果变量的情况。
2.1 单个输入和输出之间的线性关系
设输入变量为x,输出变量为y。在第1章中,我们介绍了参数建模的概念,假设结果变量y与输入变量x之间存在某种数学上可定义的函数关系。换句话说,我们假设:
其中f是x的某种数学变换,是某种随机的、不可控的误差。换句话说,我们假设f (x)代表y在多次x观察中的平均期望值,而y的任何一次观察都可能与f (x)相差一个误差。由于我们假设f (x)代表y的均值,因此我们的误差围绕均值0分布。我们进一步假设误差的分布是正态分布18。回想一下直线方程,因为我们假设期望的关系是线性的,所以它的形式如下:
其中m表示直线的斜率或梯度,c表示直线与y轴的交点。当使用直线在数据中建模关系时,我们称c和m为模型的系数。现在假设我们有10个观测值,用来估计我们的线性关系。我们取ugtests数据集中Yr3和Final的前10个值:
(d <- head(ugtests[ , c("Yr3", "Final")], 10))
## Yr3 Final
## 1 52 93
## 2 126 207
## 3 148 175
## 4 115 125
## 5 75 114
## 6 119 159
## 7 125 153
## 8 78 84
## 9 119 147
## 10 67 80
我们可以对这些观测值做一个简单的绘制,如图3所示。直观地说,我们可以想象一条经过这些点的线,它“符合”一般模式。例如,假设m = 1.2, c = 5,则直线y = 1.2 x + 5可以在给定的点之间拟合,如图4所示。
图3 10个观测值的基本散点图
图4 10个观测值拟合y = 1.2 x + 5
这看起来像是关系的近似值,但我们怎么知道这是最佳近似值呢?
2.2 最小化误差
请记住,我们假设的关系y = m x + c表示y在x的多个观测值中的期望均值。对于x的特定单次观察,我们不期望y精确地在我们的期望直线上,因为每个单独的观察将有一个误差项高于或低于期望直线。我们可以通过计算y的真实值与我们的模型预测值之间的差来确定拟合模型中的这个误差项。例如,在x = 52时,我们的建模值y是67.4,但实际值是93,产生的误差为25.6。这些误差称为我们模型的残差。图5中红线实线段展示了数据集中10个点的残差。看起来至少有一个残差很大。
图5 10个观测值,y的残差为1.2 x + 5
我们希望最小化模型的误差,有以下几种定义方法:
- 残差的平均值
- 残差绝对值的平均值(以便将负值转换为正值)
- 残差平方和的平均值(注意所有的平方和都是正的)
出于一些原因(尤其是在开发该方法时,它是最容易推导的方法之一),最常见的方法是第3种方法,这也是我们将我们的回归模型称为普通最小二乘回归的原因。一些代数和微积分可以帮助我们确定产生最小平方残差的直线方程。
2.3 确定最佳拟合
我们可以在R中运行一个相当简单的函数来为我们的数据计算最佳拟合线性模型。一旦我们运行了该函数,模型和所有细节将保存在我们的会话中,以供进一步研究或使用。
首先,我们需要将要计算的模型表示为一个公式。在这个简单的例子中,我们希望回归结果y = Final与输入x = Yr3,因此我们使用简单的公式符号Final ~ Yr3。现在可以使用lm()函数根据数据集和公式计算线性模型了。
# 构建模型
model <- lm(formula = Final ~ Yr3, data = d)
我们创建的model对象是一个包含许多不同信息的列表,可以通过查看列表中对象的名称来查看。
# 查看模型变量名
names(model)
## [1] "coefficients" "residuals" "effects" "rank" "fitted.values" "assign" "qr" "df.residual"
## [9] "xlevels" "call" "terms" "model"
我们可以看到一些我们熟悉的术语。例如,我们可以查看系数。
model$coefficients
## (Intercept) Yr3
## 16.630452 1.143257
这告诉我们,我们的最佳拟合模型(最小化残差的平均平方和)是y = 1.14 x + 16.63。换句话说,即使输入Yr3的分数为0,我们的最终测试分数也可以达到16.63,并且Yr3中每增加一分,最终分数就会增加1.14。
2.4 评估模型的拟合程度
我们已经计算了一个最小化数据样本平均平方残差的模型,但我们并没有真正知道这个模型有多“好”。我们如何判断模型使用输入数据解释结果的效果如何?这是一个需要回答的重要问题,因为您不希望提出一个不能很好地解释结果的模型,而且您可能还需要将您的模型与其他替代方案进行比较,这将需要某种基准指标。
对模型解释结果的能力进行基准测试的一种自然方法是将其与没有输入或根本没有模型的情况进行比较。在这种情况下,你所拥有的就是结果值,它可以被认为是具有均值和方差的随机变量。在我们的10个观测值的情况下,我们有10个Final值,平均值为133.7。我们可以将表示y的均值的水平线视为我们的“随机模型”,然后我们可以计算均值周围的残差。这可以在图6中看到。
图6 10个观测值在其均值附近的残差
y总体方差的定义,记为V ar (y)。注意,它被定义为y均值周围残差的平方的平均值。因此V ar (y)表示随机模型的平均平方残差。在这个例子中,它计算为1574.21。我们将拟合后的模型叠加到图7中的随机模型上。
图7 拟合模型残差比较(红色)与随机变量残差比较(蓝色)
因此,对于我们的大多数观察(尽管不是全部),我们似乎通过拟合我们的新模型减少了与随机模型的“距离”。如果对拟合模型的残差平方求平均值,则得到拟合模型的平均残差平方误差,计算结果为398.35。
因此,在拟合模型之前,误差为1574.21,拟合之后,误差为398.35。因此,我们将模型的误差减少了1175.86,或者以比例表示,减少了0.75。换句话说,我们可以说我们的模型解释了结果方差的0.75(或75%)。这个指标被称为模型的R2,是用于测量线性回归模型拟合的主要指标。