Evaluación de Pruebas de Bondad de Ajuste y Análisis de Normalidad

Un Análisis Riguroso de Pruebas Estadísticas en R

Este trabajo en R evalúa pruebas estadísticas y análisis de normalidad a través de simulación de datos. Comprende la generación de datos, pruebas de bondad de ajuste y análisis de normalidad, resaltando su aplicabilidad y precisión.
Autor/a
Afiliación
Fecha de publicación

29 de noviembre de 2024

Introducción

En el mundo de la estadística, evaluar la idoneidad de un conjunto de datos con respecto a una distribución conocida es una tarea fundamental. La bondad de ajuste y el análisis de normalidad son procesos esenciales en este contexto. En este trabajo, nos embarcamos en un viaje para explorar y comprender en profundidad estas pruebas estadísticas utilizando el entorno de programación R.

En primer lugar, simularemos datos basados en distribuciones ampliamente conocidas como la chi-cuadrado, uniforme, Poisson y normal. Esta simulación nos proporcionará datos de prueba con los cuales trabajaremos en las etapas posteriores.

A continuación, aplicaremos pruebas de bondad de ajuste para determinar si los datos simulados se ajustan adecuadamente a las distribuciones de referencia. Este proceso arrojará luz sobre la capacidad de las pruebas para identificar el grado de ajuste entre los datos y las distribuciones teóricas.

No nos detendremos ahí. También evaluaremos cuántas veces estas pruebas reconocen correctamente la hipótesis de ajuste a la distribución de referencia. Para lograrlo, diseñaremos un esquema de simulación que nos permitirá medir el desempeño de cada prueba en distintas situaciones.

Finalmente, nos adentraremos en el análisis de normalidad, centrándonos en datos generados a partir de distribuciones asimétricas. Calcularemos al menos cuatro pruebas de normalidad para evaluar su capacidad en la detección de desviaciones de la normalidad en datos reales.

A través de los códigos presentados en R, pretendemos hacer que estos procesos sean comprensibles y accesibles. En resumen, este trabajo representa un viaje completo a través de las pruebas estadísticas y el análisis de normalidad, brindando una visión integral de su aplicación y eficacia en el mundo de la estadística inferencial.

Nota

Si desea copiar los codigos que se mostraran en este documento se recomienda tener instaladas las ultimas versiones de R, Rstudio y Quarto.

Simulación de Datos de Múltiples Distribuciones

En esta primera etapa del trabajo, hemos llevado a cabo la simulación de datos provenientes de cuatro distribuciones estadísticas diferentes: chi-cuadrado, uniforme, Poisson y normal. Generamos una cantidad considerable de datos para cada una de estas distribuciones. Luego, creamos histogramas para visualizar la distribución de los datos generados, lo que nos permitirá tener una comprensión inicial de cómo se comportan estas distribuciones.

A continuación, presentamos los histogramas que representan visualmente los datos simulados de cada distribución. Estos gráficos proporcionarán una base sólida para la evaluación de las pruebas de bondad de ajuste en etapas posteriores del trabajo.

Simulación de datos de distribución chi-cuadrado con R
Código
library(ggplot2)
library(dplyr)
# Crear datos simulados para la distribución Chi-Cuadrado
set.seed(123)
datos_chi_cuadrado <- rchisq(1000, df = 3)

# Crear una tabla para los primeros 10 valores
tabla_chi_cuadrado <- data.frame(
  "Muestra" = 1:10,
  "Valor" = datos_chi_cuadrado[1:10]
)

# Mostrar la tabla para la distribución Chi-Cuadrado
tabla_chi_cuadrado
   Muestra       Valor
1        1  1.03611518
2        2  5.08870916
3        3  0.04818784
4        4  2.26693313
5        5  6.90085393
6        6  3.02805429
7        7  8.96365401
8        8 10.25291596
9        9  3.24894708
10      10  2.50479854
histograma para la distribución chi-cuadrado
Código
library(ggplot2)
hist_chi_cuadrado <- ggplot(data.frame(x = datos_chi_cuadrado), aes(x)) +
  geom_histogram(binwidth = 1, fill = "blue", color = "black") +
  labs(title = "Histograma - Distribución Chi-cuadrado", x = "Valor", y = "Frecuencia")
#Mostrar grafico
hist_chi_cuadrado

Simulación de datos de distribución uniforme con R
Código
# Crear datos simulados para la distribución Uniforme
set.seed(123)
datos_uniforme <- runif(1000, min = 0,max = 1)

# Crear una tabla para los primeros 10 valores
tabla_uniforme <- data.frame(
  "Muestra" = 1:10,
  "Valor" = datos_uniforme[1:10]
)

# Mostrar la tabla para la distribución Uniforme
tabla_uniforme
   Muestra     Valor
1        1 0.2875775
2        2 0.7883051
3        3 0.4089769
4        4 0.8830174
5        5 0.9404673
6        6 0.0455565
7        7 0.5281055
8        8 0.8924190
9        9 0.5514350
10      10 0.4566147
histograma para la distribución uniforme
Código
library(ggplot2)
hist_uniforme <- ggplot(data.frame(x = datos_uniforme), aes(x)) +
  geom_histogram(binwidth = 0.05, fill = "green", color = "black") +
  labs(title = "Histograma - Distribución Uniforme", x = "Valor", y = "Frecuencia")
#Mostrar grafico
hist_uniforme

Simulación de datos de distribución Poisson en R
Código
# Crear datos simulados para la distribución Poisson
set.seed(123)
datos_poisson <- rpois(1000, lambda = 3)

# Crear una tabla para los primeros 10 valores
tabla_poisson <- data.frame(
  "Muestra" = 1:10,
  "Valor" = datos_poisson[1:10]
)

# Mostrar la tabla para la distribución Poisson
tabla_poisson
   Muestra Valor
1        1     2
2        2     4
3        3     2
4        4     5
5        5     6
6        6     0
7        7     3
8        8     5
9        9     3
10      10     3
histograma para la distribución Poisson
Código
library(ggplot2)
hist_poisson <- ggplot(data.frame(x = datos_poisson), aes(x)) +
  geom_histogram(binwidth = 1, fill = "orange", color = "black") +
  labs(title = "Histograma - Distribución Poisson", x = "Valor", y = "Frecuencia")
#Mostrar Grafico
hist_poisson

Simulación de datos de distribución Normal en R
Código
library(ggplot2)
# Crear datos simulados para la distribución Normal
set.seed(123)
datos_normal <- rnorm(1000, mean = 35, sd = 5)

# Crear una tabla para los primeros 10 valores
tabla_normal <- data.frame(
  "Muestra" = 1:10,
  "Valor" = datos_normal[1:10]
)

