Ho un set di dati con la seguente struttura:
a word | number of occurrence of a word in a document | a document id
Come posso eseguire un test per la distribuzione normale in R? Probabilmente è una domanda facile ma io sono un principiante R.
Ho un set di dati con la seguente struttura:
a word | number of occurrence of a word in a document | a document id
Come posso eseguire un test per la distribuzione normale in R? Probabilmente è una domanda facile ma io sono un principiante R.
Risposte:
Se capisco correttamente la tua domanda, quindi per verificare se le occorrenze di parole in una serie di documenti seguono una distribuzione normale, puoi semplicemente usare un test shapiro-Wilk e alcuni qqplot. Per esempio,
## 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)
I comandi qqplot danno:
Puoi vedere che il secondo set di dati non è chiaramente normale per le code pesanti ( Ulteriori informazioni ).
Nel test di normalità di Shapiro-Walk, il valore p è grande per il primo set di dati (> .9) ma molto piccolo per il secondo set di dati (<.01). Questo ti porterà a respingere l'ipotesi nulla per il secondo.
qqline
devono avere 1 pendenza e intercettazione mu .
Supponendo che il set di dati sia chiamato words
e abbia una counts
colonna, è possibile tracciare l'istogramma per visualizzare la distribuzione:
hist(words$counts, 100, col="black")
dove 100 è il numero di bin
Puoi anche fare un normale diagramma QQ usando
qqnorm(words$counts)
Infine, puoi anche usare il test Shapiro-Wilk per la normalità
shapiro.test(word$counts)
Tuttavia, guarda questa discussione: Test di normalità: "Essenzialmente inutile?"
Nessun test ti mostrerà che i tuoi dati hanno una distribuzione normale - sarà in grado di mostrarti solo quando i dati sono sufficientemente incoerenti con un normale da rifiutare il null.
Ma i conteggi non sono normali in ogni caso, sono numeri interi positivi: qual è la probabilità che un'osservazione da una distribuzione normale prenda un valore che non sia un numero intero? (... questo è un evento di probabilità 1).
Perché testeresti la normalità in questo caso? È ovviamente falso.
[In alcuni casi potrebbe non essere necessariamente importante sapere che i tuoi dati non sono effettivamente normali. I dati reali non verranno mai (o quasi mai) effettivamente estratti da una normale distribuzione.]
Se hai davvero bisogno di fare un test, il test Shapiro-Wilk ( ?shapiro.test
) è un buon test generale di normalità, ampiamente utilizzato.
Un modo più formale di guardare alla normalità è testare se la curtosi e l'asimmetria sono significativamente diverse da zero.
Per fare questo, dobbiamo ottenere:
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
}
per curtosi e:
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
}
per Skewness.
Entrambi questi test sono a una coda, quindi dovrai moltiplicare il valore p per 2 per diventare a due code. Se il tuo valore p diventa maggiore di uno, dovrai usare 1-kurtosis.test () invece di kurtosis.test.
Se hai altre domande puoi scrivermi a j.bredman@gmail.com
kurtosis()
e momenti ? I risultati usando i campioni sono diversi. skewness()
rnorm()
Utilizzando il nortest
pacchetto di R, questi test possono essere condotti:
Eseguire il test di normalità Anderson-Darling
ad.test(data1)
Eseguire il test di Cramér-von Mises per la normalità
cvm.test(data1)
Eseguire il test chi-quadrato di Pearson per la normalità
pearson.test(data1)
Esegui il test Shapiro-Francia per la normalità
sf.test(data1)
Molti altri test possono essere eseguiti utilizzando il normtest
pacchetto. Vedere la descrizione su
https://cran.r-project.org/web/packages/normtest/normtest.pdf
zipfR
pacchetto.