#generando nuemeros pseudoaleatorio

set.seed(0112)
num_aleat <- runif(100)
num_aleat
##   [1] 0.37667253 0.92201944 0.99187774 0.97723602 0.23629728 0.10706678
##   [7] 0.03915213 0.72802690 0.13023496 0.39995203 0.23590396 0.34716057
##  [13] 0.90493996 0.63229960 0.67432892 0.97005477 0.56047650 0.55531252
##  [19] 0.74324136 0.37013363 0.17173391 0.69482593 0.14206533 0.08091067
##  [25] 0.43012366 0.08112733 0.96940017 0.49973704 0.30490720 0.91007379
##  [31] 0.92490921 0.70871150 0.87557989 0.31701748 0.43847382 0.07067242
##  [37] 0.39746833 0.73564010 0.68131058 0.03544278 0.59827317 0.91928644
##  [43] 0.98928322 0.93544648 0.63460453 0.39910561 0.06709699 0.14687382
##  [49] 0.27840566 0.84671592 0.27937715 0.40432287 0.13122929 0.88553772
##  [55] 0.68865861 0.88823686 0.89114052 0.68318925 0.69806457 0.73459449
##  [61] 0.95207643 0.53252640 0.56047526 0.48000544 0.90873554 0.50920725
##  [67] 0.45496519 0.92240612 0.61439513 0.10968739 0.28738561 0.78881375
##  [73] 0.83302876 0.51363713 0.84632132 0.21515325 0.88558871 0.40394848
##  [79] 0.56060634 0.48213312 0.82084512 0.02772792 0.48824371 0.30669936
##  [85] 0.39080481 0.61454418 0.51532842 0.09078379 0.98890385 0.29254762
##  [91] 0.57998305 0.60850391 0.83345871 0.59855331 0.07626569 0.92375666
##  [97] 0.91571932 0.31990251 0.89489544 0.50542737

1.Prueba de uniformidad Chi cuadrada.

hist(num_aleat, breaks=6)

histo <- hist(num_aleat, breaks=6)


library(agricolae)

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) # Valor esperado en una uniforme es E= n/#intervalos
 cbind(lim_inf,lim_sup,obser,Ei) # visualizacion de las frecuencias observadas y esperadas en los intervalos.
##      lim_inf lim_sup obser Ei
## [1,]     0.0     0.2    16 20
## [2,]     0.2     0.4    18 20
## [3,]     0.4     0.6    21 20
## [4,]     0.6     0.8    17 20
## [5,]     0.8     1.0    28 20

prueba chi-square para validar la uniformidad de los numeros pseudoaleatorios.

a <- 35689 
c <- 5035  
m <- 215677645
X_n <- 100 # semilla
num_aleat<-numeric(100) # vector numérico de longitud 100
 for (i in 1:100)
   {X_n<-(a*X_n+c)%%m
   num_aleat[i]<-X_n/m # números en el intervalo [0,1]
   }
 num_aleat
##   [1] 0.01657073 0.39263715 0.82712879 0.39948596 0.25427383 0.77860329
##   [7] 0.57300953 0.13697521 0.50817453 0.24067900 0.59286742 0.84555066
##  [13] 0.85751534 0.86514441 0.13904828 0.49399366 0.13988188 0.24452859
##  [19] 0.98080130 0.81768574 0.38643903 0.62257718 0.15699819 0.10844471
##  [25] 0.28333388 0.90303427 0.39013371 0.48203132 0.21581708 0.29586342
##  [31] 0.06950931 0.71790602 0.34801664 0.36599818 0.10898056 0.40714122
##  [37] 0.46310467 0.74265483 0.60828724 0.16342987 0.64873912 0.85037427
##  [43] 0.00735825 0.60860241 0.41151159 0.43705603 0.09263111 0.91176464
##  [49] 0.96820248 0.17820472 0.94838505 0.91421556 0.43930914 0.50379799
##  [55] 0.04664749 0.80216350 0.41324352 0.24814016 0.87413754 0.09451742
##  [61] 0.23229902 0.51965390 0.92816518 0.28710036 0.32485024 0.58028158
##  [67] 0.66939629 0.08415114 0.27010857 0.90473308 0.01890752 0.79060616
##  [73] 0.94331536 0.98185060 0.26606195 0.48498997 0.80713247 0.75069013
##  [79] 0.38017830 0.18330187 0.86035493 0.20709256 0.92629164 0.42244631
##  [85] 0.68633465 0.59718273 0.85450061 0.27242339 0.51835627 0.61701212
##  [91] 0.54541218 0.21539203 0.12605259 0.69078253 0.33785606 0.74505297
##  [97] 0.19547466 0.29527562 0.09156802 0.97110387
library(agricolae)
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) # Valor esperado en una uniforme es E= n/#intervalos
 cbind(lim_inf,lim_sup,obser,Ei) # visualizacion de las frecuencias observadas y esperadas en los intervalos.
##      lim_inf lim_sup obser Ei
## [1,]     0.0     0.2    16 20
## [2,]     0.2     0.4    18 20
## [3,]     0.4     0.6    21 20
## [4,]     0.6     0.8    17 20
## [5,]     0.8     1.0    28 20
 #calculando la estadística chi cuadrada
  x2 <- (obser-Ei)^2/Ei 
 x2
## [1] 0.80 0.20 0.05 0.45 3.20
  chicuad <- sum(x2)
 chicuad # Estadistica chi cuadrada
