En el ámbito de la simulación y generación de números aleatorios, es fundamental garantizar que los números pseudoaleatorios producidos por un generador sigan una distribución deseada, comúnmente la distribución uniforme en el intervalo [0,1). Una distribución uniforme implica que todos los valores dentro del intervalo tienen la misma probabilidad de ocurrencia, lo cual es esencial para asegurar la imparcialidad y representatividad en los experimentos simulados.
La prueba de chi-cuadrada es una herramienta estadística ampliamente utilizada para verificar si un conjunto de datos observados se ajusta a una distribución teórica esperada. En el contexto de la validación de números pseudoaleatorios, esta prueba permite evaluar si la frecuencia de los valores generados se distribuye uniformemente entre varios intervalos (o clases).
El procedimiento consiste en dividir el intervalo [0,1) en subintervalos de igual tamaño y contar cuántos números caen en cada uno de ellos. Luego, se compara esta distribución observada con la distribución esperada bajo la hipótesis de uniformidad. Si las diferencias son pequeñas (dentro de un umbral estadístico), se acepta la hipótesis de que los datos provienen de una distribución uniforme; de lo contrario, se rechaza.
Aplicar la prueba chi-cuadrada es un paso crucial en la validación de generadores de números aleatorios, ya que ayuda a garantizar que los resultados obtenidos mediante simulación no estén sesgados por defectos en la generación de números.
\[ \chi^2 = \sum_{i=1}^{k} \frac{(O_i - E_i)^2}{E_i} \]
donde es la frecuencia observada en el intervalo es la frecuencia esperada en el intervalo
i, calculada bajo la hipótesis de uniformidad.
k es el número de intervalos en los que se divide el rango de la distribución.
El valor calculado de
se compara con el valor crítico de la distribución Chi-Cuadrado con k − 1 k−1 grados de libertad (o
k−1−r si se estiman parámetros). Si
excede el valor crítico para un nivel de significancia 𝛼 α, se rechaza la hipótesis de uniformidad.
De esta manera, la prueba Chi-Cuadrado se convierte en una herramienta esencial para validar si un generador de números pseudoaleatorios es adecuado y cumple con la propiedad de uniformidad requerida en aplicaciones prácticas.
Ejemplo
a <- 15907
c <- 1245
m <- 2249582731
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.0003541079 0.6327948003 0.8668887737 0.5997237054 0.8049820743
## [6] 0.8498556669 0.6540932195 0.6608427765 0.0260469011 0.3280569831
## [11] 0.4024309675 0.4694012291 0.7653526000 0.4638081457 0.7961737518
## [16] 0.7358709681 0.4994895402 0.3801168751 0.5191328636 0.8464614912
## [21] 0.6629406474 0.3968782573 0.1424399092 0.7916366113 0.5635764471
## [26] 0.8105446121 0.3331446253 0.3315551981 0.0485365955 0.0716247595
## [31] 0.3350493314 0.6297154830 0.8841886336 0.7885945707 0.1738366283
## [36] 0.2192466461 0.5564007999 0.6675247775 0.3166363971 0.7351697731
## [41] 0.3455818283 0.1701426775 0.4595707674 0.3921974759 0.6852502150
## [46] 0.2751700066 0.1292959885 0.7112902086 0.4933487823 0.6990804443
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 8 10
## [2,] 0.2 0.4 11 10
## [3,] 0.4 0.6 10 10
## [4,] 0.6 0.8 15 10
## [5,] 0.8 1.0 6 10
x2 <- (obser-Ei)^2/Ei
x2
## [1] 0.4 0.1 0.0 2.5 1.6
chicuad <- sum(x2)
chicuad # Estadistica chi cuadrada
## [1] 4.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]"
Cuando se trabaja con simulaciones o programas que usan números aleatorios, es muy importante asegurarse de que esos números realmente se comporten como aleatorios. En particular, si se supone que los números están distribuidos de forma uniforme en el intervalo [0,1), entonces todos los valores dentro de ese rango deberían tener la misma probabilidad de aparecer. Para comprobar si esto se cumple, se puede aplicar la prueba chi-cuadrada, que es una herramienta estadística que permite comparar la distribución observada con la esperada
Donde: k es el número de intervalos,
o𝑖es la cantidad de números que realmente cayeron en el intervalo 𝑖
𝐸𝑖 es la cantidad que esperaríamos que cayera en ese intervalo si la distribución fuera perfectamente uniforme (se calcula como el total de datos dividido entre 𝑘