Generación de los Números Aleatorios

set.seed(1008)
num_aleat <- runif(100)

1.1. Prueba de Uniformidad Chi Cuadrada

hist(num_aleat, breaks=6)

library(agricolae)
histo <- hist(num_aleat, breaks=6)

Tabla <- table.freq(histo) 
 lim_inf <-Tabla$Lower
 lim_sup <- Tabla$Upper
 
 obser <- Tabla$Frequency
 Ei <- length(num_aleat)/length(obser)
 cbind(lim_inf,lim_sup,obser,Ei)
##      lim_inf lim_sup obser Ei
## [1,]     0.0     0.2    15 20
## [2,]     0.2     0.4    25 20
## [3,]     0.4     0.6    20 20
## [4,]     0.6     0.8    20 20
## [5,]     0.8     1.0    20 20
  x2 <- (obser-Ei)^2/Ei 
 x2
## [1] 1.25 1.25 0.00 0.00 0.00
 chicuad <- sum(x2)
 chicuad
## [1] 2.5
dchi <- qchisq(0.05,length(obser)-1,lower.tail=F)

La prueba de bondad de ajuste \(\chi^2\) contrasta si los valores \(U_i\) se distribuyen de forma uniforme en \([0,1)\). El estadístico se define como:

\[ \chi^2_{\text{obs}} = \sum_{j=1}^{k} \frac{(O_j - E_j)^2}{E_j}, \qquad E_j = \frac{n}{k}. \]

Con \(\nu = k-1\) grados de libertad y \(\alpha=0.05\), si \(\chi^2_{\text{obs}} \leq \chi^2_{1-\alpha,\nu}\) no se rechaza \(H_0\). En este caso, la muestra resultó compatible con \(\mathrm{Unif}(0,1)\).

1.2. Prueba de Kolmogorov-Smirnov (Prueba K-S)

test_ks <- ks.test(num_aleat,"punif",0,1)
test_ks
## 
##  Asymptotic one-sample Kolmogorov-Smirnov test
## 
## data:  num_aleat
## D = 0.061991, p-value = 0.8369
## alternative hypothesis: two-sided
 test_ks$p.value
## [1] 0.836875

La prueba K–S contrasta la función de distribución acumulada empírica \(\hat{F}_n(x)\) con la teórica de una \(\mathrm{Unif}(0,1)\).
El estadístico se define como:

\[ D = \sup_x \, \big| \hat{F}_n(x) - F(x) \big|. \]

La regla de decisión se basa en el valor-\(p\):
- Si \(p \geq 0.05\), no se rechaza \(H_0\) y los datos son compatibles con \(\mathrm{Unif}(0,1)\).
- Si \(p < 0.05\), se rechaza \(H_0\), concluyendo que los datos no siguen la uniforme.

En este caso, el valor-\(p\) obtenido fue mayor a \(0.05\), por lo que no se rechazó la hipótesis de uniformidad. La muestra de \(U_i\) es consistente con \(\mathrm{Unif}(0,1)\) según este contraste.

2.1. Prueba de Corrida: arriba y abajo

diff(num_aleat)
##  [1] -0.003467063  0.129291034  0.109105631 -0.881191579  0.200803478
##  [6]  0.533018381  0.214977377 -0.605743911  0.482040601  0.142051934
## [11] -0.419234238  0.376486718 -0.587452979 -0.048216595  0.011046581
## [16]  0.225160334 -0.082463648  0.167764585 -0.206112283  0.471970934
## [21]  0.094772629 -0.477439987 -0.180830869  0.408031393 -0.266107771
## [26]  0.045954318  0.005603324  0.222847930 -0.499643670  0.722020881
## [31] -0.252282676 -0.202521419 -0.254426202  0.378258120  0.011602089
## [36] -0.189149613  0.021245882 -0.114361036 -0.029341704  0.243266316
## [41] -0.395097437  0.248690541 -0.207736378  0.158965406  0.283453385
## [46]  0.247001044 -0.554724830  0.533701497  0.097182664 -0.736105845
## [51]  0.660000449 -0.781197246  0.427556645 -0.265283457  0.684380847
## [56] -0.963449779  0.413620451 -0.160921509  0.344910691 -0.259249320
## [61]  0.190202334  0.330323176 -0.381071118  0.172819105 -0.317710451
## [66]  0.278272248  0.212466669 -0.732570068  0.088274100  0.630820616
## [71]  0.080005390 -0.877205876  0.708939722 -0.258525766  0.443730160
## [76] -0.682029042 -0.145910452  0.705561923 -0.543010646 -0.083866773
## [81]  0.402087007 -0.534397523  0.568245866  0.099714295 -0.183494682
## [86] -0.224812854 -0.085458042  0.097676823 -0.179939303  0.031951761
## [91]  0.521154178  0.072590020 -0.662704127  0.058782434  0.159119472
## [96]  0.553331145 -0.205633573 -0.534792978 -0.082975811
S<-ifelse(diff(num_aleat) > 0, 1, 0)
S
##  [1] 0 1 1 0 1 1 1 0 1 1 0 1 0 0 1 1 0 1 0 1 1 0 0 1 0 1 1 1 0 1 0 0 0 1 1 0 1 0
## [39] 0 1 0 1 0 1 1 1 0 1 1 0 1 0 1 0 1 0 1 0 1 0 1 1 0 1 0 1 1 0 1 1 1 0 1 0 1 0
## [77] 0 1 0 0 1 0 1 1 0 0 0 1 0 1 1 1 0 1 1 1 0 0 0
cambios <- abs(diff(S))

