Hay algoritmos DETERMINISTAS que generan largas sucesiones de números en el intervalo [0,1[, que no parecen seguir un patrón, y que cubren todo el intervalo de manera bastante uniforme, pero que se repiten con una periodicidad bastante larga.
Se puede generar una GRAN sucesión x1, x2, x3, … , x4294967296 de números del intervalo [0,1[ que parecen aleatorios, pero que en realidad salen de un algoritmo determinista y son siempre los mismos: se dicen pseudoaleatorios.
Si un usuario quiere simular 10 números aleatorios, y toma siempre los 10 primeros (x1, x2, … , x10), tendrá siempre el mismo resultado, con lo que al repetir la simulación, repetirá el resultado, y no simulará una aleatoriedad creíble.
# FUNCIÓN set.seed(seed)
# FUNCIÓN sample(x, size, replace, prob)
# Argumentos:
# x = vector con los objetos a muestrear (extraer)
# size = tamaño de la muestra que se quiere obtener.
# replace = ¿con remplazamiento? FALSE por defecto, indica si se
# remplaza o no el objeto extraído del vector.
# prob = vector de probabilidades (o proporcionales, ya que
# no es necesario que sumen 1). Por defecto da igual
# probabilidad a todos los objetos del vector.
# una quiniela aleatoria de signos equiprobables
sample(x=c('1','X','2'), size=14, replace=TRUE)
## [1] "1" "1" "1" "2" "1" "1" "1" "X" "X" "2" "1" "1" "2" "X"
# ¿te sale la misma quiniela que al profesor?
# establecemos semilla
set.seed(123)
sample(x=c('1','X','2'), size=14, replace=TRUE)
## [1] "1" "2" "X" "2" "2" "1" "X" "2" "X" "X" "2" "X" "2" "X"
# una quiniela aleatoria con probabilidades más razonables
sample(x=c('1','X','2'), size=14, replace=TRUE, prob=c(3,2,1))
## [1] "1" "2" "1" "1" "1" "2" "2" "X" "X" "2" "X" "X" "X" "X"
# una muestra de sistemas operativos de PC de 84 estudiantes
# con probabilidades 0.3, 0.1 y 0.6 de ser Linux, Mac y Windows
# respectivamente
x = sample(x=c('Linux','Mac','Windows'), size=84, replace=TRUE,
prob=c(0.3,0.1,0.6))
x # vemos qué ha salido
## [1] "Windows" "Windows" "Mac" "Mac" "Linux" "Linux" "Windows"
## [8] "Windows" "Linux" "Windows" "Windows" "Windows" "Windows" "Windows"
## [15] "Windows" "Windows" "Windows" "Windows" "Windows" "Windows" "Windows"
## [22] "Linux" "Windows" "Windows" "Linux" "Windows" "Windows" "Windows"
## [29] "Windows" "Linux" "Linux" "Windows" "Linux" "Windows" "Windows"
## [36] "Windows" "Linux" "Windows" "Linux" "Linux" "Linux" "Windows"
## [43] "Linux" "Linux" "Linux" "Windows" "Windows" "Windows" "Windows"
## [50] "Linux" "Windows" "Windows" "Windows" "Linux" "Windows" "Linux"
## [57] "Windows" "Windows" "Mac" "Linux" "Linux" "Windows" "Windows"
## [64] "Linux" "Windows" "Linux" "Windows" "Windows" "Linux" "Windows"
## [71] "Windows" "Windows" "Windows" "Windows" "Windows" "Mac" "Windows"
## [78] "Linux" "Mac" "Linux" "Windows" "Windows" "Mac" "Windows"
table(x) # tabla de frecuencias
## x
## Linux Mac Windows
## 25 6 53
table(x)/length(x) # tabla de frecuencias relativas
## x
## Linux Mac Windows
## 0.29762 0.07143 0.63095
# repetimos con un tamaño de muestra muy grande para ilustrar
# la "ley de los grandes números"
x = sample(x=c('Linux','Mac','Windows'), size=1e6, replace=TRUE,
prob=c(0.3,0.1,0.6))
table(x)/length(x) # tabla de frecuencias relativas
## x
## Linux Mac Windows
## 0.29944 0.09997 0.60059
# compara las frec. relat. con las probabilidades
# Elegimos a delegado y subdelegado al azar
# (suponemos 84 matriculados en una lista numerada)
sample(x=1:84, size=2)
## [1] 20 43
\(X\) | 0 | 1 | 2 | 3 | 4 | 5 |
---|---|---|---|---|---|---|
\(f(X)\) | 0.3 | 0.2 | 0.2 | 0.1 | 0.1 | 0.1 |
# pongamos nombres a las cosas para aplicar fórmulas
x = 0:5 # valores de X
fx = c(0.3,0.2,0.2,0.1,0.1,0.1) # probabilidades (funcion f)
# media: aplicar fórmula
media = sum(x*fx)
media
## [1] 1.8
# varianza: aplicar fórmula
varianza = sum( (x-media)^2 * fx )
varianza
## [1] 2.76
# moda: es la X con mayor probabilidad
x[ which(fx==max(fx)) ]
## [1] 0
# P(X<3): sumar las probabilidades correspondientes
sum( fx[ x < 3 ] )
## [1] 0.7
# muestra de tamaño 50
sample(x=x, size=50, replace=TRUE, prob=fx)
## [1] 1 1 0 0 0 0 0 3 0 4 1 3 2 1 1 3 0 1 0 5 2 2 0 4 0 4 2 5 0 0 2 3 4 0 2
## [36] 3 1 0 2 0 5 1 0 2 2 0 1 0 4 2
# Modelo Nombre R Parámetros Significado
# ################# ######## ########## ###########
# binomial binom size, prob Núm. de éxitos en 'size' pruebas de
# Bernoulli indep. de parám. 'prob'.
# binomial negativo nbinom size, prob Núm. de no-éxitos hasta encontrar 'size'
# éxitos en pruebas de Bernoulli independ.
# de parám. 'prob'.
# (ojo no es el núm. de pruebas)
# hipergeométrico hyper m, n, k Núm. de bolas éxito al extraer
# sin remplazo 'k' bolas de una urna con
# 'm' bolas éxito y 'n' bolas no-éxito.
# Poisson pois lambda Núm. de ocurrencias en un proceso de
# Poisson de media 'lambda'.
# exponencial exp rate Exponencial corresp. a un proceso de
# Poisson de media 'rate' (ojo que la
# media de la exponencial es 1/rate).
# uniforme unif min, max Uniforme en el intervalo ['min', 'max'].
# normal norm mean, sd Normal de media 'mean' y desv. tip. 'sd'.
# ¡atención no es varianza sino desv. típ.!
# chi-cuadrado chisq df Chi-cuadrado con 'df' grados de libertad.
# t de Student t df t de Student con 'df' grados de libertad.
# F f df1, df2 F de Snedecor con 'df1' y 'df2' grados
# de libertad.
d
x=
valor que del se quiere calcular la \(f(x)\)p
q=
valor del que se quiere calcular la \(F(x)\)q
p=
orden del cuantil que se quiere calcularr
n=
tamaño de la muestra (excepción para el modelo hipergeométrico, donde se llama nn
)pbinom(q=4, size=10, prob=0.75)
dpois(x=0, lambda=2.3*5)
qnorm(p=0.95, mean=5, sd=sqrt(2))
1 - phyper(q=0, m=4, n=6, k=2)
acuden = rbinom(n=365, size=110, prob=0.85)
length( acuden[ acuden > 100] )