Potencia de las pruebas de bondad

La función de potencia de una prueba estadística es una medida de la capacidad de la prueba para detectar un efecto o una diferencia cuando esta realmente existe en la población subyacente. Se define como la probabilidad de rechazar la hipótesis nula cuando la hipótesis alternativa es verdadera.

DISTRIBUCIÓN UNIFORME

# Instala y carga las librerías necesarias
# install.packages(c("ggplot2", "pwr"))
library(ggplot2)
library(pwr)

# Función para calcular la potencia de la prueba chi-cuadrado para la distribución uniforme
calcular_potencia_chi_cuadrado_uniforme <- function(tamano_muestra, nivel_significancia, desviacion_uniforme) {
  # Configura la semilla para reproducibilidad
  set.seed(123)
  
  # Genera datos de muestra de una distribución uniforme con desviación
  datos_observados <- runif(tamano_muestra) + desviacion_uniforme
  
  # Realiza la prueba chi-cuadrado
  resultado_prueba <- chisq.test(datos_observados)
  
  # Calcula la potencia de la prueba
  potencia <- pwr.chisq.test(w = resultado_prueba$statistic, df = resultado_prueba$parameter, N = tamano_muestra, sig.level = nivel_significancia)$power
  
  return(potencia)
}

# Parámetros
tamano_muestra <- 100
nivel_significancia <- 0.05
desviacion_uniforme <- 0.2  # Modifica según la magnitud de la desviación que deseas detectar

# Calcula la potencia para diferentes desviaciones
potencias <- sapply(seq(0, 0.5, by = 0.1), function(desviacion) {
  calcular_potencia_chi_cuadrado_uniforme(tamano_muestra, nivel_significancia, desviacion)
})
Warning in chisq.test(datos_observados): Chi-squared approximation may be
incorrect

Warning in chisq.test(datos_observados): Chi-squared approximation may be
incorrect

Warning in chisq.test(datos_observados): Chi-squared approximation may be
incorrect

Warning in chisq.test(datos_observados): Chi-squared approximation may be
incorrect

Warning in chisq.test(datos_observados): Chi-squared approximation may be
incorrect

Warning in chisq.test(datos_observados): Chi-squared approximation may be
incorrect
# Crea un gráfico de la potencia en función de la desviación uniforme
df <- data.frame(Desviacion = seq(0, 0.5, by = 0.1), Potencia = potencias)

ggplot(df, aes(x = Desviacion, y = Potencia)) +
  geom_line() +
  labs(title = "Potencia de la prueba chi-cuadrado para distribución uniforme",
       x = "Desviación uniforme",
       y = "Potencia") +
  theme_minimal()

# Instala y carga la librería necesaria
#install.packages("ggplot2")
library(ggplot2)

# Función para calcular la potencia de la prueba KS para la distribución uniforme
calcular_potencia_ks_manual <- function(tamano_muestra, nivel_significancia, desviacion_uniforme) {
  # Configura la semilla para reproducibilidad
  set.seed(123)
  
  # Número de simulaciones para calcular la potencia
  num_simulaciones <- 1000
  
  # Almacena los resultados de las pruebas
  resultados_pruebas <- numeric(num_simulaciones)
  
  for (i in 1:num_simulaciones) {
    # Genera datos de muestra de una distribución uniforme con desviación
    datos_observados <- runif(tamano_muestra) + desviacion_uniforme
    
    # Realiza la prueba KS
    resultado_prueba <- ks.test(datos_observados, "punif")
    
    # Almacena el estadístico de la prueba
    resultados_pruebas[i] <- resultado_prueba$statistic
  }
  
  # Calcula la potencia de la prueba como la proporción de veces que el estadístico es mayor al valor crítico
  potencia <- mean(resultados_pruebas > qnorm(1 - nivel_significancia))
  
  return(potencia)
}

# Parámetros
tamano_muestra <- 100
nivel_significancia <- 0.05

# Calcula la potencia para diferentes desviaciones
desviaciones <- seq(0, 0.5, by = 0.1)
potencias <- sapply(desviaciones, function(desviacion) {
  calcular_potencia_ks_manual(tamano_muestra, nivel_significancia, desviacion)
})

# Crea un gráfico de la potencia en función de la desviación uniforme
df <- data.frame(Desviacion = desviaciones, Potencia = potencias)

ggplot(df, aes(x = Desviacion, y = Potencia)) +
  geom_line() +
  labs(title = "Potencia de la prueba KS para distribución uniforme",
       x = "Desviación uniforme",
       y = "Potencia") +
  theme_minimal()

