Generando los numero aleatorios

set.seed(1002)
num_aleat <- runif(100)
num_aleat
##   [1] 0.445006332 0.790651924 0.612035629 0.226991289 0.373631260 0.711239757
##   [7] 0.971629983 0.641677931 0.357620069 0.891636594 0.616329201 0.880084745
##  [13] 0.559082742 0.498721360 0.056898293 0.313617992 0.631653175 0.826840162
##  [19] 0.929756022 0.511268406 0.278167181 0.541799310 0.709995415 0.046266206
##  [25] 0.813517175 0.203739379 0.505963728 0.020212956 0.919214582 0.950807719
##  [31] 0.430011703 0.611117475 0.459438124 0.051029318 0.421490457 0.323269125
##  [37] 0.979756749 0.262288572 0.345070843 0.592708246 0.160067433 0.366663248
##  [43] 0.258611538 0.220361381 0.548071669 0.192045122 0.934316905 0.937399649
##  [49] 0.084074128 0.395307973 0.678122655 0.603564239 0.739353574 0.585131157
##  [55] 0.915109000 0.775895911 0.606056077 0.414105792 0.194735003 0.825057763
##  [61] 0.115405891 0.106913603 0.268082586 0.754592099 0.633759031 0.749184384
##  [67] 0.261717702 0.807946844 0.611905934 0.467408479 0.335485819 0.103044674
##  [73] 0.314413661 0.398250753 0.966873663 0.008156947 0.086935687 0.553859551
##  [79] 0.301770434 0.880902487 0.268820474 0.056480871 0.940469261 0.842768108
##  [85] 0.674005657 0.500218353 0.156167313 0.544369156 0.263036824 0.234035661
##  [91] 0.686224307 0.260270359 0.607591858 0.843107019 0.367725839 0.909162457
##  [97] 0.841290943 0.718656348 0.652381921 0.842928388

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

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

a <- 37890 
c <- 5678  
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.01544576 0.23987845 0.99454262 0.21978175 0.53056855 0.24255611
##   [7] 0.45089450 0.39248878 0.39971851 0.33449044 0.84270615 0.13614547
##  [13] 0.55181247 0.17449426 0.58740144 0.64066972 0.97570891 0.61074418
##  [19] 0.09718224 0.23496423 0.79459207 0.09347934 0.93204493 0.18235348
##  [25] 0.37329950 0.31822622 0.59145159 0.10065058 0.65058224 0.56115809
##  [31] 0.28004953 0.07655846 0.80020243 0.67001474 0.85845409 0.82531249
##  [37] 0.09012543 0.85250458 0.39862623 0.94781279 0.62645915 0.53711471
##  [43] 0.27653189 0.79325770 0.53418140 0.13321439 0.49331954 0.87742152
##  [49] 0.50146127 0.36740888 0.12242609 0.72449953 0.28716330 0.61741779
##  [55] 0.95998931 0.99499351 0.30422079 0.92587231 0.30174236 0.01813581
##  [61] 0.16584998 0.05584093 0.81283351 0.26179198 0.29828006 0.83154413
##  [67] 0.20702060 0.01048393 0.23624914 0.48003819 0.64719193 0.10206182
##  [73] 0.12244738 0.53110405 0.53259267 0.93630331 0.53256139 0.75107276
##  [79] 0.14706909 0.44789203 0.62886327 0.62944670 0.73550014 0.10043685
##  [85] 0.55214944 0.94213394 0.45506311 0.34123153 0.26258837 0.47346328
##  [91] 0.52360602 0.43198189 0.79377077 0.97443002 0.15355326 0.13299842
##  [97] 0.31006217 0.25553195 0.10565515 0.27358966
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    15 20
## [2,]     0.2     0.4    24 20
## [3,]     0.4     0.6    17 20
## [4,]     0.6     0.8    22 20
## [5,]     0.8     1.0    22 20
 #calculando la estadística chi cuadrada
  x2 <- (obser-Ei)^2/Ei 
 x2
## [1] 1.25 0.80 0.45 0.20 0.20
  chicuad <- sum(x2)
 chicuad # Estadistica chi cuadrada
## [1] 2.9
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]"

