# =====================================
# EJERCICIOS DE ESTADÍSTICA - DISTRIBUCIÓN NORMAL
# =====================================

# -------------------------------------
# Ejercicio 6.13: Vida de ratones
# Media = 40 meses, Desviación estándar = 6.3 meses
# -------------------------------------

# a) P(X > 32) - Probabilidad de que un ratón viva más de 32 meses
p_a <- 1 - pnorm(32, mean = 40, sd = 6.3)
cat("6.13a) P(X > 32) =", p_a, "\n")
## 6.13a) P(X > 32) = 0.8979294
# b) P(X < 28) - Probabilidad de que un ratón viva menos de 28 meses
p_b <- pnorm(28, mean = 40, sd = 6.3)
cat("6.13b) P(X < 28) =", p_b, "\n")
## 6.13b) P(X < 28) = 0.02840551
# c) P(37 < X < 49) - Probabilidad de que un ratón viva entre 37 y 49 meses
p_c <- pnorm(49, mean = 40, sd = 6.3) - pnorm(37, mean = 40, sd = 6.3)
cat("6.13c) P(37 < X < 49) =", p_c, "\n\n")
## 6.13c) P(37 < X < 49) = 0.6064669
# -------------------------------------
# Ejercicio 6.14: Diámetro de anillos de pistón
# Media = 10 cm, Desviación estándar = 0.03 cm
# -------------------------------------

# a) P(X > 10.075) - Proporción de anillos con diámetro > 10.075 cm
p_a2 <- 1 - pnorm(10.075, mean = 10, sd = 0.03)
cat("6.14a) P(X > 10.075) =", p_a2, "\n")
## 6.14a) P(X > 10.075) = 0.006209665
# b) P(9.97 < X < 10.03) - Probabilidad de diámetro entre 9.97 y 10.03 cm
p_b2 <- pnorm(10.03, mean = 10, sd = 0.03) - pnorm(9.97, mean = 10, sd = 0.03)
cat("6.14b) P(9.97 < X < 10.03) =", p_b2, "\n")
## 6.14b) P(9.97 < X < 10.03) = 0.6826895
# c) Valor por debajo del cual cae el 15% de los anillos (percentil 15%)
valor_c <- qnorm(0.15, mean = 10, sd = 0.03)
cat("6.14c) El 15% de los anillos tiene diámetro <", valor_c, "cm\n\n")
## 6.14c) El 15% de los anillos tiene diámetro < 9.968907 cm
# -------------------------------------
# Ejercicio 6.15: Tiempos de viaje del abogado
# Media = 24 minutos, Desviación estándar = 3.8 minutos
# -------------------------------------

# a) P(X >= 30) - Probabilidad de que un viaje tome al menos 30 minutos
p_a3 <- 1 - pnorm(30, mean = 24, sd = 3.8)
cat("6.15a) P(X >= 30) =", p_a3, "\n")
## 6.15a) P(X >= 30) = 0.05717406
# b) Probabilidad de llegar tarde (viaje > 15 minutos, de 8:45 a 9:00)
p_b3 <- 1 - pnorm(15, mean = 24, sd = 3.8)
cat("6.15b) Probabilidad de llegar tarde =", p_b3 * 100, "%\n")
## 6.15b) Probabilidad de llegar tarde = 99.10679 %
# c) Probabilidad de perderse el café (viaje > 15 minutos, de 8:35 a 8:50)
p_c3 <- 1 - pnorm(15, mean = 24, sd = 3.8)
cat("6.15c) Probabilidad de perderse el café =", p_c3 * 100, "%\n")
## 6.15c) Probabilidad de perderse el café = 99.10679 %
# d) Duración del 15% de los viajes más lentos (percentil 85%)
valor_d <- qnorm(0.85, mean = 24, sd = 3.8)
cat("6.15d) El 15% de los viajes más lentos toma más de:", valor_d, "minutos\n")
## 6.15d) El 15% de los viajes más lentos toma más de: 27.93845 minutos
# e) Probabilidad de que 2 de los próximos 3 viajes tomen al menos 30 minutos
# Usamos distribución binomial con n=3, p = p_a3
p_e3 <- dbinom(2, size = 3, prob = p_a3)
cat("6.15e) P(2 de 3 viajes >= 30 min) =", p_e3, "\n\n")
## 6.15e) P(2 de 3 viajes >= 30 min) = 0.009245937
# -------------------------------------
# Ejercicio 6.16: Pureza de oxígeno
# Media = 99.61, Desviación estándar = 0.08
# -------------------------------------