Bajo la hipótesis nula la potencia es de 0.03, ahora veamos la prueba bajo un sesgo de datos

# Instala y carga la librería necesaria
#install.packages("ggplot2")
library(ggplot2)

# Función para calcular la potencia de la prueba KS para la distribución uniforme
calcular_potencia_ks_manual <- function(tamano_muestra, nivel_significancia, desviacion_uniforme) {
  # Configura la semilla para reproducibilidad
  set.seed(123)
  
  # Número de simulaciones para calcular la potencia
  num_simulaciones <- 1000
  
  # Almacena los resultados de las pruebas
  resultados_pruebas <- numeric(num_simulaciones)
  
  for (i in 1:num_simulaciones) {
    # Genera datos de muestra de una distribución uniforme con desviación
    datos_observados <- runif(tamano_muestra) + desviacion_uniforme
    
    # Realiza la prueba KS
    resultado_prueba <- ks.test(datos_observados, "punif")
    
    # Almacena el estadístico de la prueba
    resultados_pruebas[i] <- resultado_prueba$statistic
  }
  
  # Calcula la potencia de la prueba como la proporción de veces que el estadístico es mayor al valor crítico
  potencia <- mean(resultados_pruebas > qnorm(1 - nivel_significancia))
  
  return(potencia)
}

# Parámetros
tamano_muestra <- 100
nivel_significancia <- 0.05

# Calcula la potencia para diferentes desviaciones
desviaciones <- seq(0, 0.5, by = 0.1)
potencias <- sapply(desviaciones, function(desviacion) {
  calcular_potencia_ks_manual(tamano_muestra, nivel_significancia, desviacion)
})

# Crea un gráfico de la potencia en función de la desviación uniforme
df <- data.frame(Desviacion = desviaciones, Potencia = potencias)

ggplot(df, aes(x = Desviacion, y = Potencia)) +
  geom_line() +
  labs(title = "Potencia de la prueba KS para distribución uniforme",
       x = "Desviación uniforme",
       y = "Potencia") +
  theme_minimal()

Gráfica para KS

#ggplot(c(), aes(x = 1:tamano_muestra, y = pks)) +
#  geom_line() +
#$  labs(title = "Potencia prueba Kolmogorov Smirnov",
#       x = "sesgo",
#       y = "Potencia") 

CHI CUADRADO - GAMMA

Como la distribución chi cudrado es un caso particular de la gamma, se tiene

# Instala y carga las librerías necesarias
#install.packages("ggplot2")
library(ggplot2)

# Función para calcular la potencia de la prueba chi-cuadrado para distribución gamma
calcular_potencia_chi_cuadrado_gamma <- function(tamano_muestra, nivel_significancia, forma, escala) {
  # Configura la semilla para reproducibilidad
  set.seed(123)
  
  # Genera datos de muestra de una distribución gamma
  datos_observados <- rgamma(tamano_muestra, shape = forma, scale = escala)
  
  # Realiza la prueba chi-cuadrado
  resultado_prueba <- chisq.test(datos_observados)
  
  # Calcula la potencia de la prueba
  potencia <- 1 - pchisq(resultado_prueba$statistic, df = tamano_muestra - 1)
  
  return(potencia)
}

# Parámetros de la distribución gamma
forma <- 2
escala <- 1

# Parámetros para la potencia
tamano_muestra <- seq(50, 200, by = 10)
nivel_significancia <- 0.05

# Calcula la potencia para diferentes tamaños de muestra
potencias <- sapply(tamano_muestra, function(n) {
  calcular_potencia_chi_cuadrado_gamma(n, nivel_significancia, forma, escala)
})
Warning in chisq.test(datos_observados): Chi-squared approximation may be
incorrect

Warning in chisq.test(datos_observados): Chi-squared approximation may be
incorrect

Warning in chisq.test(datos_observados): Chi-squared approximation may be
incorrect

Warning in chisq.test(datos_observados): Chi-squared approximation may be
incorrect

Warning in chisq.test(datos_observados): Chi-squared approximation may be
incorrect

Warning in chisq.test(datos_observados): Chi-squared approximation may be
incorrect

Warning in chisq.test(datos_observados): Chi-squared approximation may be
incorrect

Warning in chisq.test(datos_observados): Chi-squared approximation may be
incorrect

Warning in chisq.test(datos_observados): Chi-squared approximation may be
incorrect

