使用R语言结合faraway包的savings数据集绘制Wally图
R语言实现savings数据集的Wally图绘制
首先加载所需包并拟合初始线性模型:
library(faraway) # 加载数据集并拟合全变量线性模型 model <- lm(sr ~ ., data = savings)
接下来是Wally图的实现代码,核心是通过模拟符合模型假设的响应值,重复拟合并绘制残差-拟合值图:
# 设置绘图布局:2行5列,容纳10幅模拟图 par(mfrow = c(2, 5), mar = c(3, 3, 1, 1), mgp = c(1.5, 0.5, 0)) # 提取初始模型的关键信息 X <- model.matrix(model) # 设计矩阵 beta_hat <- coef(model) # 回归系数估计值 sigma_hat <- summary(model)$sigma # 残差标准差估计值 n <- nrow(savings) # 样本量 # 重复10次模拟绘图流程 for (i in 1:10) { # 1. 生成符合正态假设的模拟误差项 e_sim <- rnorm(n, mean = 0, sd = sigma_hat) # 2. 生成模拟响应值 y_sim <- X %*% beta_hat + e_sim # 3. 用模拟响应值重新拟合线性模型 model_sim <- lm(y_sim ~ ., data = savings) # 4. 提取拟合值与残差 fit_sim <- fitted(model_sim) res_sim <- residuals(model_sim) # 5. 绘制残差-拟合值散点图 plot(fit_sim, res_sim, xlab = "拟合值", ylab = "残差", pch = 16, cex = 0.8) abline(h = 0, col = "red", lty = 2) } # 恢复默认绘图布局 par(mfrow = c(1,1))
代码说明
- 模拟逻辑:基于初始模型的系数估计,生成服从正态分布的误差项,以此构造符合模型假设的响应变量
- 绘图细节:通过设置统一的布局参数让10幅图整齐排列,每幅图添加红色水平参考线,便于观察残差是否围绕0随机分布
内容的提问来源于stack exchange,提问作者Adrien Riaux
相关产品推荐
相关产品推荐

