如何编写For循环函数来运行多个回归并存储结果?

时间:2020-06-08 17:11:57

标签: r for-loop regression apply broom

我想请求的帮助:我正在尝试自动执行一系列任务。基本上,它运行一系列回归,存储结果并将其导出(写入)到csv文件中。

问题: 我已经尝试了很多次来运行“ For”循环。我不知道如何基于current_date列为每个回归创建和命名新变量

数据描述: Link to dataset 它是以表格格式(有点类似于Tidy Data)的美国各州的数据集。 每个行或观察值均指特定日期的特定状态。 每列均指状态的一个属性 任务: 主要问题:自动运行一系列回归,按日期存储结果并将其导出(写入)csv文件的过程。

任务顺序:

  1. 运行回归
    1. 使用扫帚整理回归结果(系数,std误差和p值)
    2. 在特定日期之前存储结果
    3. 重复回归另一个日期
    4. 使用扫帚整理回归结果(系数和模型)
    5. 在特定日期之前存储系数的结果(coeff,std误差,p值)
    6. 在特定日期之前存储回归模型的结果(R平方等)

..... 最后,将所有结果导出到CSV文件中

library(dplyr)
library(broom)
for(i in 1:length(current_date)){
    lmtest <- lm( outcome_var [[i]] ~ cumulative_var1_at_current_date + key_cat_var1, data = testdata)
    coeff_results<-tidy(lmtest)
    model_results<- glance(lmtest) 
    write.csv(coeff_results, “C:\\Users\\....combined_results.csv”)
    }

1 个答案:

答案 0 :(得分:1)

在这种情况下使用循环对我来说没有意义。同样,日期似乎并不影响回归的输出。您想要这样的东西吗?

library(dplyr)
library(broom)
current_date <- Sys.Date()
lmtest <- lm( outcome_var ~ cumulative_var1_at_current_date + key_cat_var1, data = testdata)
coeff_results <- tidy(lmtest)
model_results <- glance(lmtest) 
write.csv(coeff_results, paste0("coeff-results-", current_date, ".csv"))
write.csv(model_results, paste0("model-results", current_date, ".csv"))

如果没有,请举例说明current_date是什么,以及它如何影响您的数据。

根据当前日期进行澄清后:

因此,基本上,您需要遍历current_date列中的唯一日期。然后,您必须保留每天对应的数据。这是一个解决方案。

testdata$current_date <- as.Date(testdata$current_date, format = "%d/%m/%y")
all_dates <- unique(testdata$current_date)

for(i in 1:length(all_dates)) {
  lmtest <- filter(testdata, current_date %in% all_dates[i]) %>% 
    lm( outcome_var ~ cumulative_var1_at_current_date + key_cat_var1, data = .)
  coeff_results <- tidy(lmtest)
  model_results <- glance(lmtest)
  write.csv(coeff_results, paste0("coeff-results-", all_dates[i], ".csv"))
  write.csv(model_results, paste0("model-results", all_dates[i], ".csv"))
}

也许在lm中有一个更优雅的方式来遍历子集,但是我个人更喜欢dplyr::filter,因为它可以给您更多的控制权。