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;

  1. \(R \sim U (0,1)\)

  2. \(E(R) = \frac{1}{2}\)

  3. \(\sigma^2 (R) = \frac{1}{12}\)

  4. 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:

\[\begin{align} H_0&: \mu = \mu_0 \\ \\ H_1&: \mu \neq \mu_0 \end{align}\]

Como se conoce que la \(E(R) = \frac{1}{2}\), el planteamiento de las hipótesis se puede expresar como:

\[\begin{align} H_0&: \mu = 0.5 \\ \\ H_1&: \mu \neq 0.5 \end{align}\]

\(\mu\) representa la media poblacional para la secuencia de números aleatorios \(R_i\) generados, con \(i=1,2,...,n\)

Estadístico de prueba \(Z_0\)

El estadístico de prueba para la prueba respecto a una sola media con varianza conocida se muestra en la Ecuación 1.

\[\begin{align} Z_0 &= \frac{\bar{x}- \mu}{\frac{\sigma}{\sqrt{n}}} \end{align} \tag{1}\]

Si se adapta el estadístico de prueba a la situación de la secuencia de números aleatorios, se obtiene la Ecuación 2:

\[\begin{align} Z_0 &= (\bar{R}-0.5)\sqrt{12n} \end{align} \tag{2}\]

Donde:

  • \(\bar{R}\): media muestral de la secuencia de números pseudoaleatorios generados.
  • \(n\): tamaño de muestra de la secuencia de números pseudoaleatorios generados.

Estadístico teórico

Rechazo \(H_0\) si:

\[\begin{align} |Z_0| > Z_{\frac{\alpha}{2}} \end{align}\]

Ejemplo prueba sobre \(E(R)\)

Mediante un algoritmo congruencial lineal sea han generado la secuencia de números pseudoaleatorios que se muestra en la Tabla 1.

Tabla 1: Secuencia números aleatorios.
\(i\) Número aleatorio \(R_i\)
1 0.694
2 0.186
3 0.823
4 0.017
5 0.450
6 0.129
7 0.024
8 0.433
9 0.697
10 0.903

Se realizará la prueba sobre la media de la secuancia generada:

Hipótesis

\[\begin{align} H_o&: \mu = 0.5 \\ \\ H_1&: \mu \neq 0.5 \end{align}\]

Estadístico de prueba

De acuerdo con la Tabla 1 se sabe que:

  • \(n=10\)

  • \(\bar{R} = \frac{\sum_{i=1}^n R_i}{n} = 0.435\)

Por lo que el estadístico de prueba \(Z_0\) sería:

\[\begin{align} Z_0 &= (\bar{R}-0.5)\sqrt{12n}\\ \\ Z_0 &= (0.435-0.5)\sqrt{12*10}\\ \\ Z_0 &= (-0.065)\sqrt{120}\\ \\ Z_0 &= -0.7054 \end{align}\]

Estadístico teórico

\(\alpha = 0.05\)

\[\begin{align} |-0.7054| \ngtr 1.959964 \end{align}\]

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 pseudoaleatorios
numeros <- c(0.694,0.186,0.823,0.017,0.450,0.129,0.024,0.433,0.697,0.903)

#Datos para la prueba
media_muestral <- mean(numeros)
media_poblacional <- 1/2
varianza_poblacional <- 1/12
desviacion_poblacional <- sqrt(varianza_poblacional)

#Prueba
z.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 
#Estadístico teórico
qnorm(0.05/2, mean=0, sd=1, lower.tail=FALSE)
[1] 1.959964

Pruebas sobre \(var(R)\)

Para verificar estadísticamente que \(var(R) = \frac{1}{12} = \sigma^2\) se puede realizar una prueba de una muestra referente a la varianza.

Planteamiento de las hipótesis.

Para una prueba de una prueba de una muestra referente a la varianza se plantean de manera general las siguientes hipótesis:

\[\begin{align} H_0&: \sigma^2 = \sigma_0^2\\ H_1&: \sigma \neq \sigma_0^2 \end{align}\]

Como se conoce que la \(VAR(R) = \frac{1}{12}\), el planteamiento de las hipótesis se puede expresar como:

\[\begin{align} H_0&: \sigma^2 = \frac{1}{12} \\ H_1&: \sigma^2 \neq \frac{1}{12} \end{align}\]

\(\sigma^2\) representa la varianza poblacional para la secuencia de números aleatorios \(R_i\) generados, con \(i=1,2,...,n\)

Estadístico de prueba \(X_0^2\)

El estadístico de prueba para la prueba de una muestra referente a la varianza se muestra en la Ecuación 3.

\[\begin{align} X_0^2 &= \frac{(n-1)S^2}{\sigma_0^2} \end{align} \tag{3}\]

Si se adapta el estadístico de prueba a la situación de la secuencia de números aleatorios, se obtiene la Ecuación 4:

