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
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]"
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.
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.