# Mostrar la tabla para la distribución Normal
tabla_normal
   Muestra    Valor
1        1 32.19762
2        2 33.84911
3        3 42.79354
4        4 35.35254
5        5 35.64644
6        6 43.57532
7        7 37.30458
8        8 28.67469
9        9 31.56574
10      10 32.77169
histograma para la distribución Normal
Código
hist_normal <- ggplot(data.frame(x = datos_normal), aes(x)) +
  geom_histogram(binwidth = 0.2, fill = "red", color = "black") +
  labs(title = "Histograma - Distribución Normal", x = "Valor", y = "Frecuencia")
#Mostrar grafico
hist_normal

Hay que destacar que...

Tip

Las simulaciones de datos de diferentes distribuciones nos permiten generar conjuntos de datos controlados con propiedades específicas. Esto es fundamental para comprender cómo se comportan y se ajustan las pruebas estadísticas a distribuciones conocidas. Las simulaciones nos brindan la capacidad de evaluar la capacidad de estas pruebas para detectar si nuestros datos se ajustan o no a una distribución dada.

“Exploración Gráfica de las Distribuciones Simuladas frente a la Distribución Normal Teórica.”

Antes de continuar con el cálculo de las pruebas de bondad de ajuste, es importante realizar una breve exploración gráfica de las distribuciones simuladas. Para ello, presentaremos las funciones de distribución empírica acumulada de las muestras en comparación con la distribución normal teórica con parámetros \mu =35 y \sigma =5. Esto nos permitirá visualizar cómo se comportan los datos simulados en relación con una distribución normal específica.

Graficos
Código
par(mfrow=c(1,2))

# Gráfico de distribución normal vs. chi-cuadrado
 datos=data.frame(datos_normal,datos_chi_cuadrado)
  plot(density(datos$datos_normal),main="Densidad: normal",col="red")
  plot(density(datos$datos_chi_cuadrado),main="Densidad: chi-cuadrado",col="blue")

Código
par(mfrow=c(1,2))

 ggplot(datos,aes(x=datos_normal))+
    stat_ecdf(geom = "step")+
    stat_function(fun = pnorm,col="red",args = list(35,5))+
    labs(title = "empirica normal vs teorica", y="densidad",x="x")

Código
   ggplot(datos,aes(x=datos_chi_cuadrado))+
    stat_ecdf(geom = "step")+
    stat_function(fun = pnorm,col="blue",args = list(35,5))+
    labs(title = "empirica chi-cuadrado vs teorica", y="densidad",x="x")

Código
        ###PRUEBAS DE NORMALIDAD          

   ##PRUEBA FORMAL KOLMOGOROV
   ks.test(datos$datos_normal,"pnorm",35,5,alternative = "t",exact = FALSE)

    Asymptotic one-sample Kolmogorov-Smirnov test

data:  datos$datos_normal
D = 0.019416, p-value = 0.8452
alternative hypothesis: two-sided
Código
   ks.test(datos$datos_chi_cuadrado,"pnorm",35,5,alternative = "t",exact = FALSE)

    Asymptotic one-sample Kolmogorov-Smirnov test

data:  datos$datos_chi_cuadrado
D = 0.99984, p-value < 2.2e-16
alternative hypothesis: two-sided
Código
   ##PRUEBA DE SHAPIRO WILK
   shapiro.test(datos$datos_normal)

    Shapiro-Wilk normality test

data:  datos$datos_normal
W = 0.99838, p-value = 0.4765
Código
   shapiro.test(datos$datos_chi_cuadrado)

    Shapiro-Wilk normality test

data:  datos$datos_chi_cuadrado
W = 0.85418, p-value < 2.2e-16
Código
   ##PRUEBA DE SHAPIRO FRANCIA library(nortest)
   library(nortest)
   sf.test(datos$datos_normal)

    Shapiro-Francia normality test

data:  datos$datos_normal
W = 0.99867, p-value = 0.6031
Código
   sf.test(datos$datos_chi_cuadrado)

    Shapiro-Francia normality test

data:  datos$datos_chi_cuadrado
W = 0.85371, p-value < 2.2e-16
Código
   ##PRUEBA DE ANDERSON DARLING
   ad.test(datos$datos_normal)

    Anderson-Darling normality test

data:  datos$datos_normal
A = 0.29653, p-value = 0.592
Código
   ad.test(datos$datos_chi_cuadrado) 

    Anderson-Darling normality test

data:  datos$datos_chi_cuadrado
A = 34.404, p-value < 2.2e-16
Código
   ##PRUEBA DE Pearson chi-square 
   pearson.test(datos$datos_normal)

    Pearson chi-square normality test

data:  datos$datos_normal
P = 24.32, p-value = 0.713
Código
   pearson.test(datos$datos_chi_cuadrado)

    Pearson chi-square normality test

data:  datos$datos_chi_cuadrado
P = 395.07, p-value < 2.2e-16
Graficas
Código
par(mfrow=c(1,2))
# Gráfico de distribución normal vs. Poisson
 datos=data.frame(datos_normal,datos_poisson)
  plot(density(datos$datos_normal),main="Densidad: normal",col="red")
  plot(density(datos$datos_poisson),main="Densidad: Poisson",col="orange")

Código
par(mfrow=c(1,2))

 ggplot(datos,aes(x=datos_normal))+
    stat_ecdf(geom = "step")+
    stat_function(fun = pnorm,col="red",args = list(35,5))+
    labs(title = "empirica normal vs teorica", y="densidad",x="x")

Código
   ggplot(datos,aes(x=datos_poisson))+
    stat_ecdf(geom = "step")+
    stat_function(fun = pnorm,col="orange",args = list(35,5))+
    labs(title = "empirica poisson vs teorica", y="densidad",x="x")

Código
                ###PRUEBAS DE NORMALIDAD          

   ##PRUEBA FORMAL KOLMOGOROV
   ks.test(datos$datos_normal,"pnorm",35,5,alternative = "t",exact = FALSE)

    Asymptotic one-sample Kolmogorov-Smirnov test

data:  datos$datos_normal
D = 0.019416, p-value = 0.8452
alternative hypothesis: two-sided
Código
   ks.test(datos$datos_poisson,"pnorm",35,5,alternative = "t",exact = FALSE)

    Asymptotic one-sample Kolmogorov-Smirnov test

data:  datos$datos_poisson
D = 1, p-value < 2.2e-16
alternative hypothesis: two-sided
Código
   ##PRUEBA DE SHAPIRO WILK
   shapiro.test(datos$datos_normal)

    Shapiro-Wilk normality test

