2017-06-13 21 views
0

假設我對一些模擬數據(多數據集)進行了三種迴歸方法,這樣我對每個對應的方法都有一個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第二種方法

感謝您的任何提示

我還來完成相同的結果! ,而是保存在列表中的數據如下WS:

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 

回答

2

一個想法是對數據幀

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 

如果你有一個列表的列表,然後只是轉換到的每一行使用table數據幀並按照相同的程序,即

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)) 
+0

感謝您的提示。如果我將我的結果列入清單,該怎麼辦? I.e .: .: mse_test1將是列表中的4個mse值。 – lecreprays

+2

然後我建議你發佈一個可重現的數據例子。 – Sotos

+0

謝謝,我添加了一個例子。 – lecreprays