Usando el software R, se presentan algunas de las herramientas principales que se pueden utilizar para verificar la normalidad univariada en un conjunto de datos. Dichas herracmientas son:
plot():
gráfico de dispersión.qqnorm():
gráfico cuantil - cuantil.hist():
histograma de frecuencias relativas con línea de densidad.cor():
coeficiente de correlación de Pearson.Test de normalidad:
los test de normalidad más comunes.Ahora bien, considere el siguiente ejemplo:
La base de datos que se usará se encuentra alojada en la siguiente cuenta en Github.
bd <- read.table(file = "https://raw.githubusercontent.com/yuasaavedraco/yuasaavedraco.github.io/master/Bases%20de%20datos/Acopla.txt", header = TRUE)
Se observan las primeras observaciones de la base de datos, así:
head(bd)
Por consiguiente, se selecciona la variable p1
para verificar si ésta distribuye normal o no.
muestra <- bd[,2] ## Vector de cuantiles muestrales
Nota: también se pueden obtener las observaciones de la variable p1
usando bd$p1.
Antes de realizar el gráfico de dispersión se debe construir el vector de cuantiles muestrales y el vector de cuantiles teóricos, ésto se logra con el siguiente código en R.
n <- nrow(bd) ## Número de observaciones de la base de datos
prob <- (1:n - 0.5) / n ## Proporción a la izq del i-ésimo estadístico de orden
quanti <- quantile(muestra, prob) ## Cuantiles de la muestra correspondiente con prob. dadas
mu <- mean(muestra) ## Media muestral
desvi <- sd(muestra) ## Desviación estándar muestral
vcuan <- (quanti * desvi) + mu ## Vector de cuantiles teóricos
mues <- sort(muestra) ## Vector de cuantiles muestral ordenado de menor a mayor
Éste gráfico permite analizar si existe algún tipo de relación entre los cuantiles muestrales versus los cuantiles teóricos de la distribución que se espera (en este caso una normal univariada); dicha relación se debe presentar mediante la tendencia de los puntos en linea recta con inclinación de 45°.
plot(vcuan, mues, main = "Gráfico de dispersión", col="blue", ylim=c(0,1200), xlim=c(0,1200), ylab = "Cuantiles muestrales", xlab = "Cuantiles teóricos")
abline(0,1, col="red") ## Linea recta de referencia con inclinación de 45°.
Observe que los puntos no tienen una tendencia en linea recta con inclinación de 45°; por en ende, se sospecha que la variable p1
no tiene una distribución normal.
Este gráfico permite observar cuan cerca está la distribución de un conjunto de datos a alguna distribución ideal (en este caso la ditribución normal univariada) ó comparar la distribución de dos conjuntos de datos. Para obtener dicho gráfico, el paso que se debe realizar es la estandarización o normalización del conjunto de datos muestrales. El código en R es:
muestra <- bd[, 2] ## Vector de cuantiles muestrales.
mu <- mean(muestra) ## Media muestral.
desvi <- sd(muestra) ## Desviación estándar muestral.
estand <- (muestra - mu) / desvi ## Estandarización o normalización.
qqnorm(estand) ## Gráfico cuantil - cuantil.
abline(0,1,col="red") ## Linea recta de referencia con inclinación de 45°.
Observe que los puntos no tienen una tendencia en linea recta con inclinación de 45° ya que existen valores atípicos; esto es, un indicio de que la variable p1
no tiene una distribución normal.
El histograma es una representación gráfica de una variable en forma de barras, donde la superficie de cada barra es proporcional a la frecuencia de los valores representados.
hist(mues, col="blue", freq=FALSE, ylim = c(0, 0.040), main = "Histograma de los cuantiles muestrales", xlab = "")
lines(density(mues), col="red", lwd=2)
curve(dnorm(x, mean=mean(mues), sd=sd(mues)), from=0, to=120, add=TRUE, col="green", lwd=3)
legend("topright", col=c("green", "red"), legend=c("Densidad normal estimada", "Estimador de núcleo de la densidad"), lwd=2, bty = "n")
Se observa que la densidad del vector de cuantiles muestrales no se ajusta de la manera más adecuada a la densidad de la distribución normal estimada, a pesar de que tiene una forma acampanada, no cumple estrictamente con la simetría de una distribución normal.
Este coeficiente es un índice que puede utilizarse para medir el grado de relación lineal entre dos variables aleatorias cuantitaivas y continuas; en este caso, el interés se centra en medir dicho grado de asociación lineal entre los cuantiles muestrales y los cuantiles teóricos.
cor(x = vcuan, y = mues, method = "pearson")
## [1] 0.9999739
Con un coeficiente de correlacion lineal igual a 0.9999739, se concluye que los cuantiles muestrales están fuertemente correlacionados con los cuantiles teóricos.
Existen muchos test para evaluar la normalidad de un conjunto de datos; sin embargo, se utilizaran los más comunes:
La prueba de normalidad de Shapiro - Wilk se recomienda usar cuando se tienen muestras pequeñas, para obtenerla con el software R, use el siguiente código:
a <- shapiro.test(mues)
cat("El valor-P para la prueba de Shapiro-Wilk es", a$p.value, "que prueba la NO normalidad en los datos.")
## El valor-P para la prueba de Shapiro-Wilk es 2.295127e-14 que prueba la NO normalidad en los datos.
La prueba de normalidad de Kolmogorov-Smirnov se recomienda usar cuando se tienen muestras grandes, para obtenerla con el software R se debe instalar y cargar el paquete nortest.
# install.packages("nortest", dependencies = TRUE) ## Se instala una sola vez.
library(nortest) ## Se carga cada sección.
b <- lillie.test(mues)
cat("El valor-P para la prueba de illiefors (Kolmogorov-Smirnov) es", b$p.value, "que prueba la NO normalidad en los datos.")
## El valor-P para la prueba de illiefors (Kolmogorov-Smirnov) es 5.021723e-07 que prueba la NO normalidad en los datos.
Enseguida se mencionan otros cuatro test usuales para probar normalidad univariada usando el software R, estos son:
sf.test():
prueba Shapiro-Francia.ad.test():
prueba Anderson-Darling.cvm.test():
prueba Cramer-von Mises.pearson.test():
prueba Pearson chi-square.Iral, R., (2019). Notas Curso Introducción al Análisis Multivariado. Universidad Nacional de Colombia sede Medellín.
Correa, J., y González, N. (2002). Gráficos Estadísticos con R, Medellín, Colombia.