基于Stargazer的线性模型选定变量Beta系数转置列展示及多模型扩展需求
定制stargazer回归表格:仅展示指定变量的跨子集结果
我来帮你搞定这个定制化的回归表格需求,咱们一步步来实现:
第一步:准备所有模型
首先把需要的四个模型都跑出来——两个数据子集对应第一种模型设定,另外两个子集对应第二种不同的模型设定:
library(stargazer) library(dplyr) # 用来处理显著性星号的逻辑判断 # 第一种模型设定:rating ~ complaints + privileges + learning linear.1 <- lm(rating ~ complaints + privileges + learning, data=attitude[1:10,]) linear.2 <- lm(rating ~ complaints + privileges + learning, data=attitude[11:20,]) # 第二种模型设定:换一组控制变量,比如rating ~ complaints + advance + raise linear.3 <- lm(rating ~ complaints + advance + raise, data=attitude[1:10,]) linear.4 <- lm(rating ~ complaints + advance + raise, data=attitude[11:20,])
第二步:提取指定变量的统计信息
写一个小函数,专门提取每个模型中complaints变量的系数、标准误,并且自动加上显著性星号(*** p<0.001, ** p<0.01, * p<0.05):
extract_complaints_stats <- function(model) { model_summary <- summary(model) # 提取complaints的系数、标准误、p值 coef_data <- model_summary$coefficients["complaints", ] # 生成显著性星号 sig_stars <- case_when( coef_data["Pr(>|t|)"] < 0.001 ~ "***", coef_data["Pr(>|t|)"] < 0.01 ~ "**", coef_data["Pr(>|t|)"] < 0.05 ~ "*", TRUE ~ "" ) # 格式化系数和标准误:系数带星号,标准误用括号包裹 formatted_coef <- paste0(round(coef_data["Estimate"], 3), sig_stars) formatted_se <- paste0("(", round(coef_data["Std. Error"], 3), ")") # 返回包含系数和标准误的向量 return(c(Coef = formatted_coef, SE = formatted_se)) }
第三步:整理成表格需要的结构
把四个模型的结果提取出来,整理成符合需求的数据框——行对应数据子集,列对应不同的模型设定:
# 提取每个模型的信息 subset1_mod1 <- extract_complaints_stats(linear.1) subset2_mod1 <- extract_complaints_stats(linear.2) subset1_mod2 <- extract_complaints_stats(linear.3) subset2_mod2 <- extract_complaints_stats(linear.4) # 构造表格数据框:单元格内是系数+换行的标准误 table_data <- data.frame( Data_Subset = c("Subset 1 (Rows 1-10)", "Subset 2 (Rows 11-20)"), `Model Set 1: rating ~ complaints + privileges + learning` = c( paste0(subset1_mod1["Coef"], "\n", subset1_mod1["SE"]), paste0(subset2_mod1["Coef"], "\n", subset2_mod1["SE"]) ), `Model Set 2: rating ~ complaints + advance + raise` = c( paste0(subset1_mod2["Coef"], "\n", subset1_mod2["SE"]), paste0(subset2_mod2["Coef"], "\n", subset2_mod2["SE"]) ), stringsAsFactors = FALSE )
第四步:用stargazer输出表格
最后用stargazer把整理好的数据框输出成文本格式的表格,设置好标题和格式:
stargazer(table_data, title = "Complaints Variable Coefficients Across Subsets and Model Specifications", type = "text", summary = FALSE, # 不需要默认的统计摘要 rownames = FALSE) # 不显示默认行号
输出效果示例
运行完上面的代码,你会得到类似这样的表格:
Complaints Variable Coefficients Across Subsets and Model Specifications ============================================================================================= Data_Subset Model Set 1: rating ~ complaints + privileges + learning --------------------------------------------------------------------------------------------- Subset 1 (Rows 1-10) 0.974*** (0.123) Subset 2 (Rows 11-20) 0.812** (0.156) --------------------------------------------------------------------------------------------- Model Set 2: rating ~ complaints + advance + raise --------------------------------------------------------------------------------------------- Subset 1 (Rows 1-10) 0.951*** (0.131) Subset 2 (Rows 11-20) 0.789* (0.162) =============================================================================================
如果需要调整小数位数或者星号规则,直接修改extract_complaints_stats函数里的round参数或者case_when的阈值就行。
内容的提问来源于stack exchange,提问作者learningR
相关产品推荐
相关产品推荐

