bernoulli <- function(n, p) {
aleatorios <- runif(n)
X <- ifelse(aleatorios <= p, 1, 0)
return(X)
}Generación de variables aleatorias
Contexto
En el contexto de la simulación de eventos discretos, generar variables aleatorias se refiere al proceso de obtener valores de variables que siguen distribuciones de probabilidad determinadas, de manera que los resultados sean inciertos pero estén sujetos a un patrón estadístico predefinido.
La simulación de eventos discretos implica modelar un sistema que evoluciona con el tiempo en pasos discretos, como en la simulación de sistemas de colas, cadenas de suministro, o procesos de fabricación. Durante la simulación, ciertos eventos ocurren en momentos aleatorios (por ejemplo, la llegada de un cliente a una tienda o el tiempo entre fallas de una máquina). Para modelar estos eventos de forma realista, es necesario simular esas incertidumbres usando variables aleatorias.
Ejemplo:
Si estamos simulando el tiempo entre llegadas de vehículos a una estación de peaje y sabemos que estas llegadas siguen una distribución exponencial (lo cual es común en procesos de Poisson), la generación de una variable aleatoria sería el proceso de generar un número aleatori que siga esa distribución exponencial. Esto se haría usando un generador de números aleatorios que proporcione valores con las características estadísticas deseadas (por ejemplo, una media de 5 minutos entre llegadas).
En resumen, generar variables aleatorias en la simulación de eventos discretos significa crear valores que simulen el comportamiento estocástico (aleatorio) del sistema, de acuerdo con las distribuciones de probabilidad que caracterizan los tiempos de espera, los tiempos entre eventos, o cualquier otro aspecto del proceso que se esté modelando.
Para la generación de variables aleatorias existen diversos métodos, entre los que se encuentran:
Transformada inversa.
Aceptación rechazo.
Convolución.
Transformada directa.
Transformada inversa.
Para generar variables aleatorias siguiendo el proceso de la transformada inversa se deben seguir los siguientes pasos:
0. \(X\) es una variable aleatoria discreta con función de masa de probabilidad \(f(x)\), y función de distribución acumulada \(F(x)\) como se muestra en la Ecuación 1
\[\begin{align} F(x) &= \sum_{k\leq x} f(k) \end{align} \tag{1}\]
A partir de \(x, f(x)\) y \(F(x)\) se puede construir una tabla de distribución como se muestra en Tabla 1.
| \(x\) | \(f(x)\) | \(F(x)\) |
|---|---|---|
| \(x_1\) | \(f(x_1\) | \(F(x_1)\) |
| \(x_2\) | \(f(x_2)\) | \(F(x_2)\) |
| … | … | … |
| \(x_k\) | \(f(x_k)\) | \(F(x_k)\) |
Posteior a la construcción de la tabla de distribución de probabilidad se genera la secuencia de \(R_i\) y se realiza la búsqueda en la tabla para encontrar la variables aleatoria generada de acuerdo al valor de \(F(x)\).
Ejemplo de generación para variable aleatoria Bernoulli
Si es una variable aleatoria que sigue una distribución Bernoulli:
\[\begin{align} X &\sim bernoulli~~(p) \end{align}\]
La función de masa de probabilidad \(f(x)\) está dada por:
\[\begin{align} f(x) &= p^x(1-p)^{1-x}\\ \\ x&= \{0,1 \}\\ \\ 0&\leq p \leq 1 \end{align}\]
\(p\) representa la probabilidad de éxito.
Teniendo \(f(x)\) se puede generar la tabla de distribución como se muestra en Tabla 2:
| \(x\) | \(f(x)\) | \(F(x)\) |
|---|---|---|
| 0 | \(1-p\) | \(1-p\) |
| 1 | \(p\) | \((1-p)+p=1\) |
Dado lo anterior se puede construir la siguiente regla de decisión:
\[\begin{align} R_i \leq 1-p ~\rightarrow x_i =0\\ \\ R_i > 1-p ~\rightarrow x_i =1 \end{align}\]
Se genera entonces la secuencia de números aleatorios \(Ri\) que se muestra en la Tabla 3.
| i | \(R_i\) |
|---|---|
| 1 | 0.2875775 |
| 2 | 0.7883051 |
| 3 | 0.4089769 |
| 4 | 0.8830174 |
| 5 | 0.9404673 |
| 6 | 0.0455565 |
| 7 | 0.5281055 |
| 8 | 0.8924190 |
| 9 | 0.5514350 |
| 10 | 0.4566147 |
Para el caso particular cuando \(p=0.7\), la regla de decisión sería:
\[\begin{align} R_i \leq 1-p = 0.3~\rightarrow x_i =0\\ \\ R_i > 1-p =0.3 ~\rightarrow x_i =1 \end{align}\]
Se aplica la regla de decisión y se generan, de esa manera, las variables aleatorias que se muestran en Tabla 4.
| i | \(R_i\) | \(x_i\) |
|---|---|---|
| 1 | 0.2875775 | 0 |
| 2 | 0.7883051 | 1 |
| 3 | 0.4089769 | 1 |
| 4 | 0.8830174 | 1 |
| 5 | 0.9404673 | 1 |
| 6 | 0.0455565 | 0 |
| 7 | 0.5281055 | 1 |
| 8 | 0.8924190 | 1 |
| 9 | 0.5514350 | 1 |
| 10 | 0.4566147 | 1 |
Generación con R
Se crea la función:
Se usa la función:
X <- bernoulli(n = 1000, p = 0.7)
X [1] 0 1 1 1 1 0 1 1 1 0 0 1 1 0 1 0 1 1 1 1 0 0 1 0 1 1 0 1 1 1 1 1 1 1 1 1 1
[38] 1 1 0 1 1 0 1 1 1 1 0 0 1 1 1 1 1 0 1 0 0 0 1 0 1 0 1 1 1 1 1 1 1 1 1 1 0
[75] 1 1 0 0 0 1 1 1 1 1 1 1 0 1 1 1 1 1 1 0 1 0 0 1 1 1 0 1 1 0 0 1 1 0 1 1 1
[112] 1 1 1 1 0 1 1 1 1 1 0 1 0 1 1 0 0 0 1 1 1 1 1 0 1 1 1 1 0 0 1 1 1 1 1 1 1
[149] 1 1 1 1 1 1 1 1 0 1 1 1 1 1 0 0 1 1 1 1 0 1 0 1 0 1 1 1 1 1 0 0 1 1 0 1 0
[186] 1 1 1 1 1 1 0 1 1 1 0 1 1 1 1 1 1 1 1 1 0 1 1 0 0 1 0 0 1 1 1 1 1 1 0 1 1
[223] 1 1 1 1 1 0 1 0 1 1 1 1 1 0 1 0 0 0 1 1 1 1 1 0 1 1 1 0 0 0 1 0 1 1 1 1 1
[260] 1 0 1 1 1 0 0 0 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 1 1 0 0 1 0 0 1 1
[297] 1 1 1 1 1 1 0 1 1 0 0 1 1 0 0 1 1 0 1 1 0 1 1 0 1 1 0 0 1 1 1 1 1 0 1 1 1
[334] 1 1 1 0 1 1 1 1 0 1 1 1 0 1 1 1 0 1 1 0 1 1 0 1 1 1 1 1 1 0 1 1 0 0 1 1 0
[371] 1 0 1 0 1 0 1 1 1 1 0 1 0 0 1 1 1 1 1 0 0 1 0 1 1 1 0 1 1 1 1 0 1 1 1 1 0
[408] 1 1 1 1 1 1 1 0 1 1 1 1 0 0 1 1 0 1 1 1 1 1 1 1 1 0 1 0 0 0 1 1 1 1 1 1 1
[445] 1 0 0 0 1 1 0 1 1 1 1 1 1 1 1 0 1 0 1 0 1 1 1 1 1 0 1 0 1 1 0 1 1 1 1 0 0
[482] 1 1 0 1 0 1 1 1 0 1 1 1 1 1 1 1 1 0 1 1 1 0 1 0 1 1 0 1 0 1 1 1 1 1 1 0 1
[519] 0 1 0 1 1 0 1 0 1 0 1 1 0 1 0 1 0 0 1 0 0 1 1 1 1 0 1 1 1 1 1 1 1 0 0 1 1
[556] 1 1 0 1 0 1 0 1 1 0 0 1 1 1 1 0 0 0 1 0 1 1 1 0 1 1 1 0 1 1 0 1 1 0 1 1 1
[593] 1 1 1 0 1 0 1 1 1 1 1 0 1 0 0 0 0 1 0 0 0 1 1 1 1 0 1 1 0 0 1 0 1 1 0 0 0
[630] 1 1 0 0 1 1 1 0 1 1 1 0 0 1 1 0 0 0 1 1 1 0 0 1 0 1 1 0 1 1 1 1 1 1 1 1 1
[667] 0 1 1 1 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 0 1 1 1 1 1 1 1 1 1
[704] 0 1 1 1 1 0 1 1 0 0 0 1 0 0 1 0 1 1 0 1 0 1 1 0 0 1 1 0 1 1 1 1 1 0 1 1 0
[741] 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 0 0 1 0 1 1 1 1 1 0 1 0 1 1 0 1 1
[778] 1 1 0 0 1 1 1 0 1 1 1 1 1 1 1 1 1 1 0 1 1 0 1 1 1 1 0 0 1 1 1 1 1 1 1 1 0
[815] 0 1 1 1 1 0 1 0 1 0 1 1 0 1 1 1 0 0 1 1 1 1 0 1 1 1 1 0 0 0 1 1 0 1 1 0 1
[852] 1 1 1 1 1 1 1 1 1 1 1 0 1 0 1 1 1 0 1 1 0 1 1 0 0 1 1 1 1 1 0 1 1 0 0 1 1
[889] 1 0 0 1 0 1 1 1 0 0 0 1 1 1 0 1 1 0 1 1 1 1 0 1 1 0 1 1 1 1 1 0 0 1 0 1 0
[926] 1 1 0 0 1 0 1 1 1 1 1 1 1 1 1 1 1 0 1 1 0 1 1 1 1 1 1 1 1 0 1 1 1 0 1 0 1
[963] 0 1 1 1 0 1 1 1 1 0 0 1 0 0 1 1 1 1 1 1 1 1 1 0 1 1 0 1 1 1 1 0 0 1 0 1 1
[1000] 1
Se grafica con ggplot2
library(ggplot2)
# Parámetro de la distribución Bernoulli
p <- 0.7
# Generamos las variables aleatorias
X <- bernoulli(n = 1000, p = p)
# Valores posibles de X
valores <- c(0, 1)
# Probabilidades observadas
prob_observadas <- c(
mean(X == 0),
mean(X == 1)
)
# Probabilidades teóricas
prob_teoricas <- c(
1 - p,
p
)
# Data frame para las probabilidades observadas
datos <- data.frame(
X = valores,
Probabilidad = prob_observadas
)
# Data frame para las probabilidades teóricas
teoricas <- data.frame(
X = valores,
Probabilidad = prob_teoricas
)
# Gráfico
ggplot(datos, aes(x = X, y = Probabilidad)) +
geom_col(
width = 0.5,
color = "black",
fill = "lightblue"
) +
geom_point(
data = teoricas,
aes(x = X, y = Probabilidad),
size = 4
) +
scale_x_continuous(
breaks = c(0, 1)
) +
labs(
title = "Distribución de las variables aleatorias generadas",
x = "Valores de X",
y = "Probabilidad"
) +
theme_classic()Se grafica con plot
# Parámetro de la distribución Bernoulli
p <- 0.7
# Generamos las variables aleatorias
X <- bernoulli(n = 1000, p = p)
# Valores posibles de X
valores <- c(0, 1)
# Probabilidades observadas
prob_observadas <- c(
mean(X == 0),
mean(X == 1)
)
# Probabilidades teóricas
prob_teoricas <- c(
1 - p,
p
)
# Gráfico
plot(
valores,
prob_observadas,
type = "h",
lwd = 8,
col = "lightblue",
ylim = c(0, 1),
main = "Distribución de las variables aleatorias generadas",
xlab = "Valores de X",
ylab = "Probabilidad"
)
# Probabilidades teóricas
points(
valores,
prob_teoricas,
pch = 19,
cex = 1.5
)Ejemplo de generación para variable aleatoria Binomial.
Si es una variable aleatoria que sigue una distribución Binomial:
\[\begin{align} X &\sim bin~~(n,p) \end{align}\]
La función de masa de probabilidad \(f(x)\) está dada por:
\[\begin{align} f(x) &= \binom{n}{x}p^x(1-p)^{n-x}\\ \\ x&= 0,1,2,...,n\\ \end{align}\]
Con:
\[\begin{align} \binom{n}{x} = \frac{n!}{x!(n-x)!} \end{align}\]
Para el caso específico con \(n= 6\) y \(p=0.6\) se puede generar la tabla de distribución como se muestra en Tabla 5:
| \(x\) | \(f(x)\) | \(F(x)\) |
|---|---|---|
| 0 | 0.004096 | 0.004096 |
| 1 | 0.036864 | 0.040960 |
| 2 | 0.138240 | 0.179200 |
| 3 | 0.276480 | 0.455680 |
| 4 | 0.311040 | 0.766720 |
| 5 | 0.186624 | 0.953344 |
| 6 | 0.046656 | 1.000000 |
Dado lo anterior se puede construir la siguiente regla de decisión:
\[\begin{align} &Devolver~xi~si:\\ \\ &F(x_{i-1}) \leq R_i \leq F(x_i)) \end{align}\]
Se genera entonces la secuencia de números aleatorios \(Ri\), y se aplica la regla, obteniendo las variables que se muestran en la Tabla 6.
| \(x\) | \(f(x)\) | \(F(x)\) | \(R_i\) | \(x_i\) |
|---|---|---|---|---|
| 0 | 0.004096 | 0.004096 | 0.7456200 | 4 |
| 1 | 0.036864 | 0.040960 | 0.7817124 | 5 |
| 2 | 0.138240 | 0.179200 | 0.0200371 | 1 |
| 3 | 0.276480 | 0.455680 | 0.7760854 | 5 |
| 4 | 0.311040 | 0.766720 | 0.0669101 | 2 |
| 5 | 0.186624 | 0.953344 | 0.6447951 | 4 |
| 6 | 0.046656 | 1.000000 | 0.9293860 | 5 |
Generación con R
Se crea la función:
binomial <- function(N, n, p) {
# 1. Generar N uniformes
U <- runif(N)
# 2. Función de masa binomial
f <- numeric(n + 1)
for (k in 0:n) {
f[k + 1] <- choose(n, k) * p^k * (1-p)^(n-k)
}
# 3. Función de distribución acumulada
F <- cumsum(f)
# 4. Regla de decisión
X <- numeric(N)
for (i in 1:N) {
X[i] <- which(U[i] <= F)[1] - 1
}
return(X)
}Se usa la función:
# Parámetros de la distribución
n <- 10
p <- 0.6
N <- 1000
# Generamos 1000 variables aleatorias
X <- binomial(
N = N,
n = n,
p = p
)Se grafica con ggplot2
library(ggplot2)
# Valores posibles de X
valores <- 0:n
# Probabilidades observadas
prob_observadas <- sapply(
valores,
function(x) mean(X == x)
)
# Probabilidades teóricas
prob_teoricas <- dbinom(
valores,
size = n,
prob = p
)
# Data frame
datos <- data.frame(
X = valores,
Observada = prob_observadas,
Teorica = prob_teoricas
)
# Gráfico
ggplot(datos, aes(x = X)) +
geom_col(
aes(y = Observada),
width = 0.7,
color = "black",
fill = "lightblue"
) +
geom_point(
aes(y = Teorica),
size = 3
) +
scale_x_continuous(
breaks = valores
) +
labs(
title = "Distribución de las variables aleatorias generadas",
x = "Valores de X",
y = "Probabilidad"
) +
theme_classic()Se grafica con plot:
plot(
valores,
prob_observadas,
type = "h",
lwd = 8,
col = "lightblue",
ylim = c(0, max(prob_teoricas) * 1.1),
main = "Distribución de las variables aleatorias generadas",
xlab = "Valores de X",
ylab = "Probabilidad"
)
points(
valores,
prob_teoricas,
pch = 19,
cex = 1.5
)Ejemplo de generación para variable aleatoria Poisson.
Si es una variable aleatoria que sigue una distribución Poisson:
\[\begin{align} X &\sim Poisson~~(\lambda) \end{align}\]
La función de masa de probabilidad \(f(x)\) está dada por:
\[\begin{align} f(x) &= \frac{e^{-\lambda}\lambda^x}{x!} \\ x&= 0,1,2,...\\ \end{align}\]
Para el caso específico con \(\lambda=3\) se puede generar la tabla de distribución como se muestra en Tabla 7:
| \(x\) | \(f(x)\) | \(F(x)\) |
|---|---|---|
| 0 | 0.0497871 | 0.0497871 |
| 1 | 0.1493612 | 0.1991483 |
| 2 | 0.2240418 | 0.4231901 |
| 3 | 0.2240418 | 0.6472319 |
| 4 | 0.1680314 | 0.8152632 |
| 5 | 0.1008188 | 0.9160821 |
| 6 | 0.0504094 | 0.9664915 |
| 7 | 0.0216040 | 0.9880955 |
| 8 | 0.0081015 | 0.9961970 |
| 9 | 0.0027005 | 0.9988975 |
| 10 | 0.0008102 | 0.9997077 |
Dado lo anterior se puede construir la siguiente regla de decisión:
\[\begin{align} &Devolver~xi~si:\\ \\ &F(x_{i-1}) \leq R_i \leq F(x_i)) \end{align}\]
Se genera entonces la secuencia de números aleatorios \(Ri\), y se aplica la regla, obteniendo las variables que se muestran en la Tabla 8.
| \(x\) | \(f(x)\) | \(F(x)\) | \(R_i\) | \(x_i\) |
|---|---|---|---|---|
| 0 | 0.0497871 | 0.0497871 | 0.7456200 | 4 |
| 1 | 0.1493612 | 0.1991483 | 0.7817124 | 4 |
| 2 | 0.2240418 | 0.4231901 | 0.0200371 | 0 |
| 3 | 0.2240418 | 0.6472319 | 0.7760854 | 4 |
| 4 | 0.1680314 | 0.8152632 | 0.0669101 | 1 |
| 5 | 0.1008188 | 0.9160821 | 0.6447951 | 3 |
| 6 | 0.0504094 | 0.9664915 | 0.9293860 | 6 |
| 7 | 0.0216040 | 0.9880955 | 0.7176422 | 4 |
| 8 | 0.0081015 | 0.9961970 | 0.9277365 | 6 |
| 9 | 0.0027005 | 0.9988975 | 0.2842301 | 2 |
| 10 | 0.0008102 | 0.9997077 | 0.5557249 | 3 |
Generación con R
Se crea la función:
poisson <- function(N, lambda) {
# 1. Generar N uniformes
U <- runif(N)
# 2. Función de masa de Poisson
f <- numeric()
k <- 0
prob <- exp(-lambda)
acumulada <- 0
while (acumulada < 0.999999) {
f <- c(f, prob)
acumulada <- acumulada + prob
k <- k + 1
prob <- prob * lambda / k
}
# 3. Función de distribución acumulada
F <- cumsum(f)
# 4. Regla de decisión
X <- numeric(N)
for (i in 1:N) {
X[i] <- which(U[i] <= F)[1] - 1
}
return(X)
}Se usa la función:
X<-poisson(N=1000, lambda=4)
X [1] 4 4 4 0 4 3 5 2 6 4 4 6 4 4 3 5 2 6 6 4 3 2 5 4
[25] 5 5 2 4 3 4 7 6 2 5 5 3 4 4 2 5 3 2 6 1 2 1 4 6
[49] 5 3 4 3 6 4 3 5 4 5 4 7 3 4 3 1 3 4 3 2 2 4 4 3
[73] 6 7 5 3 8 3 6 6 6 2 2 4 10 3 3 5 4 5 5 3 4 3 7 2
[97] 3 2 4 5 2 4 4 2 1 2 2 5 4 5 3 4 4 5 2 5 5 2 2 4
[121] 3 5 7 4 7 5 2 5 3 6 7 4 5 7 8 3 3 2 3 4 3 9 4 1
[145] 2 2 4 4 4 5 2 1 3 5 2 5 6 1 2 4 3 7 5 2 2 3 3 3
[169] 3 3 3 2 6 7 6 5 1 6 7 4 4 6 2 6 6 3 1 6 6 4 3 5
[193] 2 2 5 5 3 0 5 3 3 5 4 1 9 2 2 4 4 3 8 1 3 7 3 0
[217] 5 3 1 3 4 4 5 5 3 7 3 1 4 7 3 4 4 4 4 5 5 2 3 2
[241] 4 4 3 5 3 2 4 2 3 4 4 3 2 3 2 3 5 3 2 5 2 5 2 2
[265] 3 6 1 4 3 4 9 3 7 4 2 1 7 1 4 1 3 3 3 6 2 5 3 5
[289] 1 4 4 6 7 3 3 5 6 3 1 3 1 7 3 4 4 3 6 7 9 2 4 5
[313] 3 5 3 5 2 5 3 5 5 3 5 3 3 9 13 5 3 5 4 3 3 5 2 0
[337] 4 1 6 3 4 5 4 0 6 5 1 10 3 3 2 4 4 3 3 5 4 5 6 4
[361] 2 5 2 7 3 1 2 2 3 4 3 7 4 5 12 4 2 3 3 1 4 5 3 7
[385] 4 5 2 1 5 1 7 6 5 4 0 2 5 3 3 6 1 0 7 5 4 5 5 4
[409] 8 3 1 3 8 4 2 7 3 2 4 6 3 3 2 4 4 0 4 4 4 5 4 1
[433] 1 6 1 5 3 7 4 4 2 3 2 4 2 4 3 5 1 6 2 3 5 4 6 3
[457] 3 4 2 3 3 4 2 4 5 1 2 3 4 3 5 2 3 4 3 5 6 3 6 3
[481] 4 2 5 1 3 4 5 3 2 4 8 4 5 6 4 4 8 4 6 8 5 4 1 10
[505] 7 6 1 6 2 7 7 2 2 2 4 3 6 4 4 2 2 11 4 6 2 3 4 3
[529] 6 6 2 3 1 1 6 3 4 5 4 5 13 7 3 9 4 7 5 6 2 3 3 2
[553] 4 2 3 7 2 5 3 5 3 4 4 4 3 2 3 4 4 5 3 3 4 6 3 3
[577] 8 4 4 6 6 3 2 2 7 5 2 4 2 5 2 4 4 5 6 2 2 3 3 2
[601] 5 3 6 3 2 5 1 1 1 6 11 3 1 3 4 1 3 7 6 5 3 7 5 0
[625] 0 6 4 5 3 3 3 3 2 7 4 6 5 7 5 5 4 3 3 4 6 6 2 4
[649] 1 4 1 1 6 4 3 5 5 6 6 2 2 5 0 1 7 6 2 1 1 2 6 3
[673] 4 5 6 2 5 1 1 7 4 3 1 4 4 5 6 6 4 4 4 2 1 10 4 2
[697] 4 8 7 4 6 7 7 4 2 2 6 4 1 7 1 2 1 3 3 5 3 6 6 6
[721] 1 2 7 3 2 2 1 5 3 3 9 2 6 4 2 5 4 7 2 4 4 5 5 3
[745] 3 6 8 5 2 5 3 3 4 5 5 3 4 6 5 2 6 1 3 8 3 2 5 5
[769] 2 6 2 3 2 5 3 4 5 4 3 3 2 5 2 7 5 2 4 7 3 6 5 8
[793] 4 4 2 4 3 7 0 2 6 3 5 6 3 6 8 6 2 5 2 6 4 3 4 4
[817] 3 7 6 0 6 3 3 3 3 9 2 5 5 2 5 4 8 9 1 7 6 4 7 4
[841] 4 1 10 4 7 2 4 3 4 3 3 0 2 7 3 4 6 8 3 3 5 4 4 2
[865] 3 4 3 2 3 4 3 4 2 5 7 0 3 4 4 4 4 0 3 5 8 3 3 2
[889] 1 6 3 2 6 1 4 4 5 2 6 6 3 4 4 3 8 3 2 3 2 4 4 2
[913] 6 2 0 4 2 4 6 5 5 4 6 5 4 6 4 2 5 6 3 3 5 5 2 6
[937] 4 4 3 5 5 1 4 7 5 2 8 1 2 4 7 5 3 3 4 2 4 6 2 5
[961] 2 5 3 6 7 2 6 4 4 5 6 3 1 3 4 3 5 6 3 2 5 6 4 1
[985] 5 3 1 3 2 3 5 9 6 5 3 1 5 2 3 2
mean(X)[1] 3.937
var(X)[1] 3.846878
Se grafica con ggplot2:
local({
library(ggplot2)
# Parámetro de la distribución Poisson
lambda <- 4
# Número de variables aleatorias generadas
N <- 1000
# Generamos las variables aleatorias
X <- poisson(
N = N,
lambda = lambda
)
# Valores posibles de X
valores <- 0:max(X)
# Probabilidades observadas
prob_observadas <- sapply(
valores,
function(x) mean(X == x)
)
# Probabilidades teóricas
prob_teoricas <- dpois(
valores,
lambda = lambda
)
# Data frame de las probabilidades observadas
datos <- data.frame(
X = valores,
Probabilidad = prob_observadas
)
# Data frame de las probabilidades teóricas
teoricas <- data.frame(
X = valores,
Probabilidad = prob_teoricas
)
# Gráfico
ggplot(
datos,
aes(
x = X,
y = Probabilidad
)
) +
geom_col(
width = 0.7,
color = "black",
fill = "lightblue"
) +
geom_point(
data = teoricas,
aes(
x = X,
y = Probabilidad
),
size = 3
) +
scale_x_continuous(
breaks = valores
) +
labs(
title = "Distribución de las variables aleatorias generadas",
x = "Valores de X",
y = "Probabilidad"
) +
theme_classic()
})Se grafica con plot
local({
# Parámetro de la distribución Poisson
lambda <- 4
# Número de variables aleatorias generadas
N <- 1000
# Generamos las variables aleatorias
X <- poisson(
N = N,
lambda = lambda
)
# Valores posibles de X
valores <- 0:max(X)
# Probabilidades observadas
prob_observadas <- sapply(
valores,
function(x) mean(X == x)
)
# Probabilidades teóricas
prob_teoricas <- dpois(
valores,
lambda = lambda
)
# Gráfico de las probabilidades observadas
plot(
valores,
prob_observadas,
type = "h",
lwd = 8,
col = "lightblue",
ylim = c(
0,
max(prob_teoricas) * 1.1
),
main = "Distribución de las variables aleatorias generadas",
xlab = "Valores de X",
ylab = "Probabilidad"
)
# Probabilidades teóricas
points(
valores,
prob_teoricas,
pch = 19,
cex = 1.5
)
})