Voir si les données sont normalement dissortingbuées dans R

Quelqu’un peut-il s’il vous plaît m’aider à remplir la fonction suivante dans R:

#data is a single vector of decimal values normally.dissortingbuted <- function(data) { if(data is normal) return(TRUE) else return(NO) } 

Les tests de normalité ne font pas ce que la plupart pensent. Le test de Shapiro, Anderson Darling, et d’autres sont des tests d’hypothèse nulle CONTRE l’hypothèse de normalité. Celles-ci ne doivent pas être utilisées pour déterminer s’il faut utiliser les procédures statistiques de la théorie normale. En fait, ils n’ont pratiquement aucune valeur pour l’analyste de données. Dans quelles conditions sums-nous intéressés à rejeter l’hypothèse nulle selon laquelle les données sont normalement dissortingbuées? Je n’ai jamais rencontré une situation où un test normal est la bonne chose à faire. Lorsque la taille de l’échantillon est petite, même les écarts importants par rapport à la normalité ne sont pas détectés et lorsque la taille de votre échantillon est importante, même la plus petite déviation par rapport à la normalité entraînera la nullité rejetée.

Par exemple:

 > set.seed(100) > x <- rbinom(15,5,.6) > shapiro.test(x) Shapiro-Wilk normality test data: x W = 0.8816, p-value = 0.0502 > x <- rlnorm(20,0,.4) > shapiro.test(x) Shapiro-Wilk normality test data: x W = 0.9405, p-value = 0.2453 

Donc, dans ces deux cas (variables binomiales et lognormales), la valeur p est> 0,05, ce qui empêche de rejeter la valeur NULL (que les données sont normales). Est-ce que cela signifie que nous devons conclure que les données sont normales? (indice: la réponse est non). Ne pas rejeter n’est pas la même chose que d’accepter. Ceci est un test d’hypothèse 101.

Mais qu’en est-il des tailles d’échantillon plus grandes? Prenons le cas où la dissortingbution est presque normale.

 > library(nortest) > x <- rt(500000,200) > ad.test(x) Anderson-Darling normality test data: x A = 1.1003, p-value = 0.006975 > qqnorm(x) 

entrer la description de l'image icientrer la description de l'image ici

Nous utilisons ici une dissortingbution en t avec 200 degrés de liberté. Le qq-plot montre que la dissortingbution est plus proche de la normale que toute dissortingbution que vous êtes susceptible de voir dans le monde réel, mais le test rejette la normalité avec un degré de confiance très élevé.

Le test significatif contre la normalité signifie-t-il que nous ne devrions pas utiliser les statistiques de la théorie normale dans ce cas? (un autre indice: la réponse est non :))

Je recommande également fortement le SnowsPenultimateNormalityTest dans le package TeachingDemos . La documentation de la fonction vous est bien plus utile que le test lui-même. Lisez-le attentivement avant d’utiliser le test.

SnowsPenultimateNormalityTest certainement ses vertus, mais vous pouvez aussi vouloir regarder qqnorm .

 X <- rlnorm(100) qqnorm(X) qqnorm(rnorm(100)) 

Envisagez d’utiliser la fonction shapiro.test , qui effectue le test Shapiro-Wilks pour la normalité. J’en ai été content.

bibliothèque (DnE)

x <-rnorm (1000,0,1)

is.norm (x, 10,0.05)

Le test Anderson-Darling est également utile.

 library(nortest) ad.test(data) 

Lorsque vous effectuez un test, vous avez la probabilité de rejeter l’hypothèse nulle lorsque c’est vrai.

Voir le code R suivant:

 p=function(n){ x=rnorm(n,0,1) s=shapiro.test(x) s$p.value } rep1=replicate(1000,p(5)) rep2=replicate(1000,p(100)) plot(density(rep1)) lines(density(rep2),col="blue") abline(v=0.05,lty=3) 

Le graphique montre que si vous avez une taille d’échantillon petite ou grande, 5% des fois, vous avez une chance de rejeter l’hypothèse nulle quand elle est vraie (erreur de type I)

En plus de qqplots et du test Shapiro-Wilk, les méthodes suivantes peuvent être utiles.

Qualitatif:

  • histogramme par rapport à la normale
  • cdf par rapport à la normale
  • ggdensity plot
  • ggqqplot

Quantitatif:

  • tests de normalité des paquets nortest
  • tests de normalité des paquets normtest

Les méthodes qualificatives peuvent être produites en utilisant ce qui suit dans R:

 library("ggpubr") library("car") h <- hist(data, breaks = 10, density = 10, col = "darkgray") xfit <- seq(min(data), max(data), length = 40) yfit <- dnorm(xfit, mean = mean(data), sd = sd(data)) yfit <- yfit * diff(h$mids[1:2]) * length(data) lines(xfit, yfit, col = "black", lwd = 2) plot(ecdf(data), main="CDF") lines(ecdf(rnorm(10000)),col="red") ggdensity(data) ggqqplot(data) 

Un mot d'avertissement: n'appliquez pas aveuglément des tests. Une bonne compréhension des statistiques vous aidera à comprendre quand utiliser les tests et l’importance des hypothèses dans les tests d’hypothèses.