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.
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-Cuadradoset.seed(123)datos_chi_cuadrado <-rchisq(1000, df =3)# Crear una tabla para los primeros 10 valorestabla_chi_cuadrado <-data.frame("Muestra"=1:10,"Valor"= datos_chi_cuadrado[1:10])# Mostrar la tabla para la distribución Chi-Cuadradotabla_chi_cuadrado
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 graficohist_chi_cuadrado
Simulación de datos de distribución uniforme con R
Código
# Crear datos simulados para la distribución Uniformeset.seed(123)datos_uniforme <-runif(1000, min =0,max =1)# Crear una tabla para los primeros 10 valorestabla_uniforme <-data.frame("Muestra"=1:10,"Valor"= datos_uniforme[1:10])# Mostrar la tabla para la distribución Uniformetabla_uniforme
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 graficohist_uniforme
Simulación de datos de distribución Poisson en R
Código
# Crear datos simulados para la distribución Poissonset.seed(123)datos_poisson <-rpois(1000, lambda =3)# Crear una tabla para los primeros 10 valorestabla_poisson <-data.frame("Muestra"=1:10,"Valor"= datos_poisson[1:10])# Mostrar la tabla para la distribución Poissontabla_poisson
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 Graficohist_poisson
Simulación de datos de distribución Normal en R
Código
library(ggplot2)# Crear datos simulados para la distribución Normalset.seed(123)datos_normal <-rnorm(1000, mean =35, sd =5)# Crear una tabla para los primeros 10 valorestabla_normal <-data.frame("Muestra"=1:10,"Valor"= datos_normal[1:10])# Mostrar la tabla para la distribución Normaltabla_normal
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 graficohist_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.
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")
Ver las pruebas de normalidad
Código
###PRUEBAS DE NORMALIDAD ##PRUEBA FORMAL KOLMOGOROVks.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
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 WILKshapiro.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 DARLINGad.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")
Ver las pruebas de normalidad
Código
###PRUEBAS DE NORMALIDAD ##PRUEBA FORMAL KOLMOGOROVks.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
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 WILKshapiro.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 DARLINGad.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")
ver las pruebas de normalidad
Código
###PRUEBAS DE NORMALIDAD ##PRUEBA FORMAL KOLMOGOROVks.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
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 WILKshapiro.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 DARLINGad.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
Ver las respectivas pruebas
Bondad de ajuste y Normalidad
Código
# Simulación de datos chi-cuadradoset.seed(123)datos_chi_cuadrado <-rchisq(1000, df =3)# Prueba de bondad de ajuste de Kolmogorov-Smirnovks_test <-ks.test(datos_chi_cuadrado, "pchisq", df =3)# Mostrar el resultadoks_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 WILKshapiro.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 DARLINGad.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
Evaluacion y desempeño
Código
library(stats)# Simulación de datos chi-cuadradoset.seed(123)datos_chi_cuadrado <-rchisq(1000, df =3)# Parámetros de la distribución chi-cuadradodf_teórico <-3# Número de simulacionessimulaciones <-1000# Inicializar contador de éxitoexitosas <-0# Realizar simulacionesfor (i in1: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ótesisif (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# resultadoscat("Tasa de éxito:", tasa_exito, "%")
Tasa de éxito: 95.3 %
Potencia y sensibilidad
Uniforme
Ver Pruebas
Bondad de ajuste y Normalidad
Código
# Simulación de datos uniformesset.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 WILKshapiro.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 DARLINGad.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
Evaluacion y desempeño
Código
library(stats)# Simulación de datos uniformesset.seed(123)datos_uniforme <-runif(1000, min =0, max =1) # Parámetros de la distribución uniformemin_teórico <-0max_teórico <-1# Número de simulacionessimulaciones <-1000# Inicializar contador de éxitoexitosas <-0# Realizar simulacionesfor (i in1: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ótesisif (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# resultadoscat("Tasa de éxito:", tasa_exito, "%")
Tasa de éxito: 94.5 %
Potencia y sensibilidad
Poisson
Ver las pruebas respectivas
Bondad de ajuste y normalidad
Código
# Simulación de datos de Poissonset.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 Poissonset.seed(123)datos_poisson <-rpois(1000, lambda =3)# Parámetros de la distribución Poissonlambda_teórico <-3# Calcular las frecuencias observadasfrecuencias_obs <-table(datos_poisson)# Calcular las frecuencias esperadas bajo la distribución Poissonvalores <-as.numeric(names(frecuencias_obs))frecuencias_esp <-dpois(valores, lambda = lambda_teórico) *sum(frecuencias_obs)# Asegurarse de que las frecuencias esperadas sumen 1frecuencias_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 resultadoprueba_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 WILKshapiro.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 DARLINGad.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
Evaluacion y desempeño
Código
library(stats)# Simulación de datos Poissonset.seed(123)datos_poisson <-rpois(1000, lambda =3) # Parámetros de la distribución Poissonlambda_teórico <-3# Número de simulacionessimulaciones <-1000# Inicializar contador de éxitoexitosas <-0# Realizar simulacionesfor (i in1: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ótesisif (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 resultadoscat("Tasa de éxito:", tasa_exito, "%")
Tasa de éxito: 85.1 %
Potencia y sensibilidad
Normal
Ver Pruebas
Bondad de ajuste y Normalidad
Código
# Simulación de datos de una distribución normalset.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 KSks_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 WILKshapiro.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 DARLINGad.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
Evaluacion y desempeño
Código
library(stats)# Simulación de datos normalesset.seed(123)datos_normal <-rnorm(1000, mean =35, sd =5)# Parámetros de la distribución normalmedia_teórica <-35desviación_teórica <-5# Número de simulacionessimulaciones <-1000# Inicializar contador de éxitoexitosas <-0# Realizar simulacionesfor (i in1: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ótesisif (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 resultadoscat("Tasa de éxito:", tasa_exito, "%")
Tasa de éxito: 95.2 %
Potencia y sensibilidad
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.
Click Aqui!!
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:
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.
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.
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.
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.
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.
# Generar datos de una distribución normalset.seed(123)datos_normales <-rnorm(100, mean =0, sd =1)# Prueba de Shapiro-Wilkshapiro_test <-shapiro.test(datos_normales)# Prueba de Kolmogorov-Smirnovks_test <-ks.test(datos_normales, "pnorm")# Prueba de Lillieforslibrary(nortest)lillie_test <-lillie.test(datos_normales)#Prueba de shapiro franciafrancia <-sf.test(datos_normales)# Prueba de Anderson-Darlingad_test <-ad.test(datos_normales)# Cálculo de la potencia y sensibilidad (simulación)n_simulaciones <-1000potencia <-rep(0, n_simulaciones)sensibilidad <-rep(0, n_simulaciones)for (i in1: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 promediomean_potencia <-mean(potencia)mean_sensibilidad <-mean(sensibilidad)print(paste("Potencia promedio:", mean_potencia))
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 normalset.seed(123)datos_normales <-rnorm(100, mean =0, sd =1)# Prueba de Shapiro-Wilkshapiro_test <-shapiro.test(datos_normales)# Cálculo de la potencia y sensibilidad (simulación)n_simulaciones <-1000potencia <-rep(0, n_simulaciones)sensibilidad <-rep(0, n_simulaciones)for (i in1: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 promediomean_potencia <-mean(potencia)mean_sensibilidad <-mean(sensibilidad)print(paste("Potencia promedio:", mean_potencia))
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 normalset.seed(123)datos_normales <-rnorm(100, mean =0, sd =1)#Prueba de shapiro franciafrancia <-sf.test(datos_normales)# Cálculo de la potencia y sensibilidad (simulación)n_simulaciones <-1000potencia <-rep(0, n_simulaciones)sensibilidad <-rep(0, n_simulaciones)for (i in1: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 promediomean_potencia <-mean(potencia)mean_sensibilidad <-mean(sensibilidad)print(paste("Potencia promedio:", mean_potencia))
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 normalset.seed(123)datos_normales <-rnorm(100, mean =0, sd =1)# Prueba de Anderson-Darlingad_test <-ad.test(datos_normales)# Cálculo de la potencia y sensibilidad (simulación)n_simulaciones <-1000potencia <-rep(0, n_simulaciones)sensibilidad <-rep(0, n_simulaciones)for (i in1: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 promediomean_potencia <-mean(potencia)mean_sensibilidad <-mean(sensibilidad)print(paste("Potencia promedio:", mean_potencia))
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 normalset.seed(123)datos_normales <-rnorm(100, mean =0, sd =1)# Prueba de Lillieforslibrary(nortest)lillie_test <-lillie.test(datos_normales)# Cálculo de la potencia y sensibilidad (simulación)n_simulaciones <-1000potencia <-rep(0, n_simulaciones)sensibilidad <-rep(0, n_simulaciones)for (i in1: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 promediomean_potencia <-mean(potencia)mean_sensibilidad <-mean(sensibilidad)print(paste("Potencia promedio:", mean_potencia))
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 normalset.seed(123)datos_normales <-rnorm(100, mean =0, sd =1)# Prueba de Kolmogorov-Smirnovks_test <-ks.test(datos_normales, "pnorm")# Cálculo de la potencia y sensibilidad (simulación)n_simulaciones <-1000potencia <-rep(0, n_simulaciones)sensibilidad <-rep(0, n_simulaciones)for (i in1: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 promediomean_potencia <-mean(potencia)mean_sensibilidad <-mean(sensibilidad)print(paste("Potencia promedio:", mean_potencia))
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.