2017-06-13 2 views
0

Disons que j'ai effectué trois types de méthodes de régression sur des données simulées (ensembles de données multiples), de sorte que j'ai un MSE pour chacune des méthodes correspondant à chaque jeu de données. Quelques exemples de données (df) pourrait ressembler à ceci:Comparaison de valeurs à trois, nombre de 'succès'

df 
simulation mse_test1 mse_test2 mse_test3 
1   60  80  10     
2   80  20  50 
3   10  90  100 
4   70  50  10 

Ce que je voudrais accomplir est de comparer chacune des 3 valeurs MSE pour une simulation donnée afin de déterminer le plus bas MSE (par exemple pour la première ligne (simulation 1), je voudrais vérifier que le test3 a le MSE le plus bas). Je voudrais faire cette comparaison pour toutes mes simulations, où si une méthode (test) a le MSE le plus bas, elle recevra un 1, tandis que d'autres méthodes/tests recevront des zéros. En fin de compte, je voudrais stocker les résultats de cette comparaison (en df_result afin que je puisse trouver la méthode (test) avec la plus grande somme de 1. Par exemple, en utilisant nos données d'exemple, les résultats aimeraient comme ceci:.

df_result: 
mse_test1 mse_test2 mse_test3 
1   1   2 

Ie, la deuxième méthode/test a le plus faible MSE pour le plus grand nombre de simulations

Merci pour les conseils

Je voudrais aussi pour atteindre les mêmes résultats! , mais pour les données enregistrées dans une liste comme suit 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 

Répondre

2

Une idée serait d'utiliser table sur chaque ligne de la trame de données

table(max.col(-df[-1])) 

#1 2 3 
#1 1 2 

Ou,

t1 <- table(max.col(-df[-1])) 
setNames(t1, paste0('mse_test', names(t1))) 

#mse_test1 mse_test2 mse_test3 
#  1   1   2 

Si vous avez une liste de listes puis juste convertir trame de données et suivre la même procédure, à savoir

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 

Où,

dput(l2) 
list(list(60L, 80L, 10L, 70L), list(80L, 20L, 90L, 50L), list(
    10L, 50L, 100L, 10L)) 
+0

Merci pour les conseils. Et si j'avais mes résultats dans une liste? I.e .: mse_test1 serait une liste dans une liste avec les 4 valeurs mse. – lecreprays

+2

Ensuite, je vous suggère de poster un exemple reproductible de vos données. – Sotos

+0

Merci, j'ai ajouté un exemple. – lecreprays