corridas <- sum(cambios) + 1
corridas
## [1] 67
mu = (2*length(num_aleat)-1)/3
mu
## [1] 66.33333
varianza <- (16*length(num_aleat)-29)/90
 
Z <- (corridas-mu)/sqrt(varianza)
Z
## [1] 0.1595666

Esta prueba evalúa la independencia secuencial de la serie. Sea \(S_t=\mathbf{1}\{U_{t+1}-U_t>0\}\) y \(R\) el número de corridas en la secuencia binaria \(S\). Cuando las categorías no son equiprobables (conteos distintos de 0 y 1), se usan las fórmulas generales con \(m=\#\{1\}\) y \(n=\#\{0\}\): \[ \mu \;=\; 1 + \frac{2mn}{m+n}, \qquad \sigma^2 \;=\; \frac{2mn\,(2mn - m - n)}{(m+n)^2\,(m+n-1)}, \qquad Z \;=\; \frac{R - \mu}{\sigma}. \] Regla (bilateral, \(\alpha=0.05\)): si \(|Z|\le 1.96\) no se rechaza \(H_0\) (independencia); de lo contrario, se rechaza.

En nuestro análisis, los conteos fueron \(m=45\) (subidas) y \(n=54\) (bajadas), con \(R=67\) corridas. Sustituyendo en las fórmulas generales se obtiene \(Z\approx 3.34\), lo que supera el umbral crítico. Por tanto, se rechaza \(H_0\): hay evidencia de dependencia temporal en la secuencia.

- Haciedo Uso de la librería DescTolls y la función Runstest

library(DescTools)
RunsTest(S)
## 
##  Runs Test for Randomness
## 
## data:  S
## z = 3.3432, runs = 67, m = 45, n = 54, p-value = 0.0008281
## alternative hypothesis: true number of runs is not equal the expected number

La función RunsTest(S) implementa la versión general de la prueba de corridas (válida cuando \(m\neq n\)) y reporta directamente el estadístico y el valor-\(p\). - Resultado: \(z \approx 3.34\), \(p \approx 8.28\times10^{-4}\). - Decisión: rechazar \(H_0\) (independencia) al 5% e incluso al 1%.

Nota. La discrepancia con el cálculo manual simplificado proviene de usar fórmulas que asumen categorías equiprobables (\(m=n\)). En este caso \(m\neq n\), por lo que corresponde la versión general; con ella, el resultado coincide con RunsTest.

Nota metodológica.
El cálculo manual se realizó con las fórmulas simplificadas que asumen categorías equiprobables (es decir, un número similar de subidas y bajadas). Bajo esta aproximación se obtuvo un valor \(Z \approx 0.16\), lo que no lleva a rechazar \(H_0\).

En cambio, la función RunsTest aplica las fórmulas generales válidas cuando las categorías no son equiprobables (\(m \neq n\)). En este caso, con \(m=45\) y \(n=54\), el estadístico fue \(Z \approx 3.34\) con \(p < 0.01\), lo que sí conduce a rechazar \(H_0\).

Por tanto, ambos resultados difieren porque se basan en versiones distintas del mismo test: la simplificada (vista en clase) y la general (implementada en DescTools).

2.2. Prueba Poker

library(randtoolbox)
## Cargando paquete requerido: rngWELL
## This is randtoolbox. For an overview, type 'help("randtoolbox")'.
poker.test(num_aleat,nbcard=5)
## 
##           Poker test
## 
## chisq stat = 3.7, df = 4, p-value = 0.44
## 
##       (sample size : 100)
## 
##  observed number  0 0 8 11 1 
##  expected number  0.032 1.9 9.6 7.7 0.77

La prueba de póker evalúa la aleatoriedad de los dígitos decimales de los \(U_i\), agrupándolos en manos de 5 dígitos. Se contrastan las frecuencias observadas \(O_j\) de patrones como , , , , , , con las frecuencias esperadas \(E_j\) bajo el supuesto de aleatoriedad decimal.

El estadístico es:

\[ \chi^2_{\text{obs}} = \sum_j \frac{(O_j - E_j)^2}{E_j}. \]

La regla de decisión establece que, si \(p \geq 0.05\), no se rechaza \(H_0\) y los patrones de dígitos son compatibles con la aleatoriedad. Si \(p < 0.05\), se rechaza \(H_0\) y se concluye que la secuencia no cumple con la distribución esperada. En el análisis realizado, el valor-\(p\) fue mayor a \(0.05\), confirmando que los dígitos se comportan de forma aleatoria.