如何在R语言中便捷构建并检验多个回归模型
批量构建线性模型并完成检验的便捷方法
当然有啦!完全不用手动逐个编写重复代码,利用R的列表遍历工具就能高效完成批量构建模型和后续检验的工作,下面是具体实现步骤:
1. 批量构建线性模型
首先,我们可以把需要作为响应变量的列名存成一个向量,然后用lapply(或者purrr包的map函数)遍历这个向量,自动生成所有需要的线性模型:
# 先定义需要作为响应变量的列名 response_vars <- c("A", "B", "C") # 用lapply批量构建模型 models <- lapply(response_vars, function(var) { # 动态拼接公式:响应变量 ~ X lm(formula = paste(var, "~ X"), data = modData) }) # 给模型列表命名,方便后续快速定位 names(models) <- response_vars
这样你就得到了一个包含所有模型的列表,比如models$A就是原来的md1,models$B对应md2,非常直观。如果你习惯用purrr包,代码会更简洁:
library(purrr) models_purrr <- map(response_vars, ~ lm(paste(.x, "~ X"), data = modData)) %>% set_names(response_vars)
2. 批量执行Shapiro残差正态性检验
有了模型列表后,同样用遍历工具批量运行Shapiro检验:
# 批量生成Shapiro检验结果 shapiro_results <- lapply(models, function(model) { shapiro.test(residuals(model)) }) # 查看单个模型的检验结果,比如A模型 shapiro_results$A
用purrr的写法是:
shapiro_purrr <- map(models_purrr, ~ shapiro.test(residuals(.x)))
3. 批量执行Box-Cox变换检验
Box-Cox检验需要用到MASS包的boxcox()函数,同样可以批量处理,并且自动生成每个模型的检验图:
library(MASS) # 批量运行Box-Cox检验并绘图 boxcox_results <- lapply(models, function(model) { boxcox(model, plotit = TRUE) })
执行这段代码后,R会依次弹出每个模型的Box-Cox检验图,同时检验结果会被存在boxcox_results列表里方便后续查看。用purrr的写法类似:
boxcox_purrr <- map(models_purrr, ~ boxcox(.x, plotit = TRUE))
这种方法最大的好处是扩展性极强——如果后续需要增加更多响应变量,只需要修改response_vars向量即可,完全不用重复编写模型构建和检验的代码!
内容的提问来源于stack exchange,提问作者Tianjian Qin
相关产品推荐
相关产品推荐