data:  datos$datos_normal
W = 0.99838, p-value = 0.4765
Código
   shapiro.test(datos$datos_poisson)

    Shapiro-Wilk normality test

data:  datos$datos_poisson
W = 0.94916, p-value < 2.2e-16
Código
   ##PRUEBA DE SHAPIRO FRANCIA library(nortest)
   library(nortest)
   sf.test(datos$datos_normal)

    Shapiro-Francia normality test

data:  datos$datos_normal
W = 0.99867, p-value = 0.6031
Código
   sf.test(datos$datos_poisson)

    Shapiro-Francia normality test

data:  datos$datos_poisson
W = 0.94948, p-value = 3.421e-16
Código
   ##PRUEBA DE ANDERSON DARLING
   ad.test(datos$datos_normal)

    Anderson-Darling normality test

data:  datos$datos_normal
A = 0.29653, p-value = 0.592
Código
   ad.test(datos$datos_poisson) 

    Anderson-Darling normality test

data:  datos$datos_poisson
A = 18.058, p-value < 2.2e-16
Código
   ##PRUEBA DE Pearson chi-square 
   pearson.test(datos$datos_normal)

    Pearson chi-square normality test

data:  datos$datos_normal
P = 24.32, p-value = 0.713
Código
   pearson.test(datos$datos_poisson)

    Pearson chi-square normality test

data:  datos$datos_poisson
P = 4440.1, p-value < 2.2e-16
Graficas de datos simulados
Código
par(mfrow=c(1,2))
# Gráfico de distribución normal vs. chi-cuadrado
 datos=data.frame(datos_normal,datos_uniforme)
  plot(density(datos$datos_normal),main="Densidad: normal",col="red")
  plot(density(datos$datos_uniforme),main="Densidad: uniforme",col="green")

Código
par(mfrow=c(1,2))

 ggplot(datos,aes(x=datos_normal))+
    stat_ecdf(geom = "step")+
    stat_function(fun = pnorm,col="red",args = list(35,5))+
    labs(title = "empirica normal vs teorica", y="densidad",x="x")

Código
   ggplot(datos,aes(x=datos_uniforme))+
    stat_ecdf(geom = "step")+
    stat_function(fun = pnorm,col="green",args = list(35,5))+
    labs(title = "empirica uniforme vs teorica", y="densidad",x="x")

Código
          ###PRUEBAS DE NORMALIDAD          

   ##PRUEBA FORMAL KOLMOGOROV
   ks.test(datos$datos_normal,"pnorm",35,5,alternative = "t",exact = FALSE)

    Asymptotic one-sample Kolmogorov-Smirnov test

data:  datos$datos_normal
D = 0.019416, p-value = 0.8452
alternative hypothesis: two-sided
Código
   ks.test(datos$datos_uniforme,"pnorm",35,5,alternative = "t",exact = FALSE)

    Asymptotic one-sample Kolmogorov-Smirnov test

data:  datos$datos_uniforme
D = 1, p-value < 2.2e-16
alternative hypothesis: two-sided
Código
   ##PRUEBA DE SHAPIRO WILK
   shapiro.test(datos$datos_normal)

    Shapiro-Wilk normality test

data:  datos$datos_normal
W = 0.99838, p-value = 0.4765
Código
   shapiro.test(datos$datos_uniforme)

    Shapiro-Wilk normality test

data:  datos$datos_uniforme
W = 0.95571, p-value < 2.2e-16
Código
   ##PRUEBA DE SHAPIRO FRANCIA library(nortest)
   library(nortest)
   sf.test(datos$datos_normal)

    Shapiro-Francia normality test

data:  datos$datos_normal
W = 0.99867, p-value = 0.6031
Código
   sf.test(datos$datos_uniforme)

    Shapiro-Francia normality test

data:  datos$datos_uniforme
W = 0.9572, p-value = 7.179e-15
Código
   ##PRUEBA DE ANDERSON DARLING
   ad.test(datos$datos_normal)

    Anderson-Darling normality test

data:  datos$datos_normal
A = 0.29653, p-value = 0.592
Código
   ad.test(datos$datos_uniforme) 

    Anderson-Darling normality test

data:  datos$datos_uniforme
A = 10.832, p-value < 2.2e-16
Código
   ##PRUEBA DE Pearson chi-square 
   pearson.test(datos$datos_normal)

    Pearson chi-square normality test

data:  datos$datos_normal
P = 24.32, p-value = 0.713
Código
   pearson.test(datos$datos_uniforme)

    Pearson chi-square normality test

data:  datos$datos_uniforme
P = 238.34, p-value < 2.2e-16

Evaluación del Desempeño de Pruebas de Bondad de Ajuste y Normalidad en Distribuciones Simuladas

En esta sección, aplicamos pruebas de bondad de ajuste a las muestras de datos simulados bajo diversas distribuciones. El objetivo principal es evaluar si los datos generados se ajustan adecuadamente a las distribuciones teóricas establecidas. Para cada distribución, seleccionamos pruebas apropiadas y calculamos sus estadísticas y p-value.

Luego, evaluamos el rendimiento de estas pruebas mediante un esquema de simulación. Cuantificamos cuántas veces cada prueba identifica correctamente la hipótesis nula, que establece que los datos provienen de la distribución teórica. Este análisis nos proporciona información valiosa sobre la eficacia relativa de las pruebas de bondad de ajuste en diferentes contextos de distribución.

IMPORTANTE!!

Resolución de Preguntas:

El trabajo aborda dos preguntas fundamentales:

1. Calcular la respectiva prueba de bondad de ajuste:

  • Se llevaron a cabo cálculos exhaustivos de pruebas de bondad de ajuste y pruebas de normalidad para distintas distribuciones simuladas, como la normal, la poisson, la uniforme y la chi-cuadrado.

  • Estas pruebas se realizaron con el objetivo de verificar si los datos generados se ajustaban a las distribuciones teóricas previamente especificadas.

2. Contar cuantas veces la prueba identifica la hipótesis correcta:

  • Se implementó un esquema de simulación en R para evaluar cómo se comportan las pruebas en términos de identificar adecuadamente la hipótesis nula de bondad de ajuste.

  • A través de múltiples simulaciones, se contó cuántas veces las pruebas lograron identificar correctamente la hipótesis, proporcionando una medida de su desempeño.

Exploración de Potencia y Sensibilidad: Además de las respuestas a las preguntas planteadas, se exploró la potencia y la sensibilidad de cada prueba. Este análisis permite comprender mejor la capacidad de las pruebas para detectar desviaciones de la distribución teórica y proporciona información valiosa para su selección y aplicación en futuros análisis de datos reales.

