【R模型】R语言线性回归之简单线性回归模型 (一)

news2024/10/6 6:47:38
  • 💂 个人信息:酷在前行
  • 👍 版权: 博文由【酷在前行】原创、需要转载请联系博主
  • 👀 如果博文对您有帮助,欢迎点赞、关注、收藏 + 订阅专栏
  • 🔖 本文收录于【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

我们希望最小化模型的误差,有以下几种定义方法:

  1. 残差的平均值
  2. 残差绝对值的平均值(以便将负值转换为正值)
  3. 残差平方和的平均值(注意所有的平方和都是正的)

出于一些原因(尤其是在开发该方法时,它是最容易推导的方法之一),最常见的方法是第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,是用于测量线性回归模型拟合的主要指标。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/553560.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ORA-01555-快照过旧问题处理

背景 通过监控发现ETL报错 如何处理 ORA-01555 是 Oracle 数据库的一个错误代码&#xff0c;表示出现了“快照太旧”的错误。这个错误通常是由于数据库中的回滚段不够大&#xff0c;导致无法满足当前事务的需&#xff0c;从而导致事务回滚失败。 具体来说&#xff0c;ORA-0…

如何知道调用电商API是否成功返回数据?查看错误码解释

在API调用过程中&#xff0c;系统可能会返回一些错误码。错误码能够帮助开发者快速准确地了解出现的异常情况。错误码的含义通常涉及到请求参数不合法、认证失败、服务器内部错误等各种问题&#xff0c;它们提供了有关API调用失败的信息和上下文&#xff0c;在错误排查和修复时…

【案例教程】环境影响与碳排放生命周期评估应用及案例分析实践技术

生命周期分析是一种分析工具&#xff0c;它可帮助人们进行有关如何改变产品或如何设计替代产品方面的环境决策&#xff0c;即由更清洁的工艺制造更清洁的产品。例如&#xff0c;生命周期分析的结果表明&#xff0c;某种产品能耗低&#xff0c;寿命长&#xff0c;不含有毒化学物…

Java实现识别发票信息

Java实现调用第三方接口识别发票信息 需求&#xff1a;对每个发票图片文件进行重命名&#xff0c;名称为发票号固定信息&#xff0c;主要处理增值税发票 这里需要用到第三方接口&#xff0c;OCR识别功能&#xff0c;这里我用的是百度云接口&#xff0c;所以你需要注册百度云账…

计算机网络:计网体系结构

计网体系结构 1. 基本概念1.0 计算机网络的发展1.0.1 第一阶段1.0.2 第二阶段1.0.3 第三阶段 1.1 计算机网络的概念1.2 计算机网络的功能1.3 计算机网络的组成1.4 计算机网络的分类1.5 标准化工作及相关组织1.6 相关性能指标1.6.1 速率1.6.2 带宽1.6.3 吞吐量1.6.4 时延1.6.5 时…

springboot+vue摄影跟拍预定管理系统(源码+文档)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的摄影跟拍预定管理系统。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 &#x1f495;&#x1f495;作者&#xff1…

SSM框架学习-Spring事务管理入门

文章目录 前言六、Spring事务1.Spring事务简介2.入门案例--模拟银行间转账业务3.开启Spring事务的一般步骤4.Spring事务角色5.spring事务属性--rollbackfor6.入门案例进阶--转账业务追加日志7. Spring事务属性--事务传播行为 总结 前言 为了巩固所学的知识&#xff0c;作者尝试…

项目管理:有效的沟通对项目的成功至关重要

为实施有效的沟通&#xff0c;需要建立沟通管理计划同时理解什么是沟通&#xff0c;沟通的对象是谁&#xff0c;沟通的目标是什么&#xff0c;难度在哪里&#xff0c;并选择合适的沟通方式。 项目沟通是确保项目团队的相关信息能及时、正确地产生、收集、发布、储存和最终处理…

77.建立一个Web应用程序的布局第一部分

本次我们需要设计的布局是这样样子&#xff0c;这个很想一个邮件系统的基本布局&#xff1b; ● 首先我们生成基础代码&#xff0c;基础代码很简单&#xff0c;不用过多解释 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-…

MySQL锁应用详解

文章目录 前言MySQL锁的详解1. 表级锁1.1 读锁&#xff08;共享锁&#xff09;对比查询操作更新操作获取写锁获取读锁 1.2 写锁&#xff08;排他锁&#xff09;对比获取写锁对表进行事务操作获取表的读锁对表进行查询操作 2. 行级锁2.1 共享锁2.2 排他锁 锁的应用场景1.1 并发读…

