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