Contribución al Conocimiento: Este estudio contribuye al entendimiento de la utilidad y limitaciones de las pruebas de bondad de ajuste y normalidad en diferentes contextos. Además, proporciona una guía valiosa para los analistas de datos que deben seleccionar las pruebas apropiadas para sus investigaciones, considerando las características de las distribuciones subyacentes.

En resumen, este trabajo ofrece una visión integral de cómo evaluar y aplicar pruebas de bondad de ajuste y normalidad en el análisis estadístico, y cómo medir su desempeño a través de simulaciones. Este conocimiento es esencial para garantizar la fiabilidad de los resultados y tomar decisiones basadas en datos sólidos.

Chi-cuadrado

Código
# Simulación de datos chi-cuadrado
set.seed(123)
datos_chi_cuadrado <- rchisq(1000, df = 3)

# Prueba de bondad de ajuste de Kolmogorov-Smirnov
ks_test <- ks.test(datos_chi_cuadrado, "pchisq", df = 3)

# Mostrar el resultado
ks_test

    Asymptotic one-sample Kolmogorov-Smirnov test

data:  datos_chi_cuadrado
D = 0.044666, p-value = 0.03699
alternative hypothesis: two-sided
Código
   ##PRUEBA DE SHAPIRO WILK
   shapiro.test(datos_chi_cuadrado)

    Shapiro-Wilk normality test

data:  datos_chi_cuadrado
W = 0.85418, p-value < 2.2e-16
Código
   ##PRUEBA DE SHAPIRO FRANCIA library(nortest)
   library(nortest)
   sf.test(datos_chi_cuadrado)

    Shapiro-Francia normality test

data:  datos_chi_cuadrado
W = 0.85371, p-value < 2.2e-16
Código
   ##PRUEBA DE ANDERSON DARLING
   ad.test(datos_chi_cuadrado) 

    Anderson-Darling normality test

data:  datos_chi_cuadrado
A = 34.404, p-value < 2.2e-16
Código
   ##PRUEBA DE Pearson chi-square 
   pearson.test(datos_chi_cuadrado)

    Pearson chi-square normality test

data:  datos_chi_cuadrado
P = 395.07, p-value < 2.2e-16
Código
library(stats)
# Simulación de datos chi-cuadrado
set.seed(123)
datos_chi_cuadrado <- rchisq(1000, df = 3)

# Parámetros de la distribución chi-cuadrado
df_teórico <- 3  

# Número de simulaciones
simulaciones <- 1000

# Inicializar contador de éxito
exitosas <- 0

# Realizar simulaciones
for (i in 1:simulaciones) {
  # Generar datos simulados para la prueba
  datos_simulados <- rchisq(length(datos_chi_cuadrado), df = df_teórico)
  
  # Realizar la prueba de bondad de ajuste (Kolmogorov-Smirnov)
  resultado_prueba <- ks.test(datos_simulados, "pchisq", df = df_teórico)
  
  # Verificar si la prueba identifica correctamente la hipótesis
  if (resultado_prueba$p.value > 0.05) {
    exitosas <- exitosas + 1
  }
}

# Calcular la tasa de éxito (porcentaje de veces que se identifica correctamente H0)
tasa_exito <- (exitosas / simulaciones) * 100

# resultados
cat("Tasa de éxito:", tasa_exito, "%")
Tasa de éxito: 95.3 %

Uniforme

Código
# Simulación de datos uniformes
set.seed(123)
datos_uniforme <- runif(1000,min = 0,max = 1)  

# Función para realizar la prueba KS y obtener el p-valor
  ks_test <- ks.test(datos_uniforme, "punif")  # Mostrar la prueba KS
 ks_test

    Asymptotic one-sample Kolmogorov-Smirnov test

data:  datos_uniforme
D = 0.014051, p-value = 0.9891
alternative hypothesis: two-sided
Código
 ##PRUEBA DE SHAPIRO WILK
   shapiro.test(datos_uniforme)

    Shapiro-Wilk normality test

data:  datos_uniforme
W = 0.95571, p-value < 2.2e-16
Código
   ##PRUEBA DE SHAPIRO FRANCIA library(nortest)
   library(nortest)
   sf.test(datos_uniforme)

    Shapiro-Francia normality test

data:  datos_uniforme
W = 0.9572, p-value = 7.179e-15
Código
   ##PRUEBA DE ANDERSON DARLING
   ad.test(datos_uniforme) 

    Anderson-Darling normality test

data:  datos_uniforme
A = 10.832, p-value < 2.2e-16
Código
   ##PRUEBA DE Pearson chi-square 
   pearson.test(datos_uniforme)

    Pearson chi-square normality test

data:  datos_uniforme
P = 238.34, p-value < 2.2e-16
Código
library(stats)
# Simulación de datos uniformes
set.seed(123)
datos_uniforme <- runif(1000, min = 0, max = 1)  

# Parámetros de la distribución uniforme
min_teórico <- 0
max_teórico <- 1

# Número de simulaciones
simulaciones <- 1000

# Inicializar contador de éxito
exitosas <- 0

# Realizar simulaciones
for (i in 1:simulaciones) {
  # Generar datos simulados para la prueba
  datos_simulados <- runif(length(datos_uniforme), min = min_teórico, max = max_teórico)
  
  # Realizar la prueba de bondad de ajuste (Kolmogorov-Smirnov)
  resultado_prueba <- ks.test(datos_simulados, "punif", min = min_teórico, max = max_teórico)
  
  # Verificar si la prueba identifica correctamente la hipótesis
  if (resultado_prueba$p.value > 0.05) {
    exitosas <- exitosas + 1
  }
}

# Calcular la tasa de éxito (porcentaje de veces que se identifica correctamente H0)
tasa_exito <- (exitosas / simulaciones) * 100

# resultados
cat("Tasa de éxito:", tasa_exito, "%")
Tasa de éxito: 94.5 %

Poisson

Código
# Simulación de datos de Poisson
set.seed(123)
datos_poisson <- rpois(1000, lambda = 3)

# Función para realizar la prueba KS y obtener el p-valor
  ks_test <- ks.test(datos_poisson, "ppois", lambda = mean(datos_poisson)) # Realiza la prueba KS
 ks_test

    Asymptotic one-sample Kolmogorov-Smirnov test

data:  datos_poisson
D = 0.23262, p-value < 2.2e-16
alternative hypothesis: two-sided
Código
# Simulación de datos Poisson
set.seed(123)
datos_poisson <- rpois(1000, lambda = 3)

# Parámetros de la distribución Poisson
lambda_teórico <- 3

# Calcular las frecuencias observadas
frecuencias_obs <- table(datos_poisson)

