La prueba de bondad de ajuste Chi-cuadrado se emplea para evaluar si una secuencia de números pseudoaleatorios puede considerarse generada por una distribución uniforme en el intervalo \([0,1)\). Para ello, se divide el rango en \(k\) intervalos de igual longitud y se comparan las frecuencias observadas \(O_i\) con las frecuencias esperadas \(E_i\) que habría bajo uniformidad (todas iguales). Con un tamaño muestral \(n\), la expectativa por intervalo es \(E_i = n/k\).
La discrepancia global se resume mediante el estadístico \[ \chi^2 \;=\; \sum_{i=1}^{k}\frac{(O_i - E_i)^2}{E_i}, \] que, bajo la hipótesis nula de uniformidad y asumiendo independencia entre observaciones, sigue aproximadamente una distribución \(\chi^2\) con \(k-1\) grados de libertad (cuando no se estiman parámetros). Un valor grande del estadístico, o un \(p\)-valor menor que el nivel de significancia \(\alpha\), conduce a rechazar la uniformidad.
Para asegurar la validez de la aproximación se recomienda elegir \(k\) de modo que cada \(E_i \ge 5\). Esta prueba contrasta la forma marginal de la distribución; por sí sola no detecta dependencias temporales, por lo que suele complementarse con pruebas de corridas o Kolmogórov–Smirnov para una evaluación más completa del generador. EJEMPLO
a <- 101
c <- 17
m <- 214496317
X_n <- 50 # 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] 2.362278e-05 2.385980e-03 2.409841e-01 3.393938e-01 2.787691e-01
## [6] 1.556809e-01 7.237758e-01 1.013599e-01 2.373513e-01 9.724792e-01
## [11] 2.203966e-01 2.600534e-01 2.653928e-01 8.046690e-01 2.715729e-01
## [16] 4.288621e-01 3.150731e-01 8.223876e-01 6.115128e-02 1.762797e-01
## [21] 8.042468e-01 2.289228e-01 1.212078e-01 2.419913e-01 4.411235e-01
## [26] 5.534688e-01 9.003516e-01 9.355139e-01 4.869077e-01 1.776800e-01
## [31] 9.456760e-01 5.132789e-01 8.411659e-01 9.577510e-01 7.328529e-01
## [36] 1.814441e-02 8.325859e-01 9.117639e-02 2.088151e-01 9.032194e-02
## [41] 1.225158e-01 3.740955e-01 7.836423e-01 1.478728e-01 9.351486e-01
## [46] 4.500136e-01 4.513738e-01 5.887512e-01 4.638713e-01 8.509979e-01
library(agricolae)
histo <- hist(random.number, breaks=6)
hist(random.number, breaks=6)$count # obteniendo las frecuencias observadas con 6 intervalos
## [1] 13 13 9 3 12
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 13 10
## [3,] 0.4 0.6 9 10
## [4,] 0.6 0.8 3 10
## [5,] 0.8 1.0 12 10
# calculando la estadística chi cuadrada
x2 <- (obser-Ei)^2/Ei
x2
## [1] 0.9 0.9 0.1 4.9 0.4
chicuad <- sum(x2)
chicuad # Estadistica chi cuadrada
## [1] 7.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]"
Informe: Se aplicó la prueba de bondad de ajuste Chi-cuadrado a una serie de números pseudoaleatorios para verificar su ajuste a una distribución Uniforme(0,1). El rango [0,1) se dividió en cinco intervalos de igual amplitud y se fijó una frecuencia esperada de 10 observaciones por intervalo. Al contrastar las frecuencias observadas con las esperadas, el estadístico obtenido fue χ² = 7,4. Con 4 grados de libertad y α = 0,05 (valor crítico ≈ 9,4877), este resultado no supera el umbral, por lo que no se rechaza la hipótesis de uniformidad; en consecuencia, la muestra analizada es consistente con una distribución uniforme.