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