52 votos

Cómo realizar una prueba de uso de R para ver si los datos siguen una distribución normal

Tengo un conjunto de datos con la siguiente estructura:

a word | number of occurrence of a word in a document | a document id 

¿Cómo puedo realizar una prueba de distribución normal en R? Probablemente es una pregunta fácil, pero yo soy un R novato.

50voto

Eggs McLaren Puntos 945

Si entiendo tu pregunta correctamente, entonces, para probar si la palabra ocurrencias en un conjunto de documentos sigue una distribución Normal, se puede utilizar un test de shapiro-Wilk y algunos qqplots. Por ejemplo,

## 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)

El qqplot comandos: alt text

Se puede ver que el segundo conjunto de datos está claro que no es Normal.

17voto

Kevin Ballard Puntos 88866

Suponiendo que el conjunto de datos se llama words e tiene counts de columna, puede trazar el histograma para tener una visualización de la distribución:

hist(words$counts, 100, col="black")

donde 100 es el número de contenedores

Usted también puede hacer un normal Q-Q plot utilizando

qqnorm(words$counts)

Por último, también se puede utilizar el test de Shapiro-Wilk para la normalidad

shapiro.test(word$counts)

Aunque, mira en esta discusión: la Normalidad de las Pruebas: "Prácticamente Inútil?'

17voto

AdamSane Puntos 1825

No existe ninguna prueba que mostrará al usuario que sus datos tiene una distribución normal - sólo será capaz de demostrar que cuando los datos es lo suficientemente incompatible con el normal que te iba a rechazar la nula.

Pero la cuenta no son normales en cualquier caso, son enteros positivos - ¿cuál es la probabilidad de que una observación a partir de una distribución normal tendrá un valor que no es un número entero?

¿Por qué la prueba de normalidad en este caso?

10voto

MikkoP Puntos 125

Una manera más formal de mirar a la normalidad es probando si la curtosis y la asimetría son significativamente diferentes de cero.

Para ello, tenemos que conseguir:

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 
}

para la curtosis, y:

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
}

por la Asimetría.

Ambas son pruebas de una cola, por lo que tendrás que multiplicar el valor de p por 2 a convertirse en dos de cola. Si el p-valor sea mayor a uno necesita usar 1-curtosis.de prueba() en lugar de la curtosis.prueba.

Si usted tiene cualquier otra pregunta puedes enviarme un correo electrónico a j.bredman@gmail.com

5voto

Alexander Gladysh Puntos 682

Además del test de Shapiro-Wilk de las estadísticas de paquete, el nortest paquete (disponible en CRAN) proporciona otras pruebas de normalidad.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X