La contrasta si una muestra de números (a menudo generados por un algoritmo seudoaleatorio) es compatible con una . Sea la muestra \(U_1,\dots,U_n\). Planteamos \[ H_0:\; U_i \stackrel{\text{iid}}{\sim} \mathrm{Unif}(0,1) \qquad\text{vs}\qquad H_1:\; \text{no uniforme en }[0,1). \]
Para construir el contraste, dividimos \([0,1)\) en \(k\) clases de igual amplitud. Definimos los cortes \(b_j=\tfrac{j}{k}\) para \(j=0,1,\dots,k\) y los intervalos \[ I_j=[b_{j-1},\,b_j),\quad j=1,\dots,k. \] El conteo observado en la clase \(j\) es \[ O_j \;=\; \sum_{i=1}^n \mathbf{1}\{U_i \in I_j\}, \] mientras que, bajo \(H_0\), la probabilidad de caer en cualquier clase es \(p_j=\tfrac{1}{k}\) y el es \[ E_j \;=\; n\,p_j \;=\; \frac{n}{k}, \qquad j=1,\dots,k. \] El es \[ \chi^2_{\text{obs}} \;=\; \sum_{j=1}^{k} \frac{(O_j - E_j)^2}{E_j}. \] Bajo \(H_0\) y con \(E_j\) suficientemente grandes, \(\chi^2_{\text{obs}}\) se aproxima a una distribución \(\chi^2\) con \(\nu=k-1\) . La al nivel \(\alpha\) es \[ \text{Rechazar } H_0 \;\;\text{si}\;\; \chi^2_{\text{obs}} > \chi^2_{1-\alpha,\;\nu}, \] donde \(\chi^2_{1-\alpha,\;\nu}\) es el cuantil superior de orden \(1-\alpha\) de la \(\chi^2(\nu)\). De forma equivalente, el es \[ p \;=\; \Pr\!\big(\chi^2_{\nu} \ge \chi^2_{\text{obs}}\big), \] y se si \(p<\alpha\).
Para asegurar la validez de la aproximación \(\chi^2\), suele exigirse \(E_j \ge 5\) en todas las clases: \[ E_j=\frac{n}{k}\ge 5 \;\;\Rightarrow\;\; k \le \frac{n}{5}. \] Como guía, puede tomarse \(k \approx \sqrt{n}\) (o la regla de Sturges \(k \approx \lceil 1+\log_2 n\rceil\)), ajustándolo para cumplir \(E_j\ge 5\). Dado que en \(\mathrm{Unif}(0,1)\) casi nunca se observa exactamente \(U_i=1\), la partición \([0,1)\) evita ambigüedades en el borde superior.
Si en lugar de verificar \(\mathrm{Unif}(0,1)\) se contrasta \(\mathrm{Unif}(a,b)\) con \(a,b\) y se a partir de la muestra (p.,ej., \(\hat a,\hat b\)) para estandarizar \(Y_i=(X_i-\hat a)/(\hat b-\hat a)\), entonces debe el número de parámetros estimados \(q\) en los grados de libertad: \[ \nu \;=\; k-1-q, \] siendo \(q=2\) cuando se estiman \(a\) y \(b\).
La prueba \(\chi^2\) evalúa la (distribución de los valores), la independencia temporal. Para auditar generadores seudoaleatorios conviene complementarla con pruebas de corridas, autocorrelación o póker. En muestras muy grandes, discrepancias pequeñas pueden resultar significativas; por ello es útil acompañar con inspecciones gráficas (histograma uniforme esperado). En síntesis, la \(\chi^2\) proporciona un procedimiento formal y reproducible para verificar si los números observados son compatibles con una \(\mathrm{Unif}(0,1)\), paso clave en Técnicas de Validación y Simulación.
Ejemplo
a <- 48271
c <- 12345
m <- 147483647
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.01644857 0.98897622 0.87096306 0.25779224 0.88906394 0.00576468
## [7] 0.26694210 0.56237418 0.36411174 0.03810430 0.33270633 0.06736257
## [13] 0.65886549 0.09636501 0.63544280 0.45928485 0.13917957 0.33692013
## [19] 0.47150870 0.19664999 0.49184666 0.93014914 0.22908281 0.05663962
## [25] 0.05127162 0.93228737 0.44392402 0.65630240 0.37340206 0.49072359
## [31] 0.71826024 0.14023011 0.04770976 0.99810429 0.49233976 0.73251825
## [37] 0.38852813 0.64125891 0.20869330 0.83437178 0.96025374 0.40816413
## [43] 0.49065009 0.17068477 0.12449627 0.55955333 0.19894179 0.11931719
## [49] 0.56038116 0.15899690
library(agricolae)
histo <- hist(random.number, breaks=6)
hist(random.number, breaks=6)$count # obteniendo las frecuencias observadas con 6 intervalos
## [1] 16 9 11 6 8
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 16 10
## [2,] 0.2 0.4 9 10
## [3,] 0.4 0.6 11 10
## [4,] 0.6 0.8 6 10
## [5,] 0.8 1.0 8 10
# calculando la estadística chi cuadrada
x2 <- (obser-Ei)^2/Ei
x2
## [1] 3.6 0.1 0.1 1.6 0.4
chicuad <- sum(x2)
chicuad # Estadistica chi cuadrada
## [1] 5.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 signicancia 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 este informe se implementó un programado en R, parametrizado con una semilla, un multiplicador, un incremento y un módulo. Con él se construyó una secuencia de 50 valores consecutivos, que luego se normalizaron al dividirlos por el módulo, obteniendo así 50 números \(U_i\) en el intervalo \([0,1)\). Estos valores se organizaron en un vector, disponible para el análisis estadístico posterior.
La uniformidad de dichos valores se evaluó dividiendo el intervalo \([0,1)\) en \(k=5\) subintervalos de igual amplitud. Con ayuda de funciones de R, se obtuvieron las \(O_j\) en cada subintervalo, las cuales se compararon con las \(E_j=n/k\), donde \(n=50\). Con estos datos se calculó el estadístico \[ \chi^2_{\text{obs}} \;=\; \sum_{j=1}^{k} \frac{(O_j - E_j)^2}{E_j}, \] y se contrastó con el valor crítico \(\chi^2_{1-\alpha,\;4}\) de la distribución \(\chi^2\) con \(\nu=4\) grados de libertad al nivel de significancia \(\alpha=0.05\).
El resultado mostró que \(\chi^2_{\text{obs}}\) fue menor que el valor crítico, por lo cual no se rechazó la hipótesis de uniformidad. En conclusión, los números generados son consistentes con una \(\mathrm{Unif}(0,1)\) bajo este contraste, validando que el generador implementado en R se comporta adecuadamente en términos de uniformidad marginal.