R语言如何对非日期列所有组合运行Linear regression model
R 批量运行多列两两线性回归的实现方案
问题原因
原有代码无法正确运行的核心问题是公式写法不规范:你在公式中使用了data$列名的写法,同时又给lm函数传入了data = data参数,两者优先级冲突。lm处理公式时会优先解析公式里的data$xxx直接从全局环境取值,而非使用你传入的数据集,写法不规范也容易引发后续调用错误。
实现步骤
1. 提取目标列名
首先排除date列,提取所有需要做回归的数值列名:
cols <- names(data)[names(data) != "date"]
2. 生成所有两两变量组合
如果需要全量有序组合(即y~x和x~y都单独计算),可以用如下方式生成配对:
# 生成所有y和x的配对 var_pairs <- expand.grid(y = cols, x = cols) # 过滤掉因变量和自变量相同的无效组合 var_pairs <- var_pairs[var_pairs$y != var_pairs$x, ]
如果只需要无序组合(即y~x和x~y只保留一个),可以用combn生成:
unordered_pairs <- combn(cols, 2, simplify = FALSE)
3. 批量构造公式并运行回归
以全量有序组合为例:
# 构造公式列表 formula_list <- lapply(1:nrow(var_pairs), function(i) { as.formula(paste(var_pairs$y[i], "~", var_pairs$x[i])) }) # 批量运行线性回归 model_list <- lapply(formula_list, FUN = lm, data = data) # 给模型命名,方便后续查找调用 names(model_list) <- paste(var_pairs$y, "regress on", var_pairs$x)
结果调用示例
你可以直接按名称提取对应模型查看结果:
# 查看Moratalaz对Cuatro_Caminos的回归结果 summary(model_list[["Moratalaz regress on Cuatro_Caminos"]])
内容的提问来源于stack exchange,提问作者user113156
相关产品推荐
相关产品推荐