Warning in chisq.test(datos_observados): Chi-squared approximation may be
incorrect

Warning in chisq.test(datos_observados): Chi-squared approximation may be
incorrect

Warning in chisq.test(datos_observados): Chi-squared approximation may be
incorrect

Warning in chisq.test(datos_observados): Chi-squared approximation may be
incorrect

Warning in chisq.test(datos_observados): Chi-squared approximation may be
incorrect

Warning in chisq.test(datos_observados): Chi-squared approximation may be
incorrect

Warning in chisq.test(datos_observados): Chi-squared approximation may be
incorrect
# Crea un gráfico de la potencia en función del tamaño de muestra
df <- data.frame(N = tamano_muestra, Potencia = potencias)

ggplot(df, aes(x = N, y = Potencia)) +
  geom_line() +
  labs(title = "Potencia de la prueba chi-cuadrado para distribución gamma",
       x = "Tamaño de la muestra",
       y = "Potencia") +
  theme_minimal()

# Instala y carga las librerías necesarias
#install.packages("ggplot2")
library(ggplot2)

# Función para calcular la potencia de la prueba KS para distribución gamma
calcular_potencia_ks_gamma <- function(tamano_muestra, nivel_significancia, forma, escala) {
  # Configura la semilla para reproducibilidad
  set.seed(123)
  
  # Genera datos de muestra de una distribución gamma
  datos_observados <- rgamma(tamano_muestra, shape = forma, scale = escala)
  
  # Realiza la prueba Kolmogorov-Smirnov
  resultado_prueba <- ks.test(datos_observados, "pgamma", shape = forma, scale = escala)
  
  # Calcula la potencia de la prueba
  potencia <- resultado_prueba$p.value
  
  return(potencia)
}

# Parámetros de la distribución gamma
forma <- 2
escala <- 1

# Parámetros para la potencia
tamano_muestra <- seq(50, 200, by = 10)
nivel_significancia <- 0.05

# Calcula la potencia para diferentes tamaños de muestra
potencias <- sapply(tamano_muestra, function(n) {
  calcular_potencia_ks_gamma(n, nivel_significancia, forma, escala)
})

# Crea un gráfico de la potencia en función del tamaño de muestra
df <- data.frame(N = tamano_muestra, Potencia = potencias)

ggplot(df, aes(x = N, y = Potencia)) +
  geom_line() +
  labs(title = "Potencia de la prueba KS para distribución gamma",
       x = "Tamaño de la muestra",
       y = "Potencia") +
  theme_minimal()

ANÁLISIS COMPARATIVO

# Instala y carga las librerías necesarias
# install.packages("ggplot2")
library(ggplot2)

# Función para calcular la potencia de la prueba chi-cuadrado para distribución gamma
calcular_potencia_chi_cuadrado_gamma <- function(tamano_muestra, nivel_significancia, forma, escala) {
  # Configura la semilla para reproducibilidad
  set.seed(123)
  
  # Genera datos de muestra de una distribución gamma
  datos_observados <- rgamma(tamano_muestra, shape = forma, scale = escala)
  
  # Realiza la prueba chi-cuadrado
  resultado_prueba <- chisq.test(datos_observados)
  
  # Calcula la potencia de la prueba
  potencia <- 1 - pchisq(resultado_prueba$statistic, df = tamano_muestra - 1)
  
  return(potencia)
}

# Función para calcular la potencia de la prueba KS para distribución gamma
calcular_potencia_ks_gamma <- function(tamano_muestra, nivel_significancia, forma, escala) {
  # Configura la semilla para reproducibilidad
  set.seed(123)
  
  # Genera datos de muestra de una distribución gamma
  datos_observados <- rgamma(tamano_muestra, shape = forma, scale = escala)
  
  # Realiza la prueba Kolmogorov-Smirnov
  resultado_prueba <- ks.test(datos_observados, "pgamma", shape = forma, scale = escala)
  
  # Calcula la potencia de la prueba
  potencia <- resultado_prueba$p.value
  
  return(potencia)
}

# Parámetros de la distribución gamma
forma <- 2
escala <- 1

# Parámetros para la potencia
tamano_muestra <- seq(50, 200, by = 10)
nivel_significancia <- 0.05

# Calcula la potencia para diferentes tamaños de muestra para chi-cuadrado
potencias_chi_cuadrado <- sapply(tamano_muestra, function(n) {
  calcular_potencia_chi_cuadrado_gamma(n, nivel_significancia, forma, escala)
})
Warning in chisq.test(datos_observados): Chi-squared approximation may be
incorrect

