假设我在一些模拟数据(多个数据集)上进行了三种类型的回归方法,这样我对每个数据集对应的每个方法都有一个MSE。一些示例数据(df)可能如下所示:
df
simulation mse_test1 mse_test2 mse_test3
1 60 80 10
2 80 20 50
3 10 90 100
4 70 50 10
我想要完成的是比较给定模拟的3个MSE值中的每一个以确定最低MSE(即第一行(模拟1),我想确定test3具有最低值) MSE)。我想对我的所有模拟进行比较,如果方法(测试)具有最低的MSE,它将接收1,而其他方法/测试将接收零。
最后,我想存储这些比较的结果(在df_result
中,因此我可以找到最大总和为1的方法(测试)。例如,使用我们的示例数据,结果会像这样:
df_result:
mse_test1 mse_test2 mse_test3
1 1 2
即,第二种方法/测试对于大多数模拟具有最低的MSE。
感谢您的任何提示!
我还要完成相同的结果,但对于保存在列表中的数据如下:
sample_results
[[1]]
mse_test1[[1]]
60
mse_test1[[2]]
80
mse_test1[[3]]
10
mse_test1[[4]]
70
[[2]]
mse_test2[[1]]
80
mse_test2[[2]]
20
mse_test2[[3]]
90
mse_test2[[4]]
50
[[3]]
mse_test3[[1]]
10
mse_test3[[2]]
50
mse_test3[[3]]
100
mse_test3[[4]]
10
答案 0 :(得分:2)
一个想法是在数据框的每一行使用table
table(max.col(-df[-1]))
#1 2 3
#1 1 2
或者,
t1 <- table(max.col(-df[-1]))
setNames(t1, paste0('mse_test', names(t1)))
#mse_test1 mse_test2 mse_test3
# 1 1 2
如果您有一个列表列表,那么只需转换为数据框并按照相同的步骤,即
d3 <- as.data.frame(do.call(cbind, lapply(l2, function(i) unlist(i))))
t2 <- table(max.col(-d3))
setNames(t2, paste0('mse_test', names(t2)))
#mse_test1 mse_test2 mse_test3
# 1 1 2
其中,
dput(l2)
list(list(60L, 80L, 10L, 70L), list(80L, 20L, 90L, 50L), list(
10L, 50L, 100L, 10L))