# Calcular las frecuencias esperadas bajo la distribución Poisson
valores <- as.numeric(names(frecuencias_obs))
frecuencias_esp <- dpois(valores, lambda = lambda_teórico) * sum(frecuencias_obs)

# Asegurarse de que las frecuencias esperadas sumen 1
frecuencias_esp <- frecuencias_esp / sum(frecuencias_esp)

# Realizar la prueba de bondad de ajuste (chi-cuadrado de Pearson)
prueba_chi_cuadrado_poisson <- chisq.test(frecuencias_obs, p = frecuencias_esp)

# Mostrar el resultado
prueba_chi_cuadrado_poisson

    Chi-squared test for given probabilities

data:  frecuencias_obs
X-squared = 5.5345, df = 10, p-value = 0.8527
Código
 ##PRUEBA DE SHAPIRO WILK
   shapiro.test(datos_poisson)

    Shapiro-Wilk normality test

data:  datos_poisson
W = 0.94916, p-value < 2.2e-16
Código
   ##PRUEBA DE SHAPIRO FRANCIA library(nortest)
   library(nortest)
   sf.test(datos_poisson)

    Shapiro-Francia normality test

data:  datos_poisson
W = 0.94948, p-value = 3.421e-16
Código
   ##PRUEBA DE ANDERSON DARLING
   ad.test(datos_poisson) 

    Anderson-Darling normality test

data:  datos_poisson
A = 18.058, p-value < 2.2e-16
Código
   ##PRUEBA DE Pearson chi-square 
   pearson.test(datos_poisson)

    Pearson chi-square normality test

data:  datos_poisson
P = 4440.1, p-value < 2.2e-16
Código
library(stats)
# Simulación de datos Poisson
set.seed(123)
datos_poisson <- rpois(1000, lambda = 3) 

# Parámetros de la distribución Poisson
lambda_teórico <- 3 

# Número de simulaciones
simulaciones <- 1000

# Inicializar contador de éxito
exitosas <- 0

# Realizar simulaciones
for (i in 1:simulaciones) {
  # Generar datos simulados para la prueba
  datos_simulados <- rpois(length(datos_poisson), lambda = lambda_teórico)
  
  # Calcular la tabla de frecuencias observadas y esperadas
  tabla_obs <- table(datos_simulados)
  valores <- as.numeric(names(tabla_obs))
  prob_esp <- dpois(valores, lambda = lambda_teórico)
  prob_esp <- prob_esp / sum(prob_esp)  # Normalizar las probabilidades esperadas
  
  # Realizar la prueba de bondad de ajuste (Chi-cuadrado)
  resultado_prueba <- chisq.test(tabla_obs, p = prob_esp)
  
  # Verificar si la prueba identifica correctamente la hipótesis
  if (resultado_prueba$p.value > 0.05) {
    exitosas <- exitosas + 1
  }
}

# Calcular la tasa de éxito (porcentaje de veces que se identifica correctamente H0)
tasa_exito <- (exitosas / simulaciones) * 100

# Imprimir resultados
cat("Tasa de éxito:", tasa_exito, "%")
Tasa de éxito: 85.1 %

Normal

Código
# Simulación de datos de una distribución normal
set.seed(123)
datos_normal <- rnorm(1000, mean = 35, sd = 5)  
# Función para realizar la prueba KS y obtener el p-valor
  ks_test <- ks.test(datos_normal, "pnorm", mean = mean(datos_normal), sd = sd(datos_normal))# Realiza la prueba KS


# Mostrar el p-valor de la prueba KS
ks_test

    Asymptotic one-sample Kolmogorov-Smirnov test

data:  datos_normal
D = 0.014963, p-value = 0.9786
alternative hypothesis: two-sided
Código
##PRUEBA DE SHAPIRO WILK
   shapiro.test(datos_normal)

    Shapiro-Wilk normality test

data:  datos_normal
W = 0.99838, p-value = 0.4765
Código
   ##PRUEBA DE SHAPIRO FRANCIA library(nortest)
   library(nortest)
   sf.test(datos_normal)

    Shapiro-Francia normality test

data:  datos_normal
W = 0.99867, p-value = 0.6031
Código
   ##PRUEBA DE ANDERSON DARLING
   ad.test(datos_normal) 

    Anderson-Darling normality test

data:  datos_normal
A = 0.29653, p-value = 0.592
Código
   ##PRUEBA DE Pearson chi-square 
   pearson.test(datos_normal)

    Pearson chi-square normality test

data:  datos_normal
P = 24.32, p-value = 0.713
Código
library(stats)
# Simulación de datos normales
set.seed(123)
datos_normal <- rnorm(1000, mean = 35, sd = 5)

# Parámetros de la distribución normal
media_teórica <- 35
desviación_teórica <- 5

# Número de simulaciones
simulaciones <- 1000

# Inicializar contador de éxito
exitosas <- 0

# Realizar simulaciones
for (i in 1:simulaciones) {
  # Generar datos simulados para la prueba
  datos_simulados <- rnorm(length(datos_normal), mean = media_teórica, sd = desviación_teórica)
  
  # Realizar la prueba de bondad de ajuste (Kolmogorov-Smirnov)
  resultado_prueba <- ks.test(datos_simulados, "pnorm", mean = media_teórica, sd = desviación_teórica)
  
  # Verificar si la prueba identifica correctamente la hipótesis
  if (resultado_prueba$p.value > 0.05) {
    exitosas <- exitosas + 1
  }
}

# Calcular la tasa de éxito (porcentaje de veces que se identifica correctamente H0)
tasa_exito <- (exitosas / simulaciones) * 100

# Imprimir resultados
cat("Tasa de éxito:", tasa_exito, "%")
Tasa de éxito: 95.2 %

Evaluación de Pruebas de Normalidad con Datos de Distribuciones Asimétricas

En esta sección, llevaremos a cabo una evaluación exhaustiva de varias pruebas de normalidad utilizando datos generados a partir de distribuciones asimétricas. El objetivo principal es determinar la eficacia de estas pruebas para identificar la no normalidad en datos que exhiben asimetría.

Para realizar esta evaluación, seguimos los siguientes pasos:

Generación de Datos Normales: En primer lugar, generamos 100 datos de una distribución normal con media cero y desviación estándar uno. Estos datos representan una muestra de datos que se ajustan a una distribución normal.

