R语言第七章线性回归模型 - 实践

news/2026/1/21 20:52:59/文章来源:https://www.cnblogs.com/gccbuaa/p/19514015

R语言第七章线性回归模型

  • 7.1数据集
    • 例题:
      • 方式一:
      • 方式二:
      • tapply函数含义
  • 计算喷发时间间隔喷发次数
      • cumsum()
      • ecdf()函数
      • R绘制茎叶图函数stem()
  • 7.2数据的数值度量
    • summary
    • var, sd, cov, cor
  • 回归分析
  • 根据回归系数lm进行预测
    • 第一种方法
    • 第二种方法
  • 多元线性回归分析

如要将代码进行本地运行,建议自上而下运行全文,完整代码放置文末。

7.1数据集

数据集是用于分析和建模的数据集合,通常包含 样本(数据点)、特征(变量)和 标签(目标变量)。
R语言中有很多内置数据集,常见包括 1. iris 2. faithful 3. mtcars

library(help = "datasets")
head(iris)
iris$Species -> SP
(iris.freq <- table(SP))
cbind(iris.freq)
special.relfreq <- iris.freq / nrow(iris);special.relfreq

options函数用于更改保留小数的位数。

#保留任意位小数
old <- options(digits = 2)
special.relfreq
options(old)
barplot(iris.freq)#柱状图查看频次
pie(iris.freq, col = c("red", "green", "yellow"))#饼图查看频次

例题:

求setosa花萼长度的平均值,结果保留3位小数

方式一:

species <- iris$Species
s_species <- species == "setosa"
s_iris <- iris[s_species,]
options(digit = 3) -> old
mean(s_iris$Sepal.Length)

方式二:

tapply函数含义

:第一个参数表示对什么数据进行处理, 第二个参数表示以什么作为划分,第三个参数表示对第一个参数怎么处理。

tapply(iris$Sepal.Length, iris$Species, mean)

计算喷发时间间隔喷发次数

data(faithful)
head(faithful)
range(faithful$eruptions) #表示泉水喷发的数据范围
#对其faithful$eruptions进行分组
breaks <- seq(1.5, 5.5, by = 0.5)
cut(faithful$eruptions, breaks, right = F) -> tep #对数据进行分区间操作
freq <- table(tep) #用table函数统计
#或者
hist(faithful$eruptions, right = F)#hist()函数绘制直方图时会自动进行区间( bins )划分
#计算相对频数
relfreq <- freq / nrow(faithful)

cumsum()

能够计算向量元素的累加和

cumsum(1:10)
#用cumsum函数计算累计频数分布图
cumsum(freq) -> cumfreq0
plot(breaks,
c(0, cumfreq0),
main = "泉水喷发持续时间",
ylable = "累计喷发频数",
xlable = "持续时间"
)
lines(breaks, c(0, cumfreq0))
#添加网格线,不会的看我上一篇
abline(v = seq(0,6,by = 0.5), h = seq(0,300,by = 10), lty = 2, col = "lightgrey")

上一篇

ecdf()函数

用于计算经验累积分布函数(Empirical Cumulative Distribution Function)

ecdf_eruptions <- ecdf(faithful$eruptions) #记住用法即可
plot(ecdf_eruptions,
main = "泉水喷发持续时间",
ylable = "累计喷发频数",
xlable = "持续时间"
)
#绘制散点图eruption vs waiting
eruption <- faithful$eruptions
waiting <- faithful$waiting
head(cbind(eruption, waiting))
plot(eruption, waiting,
main = "泉水喷发持续时间与等待时间关系图",
xlab = "喷发持续时间",
ylab = "等待时间"
)

R绘制茎叶图函数stem()

含义:
每个数据点被拆分为:

  1. 茎:表示数据的高位部分(如十位数)
  2. 叶:表示数据的低位部分(如个位数) 例如:数据点 42 可表示为: 42 \begin{array}{c|c} 4 & 2 \ \end{array} 42
stem(faithful$eruptions) #茎叶图

7.2数据的数值度量

