Los análisis de normalidad tienen como objetivo analizar si la distribución de frecuencias (relativas) de una variable cuantitativa en un poblacion es una distribución Normal con la misma media y desviación típica que la variable.
Pueden diferenciarse tres grandes métodos para analizar la normalidad: los basados en representaciones gráficas, los basados en métodos analíticos y los basados en contrastes de hipótesis.
Consideremos una población o grupo de referencia \(G=\lbrace e_1, e_2,...,e_N \rbrace\)
Tenemos una muestra \(g = \lbrace \epsilon_1,\epsilon_2,...,\epsilon_n \rbrace\) de \(n\) elementos de \(G\) tal que:
Nos centramos en variables cuantitativas
\(X_{k,G}\) es la variable \(X_k\) medida sobre la poblacion \(G\)
\(X_k=(x_{1k},...,x_{nk})^t\) es la variable \(X_k\) medida sobre la muestra \(g\) de \(G\), lo cual implica que \(x_{ik}\) es el valor de \(X_k\) para \(\epsilon_i\)
Conocemos \(X_k\) pero no \(X_{k,G}\)
Observación
Se podria usar la notacion \(X_{k,g}\) para denotar a \(X_k\) medida sobre la muestra \(g\) , pero se ha optado por usar simplemente \(X_k\) por simplificar y seguir una notacion mas estandar.
Se aceptará que la distribución de \(X_{k,G}\) es una distribución Normal solo si hay evidencia estadistica significativa en los datos muestrales a favor de ello.
Es decir:
Se acepta que la distribución de \(X_{k,G}\) es una distribución Normal \(\Leftrightarrow\) \(X_k\) tiene una distribucion significativamente Normal.
Este principio se basa en la idea de los contrastes de hipotesis, para aceptar una hipotesis estadistica a nivel poblacional tiene que haber suficiente evidencia de que esa hipotesis se cumple a nivel muestral. Cuanta mas evidencia haya en los datos muestrales, más facil será aceptar la hipotesis.
Cada metodo que aqui veremos define un criterio para determinar si la distribucion de \(X_k\) es significativamente Normal, y por tanto hay evidencia estadsitica significativa como para aceptar que \(X_{k,G}\) tiene una distribucion Normal.
Este metodo sigue el siguiente criterio:
\(X_k\) tiene una distribucion significativamente Normal \(\Leftrightarrow\) El perfil (la forma) del histograma de \(X_k\) es aproximadamente igual a la curva de densidad de una v.a. \(N(\overline{X_k}, \sigma(X_k))\)
El metodo del histograma para analizar normalidad consiste en lo siguiente:
Se representa el histograma de \(X_k\)
Se superpone la curva de densidad de una v.a. \(N(\overline{X_k}, \sigma(X_k))\) al histograma representado en el paso anterior.
Si el perfil del histograma y la curva de densidad normal son aproximadamente iguales \(\Rightarrow\) \(X_k\) tiene una distribucion significativamente Normal \(\Rightarrow\) hay evidencia estadistica significativa de que la distribucion de \(X_{k,G}\) es una distibución Normal. Y si no, no.
Problemas:
El punto 3 es particularmente problematico, puesto que este método es un método eminentemente visual, y no se especifica un criterio objetivo para determinar cuando el perfil del histograma y la curva de densidad normar son “aproximadamente iguales”. Es tarea del analista decidir sobre esta cuestión.
Cargamos los datos con los que expondremos los ejemplos en R:
library(readr)
Altura_por_Paises_2022 <- read_csv("Height of Male and Female by Country 2022.csv")
head(Altura_por_Paises_2022)
| Rank | Country Name | Male Height in Cm | Female Height in Cm | Male Height in Ft | Female Height in Ft |
|---|---|---|---|---|---|
| 1 | Netherlands | 183.78 | 170.36 | 6.03 | 5.59 |
| 2 | Montenegro | 183.30 | 169.96 | 6.01 | 5.58 |
| 3 | Estonia | 182.79 | 168.66 | 6.00 | 5.53 |
| 4 | Bosnia and Herzegovina | 182.47 | 167.47 | 5.99 | 5.49 |
| 5 | Iceland | 182.10 | 168.91 | 5.97 | 5.54 |
| 6 | Denmark | 181.89 | 169.47 | 5.97 | 5.56 |
Generamos el histograma de la variable “Male Height in Cm” y superponemos la curva de densidad de una v.a Normal con media y desviacion típica iguales a la de la varible “Male Height in Cm”:
library(tidyverse)
ggplot(data = Altura_por_Paises_2022, mapping = aes(x = Altura_por_Paises_2022$`Male Height in Cm`)) +
geom_histogram(aes(y =..density..), color="black", fill="bisque3", position = 'identity', bins = 45) +
stat_function(
fun = dnorm,
args = list(mean = mean(Altura_por_Paises_2022$`Male Height in Cm`), sd = sd(Altura_por_Paises_2022$`Male Height in Cm`)),
lwd = 1,
col = 'red2' ) +
scale_y_continuous( n.breaks = 15 )+
scale_x_continuous(n.breaks = 15)+
labs(x = "Male Height in Cm", y = "Frecuencia Relativa")
Segun mi criterio (realizando aqui la funcion del analista), el perfil del histograma y la curva de densidad normal no son aproximadamente iguales, hay demasiada diferencia como para considerar que \(X_k\) tiene una distribucion significativamente normal. Por lo que no habria evidencia estadistica significativa como para aceptar que \(X_{k,G}\) tiene una distribucion normal.
Generamos otro grafico como el anterior, pero usando como intervalos los obtenidos a traves de la regla de Scott (ver en https://rpubs.com/FabioScielzoOrtiz/Estadistica_Descriptiva_en_R ), que en este caso son menos intervalos que los del gráfico anterior.
s=sd(Altura_por_Paises_2022$`Male Height in Cm`)
n=length(Altura_por_Paises_2022$`Male Height in Cm`)
max=max(Altura_por_Paises_2022$`Male Height in Cm`)
min=min(Altura_por_Paises_2022$`Male Height in Cm`)
#Amplitud teorica
At = 3.5*s*n^-(1/3)
#Numero de intervalos
lambda = ceiling((max-min)/At)
#Amplitud de los intervalos
A = ceiling((max-min)/lambda)
#Primer extremo
L1 = min
#Vector con los extremos de los intervalos
L = L1 + 0:lambda * A
library(tidyverse)
ggplot(data = Altura_por_Paises_2022, mapping = aes(x = Altura_por_Paises_2022$`Male Height in Cm`)) +
geom_histogram(aes(y =..density..), color="black", fill="bisque3", position = 'identity', breaks=L) +
stat_function(
fun = dnorm,
args = list(mean = mean(Altura_por_Paises_2022$`Male Height in Cm`), sd = sd(Altura_por_Paises_2022$`Male Height in Cm`)),
lwd = 1.5,
col = 'red2' ) +
scale_y_continuous( n.breaks = 15 )+
scale_x_continuous(n.breaks = 15)+
labs(x = "Male Height in Cm", y = "Frecuencia Relativa")
Se puede ver que al reducir el numero de intervalos el perfil del
histograma se aproxima mas a la curva de densidad normal.
Veamos ahora cual sería el resultado si simulamos valores de un v.a. Normal con media y desviación típica igual a la media y desviación tipica de la variable “Male Height in Cm”, y representamos su histograma, y ademas superponemos la curva normal como hicimos antes.
set.seed(123)
df<- tibble( Variable_Normal_Simulada = rnorm(n=200000, mean=mean(Altura_por_Paises_2022$`Male Height in Cm`), sd=sd(Altura_por_Paises_2022$`Male Height in Cm`)) )
knitr::kable(head(df) , align="c")
| Variable_Normal_Simulada |
|---|
| 170.3148 |
| 171.9497 |
| 180.8044 |
| 173.4380 |
| 173.7290 |
| 181.5783 |
ggplot(data = df , mapping = aes(x = rnorm(n=200000, mean=mean(Altura_por_Paises_2022$`Male Height in Cm`), sd=sd(Altura_por_Paises_2022$`Male Height in Cm`)))) +
geom_histogram(aes(y =..density..), color="black", fill="bisque3", position = 'identity', bins=) +
stat_function(
fun = dnorm,
args = list(mean = mean(rnorm(n=15000, mean=mean(Altura_por_Paises_2022$`Male Height in Cm`), sd=sd(Altura_por_Paises_2022$`Male Height in Cm`))), sd = sd(rnorm(n=15000, mean=mean(Altura_por_Paises_2022$`Male Height in Cm`), sd=sd(Altura_por_Paises_2022$`Male Height in Cm`)))),
lwd = 2,
col = 'red2'
)+
scale_y_continuous( n.breaks = 15 )+
scale_x_continuous(n.breaks = 15)+
labs(x = "Variable Normal Simulada", y = "Frecuencia Relativa")
En este caso es claro que el perfil del historama y la curva de densidad normal son aproximadamente iguales, como era de esperar.
Observaciones:
Este es un método visual y muy aproximado, en el sentido de que depende del analista determinar si la curva de densidad normal se asemeja lo suficiente al perfil del histograma de la variable considerada como para considerarlos aproximadamente iguales.
Este método es aplicable a otras distribuciones mas allá de la distribución Normal. El metodo es el mismo pero cambiando la curva de densidad Normal por la de la distribución que se quiera analizar
Este metodo sigue el siguiente criterio:
\(X_k\) tiene una distribucion significativamente Normal \(\Leftrightarrow\) Los cuantiles de la variable \(X_k\) son aproximadamente iguales a los cuantiles de una v.a. \(N(\overline{X_k} , \sigma(X_k))\)
El metodo del grafico Q-Q-Norm para analizar normalidad consiste en lo siguiente:
Se representa el grafico Q-Q-Norm de \(X_k\)
Si los puntos rojos están proximos a la recta negra \(\Rightarrow\) Los cuantiles de la variable \(X_k\) son aproximadamente iguales a los cuantiles de una v.a. \(N(\overline{X_k} , \sigma(X_k))\) \(\Rightarrow\) \(X_k\) tiene una distribucion aproximadamente Normal \(\Rightarrow\) Hay evidencia estadistica significativa de que la distribucion de \(X_{k,G}\) es una distibución Normal. Y si no, no.
Para entender este criterio primero hay que entender lo que es un gráfico Q-Q-Norm.
ggplot(Altura_por_Paises_2022, aes(sample = Altura_por_Paises_2022$`Male Height in Cm`) ) +
stat_qq( color="red2") + stat_qq_line(color="black", size=0.6) +
scale_y_continuous( n.breaks = 15 )+
scale_x_continuous(n.breaks =20)+
xlab("Cuantiles teoricos N(0,1)")+
ylab("Cuantiles variable Altura Media Hombres por Paises")
La recta negra representada en el grafico
Q-Q-Norm es tal que los puntos de esta recta son de la forma \(( x , y )\) , donde: \[\begin{equation*}
x=Q(p \ ,\ N(0,1)) \ , \ y=Q \left( p \
,\ N(\overline{X_k}, \sigma(X_k)) \right) \ , \ con \ p \in [0,1]
\end{equation*}\]
Los puntos rojos representados en el gráfico son de la forma
\(( x , y )\) , donde: \[\begin{equation*}
x= Q( p , N(0,1) ) \ , \ y=Q(p, X_k)
\end{equation*}\]
Las propiedades anteriores anteriores implican que:
El analisis de Normalidad basado en los graficos Q-Q-Norm se basa en esta última conclusión. El criterio antes expuesto tiene su fundamento teorico en este último hecho.
Como consideramos que el entendimiento de los graficos Q-Q-Norm es algo complicado, al menos en un principio, se va a desarrollar otro grafico mas intuitivo, a mi juicio, que tambien puede usarse para realizar un análisis de normalidad.
Este gráfico es una reformulacion del grafico Q-Q-Norm con una interpretacion visual mas sencilla, a mi parecer.
Es un gráfico de puntos tal que para cada \(p \in \mathit{A} \subset [0,1]\) se grafica el par de puntos \(x=\left( p , Q(p, X_k)\right)\) y \(y= ( p , Q(p, N(\overline{X_k}, \sigma(X_k))) )\)
Lo interesante de este grafico es que es facil ver visualmente si los cuantiles de la variable \(X_k\) estan o no próximos a los cuantiles de una v.a. Normal con media y desviación tipica igual a la de la variable de interés.
Este metodo sigue el siguiente criterio:
\(X_k\) tiene una distribucion significativamente Normal \(\Leftrightarrow\) Los cuantiles de la variable \(X_k\) son aproximadamente iguales a los cuantiles de una v.a. \(N(\overline{X_k} , \sigma(X_k))\)
El metodo del grafico de Cuantiles Comparados para analizar normalidad consiste en lo siguiente:
Se representa el grafico de cuantiles comparados para \(X_k\)
Si los dos tipos de puntos (diferenciados por colores) estan generalmente proximos \(\Rightarrow\) Los cuantiles de la variable \(X_k\) son aproximadamente iguales a los cuantiles de una v.a. \(N(\overline{X_k} , \sigma(X_k))\) \(\Rightarrow\) \(X_k\) tiene una distribucion significativamente Normal \(\Rightarrow\) Hay evidencia estadistica significativa de que la distribucion de \(X_{k,G}\) es una distibución Normal. Y si no, no.
Vamos a realizar este grafico para dos casos particulares de \(\mathit{A}\).
cuantiles_normales <- quantile(rnorm(2000000 , mean=mean(Altura_por_Paises_2022$`Male Height in Cm`), sd=sd(Altura_por_Paises_2022$`Male Height in Cm`)) , seq(0, 1 , by=0.05) )
cuantiles_variable <- quantile( Altura_por_Paises_2022$`Male Height in Cm` , seq(0, 1 , by=0.05))
orden_cuantiles <- c(seq(0, 1 , by=0.05), seq(0, 1 , by=0.05) )
cuantiles <- c(cuantiles_normales , cuantiles_variable)
dff<-tibble( orden_cuantiles , cuantiles, tipo=c(rep("Normal", length(cuantiles_normales)) , rep("Variable", length(cuantiles_variable))) )
knitr::kable(head(df) , align="c")
| Variable_Normal_Simulada |
|---|
| 170.3148 |
| 171.9497 |
| 180.8044 |
| 173.4380 |
| 173.7290 |
| 181.5783 |
ggplot(data = dff , aes(x = orden_cuantiles, y = cuantiles, color = tipo))+
geom_point( ) +
scale_y_continuous( n.breaks = 15 )+
scale_x_continuous(n.breaks =15)+
xlab("Orden del cuantil")+
ylab("Cuantiles") +
scale_color_manual(breaks = c("Normal", "Variable"),
values=c("red", "black" ))
En este caso \(X_k=\)“Male Height in Cm”
Los puntos rojos son \(( \ p \ , \ Q(p, N(\overline{X_k}, \sigma(X_k))) \ )\), para \(p \in\) seq(0, 1 , by=0.05)
Los puntos negros son \(( \ p , Q(p, X_k) \ )\), para \(p \in\) seq(0, 1 , by=0.05)
Como puede verse hay bastante similitud entre los cuantiles de la variable de interés y los de la variable normal simulada con media y desviacion tipica igual a la de la variable de interés.
cuantiles_normales <- quantile(rnorm(2000000 , mean=mean(Altura_por_Paises_2022$`Male Height in Cm`), sd=sd(Altura_por_Paises_2022$`Male Height in Cm`)) , seq(0, 1 , by=0.005) )
cuantiles_variable <- quantile( Altura_por_Paises_2022$`Male Height in Cm` , seq(0, 1 , by=0.005))
orden_cuantiles <- c(seq(0, 1 , by=0.005), seq(0, 1 , by=0.005) )
cuantiles <- c(cuantiles_normales , cuantiles_variable)
df<-tibble( orden_cuantiles , cuantiles, tipo=c(rep("Normal", length(cuantiles_normales)) , rep("Variable", length(cuantiles_variable))) )
knitr::kable(head(df) , align="c")
| orden_cuantiles | cuantiles | tipo |
|---|---|---|
| 0.000 | 150.0878 | Normal |
| 0.005 | 160.3440 | Normal |
| 0.010 | 161.5781 | Normal |
| 0.015 | 162.3279 | Normal |
| 0.020 | 162.9134 | Normal |
| 0.025 | 163.3804 | Normal |
ggplot(data = df , aes(x = orden_cuantiles, y = cuantiles, color = tipo))+
geom_point( ) +
scale_y_continuous( n.breaks = 15)+
scale_x_continuous(n.breaks =15)+
xlab("Orden del cuantil")+
ylab("Cuantiles") +
scale_color_manual(breaks = c("Normal", "Variable"),
values=c("red", "black" ))
En este caso \(X_k=\)“Male Height in Cm”
Los puntos rojos son \(( \ p , Q(p, N(\overline{X_k}, \sigma(X_k))) \ )\), para \(p \in\) seq(0, 1 , by=0.005)
Los puntos negros son \(( \ p , Q(p, X_k) \ )\), para \(p \in\) seq(0, 1 , by=0.005)
Como puede verse hay bastante similitud entre los cuantiles de la variable de interés y los de la variable normal simulada con media y desviacion tipica igual a la de la variable de interés. Por lo que segun este metodo podria considerarse que la distribucion de \(X_k\) es significativamente Normal, y con ello aceptarlo a nivel poblacional.
Observación:
seq(0, 1 , by=0.05)
## [1] 0.00 0.05 0.10 0.15 0.20 0.25 0.30 0.35 0.40 0.45 0.50 0.55 0.60 0.65 0.70
## [16] 0.75 0.80 0.85 0.90 0.95 1.00
seq(0, 1 , by=0.005)[1:25]
## [1] 0.000 0.005 0.010 0.015 0.020 0.025 0.030 0.035 0.040 0.045 0.050 0.055
## [13] 0.060 0.065 0.070 0.075 0.080 0.085 0.090 0.095 0.100 0.105 0.110 0.115
## [25] 0.120
Vamos a generar un grafico en el que puedan compararse las frecuencias relativas de la variable de interes y una variable normal simulada con misma media y desviacion tipica que la variable de interés.
Este metodo sigue el siguiente criterio:
\(X_k\) tiene una distribucion significativamente Normal \(\Leftrightarrow\) Las frecuencias relativas de la variable \(X_k\) son aproximadamente iguales a las frecuencias relativas de una v.a. \(N(\overline{X_k} , \sigma(X_k))\)
El metodo del gráfico de comparación de frecuencias relativas para analizar normalidad consiste en lo siguiente:
Se representa el grafico de comparación de frecuencias relativas para \(X_k\)
Si los dos tipos de puntos (diferenciados por colores) estan generalmente proximos \(\Rightarrow\) Las frecuencias relativas de la variable \(X_k\) son aproximadamente iguales a las de una v.a. \(N(\overline{X_k} , \sigma(X_k))\) \(\Rightarrow\) \(X_k\) tiene una distribucion significativamente Normal \(\Rightarrow\) Hay evidencia estadistica significativa de que la distribucion de \(X_{k,G}\) es una distibución Normal. Y si no, no.
Para ello usaremos la siguiente funcion, que fue creada a proposito de mi articulo https://rpubs.com/FabioScielzoOrtiz/Estadistica_Descriptiva_en_R , la cual permite calcular las frecuencias relativas de una variable en una serie de intervalos, entre otras cosas:
Tabla_Frecuencias <- function(X, V1 ,p1 ){
tabla<- matrix(NA, nrow=p1+1, ncol= 4 )
X<- cbind(X, V1)
for(i in 0:p1){
tabla[i+1, 1 ] <- dim( ( X %>% filter(V1==i ) ) )[1]
}
for(i in 0:p1){
tabla[i+1, 2 ] <- ( dim( ( X %>% filter(V1==i ) ) )[1] / dim(X)[1] )
}
for(i in 0:p1){
tabla[i+1, 3] <- cumsum(tabla[1:(i+1) ,1])[i+1]
}
for(i in 0:p1){
tabla[i+1, 4] <- cumsum(tabla[1:(i+1) ,2])[i+1]
}
rownames(tabla)<-0:p1
colnames(tabla)<-c("F.Abs","F.Rel", "F.Abs.Cum","F.Rel.Cum")
tabla <- as.data.frame(tabla)
return(tabla)
}
Creamos 45 intervalos, que son con los que categorizaremos la variable cuantitativa de interés (Altura_Hombres), para ello usamos la regla de Scott modificada (ver en https://rpubs.com/FabioScielzoOrtiz/Estadistica_Descriptiva_en_R) que permite elegir el numero de intervalos:
Altura_Hombres <- Altura_por_Paises_2022$`Male Height in Cm`
s=sd(Altura_Hombres)
n=length(Altura_Hombres)
max=max(Altura_Hombres)
min=min(Altura_Hombres)
#Numero de intervalos --> 45
#Amplitud de los intervalos
A = ceiling((max-min)/45)
#Primer extremo
L1 = min - 5
#Vector con los extremos de los intervalos
( L = L1 + 0:45 * A )
## [1] 155.13 156.13 157.13 158.13 159.13 160.13 161.13 162.13 163.13 164.13
## [11] 165.13 166.13 167.13 168.13 169.13 170.13 171.13 172.13 173.13 174.13
## [21] 175.13 176.13 177.13 178.13 179.13 180.13 181.13 182.13 183.13 184.13
## [31] 185.13 186.13 187.13 188.13 189.13 190.13 191.13 192.13 193.13 194.13
## [41] 195.13 196.13 197.13 198.13 199.13 200.13
Calculamos las frecuencias relativas
set.seed(666)
variable_normal <- rnorm(200000, mean = mean(Altura_Hombres), sd = sd(Altura_Hombres))
a<-(cut(variable_normal, breaks = L , include.lowest = T, labels=F))
variable_normal_categorizada <- a-1
df<- data.frame(variable_normal_categorizada)
Frecuencias_Relativas_Normal <- Tabla_Frecuencias(df, variable_normal_categorizada, p1=44)$F.Rel
df2<- data.frame(Frecuencias_Relativas_Normal, intervalo=1:45)
##########################################################################################################
b<-(cut(Altura_Hombres, breaks = L , include.lowest = T, labels=F))
altura_hombres_categorizada <- b-1
df3<- data.frame(altura_hombres_categorizada)
Frecuencias_Relativas_Altura_Hombres <- Tabla_Frecuencias(df3, altura_hombres_categorizada, p1=44)$F.Rel
##########################################################################################################
df_completo <- data.frame( Frecuencias_Relativas=c(Frecuencias_Relativas_Altura_Hombres, Frecuencias_Relativas_Normal), intervalo=rep(1:45, 2), tipo=c(rep("Variable de interes",45),rep("Variable Normal",45)))
library(tidyverse)
ggplot(data = df_completo, aes(y=Frecuencias_Relativas, x=intervalo, color=tipo)) +
geom_point()+
geom_line()+
scale_y_continuous( n.breaks = 15 )+
scale_x_continuous(n.breaks = 15)+
labs(x = "Intervalos", y = "Frecuencia Relativa")
En el grafico se pueden ver las frecuencias relativas de la variable cuantitativa de interes (Altura_Hombres) y la variable Normal simulada , en los mismos intervalos. Esto permite analizar visualmente la disparidad o semejanza de las frecuencias relativas en el caso de la variable original frente al caso de que la variable tuviese distribucion normal.
Queda a ojo del analista decidir si las frecuencias relativas de la variable de interes y la variable normal estan suficientemente proximas como para considerarlas aproximadamente iguales y con ello considerar que la variable de interes tiene una distribucion significativamente normal.
El coeficiente de asimetria de Fisher de la variable cuantitativa \(X_k\) es:
\[\begin{gather*} Asimetria(X_k) = \dfrac{\overline{x_{k}}_{3}}{\sigma(X_k)^{3}} \end{gather*}\]donde: \[\begin{gather*} \overline{x_{k}}_{3}=\dfrac{1}{n}\sum_{i=1}^{n} (x_{ik})^{3} \end{gather*}\]
El coeficiente de asimetria de Fisher mide el grado de simetria de la distribucion de frecuencias de una variable respecto de su media aritmética.
Si \(Asimetria(X_k) > 0\) \(\Rightarrow\) la distribución de \(X_k\) es asimétrica a la derecha.
Si \(Asimetria(X_k) <0\) \(\Rightarrow\) la distribución de \(X_k\) es asimétrica a la izquierda.
Si la distribución es simétrica respecto de la media \(\Rightarrow\) \(Asimetria(X_k)=0\) . Pero el recíproco no es cierto.
Sea \(X_k\) una variable estadistica,
Si la distribucion de frecuencias de \(X_k\) es Normal \(\Rightarrow\) \(Asimetria(X_k)=0\)
Si \(Asimetria(X_k)\neq 0\) \(\Rightarrow\) la distribucion de frecuencias de \(X_k\) no es Normal.
En base a lo anterior se establece el siguiente criterio de normalidad:
Si \(\mid Asimetria(X_k) \mid \hspace{0.1cm} \in \left[0, 1.5 \right]\) \(\Rightarrow\) \(X_k\) tiene una distribucion significativamente Normal \(\Rightarrow\) Hay evidencia estadistica significativa de que la distribucion de \(X_{k,G}\) es una distibución Normal.
Si \(\mid Asimetria(X_k) \mid \hspace{0.1cm} > 1.5\) \(\Rightarrow\) \(X_k\) no tiene una distribucion significativamente Normal \(\Rightarrow\) No hay evidencia estadistica significativa de que la distribucion de \(X_{k,G}\) sea una distibución Normal.
Observación:
Estos criterios pueden modificarse para hacerlos mas o menos conservadores.
library(moments)
skewness(Altura_por_Paises_2022$`Male Height in Cm`)
## [1] -0.04603978
Podemos concluir que hay evidencia estadisitica de que la distribucion de frecuencias de la variable de interes es una distribucion aproximadamente Normal con media y varianza igual a la de la variable de interes.
Si simulamos una variable normal se obtiene el siguiente resultado:
library(moments)
set.seed(666)
skewness(rnorm(n=200000, mean=mean(Altura_por_Paises_2022$`Male Height in Cm`), sd=sd(Altura_por_Paises_2022$`Male Height in Cm`)))
## [1] -0.006374078
Como era de esperar el valor obtenido es prácticamente 0, lo que indica que la distribucion de frecuencias de la variable normal simulada es efectivamente una distribucion Normal.
El coeficiente de curtosis de la variable cuantitativa \(X_k\) es:
\[\begin{gather*} Curtosis(X_k) = \dfrac{\overline{x_k}_{4}}{S(X_k)^{4}} \end{gather*}\]Donde: \[\begin{gather*} \overline{x_k}_{4}=\frac{1}{n}\sum_{i=1}^{n} (X_i)^{4} \end{gather*}\]
El coeficiente de curtosis mide principalemte el grado de apuntamiento de la distribucion de las observaciones de una variable.
Si \(Curtosis(X_k) > 3\) \(\Rightarrow\) la distribucion de \(X_k\) es mas apuntada y con colas mas gruesas que la distribución normal.
Si \(Curtosis(X_k) < 3\) \(\Rightarrow\) la distribucion de \(X_k\) es menos apuntada y con colas menos gruesas que la distribución normal.
Sea \(X_k\) una variable
estadistica,
Si la distribucion de frecuencias de \(X_k\) es Normal \(\Rightarrow\) \(Curtosis(X_k) = 3\)
Si \(Curtosis(X_k) \neq 3\) \(\Rightarrow\) la distribucion de frecuencias de \(X_k\) no es Normal
En base a lo anterior se establece el siguiente criterio de normalidad:
Si \(\mid Curtosis(X_k) \mid \in [2, 4]\) \(\Rightarrow\) \(X_k\) tiene una distribucion significativamente Normal \(\Rightarrow\) Hay evidencia estadistica significativa de que la distribucion de \(X_{k,G}\) es una distibución Normal.
Si \(\mid Curtosis(X_k) \mid \notin [2, 4]\) \(\Rightarrow\) \(X_k\) no tiene una distribucion significativamente Normal \(\Rightarrow\) No hay evidencia estadistica significativa de que la distribucion de \(X_{k,G}\) sea una distibución Normal.
Observación:
Estos criterios pueden modificarse para hacerlos mas o menos conservadores.
library(moments)
kurtosis(Altura_por_Paises_2022$`Male Height in Cm`)
## [1] 2.292704
Hay evidencia estadistica de que la distribución de frecuencias de la variable de interes es una distribucion Normal con media y varianza igual a la de la variable de interés.
Si simulamos una variable normal se obtiene el siguiente resultado:
library(moments)
kurtosis(rnorm(n=15000, mean=mean(Altura_por_Paises_2022$`Male Height in Cm`), sd=sd(Altura_por_Paises_2022$`Male Height in Cm`)))
## [1] 2.910792
Como era de espera la curtosis de la variable normal simulada es aproximadamente 3.
A continuacion vamos a exponer los contrastes de hipotesis mas empleados para analizar la normalidad de una variable cuantitativa.
Un contraste de hipotesis es un procedimiento estadistico para rechazar una hipotesis basandose en datos/evidencia.
Los contrastes de hipotesis son una metodologia fundamental en la estadistica moderna, para ampliar informacion sobre ellos recomiendo leer el siguiente articulo https://rpubs.com/FabioScielzoOrtiz/Metodologia_Contrastes_de_Hipotesis
Las hipotesis de los contrastes que aqui veremos son de la siguiente forma:
\[\begin{equation*} H_0: X_{k,G} \sim N(\overline{ X_{k,G}} , \sigma( X_{k,G})) \\ H_1: X_{k,G} \nsim N(\overline{ X_{k,G}} , \sigma( X_{k,G})) \end{equation*}\]
Donde:
$ X_{k,G} N( , ( X_{k,G}))$ \(\Leftrightarrow\) $ X_{k,G}$ tiene una distribucion Normal con media y desviación típica igual a la de \(X_{k,G}\)
La regla de decisión que se usará para un nivel de significacion \(\alpha\) es la basada en el p-valor:
\[\begin{equation*} Rechazamos \ H_0 \ \Leftrightarrow \ pvalor < \alpha \\ No \ Rechazamos \ H_0 \ \Leftrightarrow \ pvalor \geq \alpha \end{equation*}\]
Rechazar \(H_0\) significa que hay suficiente evidencia en los datos muestrales como para rechazar \(H_0\) en favor de \(H_1\)
No Rechazar \(H_0\) significa que no hay suficiente evidencia en los datos como para aceptar \(H_1\)
El p-valor de estos contrastes indica la probabilidad de obtener una distribución frecuecias como la de \(X_k\) si la distribución de \(X_{k,G}\) fuese realmente una distribución Normal.
Este test se emplea para contrastar normalidad cuando el tamaño de la muestra es menor de 50 .
Para muestras grandes es equivalente al test de Kolmogorov-Smirnov-Lilliefors.
shapiro.test( x = Altura_por_Paises_2022$`Male Height in Cm` )
##
## Shapiro-Wilk normality test
##
## data: Altura_por_Paises_2022$`Male Height in Cm`
## W = 0.98778, p-value = 0.08523
Como \(pvalor=0.08523 > \alpha=0.05\) , para un niivel de significacion de 0.05, no hay suficiente evidencia estadistica en los datos como para rechazar la hipotesis de que la variable de interes tenga una distribución de frecuencias Normal con media y desviacion tipica igual a la de la variable de interés.
Es la alternativa al test de Shapiro-Wilk cuando el tamaño de la muestra es mayor de 50
\[\begin{gather*} H_0: \widehat{F}_{X_{k,G}} (x) = F_{N(\overline{X_{k,G}} , \sigma(X_{k,G}))}(x) \\ H_1: \widehat{F}_{X_{k,G}} (x) \neq F_{N(\overline{X_{k,G}} , \sigma(X_{k,G}))}(x) \end{gather*}\]
que es equivalente a la formulación clásica:
\[\begin{equation*} H_0: X_{k,G} \sim N(\overline{X_{k,G}} , \sigma(X_{k,G})) \\ H_1: X_{k,G} \nsim N(\overline{X_{k,G}} , \sigma(X_{k,G})) \end{equation*}\]
\[\begin{gather*} KSL= sup \lbrace \hspace{0.15cm} \mid \widehat{F}_{X_k} (x) - F_{N(\overline{X_k} , \sigma(X_k))}(x) \mid / x\in \mathbb{R} \rbrace \sim \bigtriangleup_n \end{gather*}\]
Donde:
\(\widehat{F}_{X_k} (x)\) es la funcion de distribucion empirica de la variable \(X_k\) . \
\(\widehat{F}_{X_k} (x) = \dfrac{\# \lbrace i=1,...,n / X_{ik} < x \rbrace}{n}\) , para \(x \in \mathbb{R}\).
Por tanto, \(\widehat{F}_{X_k}(x)\) no es mas que el cuatil de orden \(x\) de \(X_k\) , es decir, \(\widehat{F}_{X_k} (x) = Q(x, X_k)\)
Sea \(A \subset \mathbb{R}\) , se define \(sup(A)\) como la menor de las cotas superiores de \(A\), es decir el menor numero de entre todos los que son mayores que los numeros de \(A\).
\(KSL\) es la diferencia absoluta “máxima” (suprema) entre los valores de \(\widehat{F}_{X_k} (x)\) y los de \(F_{N(\overline{X_k} , \sigma(X_k))}(x)\)
\(Rechazar \ H_0\) \(\Leftrightarrow\) \(KSL\) es suficientemente grande \(\Leftrightarrow\) hay suficiente discrepancia entre \(\widehat{F}_{X_k}\) y \(F_{N(\overline{X_k} , \sigma(X_k))}\)
\(Rechazar \ H_0\) \(\Leftrightarrow\) \(KSL > \bigtriangleup_{n , \alpha
}\)
El p-valor se calcula como \(pvalor=P( \bigtriangleup_{n} > KSL)\)
library("nortest")
lillie.test(x = Altura_por_Paises_2022$`Male Height in Cm` )
##
## Lilliefors (Kolmogorov-Smirnov) normality test
##
## data: Altura_por_Paises_2022$`Male Height in Cm`
## D = 0.052163, p-value = 0.2068
Como \(pvalor=0.08523 > \alpha=0.05\) , para un niivel de significacion de 0.05, no hay suficiente evidencia estadistica en los datos como para rechazar la hipotesis de que la variable de interes tenga una distribución de frecuencias Normal con media y desviacion tipica igual a la de la variable de interés.
Detras del test de Kolmogorov-Smirnov-Lilliefors esta la comparacion entre la funcion de distribucion de la variable de interes y la de una v.a. Normal con media y desviacion tipica igual a la de la variable de interés.
En el fondo el grafico de comparación de cuantiles expuesto en la seccion de métodos gráficos es la superposicion de los graficos de las funciones de distribucion empiricas de la variable de interes y la v.a. Normal con media y desviacion tipica igual a la de interés.
Podemos obtener con R el grafico de la funcion de distribucion empirica de una variable del siguiente modo:
Altura_Media_Hombres_por_Paises=Altura_por_Paises_2022$`Male Height in Cm`
plot(ecdf(Altura_Media_Hombres_por_Paises))
Ahora obtenemos el grafico de la funcion de distribucion empirica de una variable con distribucion Normal con una media y desviacion tipica igual a la de la variable anterior:
Variable_Normal=rnorm(n=dim(Altura_por_Paises_2022)[1], mean=mean(Altura_por_Paises_2022$`Male Height in Cm`), sd=sd(Altura_por_Paises_2022$`Male Height in Cm`))
plot(ecdf(Variable_Normal) )
La superposicion de estos graficos es justamente nuestro grafico de comparacion de cuantiles:
ggplot(data = dff , aes(x = orden_cuantiles, y = cuantiles, color = tipo))+
geom_point( ) +
scale_y_continuous( n.breaks = 15 , limits = c(160,185))+
scale_x_continuous(n.breaks =15)+
xlab("Orden del cuantil")+
ylab("Cuantiles") +
scale_color_manual(breaks = c("Normal", "Variable"),
values=c("red", "black" ))
El estadístico del test de Jarque-Bera se basa en comparar la asimetria y curtosis de la variable de interes \(X_k\) con la asimetria y curtosis de una v.a. Normal con misma media y desviacion típica que la variable de interes.
\[\begin{gather*} JB= \dfrac{n}{Asimetria(X_k)} \cdot \left( (Asimetria(X_k) - 0)^2 + \dfrac{1}{4} \cdot (Curtosis(X_k) - 3)^2 \right) \sim \chi^2_2 \end{gather*}\]
Donde:
\(Asimetria(X_k)=0\) es el coeficiente de asimetria de una v.a. con distribucion Normal
\(Curtosis(X_k)=3\) es el coeficiente de curtosis de una v.a. con distribucion Normal
\(Rechazar \ H_0\) \(\Leftrightarrow\) \(JB\) es suficientemente grande, es decir, hay suficiente diferencia entre la asimetria o curtosis de \(X_k\) conla de una variable con distribución normal.
\(Rechazar \ H_0\) \(\Leftrightarrow\) \(JB > \chi^2_{2, \alpha}\)
El p-valor se calcula como \(pvalor=P(\chi^2_{2} > JB)\)
library("tseries")
jarque.bera.test(x =Altura_por_Paises_2022$`Male Height in Cm`)
##
## Jarque Bera Test
##
## data: Altura_por_Paises_2022$`Male Height in Cm`
## X-squared = 4.2184, df = 2, p-value = 0.1213
Como \(pvalor=0.1213 > \alpha=0.05\) , para un nivel de significación de 0.05, no hay suficiente evidencia estadistica en los datos como para rechazar la hipotesis de que la variable de interes tenga una distribución de frecuencias Normal con media y desviacion tipica igual a la de la variable de interés.
Esencialmente el recomendable blog https://www.cienciadedatos.net/