introduccion

prueba de validacion

Los números pseudoaleatorios se generan mediante algoritmos deterministas que imitan el comportamiento de la aleatoriedad verdadera. Para garantizar que estos números cumplen con las propiedades estadísticas esperadas, se aplican pruebas de validación, las cuales permiten detectar patrones, sesgos o irregularidades.

kolmogorov

La prueba de Kolmogórov-Smirnov (K-S) es una herramienta estadística que permite comparar la distribución acumulada de una muestra de datos con una distribución teórica (como la uniforme o la normal), o bien comparar dos muestras entre sí. Su propósito es verificar si los datos siguen la distribución esperada. Para ello, mide la máxima diferencia absoluta entre la función de distribución empírica de la muestra y la función de distribución teórica.

generando 45 numeros pseudo aleatorios con el metodo secuencial mixto.

a <- 16807

c <- 1147

m <- 21576

X_n <- 41 # 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.990823137 0.817621431 0.816555432 0.900305895 0.494345569 0.519141639
##  [7] 0.266685206 0.231414535 0.437245087 0.831340378 0.390897293 0.863969225
## [13] 0.783926585 0.507276604 0.851038191 0.452030033 0.321931776 0.760520949
## [19] 0.128754171 0.024517983 0.126900260 0.865823137 0.942621431 0.691555432
## [25] 0.025305895 0.369345569 0.644141639 0.141685206 0.356414535 0.312245087
## [31] 0.956340378 0.265897293 0.988969225 0.658926585 0.632276604 0.726038191
## [37] 0.577030033 0.196931776 0.885520949 0.003754171 0.149517983 0.001900260
## [43] 0.990823137 0.817621431 0.816555432 0.900305895 0.494345569 0.519141639
## [49] 0.266685206 0.231414535
# Probando si los U_i provienen de una uniforme [0,1]
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.13656, p-value = 0.3087
## 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 siguen la distribución uniforme [0,1]"

cree 45 números pseudoaleatorios mediante el método secuencial mixto en R. Posteriormente, se aplicó la prueba de Kolmogorov-Smirnov para contrastar si siguen una distribución uniforme [0,1]. El resultado indica si los números cumplen con la hipótesis de uniformidad o no.

2.Prueba runtest
La prueba de rachas (runs test o runtest) es una prueba no paramétrica que se utiliza para verificar la independencia y aleatoriedad de una secuencia de datos.

Se basa en contar las rachas (sucesiones de valores consecutivos mayores o menores a la mediana, o positivos/negativos) y comparar su número con lo que se esperaría si los datos fueran aleatorios.

En resumen: si el número de rachas difiere significativamente de lo esperado, se concluye que la secuencia no es independiente ni aleatoria.

library(tseries)
## Registered S3 method overwritten by 'quantmod':
##   method            from
##   as.zoo.data.frame zoo
diff(random.number) 
##  [1] -0.173201706 -0.001065999  0.083750463 -0.405960326  0.024796070
##  [6] -0.252456433 -0.035270671  0.205830552  0.394095291 -0.440443085
## [11]  0.473071932 -0.080042640 -0.276649981  0.343761587 -0.399008157
## [16] -0.130098257  0.438589173 -0.631766778 -0.104236188  0.102382277
## [21]  0.738922877  0.076798294 -0.251065999 -0.666249537  0.344039674
## [26]  0.274796070 -0.502456433  0.214729329 -0.044169448  0.644095291
## [31] -0.690443085  0.723071932 -0.330042640 -0.026649981  0.093761587
## [36] -0.149008157 -0.380098257  0.688589173 -0.881766778  0.145763812
## [41] -0.147617723  0.988922877 -0.173201706 -0.001065999  0.083750463
## [46] -0.405960326  0.024796070 -0.252456433 -0.035270671
S<-ifelse(diff(random.number) > 0, 1, 0) # seuencia de ceros y unos
S
##  [1] 0 0 1 0 1 0 0 1 1 0 1 0 0 1 0 0 1 0 0 1 1 1 0 0 1 1 0 1 0 1 0 1 0 0 1 0 0 1
## [39] 0 1 0 1 0 0 1 0 1 0 0
runs.test(as.factor(S))
## 
##  Runs Test
## 
## data:  as.factor(S)
## Standard Normal = 2.9488, p-value = 0.00319
## alternative hypothesis: two.sided
# 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] 35