Aplicación de Pruebas de Normalidad: A continuación, aplicamos cuatro pruebas de normalidad comúnmente utilizadas a esta muestra de datos normal:

  1. Prueba de Shapiro-Wilk: Utilizaremos la función shapiro.test() para aplicar la prueba de Shapiro-Wilk a los datos asimétricos. Esta prueba es ampliamente utilizada para evaluar la normalidad de los datos.

  2. Prueba de Shapiro-Francia: Emplearemos la librería nortest para realizar la prueba de Shapiro-Francia, que es una alternativa atractiva para evaluar la normalidad en diferentes contextos.

  3. Prueba de Anderson-Darling: Aplicaremos la prueba de Anderson-Darling utilizando la función ad.test(). Esta prueba es especialmente útil para detectar desviaciones de la normalidad en la cola de la distribución.

  4. Prueba de Lilliefors: Librería: nortest. Aplicación: Similar a la prueba de Kolmogorov-Smirnov, se utiliza para evaluar la normalidad de una muestra de datos. Utilidad: Útil cuando se trabajan con muestras pequeñas y se requiere una prueba más específica para detectar desviaciones de la normalidad.

  5. Prueba de Kolmogorov-Smirnov: Librería: stats (parte de R base). Aplicación: Se utiliza para evaluar si una muestra de datos sigue una distribución de probabilidad específica, como la normal. Utilidad: Permite verificar si los datos siguen una distribución teórica particular, útil en pruebas de bondad de ajuste.

Estas pruebas evalúan si los datos siguen una distribución normal y proporcionan valores de p que indican la probabilidad de que los datos sean normales.

Contaminación de Datos: Luego, contaminamos los datos normales con otra distribución, en este caso, una distribución exponencial. Esto simula un cambio en la naturaleza de los datos, pasando de una distribución normal a una distribución no normal debido a la contaminación.

Reevaluación con Datos Contaminados: Aplicamos nuevamente las mismas pruebas de normalidad a los datos contaminados. El objetivo es evaluar si estas pruebas pueden detectar el cambio en la distribución de los datos, es decir, si son sensibles a la no normalidad inducida por la contaminación.

Cálculo de Potencia y Sensibilidad: Repetimos este proceso de contaminación y reevaluación 1000 veces. En cada iteración, calculamos la potencia y sensibilidad de las pruebas de normalidad. La potencia representa la capacidad de las pruebas para detectar la no normalidad en los datos contaminados (verdaderos positivos), mientras que la sensibilidad mide cuántas veces las pruebas no detectan la no normalidad en los datos normales (verdaderos negativos).

Resultados: Al finalizar las simulaciones, calculamos la potencia y sensibilidad promedio de las pruebas de normalidad en detectar el cambio en la distribución de los datos contaminados.

A través de esta evaluación exhaustiva, hemos obtenido una comprensión más sólida de la capacidad de estas pruebas de normalidad para identificar cambios en la distribución de datos, lo que nos permite tomar decisiones fundamentadas en futuros análisis de datos.

Potencia y sensibilidad
Código
# Generar datos de una distribución normal
set.seed(123)
datos_normales <- rnorm(100, mean = 0, sd = 1)

# Prueba de Shapiro-Wilk
shapiro_test <- shapiro.test(datos_normales)

# Prueba de Kolmogorov-Smirnov
ks_test <- ks.test(datos_normales, "pnorm")

# Prueba de Lilliefors
library(nortest)
lillie_test <- lillie.test(datos_normales)

#Prueba de shapiro francia
francia <- sf.test(datos_normales)

# Prueba de Anderson-Darling
ad_test <- ad.test(datos_normales)

# Cálculo de la potencia y sensibilidad (simulación)
n_simulaciones <- 1000
potencia <- rep(0, n_simulaciones)
sensibilidad <- rep(0, n_simulaciones)

for (i in 1:n_simulaciones) {
  # Generar datos contaminados con otra distribución (por ejemplo, distribución exponencial)
  datos_contaminados <- c(datos_normales, rexp(100, rate = 1))
  
  # Realizar las pruebas de normalidad en los datos contaminados
  p_value_shapiro <- shapiro.test(datos_contaminados)$p.value
  p_value_francia <- sf.test(datos_contaminados)$p.value
  p_value_ks <- ks.test(datos_contaminados, "pnorm")$p.value
  p_value_lillie <- lillie.test(datos_contaminados)$p.value
  p_value_ad <- ad.test(datos_contaminados)$p.value
  
  # Evaluar si se rechaza la hipótesis nula en cada prueba
  reject_shapiro <- p_value_shapiro < 0.05
  reject_francia <- p_value_francia < 0.05
  reject_ks <- p_value_ks < 0.05
  reject_lillie <- p_value_lillie < 0.05
  reject_ad <- p_value_ad < 0.05
  
  # Calcular la potencia (proporción de veces que se rechaza la hipótesis nula en datos contaminados)
  # y la sensibilidad (proporción de veces que se rechaza la hipótesis nula en datos normales)
  potencia[i] <- mean(c(reject_shapiro,reject_francia,reject_ks,reject_lillie,reject_ad))
  sensibilidad[i] <- mean(c(!reject_shapiro,!reject_francia,!reject_ks,!reject_lillie,!reject_ad))
}

# Resultados de potencia y sensibilidad promedio
mean_potencia <- mean(potencia)
mean_sensibilidad <- mean(sensibilidad)

print(paste("Potencia promedio:", mean_potencia))
[1] "Potencia promedio: 0.9618"
Código
print(paste("Sensibilidad promedio:", mean_sensibilidad))
[1] "Sensibilidad promedio: 0.0382"
Interpretación

Estos valores resumen el desempeño combinado de las pruebas de normalidad en la detección de no normalidad en datos asimétricos. La alta potencia indica que las pruebas tienen una alta capacidad para identificar desviaciones de la normalidad cuando estas existen en los datos asimétricos. Por otro lado, la sensibilidad relativamente baja sugiere que las pruebas tienen una tendencia a producir falsos negativos al no detectar la no normalidad en datos que son, de hecho, no normales.

Potencia y sensibilidad
Código
# Generar datos de una distribución normal
set.seed(123)
datos_normales <- rnorm(100, mean = 0, sd = 1)

# Prueba de Shapiro-Wilk
shapiro_test <- shapiro.test(datos_normales)

# Cálculo de la potencia y sensibilidad (simulación)
n_simulaciones <- 1000
potencia <- rep(0, n_simulaciones)
sensibilidad <- rep(0, n_simulaciones)

for (i in 1:n_simulaciones) {
  # Generar datos contaminados con otra distribución (por ejemplo, distribución exponencial)
  datos_contaminados <- c(datos_normales, rexp(100, rate = 1))
  
  # Realizar las pruebas de normalidad en los datos contaminados
  p_value_shapiro <- shapiro.test(datos_contaminados)$p.value
  
  # Evaluar si se rechaza la hipótesis nula en la prueba
  reject_shapiro <- p_value_shapiro < 0.05

  
  # Calcular la potencia (proporción de veces que se rechaza la hipótesis nula en datos contaminados)
  # y la sensibilidad (proporción de veces que se rechaza la hipótesis nula en datos normales)
  potencia[i] <- mean(c(reject_shapiro))
  sensibilidad[i] <- mean(c(!reject_shapiro))
}