\[\begin{align} X_0^2=12(n-1)S^2 \end{align} \tag{4}\]

Donde:

  • \(S^2\): varianza muestral de la secuencia de números pseudoaleatorios generados.
  • \(n\): tamaño de muestra de la secuencia de números pseudoaleatorios generados.

Estadístico teórico

Rechazo \(H_0\) si:

\[\begin{align} X_0^2 &< X_{1-\frac{\alpha}{2}~,~n-1}\\ \\ &o\\ \\ X_0^2 &> X_{\ frac{\alpha}{2}~,~n-1}^2 \end{align}\]

Ejemplo prueba sobre \(var(R)\)

Mediante un algoritmo congruencial lineal sea han generado la secuencia de números pseudoaleatorios que se muestra en la Tabla 1.

Se realizará la prueba sobre la varianza para una sola muestra:

Hipótesis

\[\begin{align} H_o&: \sigma^2 = \frac{1}{12} \\ \\ H_1&: \sigma^2 \neq \frac{1}{12} \end{align}\]

Estadístico de prueba

De acuerdo con la Tabla 1 se sabe que:

  • \(n=10\)

  • \(S^2 = \frac{\sum_{i=1}^n (R_i-\bar{R})^2}{n-1} = 0.11164449\)

Por lo que el estadístico de prueba \(X_0^2\) sería:

\[\begin{align} X_0^2 &= 12(10-1)0.11164449 \\ \\ X_0^2 &= 12.0576048 \end{align}\]

Estadístico teórico

\(\alpha = 0.05\)

\[\begin{align} X_0^2 = 12.0576048 \nless 2.700389 \end{align}\]

No se cumple la primera condición de rechazo.

\[\begin{align} X_0^2 = 12.0576048 \ngtr 19.02277 \end{align}\]

No se cumple la primera condición de rechazo.

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 pseudoaleatorios
numeros <- c(0.694,0.186,0.823,0.017,0.450,0.129,0.024,0.433,0.697,0.903)

#Datos para la prueba
varianza_poblacional <- 1/12