PDF怎么添加水印?简单途径说明

在工作中&#xff0c;我们经常需要对PDF文档进行保护&#xff0c;以确保其不被未经授权的人员查看或修改。其中一种常见的保护方式是在PDF文件中添加水印。水印不仅可以保护文件的安全性&#xff0c;还可以帮助识别文档的来源以及保护版权。在本文中&#xff0c;我们将介绍如何…

如何邀请媒体记者,保证新闻发布会媒体邀约?

传媒如春雨&#xff0c;润物细无声&#xff0c;大家好&#xff0c;我是51媒体网胡老师。 要邀请媒体记者参加新闻发布会并确保他们能够接受邀请&#xff0c;可以按照以下步骤进行&#xff1a; 1.制定计划&#xff1a;确定新闻发布会的日期、时间、地点和主题。确保选择一个方…

【TCP】对TCP三次握手的个人理解

三次握手 TCP 是面向连接的协议&#xff0c;所以使用 TCP 前必须先建立连接&#xff0c;而建立连接是通过三次握手来进行的。三次握手的过程如下图&#xff1a; 一开始&#xff0c;客户端和服务端都处于 CLOSE 状态。先是服务端主动监听某个端口&#xff0c;处于 LISTEN 状态 …

功能上新|内存篇:PSS显存、内存占用、堆内存对象快照

内存管理一直是游戏研发的重中之重&#xff0c;当项目运行时的内存压力较大时&#xff0c;更容易达到设备阈值引起闪退。近年来&#xff0c;当出海成为许多游戏公司新选择的同时&#xff0c;我们也发现海外设备对项目的内存情况有着更严格的要求。 为了帮助开发者更全面地了解…

从内核角度剖析Netty高性能的奥秘IO多路复用模型与Reactor模式

Netty 是Jboos 提供的java开源框架&#xff0c; 是基于非阻塞IO&#xff08;NIO&#xff09;的客户端/服务器编程框架&#xff0c; 它既能快速开发高并发、高可用、高可靠的网络服务器程序&#xff0c;也能开发高可用、高可靠的客户端程序。 Netty 作为异步框架&#xff0c; N…

面试:从输入URL到页面加载的全过程

首先在浏览器中输入URL 查找缓存&#xff1a;浏览器先查看浏览器缓存-系统缓存-路由缓存中是否有该地址页面&#xff0c;如果有则显示页面内容。如果没有则进行下一步。 浏览器缓存&#xff1a;浏览器会记录DNS一段时间&#xff0c;因此&#xff0c;只是第一个地方解析DNS请求…

【算法排序】动态规划

目录 一、动态规划思想二、动态规划与分治法的区别1、共同点2、不同点 三、动态规划特征1、最优子结构2、重叠子问题 四、动态规划求解问题的基本步骤五、斐波那契数分析六、实现思路七、代码实现 一、动态规划思想 将待求问题划分为若干个子问题&#xff0c;按划分的顺序求解…

为什么袁隆平的英语这么好?这才是学到老的典范!

文 / 冰雪&#xff08;微信公众号&#xff1a;王不留&#xff09; 2021年5月22日13时07分&#xff0c;“共和国勋章”获得者、中国工程院院士、国家杂交水稻工程技术研究中心主任、湖南省政协原副主席袁隆平&#xff0c;因病逝世&#xff0c;享年91岁。 一晃两年过去了。袁隆平…

iTOP-RK3568开发板编译瑞芯微原厂源码

1 输入以下命令设置 java 版本为 1.8 版本&#xff0c;确认 java 版本是 1.8 版本之后&#xff0c;才可以进行下一步编译&#xff0c;如下图所示&#xff1a; source javaenv.sh java -version 2 输入命令配置 Android 分支 source build/envsetup.sh lunch rk3568_r-user…

【软考】系统集成项目管理工程师 第3章 信息系统集成专业技术知识

文章目录 3.1 信息系统建设3.1.1 信息系统的生命周期3.1.2信息系统开发方法 3.3 软件工程3.3.1软件需求分析与定义3.3.2软件设计、测试与维护3.3.3软件质量保证及质量评价3.3.4软件配置管理3.3.5软件过程管理3.3.6软件开发工具3.3.7软件复用 3.4 面向对象系统分析与设计3.4.1面…