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.
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.
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
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.
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.
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"))
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.
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")
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")
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
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.
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")
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