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

  1. Prueba de Kolomogorov Smirnoff La prueba de Kolmogorov-Smirnov (K-S) es una prueba estadística que compara la distribución acumulada de una muestra de datos con una distribución teórica (por ejemplo, uniforme o normal). Su objetivo es verificar si los números generados provienen de esa distribución. Si la diferencia máxima entre ambas distribuciones es pequeña (p-valor alto), se acepta la hipótesis de que los datos siguen la distribución esperada.

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"
  1. Prueba RUntest La prueba de corridas (Runs test o RunTest) es una prueba estadística no paramétrica que evalúa si una secuencia de números pseudoaleatorios presenta independencia. Se basa en contar las “corridas” (subsecuencias consecutivas de valores por encima o por debajo de la media). Si el número de corridas observadas difiere mucho del esperado, se concluye que la secuencia no es aleatoria.
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

Prueba Poker La prueba del póker es un método estadístico utilizado para evaluar la calidad e independencia de secuencias de números pseudoaleatorios. Su nombre proviene del juego de cartas debido a que clasifica los dígitos de manera similar a las manos del póker.

Funcionamiento. El procedimiento consiste en tomar grupos de 5 dígitos de números pseudoaleatorios y clasificarlos según patrones de repetición Prueba de póker. Las categorías principales son:

Todos diferentes: Los cinco dígitos son distintos entre sí. Un par: Dos dígitos iguales y tres diferentes. Dos pares: Dos grupos de dígitos iguales. Tercia: Tres dígitos iguales. Full: Una tercia más un par. Poker: Cuatro dígitos iguales. Quintilla: Los cinco dígitos son iguales.

Propósito. Esta evaluación permite detectar patrones no deseados en la generación de números aleatorios, ya que examina la frecuencia con que ciertos dígitos se repiten en las secuencias PRUEBA POKER Simulación de Procesos Empresariales. Se utiliza la prueba de chi-cuadrado para comparar las frecuencias observadas con las esperadas teóricamente Poker Test (Sequence Randomness).

La prueba es fundamental en simulación computacional para validar que los generadores de números aleatorios produzcan secuencias verdaderamente impredecibles y uniformemente distribuidas.

library(randtoolbox)
## Cargando paquete requerido: rngWELL
## This is randtoolbox. For an overview, type 'help("randtoolbox")'.
poker.test(random.number,nbcard=5)
## 
##           Poker test
## 
## chisq stat = 31, df = 4, p-value = 3.3e-06
## 
##       (sample size : 50)
## 
##  observed number  0 6 4 0 0 
##  expected number  0.016 0.96 4.8 3.8 0.38