Introducción

Este documento contiene la solución detallada del taller Simulación de Variables Aleatorias en R. Para cada ejercicio incluyo: 1) el enunciado, 2) el código R listo para ejecutar (chunks separados), y 3) un análisis e interpretación de los resultados.

Nota: ejecutar todos los chunks producirá los números y gráficos reportados. Uso set.seed(123) donde es necesario para reproducibilidad.


Ejercicio 1 — Proceso de Poisson

Enunciado: Un sistema de producción tiene fallas según un proceso de Poisson con tasa \(\lambda = 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.

a) Simulación de 150 días

set.seed(123)
fallas <- rpois(150, lambda = 3)
# Mostrar un resumen y las primeras observaciones
summary(fallas)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##       0       2       3       3       4       8
head(fallas, 15)
##  [1] 2 4 2 5 6 0 3 5 3 3 6 3 4 3 1

b) Cálculo de la media

media_fallas <- mean(fallas)
media_fallas
## [1] 3

Análisis (media): La media muestral estimada se interpreta como el número promedio de fallas por día durante los 150 días simulados. Teóricamente para una Poisson(3) la esperanza es 3. Comparamos la media simulada con ese valor.

c) Cálculo de la desviación estándar

desv_fallas <- sd(fallas)
desv_fallas
## [1] 1.658818

Análisis (desviación): Para una distribución Poisson con \(\lambda=3\), la varianza teórica es 3 y la desviación estándar teórica es \(\sqrt{3} \approx 1.732\). Verificamos si la desviación muestral está cercana a ese valor.

d) Histograma y ajuste teórico

hist(fallas, breaks = seq(-0.5, max(fallas)+0.5, by = 1),
     col = "lightblue", main = "Histograma: fallas por día (150 días)",
     xlab = "Número de fallas", ylab = "Frecuencia")
# Superponer la probabilidad teórica de Poisson escalada a frecuencia
x_vals <- 0:max(fallas)
prob_teorica <- dpois(x_vals, lambda = 3) * length(fallas)
lines(x_vals, prob_teorica, pch = 16, col = "red")
legend("topright", legend = c("Frecuencia muestral", "Prob. teórica * n"),
       fill = c("lightblue", NA), pch = c(NA, 16), col = c("black", "red"))

Ejercicio 2 — Exponencial (vida útil)

set.seed(123)
vidas <- rexp(1000, rate = 1/500)  # mean = 500
summary(vidas)
##     Min.  1st Qu.   Median     Mean  3rd Qu.     Max. 
##    0.413  153.346  365.583  514.990  713.318 3605.504
# Probabilidad simulada P(X > 700)
prob_mas700 <- mean(vidas > 700)
prob_mas700
## [1] 0.255

Análisis: La exponencial con media 500 tiene parámetro de tasa \(\lambda = 1/500\). La probabilidad teórica de que dure más de 700 horas se calcula como \(P(X>700)=e^{-700/500}=e^{-1.4}\approx 0.2466\). Comparamos la probabilidad simulada con este valor teórico y comentamos la diferencia por error de muestreo.


Ejercicio 3 — Binomial (defectuosos)

set.seed(123)
defectuosos <- rbinom(100, size = 50, prob = 0.05)
# Resumen y promedio
summary(defectuosos)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    0.00    1.00    2.00    2.48    3.00    7.00
promedio_defectuosos <- mean(defectuosos)
promedio_defectuosos
## [1] 2.48

Análisis: La esperanza teórica por lote es \(n p = 50 * 0.05 = 2.5\) defectuosos por lote. Comprobamos si el promedio muestral está cercano a 2.5. También es útil ver la distribución (histograma o tabla de frecuencias) para observar la variabilidad entre lotes.

barplot(table(defectuosos), main = "Frecuencia de defectuosos por lote",
        xlab = "Número de defectuosos", ylab = "Cantidad de lotes", col = "lightcoral")


Ejercicio 4 — Normal (demanda de energía)

set.seed(123)
demanda <- rnorm(365, mean = 100, sd = 15)
summary(demanda)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   63.01   91.08   99.50  100.48  110.26  148.62
prob_supera130 <- mean(demanda > 130)
prob_supera130
## [1] 0.03013699

Análisis: La probabilidad teórica de que una Normal(100,15^2) supere 130 se calcula con la cola: \(P(X>130)=1-\Phi((130-100)/15)=1-\Phi(2)=\) aproximadamente 0.0228 (cola superior de 2 desviaciones estándar). Comparar el valor simulado con el teórico.

hist(demanda, breaks = 20, probability = TRUE, col = "skyblue",
     main = "Demanda diaria de energía (MW)", xlab = "MW")
lines(density(demanda), lwd = 2)
# Superponer densidad teórica
curve(dnorm(x, mean = 100, sd = 15), add = TRUE, lty = 2)
legend("topright", legend = c("Densidad muestral", "Densidad teórica"),
       lty = c(1,2), bty = "n")


Ejercicio 5 — Capacitores (Exponencial via transformada inversa)

a) Generar 1000 tiempos con la transformada inversa

set.seed(123)
n <- 1000
U <- runif(n)
tiempo_cap <- -1000 * log(1 - U)  # transformada inversa para Exp(mean=1000)
summary(tiempo_cap)
##      Min.   1st Qu.    Median      Mean   3rd Qu.      Max. 
##    0.4655  292.5478  673.2470  986.1544 1373.5970 7426.1561

b) Estimar media y varianza (comparar con teóricos)

media_t <- mean(tiempo_cap)
var_t <- var(tiempo_cap)
media_t
## [1] 986.1544
var_t
## [1] 954966.2

Análisis estadístico: La media teórica es 1000 y la varianza teórica es \(\beta^2 = 1{,}000{,}000\). Comparamos los estimadores muestrales con los valores teóricos y comentamos el error de muestreo.

c) Histograma y densidad teórica

hist(tiempo_cap, breaks = 40, probability = TRUE, col = "lightgreen",
     main = "Tiempo de vida de capacitores (n=1000)", xlab = "Horas")
# densidad teórica
curve(dexp(x, rate = 1/1000), add = TRUE, lwd = 2)
legend("topright", legend = c("Muestra", "Densidad teórica"), lty = c(NA,1), pch = c(15,NA), bty = "n")

d) Probabilidad de durar menos de 940 horas

prob_menos940 <- mean(tiempo_cap < 940)
prob_menos940
## [1] 0.611
# Valor teórico: 1 - exp(-940/1000)
prob_teor_940 <- pexp(940, rate = 1/1000)
prob_teor_940
## [1] 0.6093722