##Prueba de validación Indtroducción
Las pruebas de validación de números pseudoaleatorios permiten verificar si una secuencia generada por un algoritmo realmente se comporta como aleatoria. Estas pruebas evalúan propiedades estadísticas como uniformidad, independencia y distribución.
Una de las más usadas es la prueba de Kolmogorov-Smirnov (K-S), que compara la distribución acumulada de los números generados con la distribución teórica uniforme. Si la diferencia entre ambas es pequeña, se acepta que los números cumplen con el comportamiento esperado; de lo contrario, se rechaza su validez como pseudoaleatorios.
Generando 50 numeros pseudoaleatorios por el metodo secuencial mixto.
a <- 19345678
c <- 5000
m <- 427
X_n <- 50 # semilla
random.number<-numeric(50) # vector numérico de longitud 50
for (i in 1:50)
{X_n<-(a*X_n+c)%%m
random.number[i]<-X_n/m # números en el intervalo [0,1]
}
random.number
## [1] 0.58313817 0.03981265 0.34660422 0.25526932 0.79391101 0.41217799
## [7] 0.30444965 0.58079625 0.00234192 0.74707260 0.66276347 0.31381733
## [13] 0.73067916 0.40046838 0.11709602 0.58313817 0.03981265 0.34660422
## [19] 0.25526932 0.79391101 0.41217799 0.30444965 0.58079625 0.00234192
## [25] 0.74707260 0.66276347 0.31381733 0.73067916 0.40046838 0.11709602
## [31] 0.58313817 0.03981265 0.34660422 0.25526932 0.79391101 0.41217799
## [37] 0.30444965 0.58079625 0.00234192 0.74707260 0.66276347 0.31381733
## [43] 0.73067916 0.40046838 0.11709602 0.58313817 0.03981265 0.34660422
## [49] 0.25526932 0.79391101
test_ks <- ks.test(random.number,"punif",0,1)
## Warning in ks.test.default(random.number, "punif", 0, 1): ties should not be
## present for the one-sample Kolmogorov-Smirnov test
test_ks
##
## Asymptotic one-sample Kolmogorov-Smirnov test
##
## data: random.number
## D = 0.20609, p-value = 0.02861
## alternative hypothesis: two-sided
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 no siguen una distribución uniforme"
library(tseries)
## Registered S3 method overwritten by 'quantmod':
## method from
## as.zoo.data.frame zoo
diff(random.number)
## [1] -0.54332553 0.30679157 -0.09133489 0.53864169 -0.38173302 -0.10772834
## [7] 0.27634660 -0.57845433 0.74473068 -0.08430913 -0.34894614 0.41686183
## [13] -0.33021077 -0.28337237 0.46604215 -0.54332553 0.30679157 -0.09133489
## [19] 0.53864169 -0.38173302 -0.10772834 0.27634660 -0.57845433 0.74473068
## [25] -0.08430913 -0.34894614 0.41686183 -0.33021077 -0.28337237 0.46604215
## [31] -0.54332553 0.30679157 -0.09133489 0.53864169 -0.38173302 -0.10772834
## [37] 0.27634660 -0.57845433 0.74473068 -0.08430913 -0.34894614 0.41686183
## [43] -0.33021077 -0.28337237 0.46604215 -0.54332553 0.30679157 -0.09133489
## [49] 0.53864169
S<-ifelse(diff(random.number) > 0, 1, 0) # seuencia de ceros y unos
S
## [1] 0 1 0 1 0 0 1 0 1 0 0 1 0 0 1 0 1 0 1 0 0 1 0 1 0 0 1 0 0 1 0 1 0 1 0 0 1 0
## [39] 1 0 0 1 0 0 1 0 1 0 1
runs.test(as.factor(S))
##
## Runs Test
##
## data: as.factor(S)
## Standard Normal = 4.5833, p-value = 4.578e-06
## alternative hypothesis: two.sided
# Detectar cambios
cambios <- abs(diff(S))
# Contar las corridas
corridas <- sum(cambios) + 1
corridas
## [1] 40