# a) P(99.5 < X < 99.7) - Porcentaje de pureza entre 99.5 y 99.7
p_a4 <- pnorm(99.7, mean = 99.61, sd = 0.08) - pnorm(99.5, mean = 99.61, sd = 0.08)
cat("6.16a) P(99.5 < X < 99.7) =", p_a4 * 100, "%\n")
## 6.16a) P(99.5 < X < 99.7) = 78.51398 %
# b) Valor que excede el 5% de la población (percentil 95%)
valor_b4 <- qnorm(0.95, mean = 99.61, sd = 0.08)
cat("6.16b) El 5% de la población tiene pureza >", valor_b4, "\n")
## 6.16b) El 5% de la población tiene pureza > 99.74159
# =====================================
# GRÁFICAS PARA EJERCICIOS DE DISTRIBUCIÓN NORMAL
# =====================================
install.packages("ggplot2")
## Installing package into '/cloud/lib/x86_64-pc-linux-gnu-library/4.5'
## (as 'lib' is unspecified)
install.packages("patchwork")
## Installing package into '/cloud/lib/x86_64-pc-linux-gnu-library/4.5'
## (as 'lib' is unspecified)
library(ggplot2)
library(patchwork) 

# Función para crear gráfica de distribución normal con área sombreada
grafica_normal <- function(media, sd, lim_inf = NA, lim_sup = NA, titulo) {
  # Crear secuencia de valores x
  x <- seq(media - 4*sd, media + 4*sd, length.out = 1000)
  y <- dnorm(x, mean = media, sd = sd)
  
  # Crear data frame
  df <- data.frame(x = x, y = y)
  
  # Crear gráfica base
  p <- ggplot(df, aes(x = x, y = y)) +
    geom_line(color = "steelblue", linewidth = 1) +
    geom_vline(xintercept = media, color = "red", linetype = "dashed") +
    labs(title = titulo,
         x = "Valores",
         y = "Densidad de probabilidad") +
    theme_minimal()
  
  # Sombrear área si se especifican límites
  if (!is.na(lim_inf) & !is.na(lim_sup)) {
    # Área entre dos valores
    p <- p + geom_area(data = subset(df, x >= lim_inf & x <= lim_sup),
                       aes(y = y), fill = "orange", alpha = 0.5)
  } else if (!is.na(lim_inf)) {
    # Área mayor que lim_inf
    p <- p + geom_area(data = subset(df, x >= lim_inf),
                       aes(y = y), fill = "orange", alpha = 0.5)
  } else if (!is.na(lim_sup)) {
    # Área menor que lim_sup
    p <- p + geom_area(data = subset(df, x <= lim_sup),
                       aes(y = y), fill = "orange", alpha = 0.5)
  }
  
  return(p)
}

# -------------------------------------
# Ejercicio 6.13: Vida de ratones
# -------------------------------------
p1 <- grafica_normal(40, 6.3, lim_inf = 32, titulo = "6.13a) P(X > 32) - Vida de ratones")
p2 <- grafica_normal(40, 6.3, lim_sup = 28, titulo = "6.13b) P(X < 28) - Vida de ratones")
p3 <- grafica_normal(40, 6.3, lim_inf = 37, lim_sup = 49, titulo = "6.13c) P(37 < X < 49) - Vida de ratones")

# -------------------------------------
# Ejercicio 6.14: Diámetro de anillos
# -------------------------------------
p4 <- grafica_normal(10, 0.03, lim_inf = 10.075, titulo = "6.14a) P(X > 10.075) - Diámetro anillos")
p5 <- grafica_normal(10, 0.03, lim_inf = 9.97, lim_sup = 10.03, titulo = "6.14b) P(9.97 < X < 10.03) - Diámetro anillos")

# Para 6.14c, mostramos el percentil 15%
p6 <- grafica_normal(10, 0.03, lim_sup = qnorm(0.15, 10, 0.03), 
                     titulo = "6.14c) Percentil 15% - Diámetro anillos")

# -------------------------------------
# Ejercicio 6.15: Tiempos de viaje
# -------------------------------------
p7 <- grafica_normal(24, 3.8, lim_inf = 30, titulo = "6.15a) P(X >= 30) - Tiempo viaje")
p8 <- grafica_normal(24, 3.8, lim_inf = 15, titulo = "6.15b) Llegar tarde (X > 15 min)")
p9 <- grafica_normal(24, 3.8, lim_inf = 15, titulo = "6.15c) Perderse café (X > 15 min)")
p10 <- grafica_normal(24, 3.8, lim_inf = qnorm(0.85, 24, 3.8), 
                      titulo = "6.15d) 15% viajes más lentos")

# -------------------------------------
# Ejercicio 6.16: Pureza de oxígeno
# -------------------------------------
p11 <- grafica_normal(99.61, 0.08, lim_inf = 99.5, lim_sup = 99.7, 
                      titulo = "6.16a) P(99.5 < X < 99.7) - Pureza oxígeno")
p12 <- grafica_normal(99.61, 0.08, lim_inf = qnorm(0.95, 99.61, 0.08), 
                      titulo = "6.16b) 5% valores más altos - Pureza oxígeno")

# =====================================
# MOSTRAR GRÁFICAS
# =====================================

# Mostrar gráficas una por una
print(p1)

print(p2)

print(p3)

print(p4)

print(p5)

print(p6)

print(p7)

print(p8)

print(p9)

print(p10)

print(p11)

print(p12)