Generando los números pseudoaleatorios

set.seed(1809) # Fecha de cumpleaños 18/09/2003
num_aleat <- runif(100)
num_aleat
##   [1] 0.323735497 0.899097994 0.822525174 0.062630139 0.358143039 0.178929966
##   [7] 0.225099119 0.023620741 0.093537521 0.965861005 0.094986729 0.102781761
##  [13] 0.226933817 0.769705003 0.782785530 0.540864167 0.168516673 0.843680022
##  [19] 0.940036509 0.260409505 0.955209838 0.024926665 0.917092786 0.404352672
##  [25] 0.011444153 0.293758274 0.531120418 0.758145788 0.012167335 0.390629488
##  [31] 0.469291060 0.700387496 0.973734598 0.985350003 0.619627788 0.796209150
##  [37] 0.280829685 0.832198949 0.265238956 0.739604715 0.952024302 0.892808428
##  [43] 0.813209175 0.978192271 0.300301631 0.552201130 0.844306738 0.410404168
##  [49] 0.237973452 0.020446918 0.770155873 0.790284867 0.946578969 0.009947657
##  [55] 0.587604327 0.398560251 0.207588091 0.129195003 0.453871550 0.687152259
##  [61] 0.843404822 0.038579194 0.811269789 0.083646026 0.192333029 0.713523645
##  [67] 0.811803951 0.020323091 0.089131899 0.817715729 0.325026864 0.241891563
##  [73] 0.798949411 0.870304337 0.313358936 0.652412165 0.023704766 0.345895092
##  [79] 0.916143904 0.160664110 0.118644718 0.115123643 0.165908584 0.046088293
##  [85] 0.490582872 0.014970032 0.338260125 0.917760235 0.450729565 0.671423720
##  [91] 0.790766393 0.929616011 0.123015656 0.552713908 0.492329942 0.041448580
##  [97] 0.773607927 0.401583546 0.157283047 0.173102331

1. Prueba Chi-cuadrada

library(agricolae) # cargando la libreria agricolae 
histo <- hist(num_aleat, 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(num_aleat)/length(obser)

cbind(lim_inf, lim_sup, obser, Ei)
##      lim_inf lim_sup obser Ei
## [1,]     0.0     0.2    29 20
## [2,]     0.2     0.4    18 20
## [3,]     0.4     0.6    13 20
## [4,]     0.6     0.8    16 20
## [5,]     0.8     1.0    24 20

Informe Chi2:La prueba compara las frecuencias observadas con las esperadas bajo una distribución uniforme.Si la estadística calculada es menor que el valor crítico, no se rechaza H0 y concluimos que los números pueden provenir de una distribución uniforme [0,1].

x2 <- sum((obser - Ei)^2 / Ei)
x2
## [1] 8.3
dchi <- qchisq(0.05, length(obser)-1, lower.tail=FALSE)
dchi
## [1] 9.487729
ifelse(x2 < dchi,
       "No se rechaza H0: los U_i provienen de una uniforme [0,1]",
       "Se rechaza H0: los U_i no siguen una uniforme [0,1]")
## [1] "No se rechaza H0: los U_i provienen de una uniforme [0,1]"

2. Prueba Poker

library(randtoolbox)
poker.test(num_aleat, nbcard=5)
## 
##           Poker test
## 
## chisq stat = 1.8, df = 4, p-value = 0.78
## 
##       (sample size : 100)
## 
##  observed number  0 2 8 10 0 
##  expected number  0.032 1.9 9.6 7.7 0.77

Informe Poker:
La prueba Poker verifica la aleatoriedad de los dígitos decimales agrupados.
Si el valor-p es mayor a 0.05, no se rechaza la hipótesis nula de uniformidad.

3. Prueba de Corridas

diff(num_aleat)
##  [1]  0.5754 -0.0766 -0.7599  0.2955 -0.1792  0.0462 -0.2015  0.0699  0.8723
## [10] -0.8709  0.0078  0.1242  0.5428  0.0131 -0.2419 -0.3723  0.6752  0.0964
## [19] -0.6796  0.6948 -0.9303  0.8922 -0.5127 -0.3929  0.2823  0.2374  0.2270
## [28] -0.7460  0.3785  0.0787  0.2311  0.2733  0.0116 -0.3657  0.1766 -0.5154
## [37]  0.5514 -0.5670  0.4744  0.2124 -0.0592 -0.0796  0.1650 -0.6779  0.2519
## [46]  0.2921 -0.4339 -0.1724 -0.2175  0.7497  0.0201  0.1563 -0.9366  0.5777
## [55] -0.1890 -0.1910 -0.0784  0.3247  0.2333  0.1563 -0.8048  0.7727 -0.7276
## [64]  0.1087  0.5212  0.0983 -0.7915  0.0688  0.7286 -0.4927 -0.0831  0.5571
## [73]  0.0714 -0.5569  0.3391 -0.6287  0.3222  0.5702 -0.7555 -0.0420 -0.0035
## [82]  0.0508 -0.1198  0.4445 -0.4756  0.3233  0.5795 -0.4670  0.2207  0.1193
## [91]  0.1388 -0.8066  0.4297 -0.0604 -0.4509  0.7322 -0.3720 -0.2443  0.0158
S <- ifelse(diff(num_aleat) > 0, 1, 0) # secuencia de ceros y unos
S
##  [1] 1 0 0 1 0 1 0 1 1 0 1 1 1 1 0 0 1 1 0 1 0 1 0 0 1 1 1 0 1 1 1 1 1 0 1 0 1 0
## [39] 1 1 0 0 1 0 1 1 0 0 0 1 1 1 0 1 0 0 0 1 1 1 0 1 0 1 1 1 0 1 1 0 0 1 1 0 1 0
## [77] 1 1 0 0 0 1 0 1 0 1 1 0 1 1 1 0 1 0 0 1 0 0 1
# Detectar cambios
cambios <- abs(diff(S))

# Contar las corridas
corridas <- sum(cambios) + 1
corridas
## [1] 61
mu = (2*length(num_aleat)-1)/3 # media esperada de corridas 
mu
## [1] 66
varianza <- (16*length(num_aleat)-29)/90
Z <- (corridas-mu)/sqrt(varianza) # valor de la estadística z
Z
## [1] -1.3
# Decisión estadística 
ifelse(abs(Z) < 1.96,
       "Los U_i son independientes",
       "Los U_i son dependientes")
## [1] "Los U_i son independientes"
library(DescTools)
RunsTest(S)
## 
##  Runs Test for Randomness
## 
## data:  S
## z = 2, runs = 61, m = 43, n = 56, p-value = 0.03
## alternative hypothesis: true number of runs is not equal the expected number

Informe Corridas:
La prueba de corridas analiza la independencia entre observaciones consecutivas.
Si el valor-p es mayor a 0.05, no se rechaza la hipótesis nula de independencia.

Conclusión general: Se generaron 100 números pseudoaleatorios con runif(100) y semilla set.seed(1809).Al aplicar las pruebas Chi², Poker y Corridas, se valida la hipótesis de que los números siguen una distribución uniforme en [0,1] y son independientes, confirmando la calidad de la secuencia generada.