#Prueba
varTest(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órico
qchisq(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:

\[\begin{align} H_0&: R_i \sim U(0,1)\\ H_1&: R_i \nsim U(0,1) \end{align}\]

Estadístico de prueba \(X_0^2\)

El estadístico de prueba para la prueba de una muestra referente a la varianza se muestra en la Ecuación 5.

\[\begin{align} X_0^2 &= \frac{\sum_{i=1}^m (E_i - O_i)^2}{Ei} \end{align} \tag{5}\]

Donde:

\(E_i\) corresponde a la secuencia esperada, se calcula como se muestra en Ecuación 6.

\[\begin{align} E_i &= \frac{n}{m}\\ \\ m &\approx \sqrt{n}\\ \\ n&:~tamaño~secuencia.\\ m&:~cantidad~intervalos. \end{align} \tag{6}\]

Estadístico teórico

Rechazo \(H_0\) si:

\[\begin{align} X_0^2 &> X_{\alpha~,m-1}^2 \end{align}\]

Ejemplo prueba sobre \(R_i \sim U(0,1)\)

Mediante un algoritmo congruencial lineal sea han generado la secuencia de números pseudoaleatorios que se muestra en la Tabla 1.

Se realizará la prueba sobre la varianza para una sola muestra:

Hipótesis

\[\begin{align} H_0&: R_i \sim U(0,1) \\ \\ H_1&: R_i \nsim U(0,1) \end{align}\]

Estadístico de prueba

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

Tabla 3: Frecuencia observada
Limite inferior Límite superior Frecuencia observada \(O_i\)
0.00 0.25 4
0.25 0.50 2
0.50 0.75 2
0.75 1.00 2

Se calcula ahora la frecuencia esperada \(E_i\):

\[\begin{align} E_i &= \frac{n}{m}\\ \\ E_i &= \frac{10}{4}\\ \\ E_i &= 2.5\\ \\ \end{align}\]

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:

Tabla 4: Frecuencia observada
Limite inferior Límite superior Frecuencia observada \(O_i\) Frecuencia esperada \(E_i\) \((E_i - O_i)^2\)
0.00 0.25 4 2.5 2.25
0.25 0.50 2 2.5 0.25
0.50 0.75 2 2.5 0.25
0.75 1.00 2 2.5 0.25

De la Tabla 4, se puede deducir que:

\[\begin{align} X_0^2 &= \frac{3}{2.5}\\ \\ X_0^2 &= 1.2 \end{align}\]

Estadístico teórico

\(\alpha = 0.05\)

\[\begin{align} X_0^2 = 1.2 \ngtr 7.8147279 \end{align}\]

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

#Secuencia
numeros <-  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 intervalos
histograma <- hist(numeros, breaks = breaks, plot = FALSE)

# Las frecuencias observadas en cada intervalo
observados <- histograma$counts

# Frecuencia esperada (si fuera uniforme)
esperados <- rep(length(numeros) / m, m)  # 100 / 7 para cada intervalo

chisq.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órico
qchisq(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:

\[\begin{align} H_0&: R_i~~independientes\\ H_1&: R_i~~ no~independientes \end{align}\]

Estadístico de prueba \(Z_0\)

El estadístico de prueba \(Z_0\) para la prueba de rachas se muestra en la Ecuación 7.

\[\begin{align} Z_0 &= \frac{R-\mu_R}{\sqrt{\sigma^2_R}} \end{align} \tag{7}\]

Donde:

  • \(R\): representa el número de rechas, una racha se define como un conjunto sucesivo de \(0\) o \(1\).

Para determinar las rachas se usa la Ecuación 8, para convertir en categorías:

\[\begin{align} Si~ R_i \geq R_{i-1} \rightarrow 0\\ \\ Si~ R_i < R_{i-1} \rightarrow 1\\ \end{align} \tag{8}\]

  • \(U_R\): media esperada del número de rachas de una secuencia de \(n\) observaciones, se calcula como se muestra en Ecuación 9

\[\begin{align} \mu_R &= \frac{2n-1}{3} \end{align} \tag{9}\]

  • \(\sigma^2_R\): varianza del número de rachas de una secuencia de \(n\) observaciones, se calcula como se muestra en Ecuación 10

\[\begin{align} \sigma^2_R &= \frac{16n-29}{90} \end{align} \tag{10}\]

Estadístico teórico

Rechazo \(H_0\) si:

\[\begin{align} |Z_0| &> Z_{\frac{\alpha}{2}} \end{align}\]

Ejemplo prueba sobre la independencia

Mediante un algoritmo congruencial lineal sea han generado la secuencia de números pseudoaleatorios que se muestra en la Tabla 1.

Se realizará la prueba sobre la varianza para una sola muestra:

Hipótesis

\[\begin{align} H_0&: R_i~~independientes\\ H_1&: R_i~~ no~independientes \end{align}\]

Estadístico de prueba

Determinación de rachas:

Se aplica la Ecuación 8, y se obtienen los resultados de la Tabla 5.

Tabla 5: Determinación de categorías para pseudoaleatorios
Observación \(i\) \(R_i\) Clases
1 0.694 NA
2 0.186 1
3 0.823 0
4 0.017 1
5 0.450 0
6 0.129 1
7 0.024 1
8 0.433 0
9 0.697 0
10 0.903 0

Realizando el conteo de rachas R, resulta en lo mostrado en la Tabla 6.

Tabla 6: Rachas
Observación \(i\) \(R_i\) Clases Rachas \(R\)
1 0.694 NA N/A
2 0.186 1 1
3 0.823 0 2
4 0.017 1 3
5 0.450 0 4
6 0.129 1 5
7 0.024 1 5
8 0.433 0 6
9 0.697 0 6
10 0.903 0 6

Se aplica la Ecuación 9 para hallar la media esperada de rachas.

\[\begin{align} \mu_R &= \frac{(2*10)-1}{3}\\ \\ \mu_R &= \frac{19}{3} = 6.33333\\ \end{align}\]

Se aplica la Ecuación 10 para hallar la varianza para rachas.

\[\begin{align} \sigma_R^2 &= \frac{(16*10)-29}{90}\\ \\ \sigma_R^2 &= \frac{131}{90} = 1.45555\\ \end{align}\]

Con \(R=6\), \(\mu_R=6.3333\) y \(\sigma_R^2=1.45555\) se procede a calcular el estadístico de prueba, como lo indica Ecuación 7:

\[\begin{align} Z_0 &= \frac{R-\mu_R}{\sqrt{\sigma^2_R}}\\ \\ Z_0 &= \frac{6-6.33}{\sqrt{1.45555}}\\ \\ Z_0 &= -0,2762894 \end{align}\]

Estadístico de prueba

Si \(\alpha=0.05\) entonces \(Z_{\frac{0.05}{2}} = 1.959964\), por lo que:

\[\begin{align} |Z_0| = 0.2762894 \ngtr & Z_{\frac{0.05}{2}} = 1.959964 \end{align}\]

No existe evidencia estadística suficiente para rechazar \(H_0\), la secuencia de \(R_i\) es aleatoria.

Prueba de rachas en R

library(randtests)

numeros <- c(0.694,0.186,0.823,0.017,0.450,0.129,0.024,0.433,0.697,0.903)
runs.test(numeros)

    Runs Test

data:  numeros
statistic = 0.67082, runs = 7, n1 = 5, n2 = 5, n = 10, p-value = 0.5023
alternative hypothesis: nonrandomness

Los resultados son distintos dado que la librería randtests clasifica por mediana.