# Resultados de potencia y sensibilidad promedio
mean_potencia <- mean(potencia)
mean_sensibilidad <- mean(sensibilidad)

print(paste("Potencia promedio:", mean_potencia))
[1] "Potencia promedio: 0.944"
Código
print(paste("Sensibilidad promedio:", mean_sensibilidad))
[1] "Sensibilidad promedio: 0.056"
Interpretación

En el análisis específico utilizando solo la Prueba de Shapiro-Wilk, obtuvimos los siguientes resultados:

  • Potencia promedio alta (0.944): La prueba de Shapiro-Wilk detecta efectivamente la no normalidad en datos asimétricos.

  • Sensibilidad promedio baja (0.056): La prueba tiende a no detectar la no normalidad en datos no normales.

Estos resultados indican que la Prueba de Shapiro-Wilk es efectiva para identificar desviaciones de la normalidad en datos asimétricos, pero también puede generar falsos negativos en ciertos casos de datos no normales.

Potencia y sensibilidad
Código
# Generar datos de una distribución normal
set.seed(123)
datos_normales <- rnorm(100, mean = 0, sd = 1)


#Prueba de shapiro francia
francia <- sf.test(datos_normales)


# Cálculo de la potencia y sensibilidad (simulación)
n_simulaciones <- 1000
potencia <- rep(0, n_simulaciones)
sensibilidad <- rep(0, n_simulaciones)

for (i in 1:n_simulaciones) {
  # Generar datos contaminados con otra distribución (por ejemplo, distribución exponencial)
  datos_contaminados <- c(datos_normales, rexp(100, rate = 1))
  
  # Realizar las pruebas de normalidad en los datos contaminados
  p_value_francia <- sf.test(datos_contaminados)$p.value

  
  # Evaluar si se rechaza la hipótesis nula en cada prueba
  reject_francia <- p_value_francia < 0.05
 
  # Calcular la potencia (proporción de veces que se rechaza la hipótesis nula en datos contaminados)
  # y la sensibilidad (proporción de veces que se rechaza la hipótesis nula en datos normales)
  potencia[i] <- mean(c(reject_francia))
  sensibilidad[i] <- mean(c(!reject_francia))
}

# Resultados de potencia y sensibilidad promedio
mean_potencia <- mean(potencia)
mean_sensibilidad <- mean(sensibilidad)

print(paste("Potencia promedio:", mean_potencia))
[1] "Potencia promedio: 0.966"
Código
print(paste("Sensibilidad promedio:", mean_sensibilidad))
[1] "Sensibilidad promedio: 0.034"
Interpretación

Con la Prueba de Shapiro-Francia, obtuvimos los siguientes resultados:

  • Potencia promedio alta (0.966): La prueba de Shapiro-Francia es efectiva para identificar la no normalidad en datos asimétricos.

  • Sensibilidad promedio baja (0.034): La prueba tiende a no detectar la no normalidad en datos no normales.

Estos resultados indican que la Prueba de Shapiro-Francia tiene una alta capacidad para detectar desviaciones de la normalidad en datos asimétricos, pero también puede generar falsos negativos en ciertos casos de datos no normales.

Potencia y sensibilidad
Código
# Generar datos de una distribución normal
set.seed(123)
datos_normales <- rnorm(100, mean = 0, sd = 1)


# Prueba de Anderson-Darling
ad_test <- ad.test(datos_normales)

# Cálculo de la potencia y sensibilidad (simulación)
n_simulaciones <- 1000
potencia <- rep(0, n_simulaciones)
sensibilidad <- rep(0, n_simulaciones)

for (i in 1:n_simulaciones) {
  # Generar datos contaminados con otra distribución (por ejemplo, distribución exponencial)
  datos_contaminados <- c(datos_normales, rexp(100, rate = 1))
  
  # Realizar las pruebas de normalidad en los datos contaminados
  p_value_ad <- ad.test(datos_contaminados)$p.value
  
  # Evaluar si se rechaza la hipótesis nula en cada prueba
  reject_ad <- p_value_ad < 0.05
  
  # Calcular la potencia (proporción de veces que se rechaza la hipótesis nula en datos contaminados)
  # y la sensibilidad (proporción de veces que se rechaza la hipótesis nula en datos normales)
  potencia[i] <- mean(c(reject_ad))
  sensibilidad[i] <- mean(c(!reject_ad))
}

# Resultados de potencia y sensibilidad promedio
mean_potencia <- mean(potencia)
mean_sensibilidad <- mean(sensibilidad)

print(paste("Potencia promedio:", mean_potencia))
[1] "Potencia promedio: 0.97"
Código
print(paste("Sensibilidad promedio:", mean_sensibilidad))
[1] "Sensibilidad promedio: 0.03"
Interpretación

Al utilizar exclusivamente la Prueba de Anderson-Darling, obtuvimos los siguientes resultados:

  • Potencia promedio alta (0.97): La prueba de Anderson-Darling demostró ser altamente efectiva para detectar la no normalidad en datos asimétricos.

  • Sensibilidad promedio baja (0.03): Sin embargo, esta prueba tiende a no identificar la no normalidad en datos no normales en una proporción significativa de casos.

En resumen, la Prueba de Anderson-Darling tiene una alta capacidad para identificar desviaciones de la normalidad en datos asimétricos, pero al costo de generar un mayor número de falsos negativos en datos no normales.

Potencia y sensibilidad
Código
# Generar datos de una distribución normal
set.seed(123)
datos_normales <- rnorm(100, mean = 0, sd = 1)

# Prueba de Lilliefors
library(nortest)
lillie_test <- lillie.test(datos_normales)

# Cálculo de la potencia y sensibilidad (simulación)
n_simulaciones <- 1000
potencia <- rep(0, n_simulaciones)
sensibilidad <- rep(0, n_simulaciones)

for (i in 1:n_simulaciones) {
  # Generar datos contaminados con otra distribución (por ejemplo, distribución exponencial)
  datos_contaminados <- c(datos_normales, rexp(100, rate = 1))
  
  # Realizar las pruebas de normalidad en los datos contaminados
  p_value_lillie <- lillie.test(datos_contaminados)$p.value

  # Evaluar si se rechaza la hipótesis nula en cada prueba
  reject_lillie <- p_value_lillie < 0.05

  
  # Calcular la potencia (proporción de veces que se rechaza la hipótesis nula en datos contaminados)
  # y la sensibilidad (proporción de veces que se rechaza la hipótesis nula en datos normales)
  potencia[i] <- mean(c(reject_lillie))
  sensibilidad[i] <- mean(c(!reject_lillie))
}

