Effectuer un Test de normalité Shapiro-Wilk
je veux faire un Test de normalité Shapiro-Wilk. Mes données sont au format csv
. Il ressemble à ceci:
> heisenberg
HWWIchg
1 -15.60
2 -21.60
3 -19.50
4 -19.10
5 -20.90
6 -20.70
7 -19.30
8 -18.30
9 -15.10
cependant, quand je fais le test, je reçois:
> shapiro.test(heisenberg)
Error in `[.data.frame`(x, complete.cases(x)) :
undefined columns selected
pourquoi R ne sélectionne-t-il pas la bonne colonne et comment faire? Merci pour votre réponse!!!
3 réponses
Qu'est-shapiro.test à faire?
shapiro.test
tests hypothèse Nulle que "les échantillons proviennent d'une distribution Normale" contre le hypothèse alternative "les échantillons ne proviennent pas d'une distribution Normale".
Comment effectuer shapiro.test en R?
la page d'aide R pour ?shapiro.test
donne,
x - a numeric vector of data values. Missing values are allowed,
but the number of non-missing values must be between 3 and 5000.
Qui est, shapiro.test
s'attend à un numérique vecteur comme entrée, qui correspond à l'échantillon que vous souhaitez tester et c'est la seule entrée requise. Depuis que vous avez une donnée .section , vous devrez passer la colonne désirée comme entrée à la fonction comme suit:
> shapiro.test(heisenberg$HWWIchg)
# Shapiro-Wilk normality test
# data: heisenberg$HWWIchg
# W = 0.9001, p-value = 0.2528
de l'Interprétation des résultats de shapiro.test:
tout d'Abord, je fortement vous suggérons de lire cette excellente réponse de Ian Boursiers sur testing for normality
.
comme indiqué ci-dessus, le shapiro.test
vérifie l'hypothèse nulle que les échantillons proviennent d'une distribution normale. Cela signifie que si votre valeur p < = 0,05 , alors vous rejeter l'hypothèse nulle que la échantillons proviennent d'une distribution Normale. Comme Ian Fellows l'a bien dit, vous testez contre l'hypothèse de la normalité ". En d'autres termes (corrigez-moi si je me trompe), il serait beaucoup mieux si on teste l'hypothèse NULLE que les échantillons ne pas proviennent d'une distribution Normale. Pourquoi? Parce que, rejeter une hypothèse nulle est pas la même que d'accepter le hypothèse alternative.
dans le cas de l'hypothèse nulle de shapiro.test
, une valeur p <= 0,05 rejetterait l'hypothèse nulle que les échantillons proviennent de la distribution normale. Pour mettre lâchement, il est une chance rare que les échantillons proviennent d'une distribution normale. L'effet secondaire de ce test d'hypothèse est que cette rares " chance arrive très rarement . Pour illustrer, prenez pour exemple:
set.seed(450)
x <- runif(50, min=2, max=4)
shapiro.test(x)
# Shapiro-Wilk normality test
# data: runif(50, min = 2, max = 4)
# W = 0.9601, p-value = 0.08995
ainsi, cet échantillon (particulier) runif(50, min=2, max=4)
provient d'une distribution normale selon ce test. Ce que j'essaie de dire, c'est qu'il y a de nombreux cas dans lesquels les exigences "extrêmes" (p < 0,05) ne sont pas satisfaites, ce qui conduit à l'acceptation de "l'hypothèse nulle" la plupart du temps, ce qui pourrait être trompeur.
un autre numéro que je voudrais citer ici de @PaulHiemstra sous Commentaires sur les effets sur grande taille de l'échantillon:
un autre problème avec le test de Shapiro-Wilk est que lorsque vous lui donnez plus de données, les chances que l'hypothèse nulle soit rejetée deviennent plus grandes. Donc, ce qui se passe est que pour de grandes quantités de données, même de très petits écarts par rapport à la normalité peuvent être détectés, conduisant au rejet de l'événement d'hypothèse nulle bien que, pour des fins pratiques, les données soient plus que la normale.
bien qu'il souligne également que la limite de taille des données de R protège un peu cela:
heureusement shapiro.test protège l'utilisateur de l'effet décrit ci-dessus en limitant la taille des données à 5000.
si l'hypothèse nulle était l'inverse, c'est-à-dire que les échantillons ne proviennent pas d'une distribution normale, et que vous obtenez une valeur p < 0,05 , alors vous concluez qu'il s'agit de très rare que ces échantillons ne proviennent d'une distribution normale (rejeter l'hypothèse nulle). Il est fort probable que les échantillons soient normalement distribués (bien que certains statisticiens puissent ne pas aimer cette façon d'interpréter). Je crois que C'est ce que Ian Fellows a aussi essayé d'expliquer dans son billet. S'il vous plaît, corrigez-moi si je me suis trompé!
@PaulHiemstra commente aussi des situations pratiques (exemple de régression) lorsque l'on rencontre ce problème de test de normalité:
dans la pratique, si une analyse suppose une normalité, par exemple lm, Je ne ferais pas ce test de Shapiro-Wilk, mais faire l'analyse et regarder des tracés de diagnostic du résultat de l'analyse pour juger si des hypothèses de l'analyse a violé trop. Pour la régression linéaire en utilisant lm ceci est fait en regardant certaines des parcelles de diagnostic que vous obtenez en utilisant la parcelle(lm()). Les statistiques ne sont pas une série d'étapes qui donnent quelques chiffres (Hé p < 0,05!) mais nécessite beaucoup d'expérience et d'habileté pour juger comment analyser vos données correctement.
ici, je trouve la réponse de Ian Fellows au commentaire de Ben Bolker sous la même question déjà liée ci-dessus également (si pas plus) informatif:
pour régression linéaire,
Ne pas à vous soucier de la normalité. La CLT prend rapidement le relais et si vous avez tous les échantillons sauf les plus petits et un histogramme de regard même un peu raisonnable, vous êtes très bien.
S'inquiètent des variances inégales (hétéroskédasticité). Je m'en inquiète au point d'utiliser (presque) les tests HCCM par défaut. Un tracé à l'échelle donnera une idée de ce qui est cassé, mais pas toujours. De plus, il n'y a pas de raison a priori de supposer que les écarts dans la plupart des cas.
valeurs aberrantes. Une distance de cuisson > 1 est un motif raisonnable de préoccupation.
ce sont mes pensées (FWIW).
J'espère que ça éclaircira un peu les choses.
vous appliquez shapiro.test () à une base de données au lieu de la colonne. Essayez ce qui suit:
shapiro.test(heisenberg$HWWIchg)
vous n'avez pas spécifié les colonnes exactes (données) pour tester la normalité. Utilisez plutôt
shapiro.test(heisenberg$HWWIchg)