如何使用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
相关产品推荐
相关产品推荐