求均值函数mean
求中位数函数median
求四分位数函数quantile
求极差函数range
求变化范围max - min
四分位距函数IQR

#求均值函数mean:
mean(faithful$eruptions)
#求中位数函数median:
median(faithful$eruptions)
#求四分位数函数quantile:
quantile(faithful$eruptions)
#求极差函数range:
range(faithful$eruptions)
#求变化范围
max(faithful$eruptions) - min(faithful$eruptions)
#四分位距函数IQR:
IQR(faithful$eruptions)

画出喷发时间和等待时间的箱线图

#画出喷发时间和等待时间的箱线图
par(mfrow = c(1,2))
boxplot(faithful$eruptions)
boxplot(faithful$waiting)
par(mfrow = c(1,1))

summary

函数用于给出数据的五数概括

最小值:数据中的最小观测值
第一四分位数(Q1Q_1Q1):数据中25%的观测值小于该值
中位数(Q2Q_2Q2):数据排序后正中间的数值
第三四分位数(Q3Q_3Q3):数据中75%的观测值小于该值
最大值:数据中的最大观测值

summary(faithful)

var, sd, cov, cor

var(方差)、sd(标准差)、cov(协方差)和 cor(相关系数)
注:相关系数和回归系数是两个不同的统计概念,不要混淆

#求方差var
var(faithful$eruptions)
#求标准差sd
sd(faithful$eruptions)
#求协方差函数cov:
cov(eruption, waiting)
#求相关系数函数cor:
cor(eruption, waiting)

下面的部分的学习建议首先了解概率论与数理统计的基础知识--------------
r语言提供了一组函数,分别以d p q r 开头,分别表示不同的含义:
d开头 : 概率密度函数
p开头 : 累积分布函数
q开头 : 分位数函数
r开头 : 随机数生成函数
可以配合许多函数使用,如正态分布norm、t分布t、卡方分布chisq、F分布f等
在这里插入图片描述

回归分析

eruption.lm <- lm(eruption ~ waiting, data = faithful);
#显示回归方程中的系数两种方法
1.
coeffs <- eruption.lm $ coefficients
2.
coeffs <- coefficients(eruption.lm);coeffs
#绘制散点图并添加回归直线
plot(eruption ~ waiting, data = faithful,
col = "blue",
main = "泉水喷发持续时间与等待时间关系图",
xlab = "喷发持续时间",
ylab = "等待时间"
);
fit <- lm(eruption ~ waiting, data = faithful);
abline(fit, col = "red", lwd = 2);

根据回归系数lm进行预测

第一种方法

#预测喷发时间 
waiting.time <- 80
duration.predict <- coeffs[1] + coeffs[2] * waiting.time
duration.predict

第二种方法

predict函数:参数中需要包含回归系数lm,和一个数据框(要包含除要预测的值外所有的已知参数)且需要确保新数据框的变量名称与模型中使用的变量名称一致

#预测喷发时间 
newdata <- data.frame(waiting = 80)
predict(eruption.lm, newdata)

多元线性回归分析

需要装载r语言数据集BostonHousing(Boston房价)。

install.packages("mlbench")
library(mlbench)
data(BostonHousing)
dim(BostonHousing)
head(BostonHousing)
#了解其数据结构
str(BostonHousing)
boston.lm <- lm(medv ~ ., data = BostonHousing)
boston.lm
#查看回归分析结果
summary(boston.lm)
#预测房价
newdata <- data.frame(crim = 0.03, zn = 90, indus = 2, chas = as.factor(0),
nox = 0.5, rm = 7, age = 15, dis = 6,
rad = 3, tax = 400, ptratio = 15, b = 400,
lstat = 5)
predict(boston.lm, newdata, interval = "predict")#参数interval表示预测区间

整体代码如下:

#首先了解有什么常用的数据集
#常见包括 1. iris 2. faithful 3. mtcars
library(help = "datasets")
head(iris)
iris$Species -> SP
(iris.freq <- table(SP))
cbind(iris.freq)
special.relfreq <- iris.freq / nrow(iris);special.relfreq
#保留任意未小数
old <- options(digits = 2)
special.relfreq
options(old)
barplot(iris.freq)#柱状图查看频次
pie(iris.freq, col = c("red", "green", "yellow"))#饼图查看频次
#例题:求setosa花萼长度的平均值,结果保留3位小数
#方式一:
species <- iris$Species
s_species <- species == "setosa"
s_iris <- iris[s_species,]
options(digit = 3) -> old
mean(s_iris$Sepal.Length)
#方式二:
#tapply函数含义,第一个参数表示对什么数据进行处理, 第二个参数表示以什么作为划分,第三个参数表示对第一个参数怎么处理。
tapply(iris$Sepal.Length, iris$Species, mean)
data(faithful)
head(faithful)
range(faithful$eruptions) #表示泉水喷发的数据范围
#对其faithful$eruptions进行分组
breaks <- seq(1.5, 5.5, by = 0.5)
cut(faithful$eruptions, breaks, right = F) -> tep #对数据进行分区间操作
freq <- table(tep) #用table函数统计
#或者
hist(faithful$eruptions, right = F)#hist()函数绘制直方图时会自动进行区间( bins )划分
#计算相对频数
relfreq <- freq / nrow(faithful)
#cumsum()能够计算向量元素的累加和
cumsum(1:10)
#用cumsum函数计算累计频数分布图
cumsum(freq) -> cumfreq0
plot(breaks,
c(0, cumfreq0),
main = "泉水喷发持续时间",
ylable = "累计喷发频数",
xlable = "持续时间"
)
lines(breaks, c(0, cumfreq0))
#添加网格线,不会的看我上一篇
abline(v = seq(0,6,by = 0.5), h = seq(0,300,by = 10), lty = 2, col = "lightgrey")
#ecdf()函数用于计算经验累积分布函数(Empirical Cumulative Distribution Function)
ecdf_eruptions <- ecdf(faithful$eruptions) #记住用法就行
plot(ecdf_eruptions,
main = "泉水喷发持续时间",
ylable = "累计喷发频数",
xlable = "持续时间"
)
#绘制散点图eruption vs waiting
eruption <- faithful$eruptions
waiting <- faithful$waiting
head(cbind(eruption, waiting))
plot(eruption, waiting,
main = "泉水喷发持续时间与等待时间关系图",
xlab = "喷发持续时间",
ylab = "等待时间"
)
#R绘制茎叶图函数stem()
stem(faithful$eruptions) #茎叶图
# 7.2数据的数值度量
#求均值函数mean:
mean(faithful$eruptions)
#求中位数函数median:
median(faithful$eruptions)
#求四分位数函数quantile:
quantile(faithful$eruptions)
#求极差函数range:
range(faithful$eruptions)
#求变化范围
max(faithful$eruptions) - min(faithful$eruptions)
#四分位距函数IQR:
IQR(faithful$eruptions)
#画出喷发时间和等待时间的箱线图
par(mfrow = c(1,2))
boxplot(faithful$eruptions)
boxplot(faithful$waiting)
par(mfrow = c(1,1))
#summary函数用于给出数据的五数概括
summary(faithful)
#求方差函数var和标准差函数sd:
var(faithful$eruptions)
sd(faithful$eruptions)
#求协方差函数cov:
cov(eruption, waiting)
#求相关系数函数cor:
cor(eruption, waiting)
#回归分析
eruption.lm <- lm(eruption ~ waiting, data = faithful);
#显示回归方程中的系数
1.
coeffs <- eruption.lm $ coefficients
2.
coeffs <- coefficients(eruption.lm);coeffs
#绘制散点图并添加回归直线
plot(eruption ~ waiting, data = faithful,
col = "blue",
main = "泉水喷发持续时间与等待时间关系图",
xlab = "喷发持续时间",
ylab = "等待时间"
);
fit <- lm(eruption ~ waiting, data = faithful);
abline(fit, col = "red", lwd = 2);
#预测喷发时间 第一种方法
waiting.time <- 80
duration.predict <- coeffs[1] + coeffs[2] * waiting.time
duration.predict
#预测喷发时间 第二种方法
newdata <- data.frame(waiting = 80)
predict(eruption.lm, newdata)
#多元线性回归分析
install.packages("mlbench")
library(mlbench)
data(BostonHousing)
dim(BostonHousing)
head(BostonHousing)
#了解其数据结构
str(BostonHousing)
boston.lm <- lm(medv ~ ., data = BostonHousing)
boston.lm
#查看回归分析结果
summary(boston.lm)
#预测房价
newdata <- data.frame(crim = 0.03, zn = 90, indus = 2, chas = as.factor(0),
nox = 0.5, rm = 7, age = 15, dis = 6,
rad = 3, tax = 400, ptratio = 15, b = 400,
lstat = 5)
predict(boston.lm, newdata, interval = "predict")#参数interval表示预测区间```

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

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

