#generando nuemeros pseudoaleatorio

set.seed(1007)
num_aleat <- runif(100)
num_aleat
##   [1] 0.69877281 0.32205772 0.61530611 0.01685822 0.90158976 0.42465559
##   [7] 0.50473741 0.96647828 0.19072272 0.60996139 0.61564507 0.11114018
##  [13] 0.89444098 0.29867047 0.47721576 0.90552051 0.13987106 0.02775491
##  [19] 0.96356457 0.58598643 0.86846492 0.48157419 0.72177075 0.93014140
##  [25] 0.59970416 0.70051490 0.84403450 0.41412688 0.30501421 0.23633339
##  [31] 0.53669151 0.24195317 0.02413874 0.29459223 0.52304712 0.78901667
##  [37] 0.11553200 0.52318406 0.22526012 0.77776534 0.09602516 0.04532862
##  [43] 0.21247098 0.74756913 0.48784024 0.65734131 0.06493202 0.36985577
##  [49] 0.63554267 0.87548889 0.56589951 0.67110517 0.36906234 0.56518719
##  [55] 0.24488566 0.57866837 0.93671728 0.30994777 0.10673074 0.69482473
##  [61] 0.47020329 0.67464002 0.11775598 0.16370864 0.19810096 0.15017576
##  [67] 0.81656503 0.81225094 0.04386897 0.74846188 0.75617009 0.48306817
##  [73] 0.86720151 0.50709939 0.32234547 0.37948095 0.71955181 0.71235887
##  [79] 0.79224844 0.06182355 0.60330319 0.11680665 0.53038049 0.13208065
##  [85] 0.90019564 0.10320489 0.45569944 0.16320382 0.29093937 0.70623991
##  [91] 0.48220989 0.66820851 0.78367426 0.72539865 0.11738437 0.83090751
##  [97] 0.94147270 0.75395739 0.90102664 0.26816170

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    22 20
## [2,]     0.2     0.4    16 20
## [3,]     0.4     0.6    20 20
## [4,]     0.6     0.8    25 20
## [5,]     0.8     1.0    17 20

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

a <- 37689 
c <- 5235  
m <- 245677645
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.01536214 0.98381129 0.86359947 0.20059758 0.32205329 0.86664428
##   [7] 0.95617316 0.21022385 0.12664400 0.08578741 0.24189177 0.65887971
##  [13] 0.51733616 0.88263806 0.74586953 0.07679767 0.42729747 0.41419263
##  [19] 0.50606646 0.13866253 0.05229548 0.96431018 0.88653770 0.71949790
##  [25] 0.15642742 0.59302929 0.68102674 0.21672312 0.07757767 0.82493790
##  [31] 0.08445107 0.87639925 0.61153562 0.16585695 0.98262783 0.26012426
##  [37] 0.82316376 0.21912441 0.58006155 0.93969350 0.10817378 0.96168919
##  [43] 0.10383861 0.57336831 0.67808532 0.35771940 0.08652429 0.01417083
##  [49] 0.08425797 0.59870755 0.68873094 0.58036101 0.22594516 0.64718601
##  [55] 0.79358077 0.26570926 0.31628287 0.38500819 0.57362903 0.50465662
##  [61] 0.00338242 0.48005176 0.67066973 0.87149995 0.96158568 0.20266449
##  [67] 0.22204194 0.53855830 0.72381468 0.85134260 0.25126409 0.89232400
##  [73] 0.79942652 0.58616670 0.03686453 0.38715220 0.37917166 0.60064148
##  [79] 0.57686907 0.61846329 0.26301854 0.90569889 0.88542910 0.93720208
##  [85] 0.20922923 0.64054878 0.64287137 0.17920497 0.05613535 0.68513706
##  [91] 0.13076723 0.48613597 0.97855485 0.75360168 0.49358382 0.68053540
##  [97] 0.69880225 0.15785270 0.31049406 0.21073344
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    22 20
## [2,]     0.2     0.4    16 20
## [3,]     0.4     0.6    20 20
## [4,]     0.6     0.8    25 20
## [5,]     0.8     1.0    17 20
 #calculando la estadística chi cuadrada
  x2 <- (obser-Ei)^2/Ei 
 x2