Warning in chisq.test(datos_observados): Chi-squared approximation may be
incorrect

Warning in chisq.test(datos_observados): Chi-squared approximation may be
incorrect

Warning in chisq.test(datos_observados): Chi-squared approximation may be
incorrect

Warning in chisq.test(datos_observados): Chi-squared approximation may be
incorrect

Warning in chisq.test(datos_observados): Chi-squared approximation may be
incorrect

Warning in chisq.test(datos_observados): Chi-squared approximation may be
incorrect

Warning in chisq.test(datos_observados): Chi-squared approximation may be
incorrect

Warning in chisq.test(datos_observados): Chi-squared approximation may be
incorrect

Warning in chisq.test(datos_observados): Chi-squared approximation may be
incorrect

Warning in chisq.test(datos_observados): Chi-squared approximation may be
incorrect

Warning in chisq.test(datos_observados): Chi-squared approximation may be
incorrect

Warning in chisq.test(datos_observados): Chi-squared approximation may be
incorrect

Warning in chisq.test(datos_observados): Chi-squared approximation may be
incorrect

Warning in chisq.test(datos_observados): Chi-squared approximation may be
incorrect

Warning in chisq.test(datos_observados): Chi-squared approximation may be
incorrect
# Calcula la potencia para diferentes tamaños de muestra para KS
potencias_ks <- sapply(tamano_muestra, function(n) {
  calcular_potencia_ks_gamma(n, nivel_significancia, forma, escala)
})

# Crea un dataframe con los resultados
df_chi_cuadrado <- data.frame(N = tamano_muestra, Potencia = potencias_chi_cuadrado, Prueba = "Chi-Cuadrado")
df_ks <- data.frame(N = tamano_muestra, Potencia = potencias_ks, Prueba = "Kolmogorov-Smirnov")
df <- rbind(df_chi_cuadrado, df_ks)

# Crea un gráfico de línea para visualizar las potencias
ggplot(df, aes(x = N, y = Potencia, color = Prueba, linetype = Prueba)) +
  geom_line() +
  labs(title = "Comparación de Potencias entre Chi-Cuadrado y Kolmogorov-Smirnov",
       x = "Tamaño de la muestra",
       y = "Potencia") +
  theme_minimal() +
  scale_color_manual(values = c("Chi-Cuadrado" = "blue", "Kolmogorov-Smirnov" = "red"))

En este caso la chi cudrado resulta ser más potente para la bondad de la gamma, como la chi es un caso particular de la gamma, la chi queda más potente con la prueba de bondad chi

POISSON

Prueba Chi-Cuadrado para Distribución Poisson:

# Instala y carga las librerías necesarias
# install.packages("ggplot2")
library(ggplot2)

# Función para calcular la potencia de la prueba chi-cuadrado para distribución Poisson
calcular_potencia_chi_cuadrado_poisson <- function(tamano_muestra, nivel_significancia, lambda) {
  # Configura la semilla para reproducibilidad
  set.seed(123)
  
  # Genera datos de muestra de una distribución Poisson
  datos_observados <- rpois(tamano_muestra, lambda)
  
  # Realiza la prueba chi-cuadrado
  resultado_prueba <- chisq.test(table(datos_observados))
  
  # Calcula la potencia de la prueba
  potencia <- 1 - pchisq(resultado_prueba$statistic, df = resultado_prueba$parameter)
  
  return(potencia)
}

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

# Parámetros para la potencia
tamano_muestra <- seq(50, 200, by = 10)
nivel_significancia <- 0.05

# Calcula la potencia para diferentes tamaños de muestra para chi-cuadrado
potencias_chi_cuadrado <- sapply(tamano_muestra, function(n) {
  calcular_potencia_chi_cuadrado_poisson(n, nivel_significancia, lambda)
})

Prueba Kolmogorov-Smirnov para Distribución Poisson:

# Instala y carga las librerías necesarias
#install.packages("ggplot2")
library(ggplot2)

# Función para calcular la potencia de la prueba KS para distribución Poisson
calcular_potencia_ks_poisson <- function(tamano_muestra, nivel_significancia, lambda) {
  # Configura la semilla para reproducibilidad
  set.seed(123)
  
  # Genera datos de muestra de una distribución Poisson
  datos_observados <- rpois(tamano_muestra, lambda)
  
  # Realiza la prueba Kolmogorov-Smirnov
  resultado_prueba <- ks.test(datos_observados, "ppois", lambda = lambda)
  
  # Calcula la potencia de la prueba
  potencia <- resultado_prueba$p.value
  
  return(potencia)
}

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

