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

如何运行5个同步OLS回归并将结果整合至同一表格?

合并多个回归结果为单一表格的解决方案

核心思路

先逐个提取每个回归模型的系数、p值,添加模型标识后合并所有结果,再转换为目标格式的表格,同时添加显著性标记。


R语言实现示例

1. 加载工具包并拟合模型

library(broom)
library(dplyr)
library(tidyr)
library(knitr)

# 替换为你的实际模型与数据
model1 <- lm(mpg ~ wt, data = mtcars)
model2 <- lm(mpg ~ wt + hp, data = mtcars)
model3 <- lm(mpg ~ wt + hp + disp, data = mtcars)
model4 <- lm(mpg ~ wt + hp + disp + drat, data = mtcars)
model5 <- lm(mpg ~ wt + hp + disp + drat + qsec, data = mtcars)

2. 提取并合并模型结果

# 提取单个模型的系数、p值,添加模型名称
extract_model <- function(model, model_name) {
  tidy(model) %>% 
    mutate(model = model_name) %>% 
    select(term, estimate, p.value, model)
}

# 批量处理5个模型
combined_data <- bind_rows(
  extract_model(model1, "模型1"),
  extract_model(model2, "模型2"),
  extract_model(model3, "模型3"),
  extract_model(model4, "模型4"),
  extract_model(model5, "模型5")
)

3. 添加显著性标记并整理表格

# 生成显著性标记(***<0.001,**<0.01,*<0.05)
combined_data <- combined_data %>%
  mutate(
    sig = case_when(
      p.value < 0.001 ~ "***",
      p.value < 0.01 ~ "**",
      p.value < 0.05 ~ "*",
      TRUE ~ ""
    ),
    coeff_with_sig = paste0(round(estimate, 3), sig)
  )

# 转换为宽格式表格(变量为行,模型为列)
final_table <- combined_data %>%
  pivot_wider(
    names_from = model,
    values_from = c(coeff_with_sig, p.value),
    names_glue = "{model}_{.value}"
  )

# 输出美观表格
kable(final_table, caption = "5个回归模型的系数与p值(含显著性)")

Python语言实现示例

1. 加载工具包并拟合模型

import statsmodels.api as sm
import pandas as pd

# 替换为你的实际数据
data = sm.datasets.get_rdataset("mtcars").data

# 定义5个回归公式
formulas = [
    "mpg ~ wt",
    "mpg ~ wt + hp",
    "mpg ~ wt + hp + disp",
    "mpg ~ wt + hp + disp + drat",
    "mpg ~ wt + hp + disp + drat + qsec"
]

2. 提取并合并模型结果

model_results = []

for idx, formula in enumerate(formulas, 1):
    model = sm.OLS.from_formula(formula, data=data).fit()
    # 提取变量名、系数、p值
    result_df = pd.DataFrame({
        "变量名": model.params.index,
        f"模型{idx}_系数": model.params.round(3),
        f"模型{idx}_p值": model.pvalues.round(4)
    })
    model_results.append(result_df)

# 按变量名合并所有模型结果
final_table = model_results[0]
for df in model_results[1:]:
    final_table = pd.merge(final_table, df, on="变量名", how="outer")

3. 添加显著性标记并整理

# 为每个模型的系数添加显著性标记
for i in range(1, 6):
    final_table[f"模型{i}_系数(含显著性)"] = final_table.apply(
        lambda row: f"{row[f'模型{i}_系数']}{'***' if row[f'模型{i}_p值']<0.001 else '**' if row[f'模型{i}_p值']<0.01 else '*' if row[f'模型{i}_p值']<0.05 else ''}",
        axis=1
    )

# 选择需要展示的列(仅保留变量名和带显著性的系数)
display_table = final_table[[col for col in final_table.columns if "系数(含显著性)" in col or col == "变量名"]]
print(display_table)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 06:50:17