Se compararon las frecuencias observadas y esperadas en intervalos de la distribución. Estadístico calculado: χ² = 2.9 con 4 grados de libertad. Como este valor es menor que el crítico, se concluye que los números 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.099418, p-value = 0.2763
## alternative hypothesis: two-sided
# Decision
 test_ks$p.value # P válido
## [1] 0.2763267
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]"

Se evaluó si los números siguen una distribución uniforme continua. Resultados: D = 0.0994, p-valor = 0.2763. Dado que p > 0.05, no se rechaza la hipótesis nula, es decir, los números sí siguen una 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.2244326911  0.7546641657 -0.7747608660  0.3107868036 -0.2880124482
##  [6]  0.2083383899 -0.0584057210  0.0072297380 -0.0652280756  0.5082157149
## [11] -0.7065606844  0.4156670014 -0.3773182131  0.4129071858  0.0532682776
## [16]  0.3350391933 -0.3649647285 -0.5135619482  0.1377819907  0.5596278408
## [21] -0.7011127325  0.8385655927 -0.7496914504  0.1909460260 -0.0550732852
## [26]  0.2732253681 -0.4908010047  0.5499316594 -0.0894241517 -0.2811085640
## [31] -0.2034910624  0.7236439644 -0.1301876896  0.1884393470 -0.0331415990
## [36] -0.7351870578  0.7623791534 -0.4538783535  0.5491865570 -0.3213536380
## [41] -0.0893444334 -0.2605828259  0.5167258095 -0.2590762989 -0.4009670070
## [46]  0.3601051492  0.3841019805 -0.3759602547 -0.1340523880 -0.2449827904
## [51]  0.6020734406 -0.4373362298  0.3302544886  0.3425715229  0.0350042024
## [56] -0.6907727197  0.6216515141 -0.6241299447 -0.2836065528  0.1477141724
## [61] -0.1100090527  0.7569925827 -0.5510415284  0.0364880777  0.5332640664
## [66] -0.6245235296 -0.1965366649  0.2257652095  0.2437890513  0.1671537311
## [71] -0.5451301033  0.0203855544  0.4086566769  0.0014886173  0.4037106429
## [76] -0.4037419237  0.2185113749 -0.6040036732  0.3008229341  0.1809712479
## [81]  0.0005834271  0.1060534425 -0.6350632961  0.4517125887  0.3899845059
## [86] -0.4870708322 -0.1138315820 -0.0786431545  0.2108749048  0.0501427389
## [91] -0.0916241280  0.3617888799  0.1806592537 -0.8208767631 -0.0205548413
## [96]  0.1770637495 -0.0545302158 -0.1498768030  0.1679345103
S<-ifelse(diff(num_aleat) > 0, 1, 0) # seuencia de ceros y unos
S
##  [1] 1 1 0 1 0 1 0 1 0 1 0 1 0 1 1 1 0 0 1 1 0 1 0 1 0 1 0 1 0 0 0 1 0 1 0 0 1 0
## [39] 1 0 0 0 1 0 0 1 1 0 0 0 1 0 1 1 1 0 1 0 0 1 0 1 0 1 1 0 0 1 1 1 0 1 1 1 1 0
## [77] 1 0 1 1 1 1 0 1 1 0 0 0 1 1 0 1 1 0 0 1 0 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] 65
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.3191331
# 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.8615, runs = 65, m = 47, n = 52, p-value = 0.004217
## alternative hypothesis: true number of runs is not equal the expected number

Se analizaron las secuencias ascendentes y descendentes. Resultados: 65 corridas, con media esperada ≈ 66.3. El estadístico fue Z = -0.319, indicando independencia. Otra aplicación del test dio p-valor = 0.004, lo que sugiere cierta contradicción. En general, se puede decir que los resultados muestran independencia, aunque con algunos indicios de irregularidad en la secuencia.

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 = 8.8, df = 4, p-value = 0.068
## 
##       (sample size : 100)
## 
##  observed number  0 5 9 4 2 
##  expected number  0.032 1.9 9.6 7.7 0.77

Se agruparon los números en manos de 5 “cartas” y se compararon las frecuencias con las esperadas. Estadístico: χ² = 8.8, con p-valor = 0.068. Como p > 0.05, no se rechaza la hipótesis de aleatoriedad, lo que indica que los números tienen un buen comportamiento pseudoaleatorio.