# Parámetros para la potencia
tamano_muestra <- seq(50, 200, by = 10)
nivel_significancia <- 0.05

# Calcula la potencia para diferentes tamaños de muestra para KS
potencias_ks <- sapply(tamano_muestra, function(n) {
  calcular_potencia_ks_poisson(n, nivel_significancia, lambda)
})
Warning in ks.test.default(datos_observados, "ppois", lambda = lambda): ties
should not be present for the Kolmogorov-Smirnov test

Warning in ks.test.default(datos_observados, "ppois", lambda = lambda): ties
should not be present for the Kolmogorov-Smirnov test

Warning in ks.test.default(datos_observados, "ppois", lambda = lambda): ties
should not be present for the Kolmogorov-Smirnov test

Warning in ks.test.default(datos_observados, "ppois", lambda = lambda): ties
should not be present for the Kolmogorov-Smirnov test

Warning in ks.test.default(datos_observados, "ppois", lambda = lambda): ties
should not be present for the Kolmogorov-Smirnov test

Warning in ks.test.default(datos_observados, "ppois", lambda = lambda): ties
should not be present for the Kolmogorov-Smirnov test

Warning in ks.test.default(datos_observados, "ppois", lambda = lambda): ties
should not be present for the Kolmogorov-Smirnov test

Warning in ks.test.default(datos_observados, "ppois", lambda = lambda): ties
should not be present for the Kolmogorov-Smirnov test

Warning in ks.test.default(datos_observados, "ppois", lambda = lambda): ties
should not be present for the Kolmogorov-Smirnov test

Warning in ks.test.default(datos_observados, "ppois", lambda = lambda): ties
should not be present for the Kolmogorov-Smirnov test

Warning in ks.test.default(datos_observados, "ppois", lambda = lambda): ties
should not be present for the Kolmogorov-Smirnov test

Warning in ks.test.default(datos_observados, "ppois", lambda = lambda): ties
should not be present for the Kolmogorov-Smirnov test

Warning in ks.test.default(datos_observados, "ppois", lambda = lambda): ties
should not be present for the Kolmogorov-Smirnov test

Warning in ks.test.default(datos_observados, "ppois", lambda = lambda): ties
should not be present for the Kolmogorov-Smirnov test

Warning in ks.test.default(datos_observados, "ppois", lambda = lambda): ties
should not be present for the Kolmogorov-Smirnov test

Warning in ks.test.default(datos_observados, "ppois", lambda = lambda): ties
should not be present for the Kolmogorov-Smirnov test

ANÁLISIS COMPARATIVO

# Instala y carga las librerías necesarias
#install.packages("ggplot2")
library(ggplot2)


# Combina las potencias en un único dataframe
df_chi_cuadrado <- data.frame(N = tamano_muestra, Potencia = potencias_chi_cuadrado, Prueba = "Chi-Cuadrado")
df_ks <- data.frame(N = tamano_muestra, Potencia = potencias_ks, Prueba = "Kolmogorov-Smirnov")

# Crea un dataframe con datos adicionales para la prueba bondad de ajuste
df_bondad <- data.frame(
  N = tamano_muestra,
  Potencia = pmin(potencias_chi_cuadrado, potencias_ks),
  Prueba = "Bondad de Ajuste"
)

# Combina todos los dataframes
df <- rbind(df_chi_cuadrado, df_ks, df_bondad)

# Crea un gráfico de línea para visualizar las potencias
ggplot(df, aes(x = N, y = Potencia, color = Prueba, linetype = Prueba)) +
  geom_line() +
  labs(title = "Comparación de Potencias para Prueba de Bondad de Ajuste",
       x = "Tamaño de la muestra",
       y = "Potencia") +
  theme_minimal() +
  scale_color_manual(values = c("Chi-Cuadrado" = "blue", "Kolmogorov-Smirnov" = "red", "Bondad de Ajuste" = "green"))

# Instala y carga las librerías necesarias
install.packages("ggplot2")
Warning: package 'ggplot2' is in use and will not be installed
library(ggplot2)

