Introduccion

La prueba de Kolmogórov-Smirnov se utiliza para comprobar si una muestra de números pseudoaleatorios sigue una distribución uniforme [0,1], comparando la función de distribución acumulada empírica con la teórica. En el programa R se aplica mediante la función ks.test(), la cual permite evaluar si los datos se ajustan a la distribución uniforme esperada.

  1. prueba de Kolmogorov Smirnoff

La prueba de Kolmogórov-Smirnov es una técnica estadística que se emplea para validar la calidad de los números pseudoaleatorios generados, verificando si estos siguen realmente la distribución uniforme en el intervalo [0,1], que es la base de la mayoría de simulaciones y métodos estadísticos. Esta prueba compara la distribución acumulada observada de la muestra con la distribución teórica uniforme y mide la máxima diferencia entre ambas; si dicha diferencia es pequeña, se acepta que los datos se ajustan al comportamiento esperado. En el programa R, esta validación se realiza con la función ks.test(), que contrasta los valores generados con la distribución uniforme y emite un resultado estadístico que indica si los números cumplen con el criterio de aleatoriedad requerido.

generando 50 numeros Pseudoaleatorios por el metodo secuencial mixto.

a <- 30
c <- 1257
m <- 315
X_n <- 50 # semilla
random.number<-numeric(60) # 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.7523810 0.5619048 0.8476190 0.4190476 0.5619048 0.8476190 0.4190476
##  [8] 0.5619048 0.8476190 0.4190476 0.5619048 0.8476190 0.4190476 0.5619048
## [15] 0.8476190 0.4190476 0.5619048 0.8476190 0.4190476 0.5619048 0.8476190
## [22] 0.4190476 0.5619048 0.8476190 0.4190476 0.5619048 0.8476190 0.4190476
## [29] 0.5619048 0.8476190 0.4190476 0.5619048 0.8476190 0.4190476 0.5619048
## [36] 0.8476190 0.4190476 0.5619048 0.8476190 0.4190476 0.5619048 0.8476190
## [43] 0.4190476 0.5619048 0.8476190 0.4190476 0.5619048 0.8476190 0.4190476
## [50] 0.5619048 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
## [57] 0.0000000 0.0000000 0.0000000 0.0000000
# 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.25238, p-value = 0.0009583
## 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"

Conclusion

Generamos un prueba aleatoria en la que obtuvimos un conjunto de números y los resultados mostraron que no siguen una distribución uniforme en el intervalo [0,1]. En Excel, el valor de Dn fue superior al valor crítico Dks, lo que llevó a rechazar la hipótesis de uniformidad. De manera complementaria, en RStudio la prueba de Kolmogórov-Smirnov arrojó un p-valor menor al nivel de significancia, confirmando que los números generados no cumplen con el criterio de aleatoriedad uniforme esperado.

  1. prueba de Run Test

La prueba de corridas o Runs test es una técnica estadística que se utiliza para analizar la independencia de una secuencia de números pseudoaleatorios. Su objetivo es determinar si los valores están distribuidos de manera aleatoria o si presentan patrones repetitivos que indiquen dependencia. En el programa R, se puede aplicar utilizando la función runs.test() del paquete tseries, la cual evalúa la secuencia en torno a su mediana y genera un estadístico junto con un p-valor; si este es menor que el nivel de significancia (ej. 0.05), se concluye que la secuencia no es aleatoria, mientras que si es mayor, no hay evidencia suficiente para rechazar la hipótesis de aleatoriedad.a.

library(tseries)
## Registered S3 method overwritten by 'quantmod':
##   method            from
##   as.zoo.data.frame zoo
diff(random.number)
##  [1] -0.1904762  0.2857143 -0.4285714  0.1428571  0.2857143 -0.4285714
##  [7]  0.1428571  0.2857143 -0.4285714  0.1428571  0.2857143 -0.4285714
## [13]  0.1428571  0.2857143 -0.4285714  0.1428571  0.2857143 -0.4285714
## [19]  0.1428571  0.2857143 -0.4285714  0.1428571  0.2857143 -0.4285714
## [25]  0.1428571  0.2857143 -0.4285714  0.1428571  0.2857143 -0.4285714
## [31]  0.1428571  0.2857143 -0.4285714  0.1428571  0.2857143 -0.4285714
## [37]  0.1428571  0.2857143 -0.4285714  0.1428571  0.2857143 -0.4285714
## [43]  0.1428571  0.2857143 -0.4285714  0.1428571  0.2857143 -0.4285714
## [49]  0.1428571 -0.5619048  0.0000000  0.0000000  0.0000000  0.0000000
## [55]  0.0000000  0.0000000  0.0000000  0.0000000  0.0000000
S<-ifelse(diff(random.number) > 0, 1, 0) # seuencia de ceros y unos
S
##  [1] 0 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1
## [39] 0 1 1 0 1 1 0 1 1 0 1 0 0 0 0 0 0 0 0 0 0
runs.test(as.factor(S))
## 
##  Runs Test
## 
## data:  as.factor(S)
## Standard Normal = 1.2467, p-value = 0.2125
## 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

Con la aplicación de la prueba Runs test obtuvimos un valor de 33, lo que permitió concluir que la secuencia de números generados no presenta patrones repetitivos y, por tanto, se comporta de manera independiente, cumpliendo con una de las condiciones fundamentales de los números pseudoaleatorios. Tal como se observa en la ejecución del análisis en RStudio, el conteo de corridas confirma la independencia de la serie, respaldando que los valores generados mantienen un comportamiento aleatorio adecuado sin evidencias de dependencia o tendencia.