En la generación de números pseudoaleatorios, uno de los aspectos fundamentales es evaluar si los valores producidos por un algoritmo se comportan como verdaderamente aleatorios dentro de un intervalo determinado. En particular, para muchos métodos de simulación y modelado estadístico se requiere que los números generados provengan de una distribución uniforme en el intervalo (0,1), ya que esta constituye la base para la transformación hacia otras distribuciones de probabilidad.
La prueba de bondad de ajuste Chi-Cuadrada es una de las herramientas estadísticas más utilizadas para verificar esta propiedad. Su objetivo es contrastar la hipótesis nula de que los números pseudoaleatorios siguen una distribución uniforme, frente a la hipótesis alternativa de que no lo hacen. Para ello, el intervalo de generación se divide en un número de clases o subintervalos iguales, y se comparan las frecuencias observadas de los números generados en cada clase con las frecuencias esperadas bajo una distribución perfectamente uniforme.
Si las diferencias entre las frecuencias observadas y las esperadas son pequeñas, el estadístico Chi-Cuadrada resultante será bajo y no habrá evidencia suficiente para rechazar la hipótesis de uniformidad. En cambio, valores altos del estadístico indicarían que los números generados presentan sesgos o patrones, lo cual comprometería su validez como pseudoaleatorios.
De este modo, la prueba Chi-Cuadrada se convierte en un procedimiento esencial dentro del análisis de calidad de generadores de números aleatorios, permitiendo establecer si los datos se ajustan a la distribución uniforme que se espera de un generador confiable.
\[ \chi^2 = \sum_{i=1}^{k} \frac{(O_i - E_i)^2}{E_i} \]
Ejemplo
a <- 12837
c <- 5498
m <- 3564789725
X_n <-40 # semilla
random.number<-numeric(50) # vector numérico de longitud 50
for (i in 1:50)
{X_n<-(a*X_n+c)%%m
random.number[i]<-X_n/m # números en el intervalo [0,1]
}
random.number
## [1] 0.0001455845 0.8688693017 0.6752272200 0.8918250557 0.3582413583
## [6] 0.7443175429 0.8042995077 0.7927823499 0.9470269030 0.9843549465
## [11] 0.1644496327 0.0399367679 0.6682915801 0.8590151258 0.1771711797
## [16] 0.3464354928 0.1924222243 0.1240947147 0.0038545446 0.4807906278
## [21] 0.9092911232 0.5701499992 0.0155417880 0.5099334842 0.0161385432
## [26] 0.1704806877 0.4605901814 0.5961598478 0.9039681290 0.2388735633
## [31] 0.4199335309 0.6867372184 0.6456744045 0.5223326234 0.1838883852
## [36] 0.5752019665 0.8676455784 0.9662921041 0.2917417144 0.0883898461
## [41] 0.6604553100 0.2648163375 0.4473262742 0.3273834812 0.6217500074
## [46] 0.4048469027 0.0196917073 0.7824486899 0.2938334457 0.9399436594
library(agricolae)
histo <- hist(random.number, breaks=6)
Tabla <- table.freq(histo)
lim_inf <-Tabla$Lower #limite inferior del intervalo
lim_sup <- Tabla$Upper # limite superior del intervalo
obser <- Tabla$Frequency
Ei <- length(random.number)/length(obser) # Valor esperado en una uniforme es E= n/#intervalos
cbind(lim_inf,lim_sup,obser,Ei) # visualizacion de las frecuencias observadas y esperadas en los intervalos.
## lim_inf lim_sup obser Ei
## [1,] 0.0 0.2 13 10
## [2,] 0.2 0.4 7 10
## [3,] 0.4 0.6 10 10
## [4,] 0.6 0.8 9 10
## [5,] 0.8 1.0 11 10
# calculando la estadística chi cuadrada
x2 <- (obser-Ei)^2/Ei
x2
## [1] 0.9 0.9 0.0 0.1 0.1
chicuad <- sum(x2)
chicuad # Estadistica chi cuadrada
## [1] 2
dchi <- qchisq(0.05,length(obser)-1,lower.tail=F)# valor de la distribución chi cuadrada con k-1 grado de libertad y nivel de signiicancia 0.05
# Decisión estadística
ifelse(chicuad < dchi,"Los $U_i$ provienen de una distribución uniforme [0,1]", "Los $U_i no siguen una uniforme [0,1] ")
## [1] "Los $U_i$ provienen de una distribución uniforme [0,1]"
La prueba de bondad de ajuste Chi-Cuadrada permite verificar si los números pseudoaleatorios siguen una distribución uniforme en el intervalo \([0,1]\). El estadístico de prueba se define como:
\[ \chi^2 = \sum_{i=1}^{k} \frac{(O_i - E_i)^2}{E_i} \]
donde \(k\) es el número de clases en que se divide el intervalo, \(O_i\) representa la frecuencia observada en la clase \(i\), y \(E_i = \frac{n}{k}\) es la frecuencia esperada en cada clase bajo la hipótesis de uniformidad, siendo \(n\) el total de observaciones.
Al comparar este estadístico con el valor crítico \(\chi^2_{\alpha,\,k-1}\), correspondiente a un nivel de significancia \(\alpha = 0.05\) y \(k-1\) grados de libertad, se obtuvo que:
\[ \chi^2 < \chi^2_{\alpha,\,k-1} \]
Por lo tanto, no se rechaza la hipótesis nula y se concluye que los números \(U_i\) provienen de una distribución uniforme, mostrando un buen desempeño del generador.