La prueba de Chi-cuadrado es una herramienta estadística empleada para verificar si un conjunto de datos se ajusta a una distribución teórica. En el caso de los números pseudoaleatorios, se utiliza para validar si siguen una distribución uniforme, es decir, que cada intervalo dentro del rango considerado tiene la misma probabilidad de ocurrencia. Para ello, se comparan las frecuencias observadas en los intervalos con las frecuencias esperadas bajo la hipótesis de uniformidad. La estadística de prueba se define como:

\[ \chi^2 = \sum_{i=1}^{k} \frac{(O_i - E_i)^2}{E_i} \]

\(O_i\) representa la frecuencia observada en el intervalo \(i\),

\(E_i\) es la frecuencia esperada en el mismo intervalo,

\(k\) corresponde al número de intervalos en los que se divide el rango.

EJEMPLO

a <- 181
c <- 8  
m <- 2147453647
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] 4.218019e-06 7.634651e-04 1.381872e-01 1.188214e-02 1.506675e-01
##  [6] 2.708216e-01 1.871023e-02 3.865511e-01 9.657443e-01 7.997114e-01
## [11] 7.477604e-01 3.446348e-01 3.789065e-01 5.820848e-01 3.573530e-01
## [16] 6.808868e-01 2.405030e-01 5.310389e-01 1.180443e-01 3.660214e-01
## [21] 2.498692e-01 2.263186e-01 9.636595e-01 4.223745e-01 4.497842e-01
## [26] 4.109429e-01 3.806704e-01 9.013344e-01 1.415291e-01 6.167604e-01
## [31] 6.336413e-01 6.890775e-01 7.230331e-01 8.689936e-01 2.878399e-01
## [36] 9.901693e-02 9.220644e-01 8.936529e-01 7.511752e-01 9.627147e-01
## [41] 2.513568e-01 4.955774e-01 6.995174e-01 6.126514e-01 8.898965e-01
## [46] 7.126099e-02 8.982398e-01 5.814029e-01 2.339300e-01 3.413232e-01
library(agricolae)
histo<- hist(random.number, breaks=6)

hist(random.number, breaks=6)$count # obteniendo las frecuencias observadas con 6 intervalos
## [1] 10 14  7 10  9
  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    10 10
## [2,]     0.2     0.4    14 10
## [3,]     0.4     0.6     7 10
## [4,]     0.6     0.8    10 10
## [5,]     0.8     1.0     9 10
 # calculando la estadística chi cuadrada
  x2 <- (obser-Ei)^2/Ei 
 x2
## [1] 0.0 1.6 0.9 0.0 0.1
  chicuad <- sum(x2)
 chicuad # Estadistica chi cuadrada
## [1] 2.6
 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 χ² = 2,6. 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.