J'ai un ensemble de données avec la structure suivante:
a word | number of occurrence of a word in a document | a document id
Comment puis-je tester une distribution normale dans R? C'est probablement une question facile mais je suis un novice.
J'ai un ensemble de données avec la structure suivante:
a word | number of occurrence of a word in a document | a document id
Comment puis-je tester une distribution normale dans R? C'est probablement une question facile mais je suis un novice.
Réponses:
Si je comprends bien votre question, alors pour vérifier si les occurrences de mots dans un ensemble de documents suivent une distribution normale, vous pouvez simplement utiliser un test shapiro-wilk et quelques qqtrots. Par exemple,
## Generate two data sets
## First Normal, second from a t-distribution
words1 = rnorm(100); words2 = rt(100, df=3)
## Have a look at the densities
plot(density(words1));plot(density(words2))
## Perform the test
shapiro.test(words1); shapiro.test(words2)
## Plot using a qqplot
qqnorm(words1);qqline(words1, col = 2)
qqnorm(words2);qqline(words2, col = 2)
Les commandes qqplot donnent:
Vous pouvez voir que le second ensemble de données n'est clairement pas normal par les queues épaisses ( Plus d'infos ).
Dans le test de normalité Shapiro-Walk, la valeur p est grande pour le premier ensemble de données (> 0,9) mais très petite pour le deuxième ensemble de données (<0,01). Cela vous mènera à rejeter l'hypothèse nulle pour la seconde.
qqline
doit avoir une pente et une interception mu .
En supposant que votre jeu de données s'appelle words
et ait une counts
colonne, vous pouvez tracer l'histogramme pour avoir une visualisation de la distribution:
hist(words$counts, 100, col="black")
où 100 est le nombre de bacs
Vous pouvez également faire un tracé QQ normal en utilisant
qqnorm(words$counts)
Enfin, vous pouvez également utiliser le test de Shapiro-Wilk pour la normalité
shapiro.test(word$counts)
Bien que, regardez cette discussion: Test de normalité: «Essentiellement inutile?
Aucun test ne vous montrera que vos données ont une distribution normale - il ne pourra vous montrer que lorsque les données sont suffisamment incohérentes avec une normale pour que vous rejetiez la valeur null.
Mais les comptages ne sont pas normaux dans tous les cas, ce sont des entiers positifs - quelle est la probabilité qu'une observation d'une distribution normale prenne une valeur qui n'est pas un entier? (... c'est un événement de probabilité 1).
Pourquoi voudriez-vous tester la normalité dans ce cas? C'est évidemment faux.
[Dans certains cas, il n’est pas forcément important que vous sachiez que vos données ne sont pas normales. Les données réelles ne seront jamais (ou presque jamais) réellement tirées d'une distribution normale.]
Si vous avez vraiment besoin de faire un test, le test Shapiro-Wilk ( ?shapiro.test
) est un bon test général de normalité, largement utilisé.
Une façon plus formelle de considérer la normalité consiste à vérifier si le kurtosis et l'asymétrie sont significativement différents de zéro.
Pour ce faire, nous devons obtenir:
kurtosis.test <- function (x) {
m4 <- sum((x-mean(x))^4)/length(x)
s4 <- var(x)^2
kurt <- (m4/s4) - 3
sek <- sqrt(24/length(x))
totest <- kurt/sek
pvalue <- pt(totest,(length(x)-1))
pvalue
}
pour kurtosis, et:
skew.test <- function (x) {
m3 <- sum((x-mean(x))^3)/length(x)
s3 <- sqrt(var(x))^3
skew <- m3/s3
ses <- sqrt(6/length(x))
totest <- skew/ses
pt(totest,(length(x)-1))
pval <- pt(totest,(length(x)-1))
pval
}
pour Skewness.
Ces deux tests sont unilatéraux, vous devez donc multiplier la valeur p par 2 pour devenir bilatéral. Si votre valeur p dépasse 1, vous devrez utiliser 1-kurtosis.test () au lieu de kurtosis.test.
Si vous avez d'autres questions, vous pouvez m'envoyer un e-mail à l'adresse j.bredman@gmail.com.
kurtosis()
and skewness()
du paquet moments ? Les résultats utilisant des rnorm()
échantillons sont différents.
En utilisant le nortest
package de R, ces tests peuvent être effectués:
Effectuer le test de normalité Anderson-Darling
ad.test(data1)
Effectuer un test de normalité avec Cramér-von Mises
cvm.test(data1)
Effectuer le test du khi-deux de Pearson pour la normalité
pearson.test(data1)
Effectuer un test Shapiro-Francia pour la normalité
sf.test(data1)
De nombreux autres tests peuvent être effectués à l'aide du normtest
package. Voir la description sur
https://cran.r-project.org/web/packages/normtest/normtest.pdf
zipfR
package.