Prueba Chi cuadrada para validar la uniformidad de los números pseudoaleatorios.

La prueba Chi-cuadrada se utiliza para comprobar si los números pseudoaleatorios realmente siguen una distribución uniforme. Para ello, se divide el rango en intervalos iguales y se compara cuántos valores caen en cada intervalo (frecuencia observada) con lo que se esperaría si fueran perfectamente uniformes (frecuencia esperada). La estadística Chi-cuadrada mide esa diferencia:

Si la diferencia es pequeña → los números se ajustan a la uniformidad.

Si la diferencia es grande → se rechaza la uniformidad.

En resumen, esta prueba valida si un generador de números aleatorios produce datos distribuidos de manera equitativa y sin sesgos.

Fórmula

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

La prueba Chi-cuadrada es un método estadístico que permite verificar si un conjunto de números pseudoaleatorios sigue una distribución uniforme, comparando las frecuencias observadas en distintos intervalos con las frecuencias esperadas. Si la diferencia entre ambas es pequeña, se acepta que los números son uniformes; si es grande, se rechaza esta hipótesis, evidenciando que el generador no produce valores equitativos ni aleatorios en apariencia.

Ejemplo

a <- 23413 
c <- 3212  
m <- 323154
X_n <- 65 # 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.71928864 0.71478304 0.22536314 0.43712595 0.43986149 0.48700929
##  [7] 0.35843901 0.14249243 0.18529556 0.33478465 0.32303793 0.29705032
## [13] 0.84914623 0.07056388 0.12205636 0.71542670 0.29528027 0.40687412
## [19] 0.15375641 0.90884532 0.80537762 0.31619909 0.17918082 0.17057193
## [25] 0.61043032 0.01504855 0.34170396 0.32464707 0.97184315 0.77351665
## [31] 0.35530119 0.67664643 0.33277323 0.22954690 0.39158729 0.24322459
## [37] 0.62732629 0.60037320 0.54759341 0.81438881 0.29503890 0.75565520
## [43] 0.16510085 0.51613472 0.27218911 0.77359711 0.23904083 0.67286495
## [49] 0.79701009 0.40727641
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     9 10
## [2,]     0.2     0.4    17 10
## [3,]     0.4     0.6     7 10
## [4,]     0.6     0.8    12 10
## [5,]     0.8     1.0     5 10
# calculando la estadística chi cuadrada
  x2 <- (obser-Ei)^2/Ei 
 x2
## [1] 0.1 4.9 0.9 0.4 2.5
 chicuad <- sum(x2)
 chicuad # Estadistica chi cuadrada
## [1] 8.8
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]"

En conclusión, la aplicación de la prueba Chi-cuadrada mostró que el valor obtenido (𝜒2=8.8)(χ2=8.8) es menor que el valor crítico, lo que indica que no existen diferencias significativas entre las frecuencias observadas y las esperadas; por tanto, los números pseudoaleatorios generados se ajustan a una distribución uniforme en el intervalo [0,1].