introduccion
Las pruebas de validación de números pseudoaleatorios nos ayudan a saber si una secuencia de números generados por una computadora realmente parece aleatoria. La prueba de Kolmogorov-Smirnov verifica si los números se distribuyen de manera uniforme. La prueba de corridas (run test) revisa si hay patrones repetitivos que no deberían estar. La prueba POKER analiza combinaciones de cifras, como en una mano de póker, para ver si aparecen con la frecuencia esperada. Estas pruebas nos aseguran que los números son lo suficientemente impredecibles para usarse en simulaciones o criptografía.
1. prueba de Kolmogorov-Smirnov La prueba de
Kolmogorov-Smirnov (K-S) sirve para comparar una muestra de datos con
una distribución teórica, como la uniforme, y así evaluar si los datos
siguen esa distribución. Es útil para validar la aleatoriedad en números
pseudoaleatorios. En R, se utiliza la función
ks.test().
Ejemplo en R:
# Generar 100 números aleatorios uniformes
datos <- runif(100)
# Aplicar la prueba K-S contra una distribución uniforme (0,1)
ks.test(datos, "punif", min = 0, max = 1)
Este comando devuelve un valor p que indica si hay evidencia significativa para rechazar la hipótesis de que los datos siguen una distribución uniforme.
a <- 53197
c <- 3498
m <- 35645000000
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.0000747187 0.9748106903 0.0042893852 0.1824253974 0.4838651039
## [6] 0.1719314971 0.2398511336 0.3607524682 0.9490524424 0.7427764392
## [11] 0.4782343043 0.6302847909 0.2600191721 0.2398960565 0.7505178144
## [16] 0.2961752899 0.6368991687 0.1250769671 0.7194214845 0.0647125333
## [21] 0.5126348365 0.6353988176 0.3109009324 0.9969018794 0.1892767296
## [26] 0.9541867306 0.8715104575 0.7418053564 0.8195461834 0.3983194831
## [31] 0.4015409279 0.7727430936 0.6143482897 0.4859697218 0.1312913479
## [36] 0.3058344904 0.4773854473 0.4736386111 0.1531967854 0.6093936443
## [41] 0.9136943231 0.7969076912 0.0984506196 0.2776114936 0.0986260746
## [46] 0.6112889273 0.7370662605 0.7138606293 0.2438948831 0.4760962203
Realizamos una prueba de Kolmogorov-Smirnov en exel donde cojimos como base los numeros aleatorias de la clase anterior que habiamos hecho y despues de allar y comparar dn y dns da como conclucion que no sonuniformes, se hizo lo mismo en r sudio pero all final elultimo codigo me dio error por lo que no se sabe si es uniforme o no
Las pruebas Rumtest son un conjunto de test psicométricos utilizados en el ámbito educativo y laboral para evaluar capacidades cognitivas, aptitudes y competencias básicas de una persona.
En general, estas pruebas buscan medir:
Razonamiento lógico y abstracto.
Habilidad verbal y numérica.
Atención y memoria.
Capacidad de resolución de problemas.
Se aplican con frecuencia en procesos de selección de personal, orientación vocacional y evaluaciones académicas, ya que permiten obtener un perfil sobre el rendimiento intelectual y las habilidades de aprendizaje de un individuo.
¿Quieres que te haga una descripción más académica (para un trabajo universitario) o una más sencilla (para explicación rápida)?
library(tseries)
## Registered S3 method overwritten by 'quantmod':
## method from
## as.zoo.data.frame zoo
diff(random.number)
## [1] 0.974735972 -0.970521305 0.178136012 0.301439706 -0.311933607
## [6] 0.067919636 0.120901335 0.588299974 -0.206276003 -0.264542135
## [11] 0.152050487 -0.370265619 -0.020123116 0.510621758 -0.454342525
## [16] 0.340723879 -0.511822202 0.594344517 -0.654708951 0.447922303
## [21] 0.122763981 -0.324497885 0.686000947 -0.807625150 0.764910001
## [26] -0.082676273 -0.129705101 0.077740827 -0.421226700 0.003221445
## [31] 0.371202166 -0.158394804 -0.128378568 -0.354678374 0.174543142
## [36] 0.171550957 -0.003746836 -0.320441826 0.456196859 0.304300679
## [41] -0.116786632 -0.698457072 0.179160874 -0.178985419 0.512662853
## [46] 0.125777333 -0.023205631 -0.469965746 0.232201337
S<-ifelse(diff(random.number) > 0, 1, 0) # seuencia de ceros y unos
S
## [1] 1 0 1 1 0 1 1 1 0 0 1 0 0 1 0 1 0 1 0 1 1 0 1 0 1 0 0 1 0 1 1 0 0 0 1 1 0 0
## [39] 1 1 0 0 1 0 1 1 0 0 1
runs.test(as.factor(S))
##
## Runs Test
##
## data: as.factor(S)
## Standard Normal = 2.1694, p-value = 0.03005
## 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] 33
con la prueba rumtest nos dio 33 corridas que al compararlo nos da que es uniforme|
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 = 2.3, df = 4, p-value = 0.68
##
## (sample size : 50)
##
## observed number 0 1 3 6 0
## expected number 0.016 0.96 4.8 3.8 0.38