R语言线性回归

R 复制代码
head(iris)

Sepal.Length Sepal.Width Petal.Length Petal.Width Species

1 5.1 3.5 1.4 0.2 setosa

2 4.9 3.0 1.4 0.2 setosa

3 4.7 3.2 1.3 0.2 setosa

4 4.6 3.1 1.5 0.2 setosa

5 5.0 3.6 1.4 0.2 setosa

6 5.4 3.9 1.7 0.4 setosa

变量名 中文说明 单位 含义
Sepal.Length 花萼长度 cm 花朵外层萼片的长度
Sepal.Width 花萼宽度 cm 花朵外层萼片的宽度
Petal.Length 花瓣长度 cm 花朵内层花瓣的长度
Petal.Width 花瓣宽度 cm 花朵内层花瓣的宽度
Species 品种 - 鸢尾花分类(因子型)

3 个品种(Species)取值

  1. setosa:山鸢尾
  2. versicolor:变色鸢尾
  3. virginica:维吉尼亚鸢尾

1、简单线性回归(1 个自变量)

花瓣宽度 (Petal.Width) 预测 花瓣长度 (Petal.Length)

R 复制代码
# 构建线性回归模型:y ~ x
simple_model <- lm(Petal.Length ~ Petal.Width, data = iris)

# 查看模型结果(核心输出)
summary(simple_model)

Call:

lm(formula = Petal.Length ~ Petal.Width, data = iris)

Residuals:

Min 1Q Median 3Q Max

-1.33542 -0.30347 -0.02955 0.25776 1.39453

Coefficients:

Estimate Std. Error t value Pr(>|t|)

(Intercept) 1.08356 0.07297 14.85 <2e-16 ***

Petal.Width 2.22994 0.05140 43.39 <2e-16 ***


Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 0.4782 on 148 degrees of freedom

Multiple R-squared: 0.9271, Adjusted R-squared: 0.9266

F-statistic: 1882 on 1 and 148 DF, p-value: < 2.2e-16

模型结果:

  1. Call:模型公式
  2. Residuals:残差(预测值与真实值的差值)统计量
  3. Coefficients (核心系数):
    • Intercept:截距项
    • Petal.Width:自变量系数(代表花瓣宽度每增加 1,花瓣长度平均增加 X)
    • Pr(>|t|):p 值(<0.05 表示变量显著)
  4. R-squared:决定系数(越接近 1,模型拟合效果越好)
  5. p-value:模型整体显著性(<0.05 表示模型有效)
R 复制代码
# 绘制原始数据散点图 
plot(iris$Petal.Width, iris$Petal.Length, 
    main = "简单线性回归:花瓣宽度 vs 花瓣长度", 
    xlab = "花瓣宽度", 
    ylab = "花瓣长度", 
    pch = 16, 
    col = "steelblue") 
# 添加回归拟合线 
abline(simple_model, col = "red", lwd = 2)

2、多元线性回归(多个自变量)

花萼长度、花萼宽度、花瓣宽度 共同预测 花瓣长度:

R 复制代码
# 构建多元线性回归模型:y ~ x1 + x2 + x3
multi_model <- lm(Petal.Length ~ Sepal.Length + Sepal.Width + Petal.Width, data = iris)

# 查看模型详细结果
summary(multi_model)

Call:

lm(formula = Petal.Length ~ Sepal.Length + Sepal.Width + Petal.Width,

data = iris)

Residuals:

Min 1Q Median 3Q Max

-0.99333 -0.17656 -0.01004 0.18558 1.06909

Coefficients:

Estimate Std. Error t value Pr(>|t|)

(Intercept) -0.26271 0.29741 -0.883 0.379

Sepal.Length 0.72914 0.05832 12.502 <2e-16 ***

Sepal.Width -0.64601 0.06850 -9.431 <2e-16 ***

Petal.Width 1.44679 0.06761 21.399 <2e-16 ***


Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 0.319 on 146 degrees of freedom

Multiple R-squared: 0.968, Adjusted R-squared: 0.9674

F-statistic: 1473 on 3 and 146 DF, p-value: < 2.2e-16