# Resultados de potencia y sensibilidad promedio
mean_potencia <- mean(potencia)
mean_sensibilidad <- mean(sensibilidad)

print(paste("Potencia promedio:", mean_potencia))
[1] "Potencia promedio: 0.929"
Código
print(paste("Sensibilidad promedio:", mean_sensibilidad))
[1] "Sensibilidad promedio: 0.071"
Interpretación

Al emplear exclusivamente la Prueba de Lilliefors, observamos los siguientes resultados:

  • Potencia promedio (0.929): La Prueba de Lilliefors demostró tener una potencia razonable para detectar la no normalidad en datos asimétricos. Esto sugiere que en la mayoría de los casos, la prueba identifica correctamente la no normalidad en datos que exhiben asimetría.

  • Sensibilidad promedio (0.071): Sin embargo, también observamos una sensibilidad relativamente alta, lo que significa que la prueba tiende a generar un mayor número de falsos positivos, identificando la no normalidad en datos que son, en realidad, normales.

En resumen, la Prueba de Lilliefors presenta una potencia aceptable para detectar desviaciones de la normalidad en datos asimétricos, pero también tiende a generar falsas alarmas al identificar la no normalidad en datos que son, en realidad, normales.

Potencia y sensibilidad
Código
# Generar datos de una distribución normal
set.seed(123)
datos_normales <- rnorm(100, mean = 0, sd = 1)

# Prueba de Kolmogorov-Smirnov
ks_test <- ks.test(datos_normales, "pnorm")



# Cálculo de la potencia y sensibilidad (simulación)
n_simulaciones <- 1000
potencia <- rep(0, n_simulaciones)
sensibilidad <- rep(0, n_simulaciones)

for (i in 1:n_simulaciones) {
  # Generar datos contaminados con otra distribución (por ejemplo, distribución exponencial)
  datos_contaminados <- c(datos_normales, rexp(100, rate = 1))
  
  # Realizar las pruebas de normalidad en los datos contaminados
  p_value_ks <- ks.test(datos_contaminados, "pnorm")$p.value

  
  # Evaluar si se rechaza la hipótesis nula en cada prueba
  reject_ks <- p_value_ks < 0.05

  
  # Calcular la potencia (proporción de veces que se rechaza la hipótesis nula en datos contaminados)
  # y la sensibilidad (proporción de veces que se rechaza la hipótesis nula en datos normales)
  potencia[i] <- mean(c(reject_ks))
  sensibilidad[i] <- mean(c(!reject_ks))
}

# Resultados de potencia y sensibilidad promedio
mean_potencia <- mean(potencia)
mean_sensibilidad <- mean(sensibilidad)

print(paste("Potencia promedio:", mean_potencia))
[1] "Potencia promedio: 1"
Código
print(paste("Sensibilidad promedio:", mean_sensibilidad))
[1] "Sensibilidad promedio: 0"
Interpretación

La aplicación exclusiva de la Prueba de Kolmogorov-Smirnov en nuestros datos arrojó los siguientes resultados:

  • Potencia promedio (1): La Prueba de Kolmogorov-Smirnov demostró una potencia perfecta, identificando siempre correctamente la no normalidad en los datos asimétricos. Esto significa que en todos los casos, la prueba detectó con precisión que los datos no seguían una distribución normal.

  • Sensibilidad promedio (0): Sin embargo, la sensibilidad fue nula, lo que indica que la prueba no tuvo la capacidad de detectar la no normalidad en datos que eran, de hecho, normales. No se generaron falsos positivos en este escenario.

En resumen, la Prueba de Kolmogorov-Smirnov mostró una potencia perfecta para identificar la no normalidad en datos asimétricos, pero no tuvo la capacidad de identificar la no normalidad en datos normales, lo que resultó en una sensibilidad nula en este último caso.

Conclusión

En esta investigación, hemos llevado a cabo un exhaustivo análisis de varias pruebas de normalidad, evaluando su desempeño en la detección de desviaciones de la normalidad en datos generados a partir de distribuciones asimétricas. A través de este estudio, hemos obtenido resultados reveladores que nos permiten tomar decisiones informadas en futuros análisis de datos.

En primer lugar, aplicamos cinco pruebas de normalidad ampliamente utilizadas: la Prueba de Shapiro-Wilk, la Prueba de Shapiro-Francia, la Prueba de Anderson-Darling, la Prueba de Lilliefors y la Prueba de Kolmogorov-Smirnov. Cada una de estas pruebas tiene sus propias características y enfoques para evaluar la normalidad de los datos.

Luego, generamos datos a partir de distribuciones asimétricas, como la distribución gamma y la distribución log-normal. Aplicamos las pruebas de normalidad a estos datos asimétricos para evaluar su capacidad para detectar la no normalidad. Sin embargo, los resultados iniciales nos mostraron que las pruebas, en su mayoría, identificaban la no normalidad incluso en datos asimétricos.

Para profundizar en la evaluación de las pruebas, contaminamos los datos asimétricos con una distribución normal y volvimos a aplicar las pruebas. Esto nos permitió calcular la potencia y la sensibilidad de cada prueba, indicando cuántas veces detectaron correctamente la no normalidad en datos contaminados y cuántas veces no detectaron la no normalidad en datos normales.

Los resultados mostraron que la Prueba de Anderson-Darling obtuvo la mayor potencia promedio, lo que la convierte en una sólida opción para identificar la no normalidad en datos asimétricos. Sin embargo, su sensibilidad fue baja, lo que significa que fue menos efectiva para no detectar la no normalidad en datos normales.

La Prueba de Shapiro-Wilk también se destacó con una buena potencia promedio y una sensibilidad razonable, lo que la convierte en una opción equilibrada para evaluar la normalidad en ambos tipos de datos.

En última instancia, la elección de la mejor prueba de normalidad dependerá de las preferencias y objetivos del análisis. Estos resultados proporcionan una guía valiosa para los investigadores al seleccionar la prueba más adecuada para sus datos y resaltan la importancia de evaluar el desempeño de las pruebas en condiciones específicas.

Este estudio destaca la importancia de una evaluación crítica de las pruebas estadísticas y su aplicabilidad en el contexto de los datos y el análisis que se está llevando a cabo. Al comprender las fortalezas y limitaciones de las pruebas de normalidad, podemos tomar decisiones más fundamentadas en nuestros análisis de datos, contribuyendo así a la calidad y confiabilidad de la investigación científica.