相关文章

【系统】- window引导损害

背景 window ubuntu双系统&#xff0c;删除ubuntu后&#xff0c;无法进去window&#xff0c;停留在grub命令行 解决办法 步骤一&#xff1a; 临时启动Windows&#xff0c;在GRUB命令行中&#xff0c;可以尝试直接启动Windows&#xff1a; # 查找Windows分区 ls # 列出所有分区&…

大数据领域中ClickHouse的数据倾斜问题解决

大数据领域中ClickHouse的数据倾斜问题解决 关键词&#xff1a;大数据、ClickHouse、数据倾斜、解决策略、性能优化 摘要&#xff1a;本文聚焦于大数据领域中ClickHouse数据库的数据倾斜问题。数据倾斜会严重影响ClickHouse的查询性能和系统稳定性。文章首先介绍了数据倾斜问题…

救命神器!专科生毕业论文TOP9 AI论文网站测评

救命神器&#xff01;专科生毕业论文TOP9 AI论文网站测评 2026年专科生论文写作工具测评&#xff1a;为什么你需要这份榜单&#xff1f; 随着人工智能技术的不断进步&#xff0c;越来越多的专科生开始借助AI工具辅助毕业论文的撰写。然而&#xff0c;面对市场上五花八门的论文…

【计算机毕业设计案例】基于python-CNN模型深度学习对核桃的品质识别基于python-pytorch训练CNN模型对核桃的品质识别

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

【异常】FreeMarker 模板文件找不到问题排查与解决 TemplateNotFoundException: Template not found for name “mail/captcha.f