第 1 张图:Residuals vs Fitted(残差 vs 拟合值)

是否真的存在线性关系 + 方差是否均匀

  1. 中间红线要尽量水平 → 满足线性关系
  2. 点要随机均匀分布在红线上下 → 没有规律
  3. 不能出现漏斗形、曲线形

第 2 张图:Normal Q-Q(正态 Q-Q 图)

残差是否符合正态分布(回归模型的重要假设)

  • 点要紧紧贴在对角线上
  • 两头稍微偏离没关系,中间必须贴紧

第 3 张图:Scale-Location(标准差拟合图)

检验方差齐性(误差大小是否均匀)

  • 红线要水平
  • 点不要出现越来越散开 / 越来越集中的漏斗形状

第 4 张图:Residuals vs Leverage(残差 vs 杠杆值)

异常点 / 强影响点

  1. 绝大多数点要落在中间区域
  2. 没有点超出右侧虚线(Cook 距离)
  3. 就算有点偏,只要没超出虚线就没事

3、预测

R 复制代码
new_data <- data.frame(
  Sepal.Length = c(5.1, 6.2),
  Sepal.Width  = c(3.5, 2.9),
  Petal.Width  = c(0.2, 1.3)
)

pred_vals <- predict(multi_model, new_data)

1 2

1.484210 4.265343

可以看到:

第1朵:花萼长5.1,花萼宽3.5,花瓣宽0.2,预测的花瓣长度是1.48

第2朵:花萼长6.2,花萼宽2.9,花瓣宽1.3,预测的花瓣长度是4.27

R 复制代码
# 绘制真实数据散点图 + 预测点(红色星星)
plot(iris$Petal.Width, iris$Petal.Length,
     main = "鸢尾花花瓣宽度 vs 长度(含预测点)",
     xlab = "花瓣宽度", ylab = "花瓣长度",
     pch = 16, col = "steelblue", cex = 1.2)

# 画回归直线
abline(lm(Petal.Length ~ Petal.Width, data=iris), col = "red", lwd=2)

# 把你的两个预测点标成红色大星星
points(new_data$Petal.Width, pred_vals, 
       col = "red", pch = 8, cex = 3, lwd=3)

# 给点加文字
text(new_data$Petal.Width, pred_vals, 
     labels = round(pred_vals, 2), 
     pos = 3, col = "red", cex = 1.5)

# 加图例
legend("topleft", 
       legend = c("真实数据", "回归直线", "预测点"),
       pch = c(16, NA, 8),
       lty = c(NA, 1, NA),
       col = c("steelblue", "red", "red"),
       lwd = 2)
相关推荐
KaMeidebaby9 小时前
卡梅德生物技术快报|PD1 单克隆抗体定制配套 N 糖全谱质控开发
前端·人工智能·算法·数据挖掘·数据分析
小飞象—木兮13 小时前
《如何搭建用户分析体系指南》:定义、价值、思路、全流程实操指南、底层逻辑与落地方法···
数据分析·用户运营·用户体验
电商API_1800790524715 小时前
免 TOP 入驻,第三方淘宝商品详情 API 快速接入与代码示例
java·大数据·开发语言·数据库·爬虫·数据分析
天青色等烟雨..16 小时前
AI赋能R-Meta分析核心技术:从热点挖掘到高级模型、助力高效科研与论文发表
开发语言·人工智能·r语言
城事漫游Molly1 天前
质性研究AI工作流(二):编码工作流 SOP
人工智能·数据分析·ai for science·定性研究·定性编码·科研工作流
一晌小贪欢1 天前
第19节:地理空间分析——使用 Geopandas 绘制热力地图
开发语言·python·数据分析·pandas·数据可视化
李可以量化1 天前
QMT 实战:自定义绘制专属 K 线(下篇)—— 国产库与高性能库全解析
python·信息可视化·数据分析·量化·qmt·ptrade
YangYang9YangYan1 天前
2026会计人员学数据分析对个人能力的提升
数据挖掘·数据分析
YangYang9YangYan1 天前
2026运营人员学数据分析的价值
数据挖掘·数据分析