En el análisis de simulaciones y experimentos computacionales es fundamental garantizar que los números pseudoaleatorios generados por un algoritmo provengan de una distribución verdaderamente uniforme. Para evaluar esta propiedad se emplea la (\(\chi^2\)), una herramienta estadística que permite contrastar la hipótesis de que una muestra de datos sigue una determinada distribución teórica.
En este caso, la hipótesis nula (\(H_{0}\)) establece que los números pseudoaleatorios provienen de una , mientras que la hipótesis alternativa (\(H_{1}\)) indica que no siguen dicha distribución. El procedimiento consiste en dividir el rango en varios intervalos de igual tamaño y comparar la frecuencia observada de los números en cada intervalo con la frecuencia esperada bajo la distribución uniforme. La medida de discrepancia entre ambas frecuencias se calcula mediante el estadístico Chi-Cuadrado, cuyo valor se contrasta con el de una distribución \(\chi^2\) con los grados de libertad correspondientes.
De esta forma, la prueba Chi-Cuadrado constituye un método práctico y ampliamente utilizado para validar la uniformidad de los generadores de números pseudoaleatorios, asegurando así la confiabilidad de los resultados en aplicaciones que dependen de simulaciones y métodos estadísticos.
\[ \chi^2 = \sum_{i=1}^{k} \frac{(O_i - E_i)^2}{E_i} \]
Una vez calculado el valor del estadístico \(\chi^2\), este se compara con el valor crítico obtenido de la tabla de distribución Chi-Cuadrado con \(k-1\) grados de libertad y un nivel de significancia \(\alpha\).
Esta prueba es, por lo tanto, una herramienta fundamental para garantizar la calidad de los números pseudoaleatorios utilizados en simulaciones, modelos estadísticos y aplicaciones computacionales. Su correcta aplicación permite asegurar que los valores generados cumplen con la condición de uniformidad, requisito indispensable para obtener resultados confiables y representativos en los diferentes experimentos. a
Ejemplos
a <- 16807
c <- 1147
m <- 2147483647
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] 0.0003918526 0.5858667868 0.6630864896 0.4946315337 0.2721881244
## [6] 0.6658068819 0.2162650946 0.7674449253 0.4468596217 0.3696616215
## [11] 0.9028723430 0.5754699528 0.9234974170 0.2210876286 0.8197746295
## [16] 0.9521979401 0.5907792326 0.2265628759 0.8422556873 0.7913364413
## [21] 0.9915697221 0.3123193203 0.1508169226 0.7800188729 0.7771981148
## [26] 0.3687158820 0.0078294319 0.5892627079 0.7383321923 0.1491563800
## [31] 0.8712800103 0.6031330417 0.8570322599 0.1411919948 0.0138577614
## [36] 0.9073964580 0.6122709171 0.4373041873 0.7714765527 0.2064220198
## [41] 0.3348880859 0.4640599002 0.4547439159 0.8809953159 0.8882750309
## [46] 0.2384456830 0.5565951828 0.6952373687 0.8544557541 0.8378595770
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 6 10
## [2,] 0.2 0.4 10 10
## [3,] 0.4 0.6 10 10
## [4,] 0.6 0.8 11 10
## [5,] 0.8 1.0 13 10
x2 <- (obser-Ei)^2/Ei
x2
## [1] 1.6 0.0 0.0 0.1 0.9
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]"
Se generaron 50 números pseudoaleatorios con un generador congruencial lineal y se distribuyeron en 6 intervalos. Luego se compararon las frecuencias observadas con las esperadas mediante la prueba Chi-Cuadrado.
Las frecuencias observadas fueron: \(O = \{6, 10, 10, 11, 13\}\) y la frecuencia esperada en cada intervalo fue \(E_i = 10\). Con estos valores, el estadístico calculado fue:
\[ \chi^2 = \sum_{i=1}^{5} \frac{(O_i - E_i)^2}{E_i} = 2.6 \]
El valor crítico para \(\alpha = 0.05\) y \(k-1 = 5-1 = 4\) grados de libertad es:
\[ \chi^2_{0.05,4} = 9.488 \]
Dado que \(2.6 < 9.488\), no se rechaza la hipótesis nula \(H_0\). Por lo tanto, se concluye que los números generados pueden considerarse provenientes de una distribución uniforme en el intervalo \([0,1]\).