【问题标题】:Three-way comparison of values, count number of 'successes'值的三向比较,计算“成功”的次数
【发布时间】:2017-06-13 16:10:27
【问题描述】:

假设我对一些模拟数据(多个数据集)进行了三种类型的回归方法,这样我就为每个数据集对应的每种方法都有一个 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

【问题讨论】:

    标签: r comparison simulation


    【解决方案1】:

    一个想法是在数据框的每一行上使用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))
    

    【讨论】:

    • 感谢您的提示。如果我将结果列在列表中怎么办?即:mse_test1 将是具有 4 个 mse 值的列表中的列表。
    • 那么我建议您发布一个可重现的数据示例。
    • 谢谢,我加了一个例子。
    • 谢谢,该代码似乎运行良好。您介意解释一下该代码是如何计算连续最小值的吗?我很想知道它是如何工作的。
    • @lecreprays 我在发现之前的解决方案存在问题时进行了编辑。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-14
    • 2012-05-02
    • 2016-10-02
    • 1970-01-01
    • 2019-03-27
    • 2019-09-09
    相关资源
    最近更新 更多