#Generando los numeros pseudoaleatorios
set.seed(2210)
num_aleat <- runif(100)
num_aleat
## [1] 0.757329392 0.388637611 0.876463074 0.497115706 0.270417699 0.605573491
## [7] 0.636188495 0.956824508 0.206033749 0.834592474 0.816646651 0.236798514
## [13] 0.100753034 0.161890318 0.806367841 0.253760810 0.722565289 0.185468479
## [19] 0.059901357 0.142892480 0.575050807 0.541633081 0.912031226 0.328615814
## [25] 0.007260857 0.873773724 0.839410810 0.103341663 0.789584156 0.624814703
## [31] 0.055379571 0.311903291 0.122893341 0.277023342 0.542721900 0.881575370
## [37] 0.937885713 0.424989704 0.738168707 0.947875458 0.955193833 0.472524260
## [43] 0.197855624 0.626450538 0.924921434 0.232114412 0.203186056 0.903115783
## [49] 0.938148362 0.204677137 0.761828433 0.119111364 0.641421094 0.747472312
## [55] 0.258506941 0.394395928 0.469668409 0.451080169 0.409912874 0.849692290
## [61] 0.891444406 0.316596740 0.847874226 0.542886896 0.702140230 0.895819924
## [67] 0.569864764 0.451003427 0.309382242 0.426918697 0.428766621 0.481524436
## [73] 0.405430333 0.850096841 0.812257309 0.848680517 0.887817846 0.961301845
## [79] 0.179147103 0.383378987 0.483864408 0.049130164 0.837065788 0.182271207
## [85] 0.614408385 0.954837988 0.332515480 0.484955883 0.951296049 0.259561258
## [91] 0.204437331 0.939561736 0.689259014 0.600788612 0.213801684 0.887332784
## [97] 0.806218559 0.572756008 0.036350937 0.840630526
##1. Prueba de uniformidad chi cuadrada
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 20 20
## [3,] 0.4 0.6 19 20
## [4,] 0.6 0.8 15 20
## [5,] 0.8 1.0 31 20
# calculando la estadística chi cuadrada
x2 <- (obser-Ei)^2/Ei
x2
## [1] 1.25 0.00 0.05 1.25 6.05
chicuad <- sum(x2)
chicuad # Estadistica chi cuadrada
## [1] 8.6
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]"
1.2 Prueba de Kolmogorov-Smirnov (Prueba K-S).
test_ks <- ks.test(num_aleat,"punif",0,1)
test_ks
##
## Asymptotic one-sample Kolmogorov-Smirnov test
##
## data: num_aleat
## D = 0.11622, p-value = 0.1342
## alternative hypothesis: two-sided
# Decision
test_ks$p.value # P válido
## [1] 0.134189
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]"
2.1. Prueba de Corrida: arriba y abajo
diff(num_aleat)
## [1] -0.368691781 0.487825463 -0.379347369 -0.226698007 0.335155792
## [6] 0.030615004 0.320636013 -0.750790760 0.628558726 -0.017945823
## [11] -0.579848137 -0.136045481 0.061137284 0.644477523 -0.552607031
## [16] 0.468804479 -0.537096810 -0.125567122 0.082991123 0.432158327
## [21] -0.033417726 0.370398145 -0.583415412 -0.321354957 0.866512867
## [26] -0.034362914 -0.736069147 0.686242492 -0.164769452 -0.569435132
## [31] 0.256523720 -0.189009950 0.154130001 0.265698558 0.338853470
## [36] 0.056310343 -0.512896009 0.313179003 0.209706752 0.007318375
## [41] -0.482669573 -0.274668637 0.428594914 0.298470896 -0.692807022
## [46] -0.028928356 0.699929727 0.035032579 -0.733471224 0.557151296
## [51] -0.642717069 0.522309729 0.106051219 -0.488965371 0.135888987
## [56] 0.075272481 -0.018588240 -0.041167294 0.439779416 0.041752115
## [61] -0.574847666 0.531277486 -0.304987330 0.159253334 0.193679694
## [66] -0.325955160 -0.118861337 -0.141621185 0.117536456 0.001847924
## [71] 0.052757815 -0.076094103 0.444666508 -0.037839531 0.036423207
## [76] 0.039137330 0.073483999 -0.782154742 0.204231884 0.100485421
## [81] -0.434734243 0.787935623 -0.654794581 0.432137178 0.340429603
## [86] -0.622322509 0.152440403 0.466340167 -0.691734792 -0.055123927
## [91] 0.735124405 -0.250302722 -0.088470402 -0.386986927 0.673531100
## [96] -0.081114226 -0.233462551 -0.536405071 0.804279590
S<-ifelse(diff(num_aleat) > 0, 1, 0) # seuencia de ceros y unos
S
## [1] 0 1 0 0 1 1 1 0 1 0 0 0 1 1 0 1 0 0 1 1 0 1 0 0 1 0 0 1 0 0 1 0 1 1 1 1 0 1
## [39] 1 1 0 0 1 1 0 0 1 1 0 1 0 1 1 0 1 1 0 0 1 1 0 1 0 1 1 0 0 0 1 1 1 0 1 0 1 1
## [77] 1 0 1 1 0 1 0 1 1 0 1 1 0 0 1 0 0 0 1 0 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] 60
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.515882
# Decisión estadística
ifelse(Z<1.96,"Los u_i son independientes","Los u_i son dependeientes")
## [1] "Los u_i son independientes"
2.2 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 = 0.68, df = 4, p-value = 0.95
##
## (sample size : 100)
##
## observed number 0 2 11 6 1
## expected number 0.032 1.9 9.6 7.7 0.77
Análisis de resultados
Intervalo [0.8,1.0] tuvo 31 observaciones, mucho más de las 20 esperadas.
En cambio, los intervalos [0.0,0.2] y [0.6,0.8] quedaron con solo 15 observaciones, por debajo de lo esperado.
Aunque el estadístico Chi-cuadrada (8.6) no superó el valor crítico, la concentración excesiva en el rango alto sugiere que la muestra no es perfectamente uniforme: hay una tendencia hacia valores grandes.
El test dio un p = 0.134 > 0.05, lo cual impide rechazar la hipótesis de uniformidad.
Sin embargo, el estadístico D = 0.116 indica cierta desviación local (máxima diferencia entre distribución observada y teórica). Esto se explica por la sobrecarga de datos en [0.8,1].
Se obtuvieron 60 corridas, mientras que la media esperada es 66.3.
Aunque el valor Z (−1.51) se mantiene en el rango aceptable, el número de corridas más bajo sugiere que la secuencia tiende a formar pequeños “bloques” de números crecientes o decrecientes, lo que limita un poco la independencia.
Con un p = 0.95, esta prueba no detecta irregularidades graves en los patrones.
Pero nuevamente, al cruzarlo con la chi-cuadrada, se observa que el ajuste se logra más por compensación entre categorías que por uniformidad perfecta.
Conclusión
Aunque las pruebas formales (K-S y póker) no permiten rechazar la hipótesis de uniformidad, el análisis detallado de frecuencias y corridas muestra que la muestra no es completamente balanceada: existe una acumulación significativa de valores en el rango alto [0.8,1.0] y una menor cantidad en los intervalos bajos y medios.
Esto indica que los números pseudoaleatorios generados cumplen en general con las propiedades de aleatoriedad, pero no son óptimos para experimentos que requieran una distribución estrictamente homogénea en todo el rango [0,1]. En tales casos, podría ser recomendable usar otro generador o aumentar el tamaño de la muestra para reducir los sesgos locales.