首页 > 解决方案 > 通过函数将回归对象附加到列表

问题描述

假设我正在尝试自动创建许多回归模型,如下所示:

library(stargazer) 

get_main_effect_models <- function(data, outcome_vars){
  temp_list = list()
  i <- 0
  for(dv in outcome_vars) {
    temp_model <- lm(as.formula(paste(dv, "~ iv")),
                     data = data)
    
    temp_list = append(temp_list, temp_model)
  }
  return(temp_list)
}


dvs <- list('a', 'b')
fake_data = data.frame(a = rnorm(n = 100), b = rnorm(n = 100), iv = rnorm(n = 100))
summary_table = get_main_effect_models(fake_data, dvs)
stargazer(summary_table)

list.of.objects[[i]] 中的错误:下标越界

结果 summary_table 不是对象列表。这是模型的字符表示的大列表。如何将实际回归模型存储在列表中以供观星者使用?

标签: rstargazer

解决方案


一种解决方案是定义您的函数以创建一个回归,然后使用以下命令对其进行迭代lapply

get_main_effect_models <- function(outcome_var, data) {
  lm(as.formula(paste(outcome_var, "~ iv")), data = data)
}

dvs <- list("a", "b")
fake_data <-  data.frame(a = rnorm(n = 100), b = rnorm(n = 100), iv = rnorm(n = 100))

summary_table <- lapply(dvs, get_main_effect_models, data = fake_data)   

stargazer(summary_table, type = "text") 
#==========================================================
#                                  Dependent variable:     
#                              ----------------------------
#                               paste(outcome_var, "~ iv") 
#                                    (1)           (2)     
#----------------------------------------------------------
#iv                                -0.004         0.006    
#                                  (0.110)       (0.099)   
#                                                          
#Constant                           0.075         -0.081   
#                                  (0.106)       (0.096)   
#                                                          
#----------------------------------------------------------
#Observations                        100           100     
#R2                                0.00001       0.00004   
#Adjusted R2                       -0.010         -0.010   
#Residual Std. Error (df = 98)      1.053         0.948    
#F Statistic (df = 1; 98)           0.001         0.004    
#==========================================================
#Note:                          *p<0.1; **p<0.05; ***p<0.01

推荐阅读