## [1] 0.20 0.80 0.00 1.25 0.45
  chicuad <- sum(x2)
 chicuad # Estadistica chi cuadrada
## [1] 2.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.084291, p-value = 0.4762
## alternative hypothesis: two-sided
# Decision
 test_ks$p.value # P válido
## [1] 0.4761575
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.968449144 -0.120211813 -0.663001898  0.121455719  0.544590982
##  [6]  0.089528882 -0.745949311 -0.083579847 -0.040856587  0.156104354
## [11]  0.416987940 -0.141543546  0.365301898 -0.136768529 -0.669071864
## [16]  0.350499798 -0.013104835  0.091873825 -0.367403921 -0.086367056
## [21]  0.912014705 -0.077772481 -0.167039801 -0.563070482  0.436601873
## [26]  0.087997445 -0.464303620 -0.139145444  0.747360225 -0.740486828
## [31]  0.791948185 -0.264863639 -0.445678666  0.816770875 -0.722503568
## [36]  0.563039507 -0.604039350  0.360937134  0.359631948 -0.831519714
## [41]  0.853515406 -0.857850579  0.469529696  0.104717016 -0.320365921
## [46] -0.271195106 -0.072353470  0.070087146  0.514449575  0.090023392
## [51] -0.108369933 -0.354415844  0.421240850  0.146394761 -0.527871512
## [56]  0.050573608  0.068725321  0.188620845 -0.068972413 -0.501274200
## [61]  0.476669336  0.190617974  0.200830218  0.090085730 -0.758921187
## [66]  0.019377445  0.316516364  0.185256375  0.127527924 -0.600078509
## [71]  0.641059914 -0.092897484 -0.213259819 -0.549302176  0.350287671
## [76] -0.007980539  0.221469825 -0.023772411  0.041594220 -0.355444754
## [81]  0.642680351 -0.020269793  0.051772985 -0.727972848  0.431319545
## [86]  0.002322596 -0.463666403 -0.123069622  0.629001715 -0.554369833
## [91]  0.355368739  0.492418877 -0.224953170 -0.260017858  0.186951584
## [96]  0.018266843 -0.540949544  0.152641361 -0.099760623
S<-ifelse(diff(num_aleat) > 0, 1, 0) # seuencia de ceros y unos
S
##  [1] 1 0 0 1 1 1 0 0 0 1 1 0 1 0 0 1 0 1 0 0 1 0 0 0 1 1 0 0 1 0 1 0 0 1 0 1 0 1
## [39] 1 0 1 0 1 1 0 0 0 1 1 1 0 0 1 1 0 1 1 1 0 0 1 1 1 1 0 1 1 1 1 0 1 0 0 0 1 0
## [77] 1 0 1 0 1 0 1 0 1 1 0 0 1 0 1 1 0 0 1 1 0 1 0
# 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] 62
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] -1.037183
# 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 = 2.2337, runs = 62, m = 48, n = 51, p-value = 0.0255
## 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 = 5.3, df = 4, p-value = 0.26
## 
##       (sample size : 100)
## 
##  observed number  0 4 5 10 1 
##  expected number  0.032 1.9 9.6 7.7 0.77

La prueba de Chi-Cuadrada compara las frecuencias observadas en los intervalos con las frecuencias esperadas bajo una distribución uniforme.
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 fue: \[ \chi^2_{0.05, k-1} = \Sexpr{round(dchi,3)}. \]

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

La prueba de corridas evalúa la independencia de los números mediante la secuencia de aumentos y disminuciones.
El número de corridas observadas fue , la media esperada fue , y el estadístico calculado fue: \[ Z = \Sexpr{round(Z,3)}. \]

La librería permite realizar nuevamente la prueba de corridas.
El valor-p calculado fue: \[ p = \Sexpr{round(RunsTest(S)$p.value,4)}. \]

La prueba de póker evalúa la distribución de las combinaciones de 5 dígitos en los números generados.
El valor-p obtenido fue: \[ p = \Sexpr{round(poker.test(num_aleat, nbcard=5)$p.value,4)}. \]