【发布时间】:2017-08-02 13:20:52
【问题描述】:
目标是对不同的训练数据帧进行多次 logit 回归,然后在各个测试数据集上评估性能。
首先,我们从df 创建多个 (5) 个随机采样的数据帧:
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 对象形式的输出,以便使用每个train glm 进行预测,从而能够评估不同测试/训练中的模型性能数据星座:
lr_test_1 <- predict(lr_train_1, random_df_1[test, ], type="response")
非常感谢任何帮助。
【问题讨论】:
-
您应该查看
modelr包。这让很多事情变得更容易:github.com/tidyverse/modelr -
谢谢@AndrewBrēza 您能否给我一个提示,告诉我不仅要使用
resample,还要使用modelrpackage 在多个训练集和测试集上评估模型?
标签: r loops cross-validation sapply training-data