# Función para calcular la potencia de la prueba chi-cuadrado para distribución gamma
calcular_potencia_chi_cuadrado_gamma <- function(tamano_muestra, nivel_significancia, forma, escala) {
  # Configura la semilla para reproducibilidad
  set.seed(123)
  
  # Genera datos de muestra de una distribución gamma
  datos_observados <- rgamma(tamano_muestra, shape = forma, scale = escala)
  
  # Realiza la prueba chi-cuadrado
  resultado_prueba <- chisq.test(datos_observados)
  
  # Calcula la potencia de la prueba
  potencia <- 1 - pchisq(resultado_prueba$statistic, df = tamano_muestra - 1)
  
  return(potencia)
}

# Parámetros de la distribución gamma
forma <- 2
escala <- 1

# Parámetros para la potencia
tamano_muestra <- seq(50, 200, by = 10)
nivel_significancia <- 0.05

# Calcula la potencia para diferentes tamaños de muestra para chi-cuadrado
potencias_chi_cuadrado <- sapply(tamano_muestra, function(n) {
  calcular_potencia_chi_cuadrado_gamma(n, nivel_significancia, forma, escala)
})
Warning in chisq.test(datos_observados): Chi-squared approximation may be
incorrect
Warning in chisq.test(datos_observados): Chi-squared approximation may be
incorrect

Warning in chisq.test(datos_observados): Chi-squared approximation may be
incorrect

Warning in chisq.test(datos_observados): Chi-squared approximation may be
incorrect

Warning in chisq.test(datos_observados): Chi-squared approximation may be
incorrect

Warning in chisq.test(datos_observados): Chi-squared approximation may be
incorrect

Warning in chisq.test(datos_observados): Chi-squared approximation may be
incorrect

Warning in chisq.test(datos_observados): Chi-squared approximation may be
incorrect

Warning in chisq.test(datos_observados): Chi-squared approximation may be
incorrect

Warning in chisq.test(datos_observados): Chi-squared approximation may be
incorrect

Warning in chisq.test(datos_observados): Chi-squared approximation may be
incorrect

Warning in chisq.test(datos_observados): Chi-squared approximation may be
incorrect

Warning in chisq.test(datos_observados): Chi-squared approximation may be
incorrect

Warning in chisq.test(datos_observados): Chi-squared approximation may be
incorrect

Warning in chisq.test(datos_observados): Chi-squared approximation may be
incorrect

Warning in chisq.test(datos_observados): Chi-squared approximation may be
incorrect
# Crea un gráfico de línea para visualizar las potencias de chi-cuadrado
df_chi_cuadrado <- data.frame(N = tamano_muestra, Potencia = potencias_chi_cuadrado, Prueba = "Chi-Cuadrado")

ggplot(df_chi_cuadrado, aes(x = N, y = Potencia)) +
  geom_line() +
  labs(title = "Potencia de la prueba chi-cuadrado para distribución gamma",
       x = "Tamaño de la muestra",
       y = "Potencia") +
  theme_minimal()

Potencia de la prueba de Shapiro Wilk

# Instala y carga la librería para generar gráficos
#install.packages("ggplot2")
library(ggplot2)

# Establece la semilla para reproducibilidad
set.seed(123)

# Número de iteraciones
num_iteraciones <- 1000

# Tamaño de la muestra
tamano_muestra <- 50

# Nivel de significancia
nivel_significancia <- 0.05

# Vector para almacenar los resultados de las pruebas
resultados <- numeric(num_iteraciones)

# Realiza las iteraciones
for (i in 1:num_iteraciones) {
  # Genera datos de muestra de una distribución normal
  muestra <- rnorm(tamano_muestra)
  
  # Realiza la prueba de Kolmogorov-Smirnov
  resultado_prueba <- shapiro.test(muestra)
  
  # Almacena el p-valor en el vector de resultados
  resultados[i] <- resultado_prueba$p.value
}

# Calcula la potencia de la prueba (1 - tasa de error tipo II)
potencia <- sum(resultados < nivel_significancia) / num_iteraciones

# Imprime la potencia de la prueba
cat("Potencia de la prueba de shapiro para la normalidad:", potencia, "\n")
Potencia de la prueba de shapiro para la normalidad: 0.046 
# Crea un gráfico de densidad de los p-valores
ggplot() +
  geom_density(aes(x = resultados), fill = "blue", alpha = 0.5) +
  geom_vline(xintercept = nivel_significancia, linetype = "dashed", color = "red") +
  labs(title = "Distribución de p-valores de la prueba de Shapiro",
       x = "p-valor",
       y = "Densidad") +
  theme_minimal()

Potencia para la prueba Shapiro

