如何编写一个 For 循环函数来 运行 几个回归并存储结果?
How can I write a For loop function to run several regressions and store the results?
我想请求的帮助: 我正在尝试自动执行循环中的一系列任务。基本上它是 运行 一系列回归,存储结果并将其导出(写入)到 csv 文件中。
问题:
我曾多次尝试 运行 一个“For”循环。我不知道如何根据 current_date 列
为每个回归创建和命名新变量
数据说明:
Link to dataset
它是一个表格格式的美国各州数据集(有点类似于 Tidy Data)。
每行或观察指的是特定日期的特定状态。
每列代表状态的一个属性
任务:
主要问题:自动化 运行 一系列回归的过程,按日期存储结果并将其导出(写入)到 csv 文件中。
任务顺序:
- 运行回归
- 使用扫帚整理回归结果(系数、标准误差和 p 值)
- 按特定日期存储结果
- 对另一个日期重复回归
- 使用扫帚整理回归结果(系数和模型)
- 按特定日期存储系数(系数、标准误差、p 值)的结果
- 按特定日期存储回归模型(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”)
}
在这种情况下使用循环对我来说没有意义。此外,日期似乎不会影响回归的输出。你想要这样的东西吗:
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
因为它给了你更多的控制权。
我想请求的帮助: 我正在尝试自动执行循环中的一系列任务。基本上它是 运行 一系列回归,存储结果并将其导出(写入)到 csv 文件中。
问题: 我曾多次尝试 运行 一个“For”循环。我不知道如何根据 current_date 列
为每个回归创建和命名新变量数据说明: Link to dataset 它是一个表格格式的美国各州数据集(有点类似于 Tidy Data)。 每行或观察指的是特定日期的特定状态。 每列代表状态的一个属性 任务: 主要问题:自动化 运行 一系列回归的过程,按日期存储结果并将其导出(写入)到 csv 文件中。
任务顺序:
- 运行回归
- 使用扫帚整理回归结果(系数、标准误差和 p 值)
- 按特定日期存储结果
- 对另一个日期重复回归
- 使用扫帚整理回归结果(系数和模型)
- 按特定日期存储系数(系数、标准误差、p 值)的结果
- 按特定日期存储回归模型(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”)
}
在这种情况下使用循环对我来说没有意义。此外,日期似乎不会影响回归的输出。你想要这样的东西吗:
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
因为它给了你更多的控制权。