set.seed(1008)
num_aleat <- runif(100)
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)\).
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.
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.
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
).
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.