tamano_muestra <- 50
psw<-rep(0,tamano_muestra)
for(j in 1:50){
  potencia <-0
for (i in 1:num_iteraciones) {
  # Genera datos de muestra de una distribución normal
  muestra <- c(rnorm(tamano_muestra-j),rgamma(j,3,2))
  
  # Realiza la prueba de shapiro.test
  resultado_prueba <- shapiro.test(muestra)
  
  # Almacena el p-valor en el vector de resultados
  resultados[i] <- resultado_prueba$p.value
}

# Calcula la potencia de la prueba (1 - tasa de error tipo II)
potencia <- sum(resultados < nivel_significancia) / num_iteraciones
psw[j]<-potencia
}
psw
 [1] 0.059 0.073 0.079 0.098 0.089 0.092 0.099 0.094 0.094 0.092 0.102 0.106
[13] 0.100 0.092 0.100 0.089 0.093 0.092 0.111 0.109 0.108 0.101 0.118 0.108
[25] 0.128 0.129 0.133 0.151 0.140 0.157 0.172 0.212 0.200 0.220 0.247 0.231
[37] 0.276 0.288 0.308 0.337 0.366 0.377 0.404 0.446 0.517 0.531 0.583 0.621
[49] 0.696 0.844

# Gráfico de la potencia

d<-data.frame(tamano_muestra = 1:tamano_muestra,potencia = psw)
ggplot(d,aes(x = tamano_muestra, y = psw)) +
  geom_line() + labs(title = "Potencia prueba Shapiro",
       x = "sesgo",
       y = "Potencia") 

Para un tamaño de muestra n=50, es más potente el test de Kolmogorov Smirnov que el test de Shapiro

Test de Anderson-Darling

# Potencia de la prueba de Anderson-Darling

#install.packages("cramer")
#install.packages("boot")
library(nortest)
# Instala y carga la librería para generar gráficos
#install.packages("ggplot2")
library(ggplot2)

# Establece la semilla para reproducibilidad
set.seed(123)

# Número de iteraciones
num_iteraciones <- 1000

# Tamaño de la muestra
tamano_muestra <- 50

# Nivel de significancia
nivel_significancia <- 0.05

# Vector para almacenar los resultados de las pruebas
resultados <- numeric(num_iteraciones)

# Realiza las iteraciones
for (i in 1:num_iteraciones) {
  # Genera datos de muestra de una distribución normal
  muestra <- rnorm(tamano_muestra)
  
  # Realiza la prueba de Kolmogorov-Smirnov
  resultado_prueba <- ad.test(muestra)
  
  # Almacena el p-valor en el vector de resultados
  resultados[i] <- resultado_prueba$p.value
}

# Calcula la potencia de la prueba (1 - tasa de error tipo II)
potencia <- sum(resultados < nivel_significancia) / num_iteraciones

# Imprime la potencia de la prueba
cat("Potencia de la prueba de shapiro para la normalidad:", potencia, "\n")
Potencia de la prueba de shapiro para la normalidad: 0.051 
# Crea un gráfico de densidad de los p-valores
ggplot() +
  geom_density(aes(x = resultados), fill = "blue", alpha = 0.5) +
  geom_vline(xintercept = nivel_significancia, linetype = "dashed", color = "red") +
  labs(title = "Distribución de p-valores de la prueba de AD",
       x = "p-valor",
       y = "Densidad") +
  theme_minimal()

Potencia para la prueba AD

tamano_muestra <- 50
pad<-rep(0,tamano_muestra)
for(j in 1:50){
  potencia <-0
for (i in 1:num_iteraciones) {
  # Genera datos de muestra de una distribución normal
  muestra <- c(rnorm(tamano_muestra-j),rgamma(j,3,2))
  
  # Realiza la prueba de shapiro.test
  resultado_prueba <- ad.test(muestra)
  
  # Almacena el p-valor en el vector de resultados
  resultados[i] <- resultado_prueba$p.value
}

# Calcula la potencia de la prueba (1 - tasa de error tipo II)
potencia <- sum(resultados < nivel_significancia) / num_iteraciones
pad[j]<-potencia
}
pad
 [1] 0.050 0.064 0.058 0.063 0.061 0.068 0.079 0.077 0.067 0.071 0.076 0.073
[13] 0.072 0.075 0.074 0.058 0.090 0.074 0.081 0.092 0.097 0.091 0.106 0.115
[25] 0.136 0.156 0.142 0.164 0.183 0.188 0.194 0.249 0.241 0.279 0.279 0.272
[37] 0.309 0.341 0.359 0.367 0.384 0.400 0.422 0.452 0.531 0.512 0.565 0.587
[49] 0.621 0.751

