web-dev-qa-db-fra.com

Expliquez l'avertissement ggplot2: "k lignes supprimées contenant des valeurs manquantes"

Je reçois cet avertissement lorsque je tente de générer un tracé avec ggplot.

Après des recherches en ligne pendant un certain temps, beaucoup ont suggéré que ma base de données contienne des valeurs nulles ou des données manquantes en général, ce qui n'était pas le cas.

Dans cette question la réponse acceptée dit ceci:

L'avertissement signifie que certains éléments sont supprimés car ils tombent en dehors de la plage spécifiée.

Je me demandais à quoi cette plage se réfère-t-elle exactement et comment quelqu'un peut-il augmenter manuellement cette plage afin d'éviter tous les avertissements?

67
ksm001

Le comportement que vous observez est dû à la manière dont ggplot2 traite les données situées en dehors des plages d'axe du tracé. Vous pouvez modifier ce comportement selon que vous utilisez scale_y_continuous (ou de manière équivalente ylim) ou coord_cartesian pour définir les plages d'axe, comme expliqué ci-dessous.

library(ggplot2)

# All points are visible in the plot
ggplot(mtcars, aes(mpg, hp)) + 
  geom_point()

Dans le code ci-dessous, un point avec hp = 335 est en dehors de la plage y du tracé. De plus, comme nous avons utilisé scale_y_continuous pour définir la plage de l'axe des ordonnées, ce point n'est inclus dans aucune autre statistique ni mesure récapitulative calculée par ggplot, telle que la ligne de régression linéaire.

ggplot(mtcars, aes(mpg, hp)) + 
  geom_point() +
  scale_y_continuous(limits=c(0,300)) +  # Change this to limits=c(0,335) and the warning disappars
  geom_smooth(method="lm")

Warning messages:
1: Removed 1 rows containing missing values (stat_smooth). 
2: Removed 1 rows containing missing values (geom_point).

Dans le code ci-dessous, le point avec hp = 335 est toujours en dehors de la plage y du graphique, mais ce point est néanmoins inclus dans les statistiques ou les mesures récapitulatives calculées par ggplot, telles que la ligne de régression linéaire. En effet, nous avons utilisé coord_cartesian pour définir la plage de l'axe des ordonnées et cette fonction n'exclut pas les points situés en dehors des plages de tracé si elle effectue d'autres calculs sur les données.

Si vous comparez ce graphique et le graphique précédent, vous pouvez voir que la ligne de régression linéaire du second graphique a une pente légèrement plus raide, car le point avec hp = 335 est inclus dans le calcul de la ligne de régression, même si elle n’est pas visible dans le graphique. .

ggplot(mtcars, aes(mpg, hp)) + 
  geom_point() +
  coord_cartesian(ylim=c(0,300)) +
  geom_smooth(method="lm")
65
eipi10

Juste pour le shake complétant la réponse donnée par eipi10.

Je faisais face au même problème sans utiliser scale_y_continuous ni coord_cartesian.

Le conflit provenait de l'axe x, où j'ai défini limits = c(1, 30). Il semble que de telles limites ne fournissent pas assez d’espace si vous voulez "esquiver" vos barres, donc R lance toujours l’erreur

Suppression de 8 lignes contenant des valeurs manquantes (geom_bar)

Le réglage des limites de l'axe x sur limits = c(0, 31) a résolu le problème.

En conclusion, même si vous n'imposez pas de limites à votre axe y, vérifiez le comportement de votre axe x pour vous assurer que vous disposez de suffisamment d'espace.

5
davidnortes