Exemple avec des données normales. Supposons que les données réelles soient un échantillon aléatoire de taille $ n = 200 $ de $ \ mathsf {Norm} (\ mu = 100, \ sigma = 15), $ mais vous ne connaissez pas $ \ mu $ ou $ \ sigma $ et cherchez à les estimer. Dans l'exemple ci-dessous, j'estimerais $ \ mu $ par $ \ bar X = 100,21 $ et $ \ sigma $ par $ S = 14,5, $ Les deux estimations sont plutôt bonnes. (Simulation et calculs dans R.)
set.seed (402) # pour la reproductibilité
x = rnorm (200, 100, 15)
moyenne (x); sd (x)
# [1] 100.2051 # aprx 100
# [1] 14.5031 # aprx 15
Supposons maintenant que 25% de ces données manquent. (C'est une grande proportion, mais je suis
essayant de faire valoir un point.) Si je remplace les observations manquantes par la moyenne des 150 observations non manquantes, voyons ce que mes estimations de $ \ mu $ et $ \ sigma $ serait.
x.nonmis = x [51: 200] # pour simplifier, supposons qu'il manque les 50 premiers
x.imputd = c (rep (moyenne (x.nonmis), 50), x.nonmis)
longueur (x.imputd); moyenne (x.imputd); sd (x.imputd)
# [1] 200 # 'x.imputd' a une longueur appropriée de 200
# [1] 100.3445 # aprx 100
# [1] 12.58591 # beaucoup plus petit que 15
Nous estimons maintenant $ \ mu $ comme $ \ bar X_ {imp} = 100,3, $ ce qui n'est pas une mauvaise estimation, mais potentiellement (comme ici) pire que la moyenne des données réelles. Cependant, nous estimons maintenant $ \ sigma $ comme $ S_ {imp} = 12.6, $ , ce qui est assez un peu en dessous du vrai $ \ sigma $ et de sa meilleure estimation 14,5 à partir des données réelles.
Example avec des données exponentielles. Si les données sont fortement biaisées à droite (comme pour les données d'une population exponentielle), le remplacement des données manquantes par la moyenne des données non manquantes pourrait masquer l'asymétrie de sorte que nous pouvons être surpris que les données ne reflètent pas le poids réel de la queue droite de la population.
set.seed (2020) # pour la reproductibilité
x = rexp (200, .01)
moyenne (x); sd (x)
# [1] 108.0259 # aprx 100
# [1] 110.1757 # aprx 100
x.nonmis = x [51: 200] # pour simplifier, supposons qu'il manque les 50 premiers
x.imputd = c (rep (moyenne (x.nonmis), 50), x.nonmis)
longueur (x.imputd); moyenne (x.imputd); sd (x.imputd)
# [1] 200
# [1] 106.7967 # aprx 100
# [1] 89.21266 # inférieur à 100
boxplot (x, x.imputd, col = "skyblue2", main = "Données: réelles (à gauche) et imputées")
La boîte à moustaches montre plus d'asymétrie dans les données réelles (beaucoup d'observations en queue haute)
que dans les données "imputées".
Example avec des données bimodales. Encore ici, quand nous remplaçons les valeurs manquantes par
la moyenne des observations non manquantes, l'écart type de la population est sous-estimé. Peut-être plus sérieusement, le grand nombre de valeurs imputées au centre de l'échantillon «imputé» masque la nature bimodale des données.
set.seed (1234) # pour la reproductibilité
x1 = rnorm (100, 85, 10); x2 = rnorm (100, 115, 10)
x = sample (c (x1, x2)) # ordre de brouillage aléatoire
moyenne (x); sd (x)
# [1] 99.42241
# [1] 18.97779
x.nonmis = x [51: 200] # pour simplifier, supposons qu'il manque les 50 premiers
x.imputd = c (rep (moyenne (x.nonmis), 50), x.nonmis)
longueur (x.imputd); moyenne (x.imputd); sd (x.imputd)
# [1] 200
# [1] 99.16315
# [1] 16.41451
par (mfrow = c (1,2))
hist (x, prob = T, col = "skyblue2", main = "Actual")
hist (x.imputd, prob = T, col = "skyblue2", main = "Imputed")
par (mfrow = c (1,1))
En général: Le remplacement des données manquantes par des données non manquantes entraîne une sous-estimation du SD de la population, mais peut également masquer des éléments importants
caractéristiques de la population à partir de laquelle les données ont été échantillonnées.
Remarque: Comme @ benso8 l'observe, utiliser la moyenne des données non manquantes pour remplacer les observations manquantes n'est pas toujours une mauvaise idée. Comme mentionné dans la question, cette méthode réduit la variabilité. Il y aura forcément des inconvénients à tout schéma
pour traiter les données manquantes. La Question demandait des spéculations sur les inconvénients possibles autres que la réduction de la variance pour cette méthode. J'ai essayé d'illustrer quelques possibilités dans mes deux derniers exemples.
Méthode alternative provisoire: Je ne suis pas un expert en data mining. Je propose donc très provisoirement une méthode alternative. Je ne prétends pas que ce soit une nouvelle idée.
Au lieu de remplacer tous les éléments manquants $ m $ par la moyenne de l'échantillon des éléments non manquants, on peut prendre un échantillon aléatoire de taille $ m $ parmi les observations non manquantes, et mettez-le à l'échelle de sorte que les éléments $ m $ aient la même moyenne et écart-type que les données non manquantes . Combinez ensuite les éléments $ m $ redimensionnés avec les éléments non manquants pour obtenir un échantillon 'imputé' avec à peu près la même moyenne et écart-type que la partie non manquante de l'échantillon.
Le résultat ne doit pas systématiquement sous-estimer l'écart-type de la population et peut mieux préserver les caractéristiques de la population telles que l'asymétrie et la bimodalité. (Commentaires bienvenus.)
Cette idée est explorée pour les données bimodales ci-dessous:
set.seed (4321) # pour la reproductibilité
x1 = rnorm (100, 85, 10); x2 = rnorm (100, 115, 10)
x = échantillon (c (x1, x2)) # scrmble
moyenne (x); sd (x)
# [1] 100,5299
# [1] 17.03368
x.nonmis = x [51: 200] # pour simplifier, supposons qu'il manque les 50 premiers
an = moyenne (x.nonmis); sn = sd (x.nonmis)
x.subt = sample (x.nonmis, 50) # substituts temporaires non mis à l'échelle
comme = moyenne (x.subt); ss = sd (x.subt)
x.sub = ((x.subt - as) / ss) * sn + an # substituts mis à l'échelle
x.imputd = c (x.sub, x.nonmis)
moyenne (x.imputd); sd (x.imputd)
# [1] 100,0694 # aprx identique à la moyenne des non manquants
# [1] 16.83213 # aprx même SD OS de non manquant
par (mfrow = c (1,2))
hist (x, prob = T, col = "skyblue2", main = "Actual")
hist (x.imputd, prob = T, col = "skyblue2", main = "Imputed")
par (mfrow = c (1,1))