Gráfico de la potencia

ggplot(c(),aes(x = 1:tamano_muestra, y = pad)) +
  geom_line() +
  labs(title = "Potencia prueba AD",
       x = "sesgo",
       y = "Potencia") 

# Test de Jarque Vera

# Potencia de la prueba de Jarque Vera

#install.packages("cramer")
#install.packages("boot")
library(tseries)
Registered S3 method overwritten by 'quantmod':
  method            from
  as.zoo.data.frame zoo 
# Instala y carga la librería para generar gráficos
#install.packages("ggplot2")
library(ggplot2)

# Establece la semilla para reproducibilidad
set.seed(123)

# Número de iteraciones
num_iteraciones <- 1000

# Tamaño de la muestra
tamano_muestra <- 50

# Nivel de significancia
nivel_significancia <- 0.05

# Vector para almacenar los resultados de las pruebas
resultados <- numeric(num_iteraciones)

# Realiza las iteraciones
for (i in 1:num_iteraciones) {
  # Genera datos de muestra de una distribución normal
  muestra <- rnorm(tamano_muestra)
  
  # Realiza la prueba de Kolmogorov-Smirnov
  resultado_prueba <- jarque.bera.test(muestra)
  
  # Almacena el p-valor en el vector de resultados
  resultados[i] <- resultado_prueba$p.value
}

# Calcula la potencia de la prueba (1 - tasa de error tipo II)
potencia <- sum(resultados < nivel_significancia) / num_iteraciones

# Imprime la potencia de la prueba
cat("Potencia de la prueba de Jarque para la normalidad:", potencia, "\n")
Potencia de la prueba de Jarque para la normalidad: 0.033 
# Crea un gráfico de densidad de los p-valores
ggplot() +
  geom_density(aes(x = resultados), fill = "blue", alpha = 0.5) +
  geom_vline(xintercept = nivel_significancia, linetype = "dashed", color = "red") +
  labs(title = "Distribución de p-valores de la prueba de JV",
       x = "p-valor",
       y = "Densidad") +
  theme_minimal()

Potencia para la prueba JV

tamano_muestra <- 50
pjv<-rep(0,tamano_muestra)
for(j in 1:50){
  potencia <-0
for (i in 1:num_iteraciones) {
  # Genera datos de muestra de una distribución normal
  muestra <- c(rnorm(tamano_muestra-j),rgamma(j,3,2))
  
  # Realiza la prueba de shapiro.test
  resultado_prueba <- jarque.bera.test(muestra)
  
  # Almacena el p-valor en el vector de resultados
  resultados[i] <- resultado_prueba$p.value
}

# Calcula la potencia de la prueba (1 - tasa de error tipo II)
potencia <- sum(resultados < nivel_significancia) / num_iteraciones
pjv[j]<-potencia
}
pjv
 [1] 0.052 0.070 0.071 0.097 0.083 0.098 0.096 0.098 0.104 0.095 0.103 0.109
[13] 0.092 0.094 0.098 0.082 0.087 0.097 0.109 0.101 0.109 0.086 0.101 0.089
[25] 0.106 0.123 0.115 0.127 0.123 0.138 0.150 0.159 0.169 0.194 0.221 0.210
[37] 0.250 0.279 0.272 0.295 0.338 0.337 0.377 0.405 0.466 0.475 0.490 0.513
[49] 0.547 0.627

Gráfico de la potencia

ggplot(c(),aes(x = 1:tamano_muestra, y = pjv)) +
  geom_line() +
  labs(title = "Potencia prueba JV",
       x = "sesgo",
       y = "Potencia") 

ANÁLISIS COMPORATIVO

# Instala y carga la librería ggplot2 si aún no lo has hecho
library(ggplot2)

# Crea datos de ejemplo con múltiples trayectorias
num_trayectorias <- 3
num_puntos <- 50

datos <- data.frame(
  x = 1:tamano_muestra,
  y = as.matrix(c(psw,pad,pjv),ncol = num_trayectorias)
)

# Crea el gráfico con ggplot2
ggplot(datos, aes(x = x, y = y, group = rep(1:num_trayectorias, each = num_puntos), color = factor(rep(1:num_trayectorias, each = num_puntos)))) +
  geom_line() +
  geom_line() +
  labs(title = "Trayectorias múltiples",
       x = "Eje X",
       y = "Eje Y",
       color = "Trayectoria") +
  theme_minimal()