【发布时间】:2021-05-24 19:01:43
【问题描述】:
我想迭代地拟合一个线性模型 (= LM),并在每次迭代后使用 caret::varImp() 函数计算各个变量/预测变量的变量重要性。我的数据表和天数如下所示(dt.train 的列数总是不同,days 变量也一样):
d <- 50
## Create random data table: ##
dt.train <- data.table(date = seq(as.Date('2020-01-01'), by = '1 day', length.out = 366),
"DE" = rnorm(366, 35, 1), "Wind" = rnorm(366, 5000, 2), "Solar" = rnorm(366, 3, 2),
"Nuclear" = rnorm(366, 100, 5), "ResLoad" = rnorm(366, 200, 3), check.names = FALSE)
我也已经有一个函数可以每隔d 天计算一次(这里是d<-50):
varImportance <- function(data){
## Model fitting: ##
lmModel <- stats::lm(DE ~ .-1-date, data = data)
terms <- attr(lmModel$terms , "term.labels")
varimp <- caret::varImp(lmModel)
importance <- data[, .(date, imp = t(varimp))]
}
## Get variable importance: ##
dt.importance <- dt.train[, varImportance(.SD), by = seq_len(nrow(dt.train)) %/% d]
现在我想要一个循环来为我构建迭代,如下所示:
1.运行: 模型拟合“2020-01-01”到“2020-02-20”(这里正好是 50 天)的数据
2。运行: 用“2020-01-02”到“2020-02-21”的数据进行模型拟合
3.运行: 用“2020-01-03”到“2020-02-22”的数据进行模型拟合
... 等等
上次运行:模型拟合“2020-11-11”到“2020-12-31”的数据
然后应始终将变量重要性保存在新表中以匹配模型拟合,即:
变量的重要性1。运行:应声明为“2020-01-01”,
变量的重要性2。运行:应声明为“2020-01-02”,
...等等
Last Run: 的变量重要性应声明为“2020-11-11”。
这怎么可能?
【问题讨论】:
标签: r loops iteration linear-regression lm