一、报错内容 cn.hutool.core.io.IORuntimeException: TemplateNotFoundException: Template not found for name "mail/captcha.ftl". The name was interpreted by this TemplateLoader: ClassTemplateLoader(classLoader="jdk.internal.loader.ClassLoaders…

【计算机毕业设计案例】基于django的服装品类趋势及消费者洞察数据分析可视化系统(程序+文档+讲解+定制)

java毕业设计-基于springboot的(源码LW部署文档全bao远程调试代码讲解等) 博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、…

第七天 |344.反转字符串 541. 反转字符串II 替换数字

第七天| 题目1 344.反转字符串 344.反转字符串 | 代码随想录 字符串基础操作! | LeetCode:344.反转字符串_哔哩哔哩_bilibili 笔记 为什么是O(1)的额外空间? 我的代码中使用了4个int变量,即额外空间是固定的,是常…

7款AI工具高效撰写学术论文的技巧与实例解析

工具核心特点速览 工具名称 核心优势 适用场景 数据支撑 aibiye 全流程覆盖降重优化 从开题到答辩的一站式需求 支持20万字长文逻辑连贯 aicheck 院校规范适配模板化输出 国内本硕博论文框架搭建 覆盖90%高校格式要求 秒篇 3分钟文献综述生成 紧急补文献章节 知…

Agentic AI社会责任:提示工程架构师的资源整合

知识金字塔构建者:Agentic AI社会责任与提示工程的资源整合艺术 1. 引入与连接:当AI学会“自主决策”,我们该如何教它“做个好人”? 1.1 一个真实的Agentic AI场景 早上7点,李奶奶的智能助手小安准时“醒来”——它先通过床头传感器读取了李奶奶的睡眠数据(昨晚醒了3次…

344. 反转字符串-day07

题目:344. 反转字符串 题目链接:https://leetcode.cn/problems/reverse-string/description/ 思路:就是将字符数组中的元素交换位置(从中间分开),例子:第1个后最后一个交换,第2个和倒数第二个交换 代码:点击查…

学术论文写作:7款AI工具实用技巧及案例演示

工具核心特点速览 工具名称 核心优势 适用场景 数据支撑 aibiye 全流程覆盖降重优化 从开题到答辩的一站式需求 支持20万字长文逻辑连贯 aicheck 院校规范适配模板化输出 国内本硕博论文框架搭建 覆盖90%高校格式要求 秒篇 3分钟文献综述生成 紧急补文献章节 知…

2026成都最新二手房装修企业top5评测!服务深度覆盖金牛区、新都区、青羊区、成华区等地优质品牌权威榜单发布,缔造理想居家环境.

随着二手房市场的持续火热,二手房装修需求日益增长,选择一家靠谱的装修公司至关重要。本榜单基于企业资质、设计实力、施工工艺、材料品质、服务保障五大维度,结合市场口碑与客户反馈,权威解析2026年五大二手房装修…

《实时渲染》第2章-图形渲染管线-2.3几何处理

几何处理阶段在GPU上完成顶点着色、投影、裁剪和屏幕映射,将模型从局部空间逐步转换至窗口坐标,为后续光栅化做准备。实时渲染 2. 图形渲染管线 2.3 几何处理 GPU上的几何处理阶段负责大多数每个三角形和每个顶点的操…

华为eNSP中USG6000防火墙web界面登录设置

防火墙USG6000V导入包 1. 导入包的获取下载链接&#xff1a;https://blog.csdn.net/IU131313/article/details/132792422&#xff08;感谢大佬&#xff09; 2.下载好导入包之后在ensp中在拓扑图上拉出USG6000V防火墙&#xff0c;点击FW&#xff0c;按照界面指示将导入包放入进…

咖啡果实成熟度数据集2359张VOC+YOLO格式

咖啡果实成熟度数据集2359张VOCYOLO格式数据集格式&#xff1a;VOC格式YOLO格式压缩包内含&#xff1a;3个文件夹&#xff0c;分别存储图片、xml、txt文件JPEGImages文件夹中jpg图片总计&#xff1a;2359Annotations文件夹中xml文件总计&#xff1a;2359labels文件夹中txt文件总…

【开题答辩全过程】以 基于JAVA的宠物医院管理系统的设计为例,包含答辩的问题和答案

个人简介一名14年经验的资深毕设内行人&#xff0c;语言擅长Java、php、微信小程序、Python、Golang、安卓Android等开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。感谢大家的…

行列式求值

行列式求值 给定一个行列式,求它的值,对任意模数取模。 分析 一个小技巧可以避免精度问题(或者说任意模数下逆元存在性问题),考虑使用类似求最大公约数地碾转相除法,在消除某行的主元时消到取余后的值,再交换两…

2026年1月21日人工智能早间新闻

各位读者&#xff0c;早上好。今天是2026年1月21日&#xff0c;星期三。欢迎收看人工智能早间新闻。世界经济论坛2026年年会进入第三天&#xff0c;昨日&#xff0c;大会聚焦“绩效”与“能源”两大核心&#xff0c;对人工智能的全球竞争格局进行了一次现实的把脉。与此同时&am…

Spring AI Alibaba实战训练营-26 基于Spring AI+MCP SDK开发SQLite 聊天机器人应用的完整指南

文章目录 本期目标 一、开发环境准备 1.1 基础环境要求 1.2 获取项目代码 1.3 配置 API 密钥 二、项目核心组件解析 2.1 依赖管理(pom.xml) 2.2 数据库初始化 三、核心代码实现详解 3.1 MCP 客户端配置(Application.java) 3.2 工具回调注册机制 3.3 预定义问题 3.4 交互式聊…