Comment effectuer RMSE avec des valeurs manquantes?
J'ai un énorme jeu de données avec 679 lignes et 16 colonnes avec 30 % de valeurs manquantes. J'ai donc décidé d'imputer ce manque de valeurs avec la fonction imputer.knn de l'emballage imputer et j'ai eu un dataset avec 679 lignes et 16 colonnes mais sans les valeurs manquantes.
Mais maintenant je veux vérifier l'exactitude à l'aide de la RMSE et j'ai essayé 2 options:
- charger le package
hydroGOF
et d'appliquer lesrmse
fonction sqrt(mean (obs-sim)^2), na.rm=TRUE)
Dans les deux cas, j'ai l'erreur: errors in sim .obs: non numeric argument to binary operator.
Ce qui se passe parce que l'original jeu de données contient une NA
valeur (certaines valeurs sont manquantes).
Comment puis-je calculer la RMSE si je supprime les valeurs manquantes? Puis obs
et sim
va avoir des tailles différentes.
source d'informationauteur Telma_7919
Vous devez vous connecter pour publier un commentaire.
Comment simplement...
Évidemment en supposant que votre dataframe est appelé
df
et vous aurez à décider sur votre N ( c'est à direnrow(df)
comprend les deux lignes avec des données manquantes; voulez-vous de les exclure de N observations? Je suppose oui, donc au lieu denrow(df)
vous voudrez probablement utilisersum( !is.na(df$measure) )
) ou, suivant @Joshua justeLa rmse() fonction dans le package R hydroGOF a un NA-supprimer le paramètre:
qui, selon la documentation, fait ce qu'on attend quand
na.rm
est VRAI:"Lorsqu'un " NA " valeur est trouvé à la i-ème position dans l'obs OU la carte sim, la i-ème valeur
de l'obs ET sim sont supprimés avant que le calcul."
Sans minimes reproductible exempleil est difficile de dire pourquoi cela ne fonctionne pas pour vous.
Si vous souhaitez éliminer les valeurs manquantes avant l'entrée à l'hydroGOF::rmse() de la fonction, vous pouvez faire:
en supposant que vous avez le "simulé" (imputés) et "observé" (original) ensembles de données dans les différents blocs de données nommée df.sim et df.obs, respectivement, qui ont été créés à partir de la trame de données ont donc les mêmes dimensions et les noms de lignes.
Ici est une manière canonique de faire la même chose si vous avez plus d'une colonne avec des données manquantes:
Calcul de la RMSE dans R, même avec des valeurs manquantes:
Notation mathématique:
Intuition:
RMSE répond à la question: "Comment similaire, en moyenne, sont les nombres de la liste
d
et listep
"? Les deux listes doivent être de la même longueur. RMSE vous donne un numéro unique qui représente la façon dont loin les éléments de d sont les éléments de p.Exemple de code:
Imprime:
Pour plus d'intuition sur comment et pourquoi cela fonctionne:
Voir mon autre réponse canonique sur RMSE écrit en Python: https://stackoverflow.com/a/37861832/445131