#Prueba chi cuadrada para validad la uniformidad de los números Pseudoalatorios.
La generación de números pseudoaleatorios constituye un proceso fundamental en la simulación de sistemas, el modelado estadístico y diversas aplicaciones de la ingeniería y la informática. Sin embargo, debido a que estos números son generados mediante algoritmos determinísticos, es necesario verificar que sus propiedades estadísticas se aproximen a las de una verdadera secuencia aleatoria. Una de las principales características deseadas es que los números se distribuyan de manera uniforme dentro de un intervalo, generalmente.
Para comprobar esta propiedad, se emplea la prueba de bondad de ajuste Chi–cuadrada la cual permite contrastar si la frecuencia observada de los números en diferentes subintervalos del rango coincide, dentro de un margen de error, con la frecuencia esperada bajo la hipótesis de que siguen una distribución uniforme. En este contexto, la hipótesis nula (H0)establece que los números provienen de una distribución uniforme, mientras que la hipótesis alternativa (H1) sostiene que no lo hacen.
De esta forma, la prueba Chi–cuadrada se convierte en una herramienta estadística esencial para validar la calidad de un generador de números pseudoaleatorios, asegurando que las simulaciones y experimentos computacionales basados en ellos se apoyen en secuencias con un comportamiento estadístico adecuado.
El estadistico de prueba es: \[ \chi^2 \;=\; \sum_{i=1}^{k} \frac{(O_i - E_i)^2}{E_i} \]
La fórmula de la prueba Chi–cuadrada representa el estadístico que permite medir qué tan diferentes son las frecuencias observadas (\(O_i\)) en cada intervalo respecto a las frecuencias esperadas (\(E_i\)) bajo la hipótesis de que los datos siguen una distribución uniforme. En esencia, para cada intervalo se calcula la diferencia entre lo observado y lo esperado, se eleva al cuadrado para eliminar signos negativos y se divide entre la frecuencia esperada, de modo que se normaliza la magnitud de la diferencia. Finalmente, se suman todos esos aportes y se obtiene un valor \(\chi^2\) que refleja el grado de ajuste entre los datos y la distribución teórica. Mientras más cercano sea \(\chi^2\) a cero, mejor será la concordancia con la uniformidad; en cambio, valores grandes indican que los números pseudoaleatorios no se distribuyen de manera uniforme.
Ejemplo
a <- 15405
c <- 1215
m <- 1032568298
X_n <- 40 # 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.0005979411 0.2112834651 0.8217817307 0.5475626640 0.2028398755
## [6] 0.7482830816 0.3008733753 0.9543469714 0.7150961911 0.0568258120
## [11] 0.4016353454 0.1924968202 0.4135162931 0.2184969560 0.9456087282
## [16] 0.1024583306 0.3705834198 0.8375824511 0.9576608646 0.7656200229
## [21] 0.3764545394 0.2821802960 0.9874615064 0.8445072095 0.6335640889
## [26] 0.0547914362 0.0620755093 0.2732221612 0.9873949675 0.8194748392
## [31] 0.0098995515 0.5025913879 0.4203318752 0.2125390741 0.1644376583
## [36] 0.1621279157 0.5805429434 0.2640445155 0.6057629604 0.7784059646
## [41] 0.3438855402 0.5567486869 0.7135221839 0.8092439344 0.4028104560
## [46] 0.2950763263 0.6508074152 0.6882317532 0.2101587560 0.4956374653
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 13 10
## [3,] 0.4 0.6 9 10
## [4,] 0.6 0.8 9 10
## [5,] 0.8 1.0 10 10
x2 <- (obser-Ei)^2/Ei
x2
## [1] 0.1 0.9 0.1 0.1 0.0
chicuad <- sum(x2)
chicuad # Estadistica chi cuadrada
## [1] 1.2
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]"