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