## [1] 4.7
dchi <- qchisq(0.05,length(obser)-1,lower.tail=F)# valor de la distribución chi cuadrada con k-1 grado de libertad y nivel de signiicancia 0.05
 
 # Decisión estadística
 
 ifelse(chicuad < dchi,"Los $U_i$ provienen de una distribución uniforme [0,1]", "Los $U_i no siguen una uniforme [0,1] ")
## [1] "Los $U_i$ provienen de una distribución uniforme [0,1]"

Prueba de Kolmogorov-Smirnov (Prueba K-S)

# Probando si los U_i provienen de una uniforme [0,1]
test_ks <- ks.test(num_aleat,"punif",0,1)
test_ks
## 
##  Asymptotic one-sample Kolmogorov-Smirnov test
## 
## data:  num_aleat
## D = 0.060691, p-value = 0.855
## alternative hypothesis: two-sided
# Decision
 test_ks$p.value # P válido
## [1] 0.8550048
ifelse(test_ks$p.value < 0.05, " Los u_i no siguen una distribución uniforme","Los u_i siguen la distribución uniforme [0,1]") #
## [1] "Los u_i siguen la distribución uniforme [0,1]"

Prueba de Corrida: arriba y abajo

diff(num_aleat) # halla la diferencia entre un valor  y el otro en un vector
##  [1]  0.376066421  0.434491646 -0.427642837 -0.145212129  0.524329469
##  [6] -0.205593769 -0.436034319  0.371199319 -0.267495526  0.352188425
## [11]  0.252683235  0.011964685  0.007629071 -0.726096138  0.354945386
## [16] -0.354111781  0.104646706  0.736272714 -0.163115561 -0.431246711
## [21]  0.236138150 -0.465578989 -0.048553479  0.174889173  0.619700387
## [26] -0.512900560  0.091897610 -0.266214238  0.080046335 -0.226354104
## [31]  0.648396708 -0.369889378  0.017981534 -0.257017620  0.298160665
## [36]  0.055963450  0.279550159 -0.134367588 -0.444857370  0.485309245
## [41]  0.201635153 -0.843016021  0.601244162 -0.197090825  0.025544442
## [46] -0.344424917  0.819133527  0.056437838 -0.789997753  0.770180331
## [51] -0.034169489 -0.474906428  0.064488858 -0.457150508  0.755516016
## [56] -0.388919978 -0.165103365  0.625997377 -0.779620113  0.137781595
## [61]  0.287354886  0.408511276 -0.641064817  0.037749879  0.255431341
## [66]  0.089114706 -0.585245147  0.185957427  0.634624511 -0.885825557
## [71]  0.771698638  0.152709197  0.038535241 -0.715788648  0.218928021
## [76]  0.322142497 -0.056442336 -0.370511835 -0.196876431  0.677053062
## [81] -0.653262372  0.719199085 -0.503845334  0.263888337 -0.089151915
## [86]  0.257317883 -0.582077225  0.245932883  0.098655844 -0.071599933
## [91] -0.330020156 -0.089339440  0.564729947 -0.352926470  0.407196907
## [96] -0.549578307  0.099800955 -0.203707598  0.879535846
S<-ifelse(diff(num_aleat) > 0, 1, 0) # seuencia de ceros y unos
S
##  [1] 1 1 0 0 1 0 0 1 0 1 1 1 1 0 1 0 1 1 0 0 1 0 0 1 1 0 1 0 1 0 1 0 1 0 1 1 1 0
## [39] 0 1 1 0 1 0 1 0 1 1 0 1 0 0 1 0 1 0 0 1 0 1 1 1 0 1 1 1 0 1 1 0 1 1 1 0 1 1
## [77] 0 0 0 1 0 1 0 1 0 1 0 1 1 0 0 0 1 0 1 0 1 0 1
# devuelve 1 si el número es mayor que el anterior y 0 en caso contrario.

# Detectar cambios
cambios <- abs(diff(S))

# Contar las corridas
corridas <- sum(cambios) + 1
corridas
## [1] 69
mu = (2*length(num_aleat)-1)/3 # media espearada de corrida 
mu
## [1] 66.33333
varianza <- (16*length(num_aleat)-29)/90
 
Z <- (corridas-mu)/sqrt(varianza) # valor de la estadística  z
Z
## [1] 0.6382663
# Decisión estadística 

ifelse(Z<1.96,"Los u_i son independientes","Los u_i son dependeientes")
## [1] "Los u_i son independientes"

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

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

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.1, df = 4, p-value = 0.55
## 
##       (sample size : 100)
## 
##  observed number  0 4 7 8 1 
##  expected number  0.032 1.9 9.6 7.7 0.77

Se analizaron las frecuencias observadas y esperadas de los \(U_i\) en los intervalos de la muestra.
El estadístico calculado fue: \[ \chi^2 = \Sexpr{round(chicuad,3)} \] y el valor crítico al 5% de significancia con \(k-1\) grados de libertad: \[ \chi^2_{0.05, k-1} = \Sexpr{round(dchi,3)}. \]

La prueba compara la distribución empírica de los números generados contra la teórica \(U(0,1)\).
El valor-p obtenido fue: \[ p = \Sexpr{round(test_ks$p.value,4)}. \]

Se evaluó la independencia de la secuencia según el patrón de subidas y bajadas.
El número de corridas observadas fue , la media esperada y el estadístico: \[ Z = \Sexpr{round(Z,3)}. \]

Aplicando la función de la librería , se obtuvo un valor-p de: \[ p = \Sexpr{round(RunsTest(S)$p.value,4)}. \]

Se verificó el patrón de uniformidad de los dígitos en los números pseudoaleatorios.
El valor-p obtenido fue: \[ p = \Sexpr{round(poker.test(num_aleat, nbcard=5)$p.value,4)}. \]