You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用R语言提取矩阵对角线、绘制偏回归图及解决cookd报错

R线性模型诊断与相关操作解决方案

现有代码问题修复

你原有代码存在3个可优化/修正的点:

  • 首次拟合mod1时未指定data参数,若未提前挂载数据集会报变量找不到的错误
  • 重复调用lm()拟合模型,冗余且浪费计算资源
  • cookd不属于R基础函数,未加载对应包时会触发函数不存在的报错

修正后的基础代码如下:

# 第一步:构造你的数据集
data <- data.frame(
  farm = c(24.3, 30.2, 49, 70, 69),
  up = c(34.3, 35.3, 45, 60, 80),
  right = c(50, 54, 540, 334, 54),
  left = c(45, 45, 4353, 343, 342)
)

# 仅拟合一次线性模型即可
mod1 <- lm(farm ~ up + right + left, data = data)

学生化残差与拟合值对比图

调用plot(mod1)会自动输出4张模型诊断图,其中第一张就是残差与拟合值的对比图。如果需要单独输出学生化残差的对比图,可手动绘制:

# 提取学生化残差、拟合值手动绘图
plot(
  x = fitted(mod1), 
  y = rstudent(mod1),
  xlab = "模型拟合值",
  ylab = "学生化残差",
  main = "学生化残差-拟合值散点图"
)
abline(h = 0, lty = 2, col = "red") # 添加0参考线

库克距离计算与绘图

cookd是car扩展包提供的函数,未加载包时无法调用。你可以选择两种方案实现:

方案1:用R基础自带函数(无需额外安装包)

# 基础R自带cooks.distance()直接计算库克距离
plot(
  x = cooks.distance(mod1),
  type = "h", # 用垂线展示更直观
  ylab = "库克距离",
  main = "各观测值库克距离"
)
abline(h = 4/nrow(data), lty = 2, col = "red") # 添加常用的4/n阈值参考线

方案2:用car包的cookd函数

# 首次使用先安装包,安装过可以注释掉下一行
# install.packages("car")
library(car)
plot(cookd(mod1), type = "h", ylab = "库克距离")

提取矩阵对角线

R基础环境直接提供diag()函数即可提取矩阵对角线元素:

# 示例:构造一个测试矩阵
test_mat <- matrix(1:9, nrow = 3, ncol = 3)
# 提取对角线
diag_values <- diag(test_mat)
# 输出对角线元素
diag_values

如果需要提取模型相关矩阵的对角线,比如帽子矩阵的对角线(即杠杆值),也可以直接调用对应函数后用diag()提取,或者直接用封装好的函数:

# 提取线性模型帽子矩阵的对角线(杠杆值),两种方式结果一致
lev1 <- diag(hatmatrix(mod1)) # 先拿帽子矩阵再提对角线
lev2 <- hatvalues(mod1) # 直接调用封装好的杠杆值计算函数

绘制偏回归图

偏回归图也叫添加变量图,推荐用car包的avPlots()函数快速实现:

library(car)
# 一次性生成所有自变量的偏回归图
avPlots(mod1, main = "偏回归图合集")

# 单独生成某个自变量的偏回归图,比如up变量
avPlot(mod1, variable = "up", xlab = "up|其余自变量", ylab = "farm|其余自变量")

内容的提问来源于stack exchange,提问作者fashionable

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 22:15:05