通过不同的数据框循环回归

迪马

目标是对不同的训练数据帧进行多重 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)})

然后mapplypredict遍历 glm 对象列表。

lr_test <- mapply(function(x, y) predict(x, y[test, ], type = "response"), lr_train, lr_list)

请注意,由于缺少工作数据示例,这是未经测试的。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章