Taller: Simulación de Variables Aleatorias en R

El software R proporciona funciones para generar números aleatorios de diversas distribuciones de probabilidad. Algunas funciones más importante en simulación son:

Distribución uniforme: runif(n, min, max)

Distribución normal: rnorm(n, mean, sd)

Distribución exponencial: rexp(n, rate)

Distribución de Poisson: rpois(n, lambda)

Distribución binomial: rbinom(n, size, prob)

Punto 1:

Un sistema de producción tiene fallas según un proceso de Poisson con una tasa de 3 fallas por día. Simular el número de fallas en un semestre (150 días) y calcular la media y desviación estándar.

set.seed(0521)
fallas<-rpois(150,3)
fallas
##   [1] 6 4 0 2 5 3 5 4 3 1 1 4 4 6 1 1 2 2 3 3 2 3 4 3 1 4 1 1 3 3 4 6 2 2 5 9 4
##  [38] 2 3 3 3 7 3 3 3 5 2 4 1 5 2 8 3 4 3 2 6 6 4 4 5 5 1 6 0 2 4 4 3 2 5 4 6 1
##  [75] 6 3 1 4 4 3 2 2 1 1 3 4 4 2 3 5 5 2 4 4 0 2 5 2 2 4 1 3 0 3 3 3 2 4 3 1 1
## [112] 3 4 2 4 1 3 1 5 0 1 2 3 2 3 4 0 3 3 4 2 1 0 1 2 4 3 3 0 4 2 1 5 1 1 1 2 1
## [149] 4 4
media_fallas <- mean(fallas)
desv_fallas <- sd(fallas)

media_fallas
## [1] 2.953333
desv_fallas
## [1] 1.708002

Conclusión:

La simulación de 150 días mostró un promedio cercano a 3 fallas diarias y una desviación estándar acorde a la teoría de la distribución Poisson, confirmando el comportamiento esperado del sistema de producción.

——————————————————————-

Punto 2:

La vida útil (en horas) de un componente electrónico sigue una distribución exponencial con un promedio de 500 horas. Simular 1000 componentes y estimar la probabilidad de que un componente dure más de 700 horas.

set.seed(2025)
vidas <- rexp(1000, rate = 1/500)   # rate = 1/media

# Estimar probabilidad con simulación
prob_mas700_sim <- mean(vidas > 700)
prob_mas700_sim
## [1] 0.256

Conclusión:

La probabilidad de que un componente dure más de 700 horas es aproximadamente 0.256.

———————————————————————

Punto 3:

En una línea de ensamblaje, la probabilidad de que un producto sea defectuoso es del 5%. Simular 100 lotes de 50 productos y calcular el número promedio de productos defectuosos por lote.

set.seed(4321)  

# Simular 100 lotes de 50 productos con p = 0.05
defectuosos <- rbinom(100, size = 50, prob = 0.05)

# Calcular el número promedio de defectuosos por lote
promedio_defectuosos <- mean(defectuosos)

defectuosos
##   [1] 2 5 2 0 4 3 4 4 2 2 5 1 2 3 3 2 4 0 1 1 2 2 3 4 1 1 4 1 1 1 5 6 2 3 1 0 0
##  [38] 1 1 5 3 2 2 2 2 4 3 5 2 2 2 2 2 1 3 3 1 2 1 5 3 1 3 3 4 2 2 2 4 4 1 3 2 3
##  [75] 4 2 3 4 5 6 2 2 4 6 3 3 1 6 4 3 2 2 4 2 4 0 2 3 2 1
promedio_defectuosos
## [1] 2.6

Conclusión:

La simulación mostró que, en promedio, cada lote de 50 productos presenta alrededor de 2 a 3 defectuosos, lo cual coincide con el valor esperado teórico de 2.5 defectuosos por lote según la distribución Binomial.

——————————————————————-

Punto 4:

La demanda diaria de energía (en MW) sigue una distribución normal con media de 100 MW y desviación estándar de 15 MW. Simular la demanda de un año (365 días) y calcular la probabilidad de que un día supere los 130 MW. y realizar el histograma.

set.seed(123)
demanda <- rnorm(365, mean = 100, sd = 15)

# Probabilidad de que supere 130 MW
prob_130 <- mean(demanda > 130)

# Histograma
hist(demanda, breaks = 20, probability = TRUE, 
     col = "lightblue", main = "Demanda de energía diaria",
     xlab = "MW")
curve(dnorm(x, mean = 100, sd = 15), add = TRUE, col = "green", lwd = 2)

prob_130
## [1] 0.03013699

Conclusión:

La simulación indica que la probabilidad de que la demanda diaria supere los 130 MW es baja, lo que confirma que la mayor parte de los valores se concentran alrededor de la media de 100 MW y siguen el comportamiento esperado de la distribución normal.

———————————————————————-

Punto 5: Una empresa de manufactura electrónica quiere simular el tiempo de vida (en horas) de un nuevo modelo de capacitor. Basado en datos históricos, se ha determinado que el tiempo de vida sigue una distribución exponencial con parámetro β = 1000 horas, que representa el tiempo medio de vida de los capacitores.

a) Generar 1000 tiempos de vida del capacitor aplicando el método de la transformada inversa.

b) Estimar la media y la varianza de los tiempos generados y compararlas con los valores teóricos.

c) Graficar el histograma de los tiempos de vida simulados junto con la densidad teórica de la distribución exponencial.

d) Calcular la probabilidad de que un capacitor dure menos de 940 horas usando la simulación.

set.seed(123)        # reproducibilidad
beta <- 1000         # media (β)
lambda <- 1 / beta   # rate para dexp/pexp
n <- 1000

# a) Generar por transformada inversa
u <- runif(n)
vidas <- -beta * log(u)   # X = -β * ln(U) (Exponencial con media β)

# b) Estadísticos: estimados y teóricos
media_emp <- mean(vidas)
var_emp <- var(vidas)

media_teorica <- beta
var_teorica <- beta^2

cat("Media empírica:", round(media_emp, 3), "\n")
## Media empírica: 1006.354
cat("Varianza empírica:", round(var_emp, 3), "\n\n")
## Varianza empírica: 1015991
cat("Media teórica:", media_teorica, "\n")
## Media teórica: 1000
cat("Varianza teórica:", var_teorica, "\n\n")
## Varianza teórica: 1e+06
# c) Histograma con densidad teórica
hist(vidas, probability = TRUE, breaks = 30,
     main = "Tiempos de vida simulados (Exponencial, β=1000h)",
     xlab = "Horas", col = "lightgreen", border = "white")
curve(dexp(x, rate = lambda), add = TRUE, col = "red", lwd = 2)

# d) Probabilidad empírica de durar menos de 940 horas
prob_empirica_menor_940 <- mean(vidas < 940)
prob_teorica_menor_940 <- pexp(940, rate = lambda)

cat("Probabilidad empírica P(X < 940):", round(prob_empirica_menor_940, 4), "\n")
## Probabilidad empírica P(X < 940): 0.605
cat("Probabilidad teórica   P(X < 940):", round(prob_teorica_menor_940, 4), "\n")
## Probabilidad teórica   P(X < 940): 0.6094

Conclusión:

La muestra generada por la transformada inversa debe producir una media empírica cercana a 1000 y una varianza empírica próxima a 1,000,000; la probabilidad empírica de que un capacitor dure menos de 940 horas también deberá rondar 0.61, muy cercana al valor teórico ≈0.6094.