Pruebas estadísticas sobre números pseudoaleatorios
Los números aleatorios son un ingrediente básico en la simulación de todo sistema discreto. La mayoría de lenguajes de programación poseen una subrutina, objeto o función que generan números aleatorios. De la misma forma los softwares de simulación generan números aleatorios que son usados para generar variables aleatorias.
Características de los números aleatorios.
Una secuencia de números aleatorios \(R_1, R_2,..,\) posee, entre otras, las siguientes características;
\(R \sim U (0,1)\)
\(E(R) = \frac{1}{2}\)
\(\sigma^2 (R) = \frac{1}{12}\)
Independientes
Si generamos una secuencia de números pseudoaleatorios a partir de algoritmos aritméticos o congruenciales, dicha secuencia es suceptible de ser sometida a pruebas estadísticas que soporten las 4 características anteriores.
Pruebas sobre \(E(R)\)
Para verificar estadísticamente que \(E(R) = \frac{1}{2}\) se puede realizar una prueba respecto a una sola media con varianza conocida.
Planteamiento de las hipótesis.
Para una prueba de una sola media con varianza conocida se plantean de manera general las siguientes hipótesis:
Por lo que no existe evidencia estadística suficiente para rechazar \(H_0\), la media de la secuEncia de números aleatorios es \(\mu = 0.5\)
Prueba de media en R
library(BSDA)
Warning: package 'BSDA' was built under R version 4.4.2
Cargando paquete requerido: lattice
Adjuntando el paquete: 'BSDA'
The following object is masked from 'package:datasets':
Orange
#Secuencia de números pseudoaleatoriosnumeros <-c(0.694,0.186,0.823,0.017,0.450,0.129,0.024,0.433,0.697,0.903)#Datos para la pruebamedia_muestral <-mean(numeros)media_poblacional <-1/2varianza_poblacional <-1/12desviacion_poblacional <-sqrt(varianza_poblacional)#Pruebaz.test(x=numeros, sigma.x = desviacion_poblacional, mu=media_poblacional, alternative="two.sided")
One-sample z-Test
data: numeros
z = -0.70547, p-value = 0.4805
alternative hypothesis: true mean is not equal to 0.5
95 percent confidence interval:
0.2566806 0.6145194
sample estimates:
mean of x
0.4356
Por lo que no existe evidencia estadística suficiente para rechazar \(H_0\), la varianza de la secuEncia de números aleatorios es \(\sigma^2 = \frac{1}{12}\)
Prueba de varianza en R
library(EnvStats)
Warning: package 'EnvStats' was built under R version 4.4.2
Adjuntando el paquete: 'EnvStats'
The following objects are masked from 'package:stats':
predict, predict.lm
#Secuencia de números pseudoaleatoriosnumeros <-c(0.694,0.186,0.823,0.017,0.450,0.129,0.024,0.433,0.697,0.903)#Datos para la pruebavarianza_poblacional <-1/12#PruebavarTest(numeros, sigma.squared = varianza_poblacional, alternative ="two.sided")
Results of Hypothesis Test
--------------------------
Null Hypothesis: variance = 0.08333333
Alternative Hypothesis: True variance is not equal to 0.0833333333333333
Test Name: Chi-Squared Test on Variance
Estimated Parameter(s): variance = 0.1116445
Data: numeros
Test Statistic: Chi-Squared = 12.0576
Test Statistic Parameter: df = 9
P-value: 0.4201625
95% Confidence Interval: LCL = 0.05282094
UCL = 0.37209462
#Estadístico teóricoqchisq(1-(0.05/2),9)
[1] 19.02277
qchisq(0.05/2,9)
[1] 2.700389
Pruebas sobre \(R_i \sim(0,1)\)
Para verificar que la secuencia de números pseudoaleatorios siguen una distribución uniforme entre \(0\) y \(1\) se puede realizar cualquier prueba de bondad de ajuste que aplique, en este curso veremos la prueba chi-cuadrado
Planteamiento de las hipótesis.
Para una prueba de una prueba de una muestra referente a la varianza se plantean de manera:
De acuerdo con la Tabla 1 se sabe que \(n=10\). Se calcula \(m\):
\[\begin{align}
m &\approx \sqrt{n}\\
m &\approx \sqrt{10}\\
m &\approx 4
\end{align}\]
Conociendo que \(m \approx 4\) se divide el intervalo \(\left[ 0,1\right]\) en \(4\) tramos. Obteniendo los intervalos que se muestran en la Tabla 2:
Tabla 2: Intervalo dividido.
Limite inferior
Límite superior
0.00
0.25
0.25
0.50
0.50
0.75
0.75
1.00
Para encontrar la frecuencia observada \(O_i\) se deben contar la cantidad de números de la secuencia que pertenecen a cada intervalo. Obteniendo lo que se muestra en la Tabla 3
Para efectos de mostrar los cálculos se agregará \(E_i\) a la Tabla 3, y se harán los cálculos correspondientes para llegar a \(X_0^2\) como se muestra en la Tabla 4:
Por lo tabto, no existe evidencia estadística sufieciente para rechazar \(H_0\) la secuencia de números aleatorios generados proviene de una distribución uniforme \(R_i \sim U(0,1)\)
Prueba de uniformidad en R
#Secuencianumeros <-c(0.694,0.186,0.823,0.017,0.450,0.129,0.024,0.433,0.697,0.903)n <-length(numeros)m <-ceiling(sqrt(n))# Crear 7 intervalos (breaks)breaks <-seq(0, 1, length.out = m+1) # 8 puntos definen 7 intervalos# Calcular el histograma de los números en 7 intervaloshistograma <-hist(numeros, breaks = breaks, plot =FALSE)# Las frecuencias observadas en cada intervaloobservados <- histograma$counts# Frecuencia esperada (si fuera uniforme)esperados <-rep(length(numeros) / m, m) # 100 / 7 para cada intervalochisq.test(observados, p = esperados /sum(esperados), rescale.p =TRUE)
Warning in chisq.test(observados, p = esperados/sum(esperados), rescale.p =
TRUE): Chi-squared approximation may be incorrect
Chi-squared test for given probabilities
data: observados
X-squared = 1.2, df = 3, p-value = 0.753
#Teóricoqchisq(0.05,3,lower.tail =FALSE)
[1] 7.814728
Prueba sobre la independencia o aleatoriedad de la secuencia
Para verificar que la secuencia de números pseudoaleatorios son independientes se suele usar una prueba de rachas, una técnica estadística utilizada para evaluar la aleatoriedad de una secuencia de datos. En esencia, esta prueba ayuda a determinar si una secuencia observada sigue un patrón aleatorio o si existe alguna estructura o regularidad en los datos. Es comúnmente utilizada en la teoría de probabilidad y la estadística para analizar secuencias de eventos binarios,
Planteamiento de las hipótesis.
Para una prueba de aleatoriedad a través de rachas se plantean las hipótesis como sigue: