目标是对不同的训练数据帧进行多重 logit 回归,然后评估各自测试数据集的性能。
首先,我们从以下位置创建多个 (5) 随机采样的数据帧df
:
for(i in 1:5) {
nr <- paste("random_df", i, sep = "_")
assign(nr, random_df[sample(nrow(df)),])
}
然后,我们为分离训练集和测试集创建指标:
train <- 1:(length(df$y)*0.8)
test <- !(1:nrow(df) %in% train)
现在我们想在每个训练数据帧上循环一个 logit 回归。这是第一个问题,因为我们只能将输出创建为矩阵或列表。我们或者创建随机样本的列表、数据框或矩阵:
lr_list <- list(random_df_1,random_df_2,random_df_3,random_df_4,random_df_5)
然后,我们在列表中的所有数据帧上循环 logit 回归:
for(i in 1:5) {
index <- paste("lr_train", i, sep = "_")
assign(index, lapply(lr_list, function(x) {glm(y ~ x1 + x2, data=x,
subset=train, family=binomial)}))
}
这里lapply
创建了sapply
每个估计结果的列表和矩阵。
目标是获得glm
对象形式的输出,以便使用每个训练 glm进行预测,从而能够评估不同测试/训练数据星座的模型性能:
lr_test_1 <- predict(lr_train_1, random_df_1[test, ], type="response")
非常感谢任何帮助。
我很确定你误解了lapply
. 它循环输入并创建一个对象列表,这些对象属于您使用的函数输出的典型类。
如果我正确阅读了您的代码,这部分
for(i in 1:5) {
index <- paste("lr_train", i, sep = "_")
assign(index, lapply(lr_list, function(x) {glm(y ~ x1 + x2, data=x,
subset=train, family=binomial)}))
}
本质上是在同一事物上循环两次,因此创建了五个相同的列表。
相反,只需使用:
lr_train <- lapply(lr_list, function(x) {glm(y ~ x1 + x2, data=x,
subset=train, family=binomial)})
然后mapply
你predict
遍历 glm 对象列表。
lr_test <- mapply(function(x, y) predict(x, y[test, ], type = "response"), lr_train, lr_list)
请注意,由于缺少工作数据示例,这是未经测试的。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句