Normal: Abraham de Moivre la encontró en 1733 al aproximar la binomial con muchos intentos. Pierre-Simon Laplace la generalizó (1812) y Carl Friedrich Gauss la usó en 1809 para errores de medición en astronomía (“campana de Gauss”). El teorema del límite central explica su omnipresencia: la suma de muchos efectos pequeños tiende a ser normal.
Normal estándar: nació de una necesidad práctica. Calcular áreas bajo la curva requería tablas; estandarizar permite usar una sola tabla para cualquier normal.
x <- seq(-3.5, 3.5, length.out = 400)
df <- data.frame(x = x, y = dnorm(x))
ggplot(df, aes(x, y)) +
geom_area(data = subset(df, x >= -3 & x <= 3),
aes(fill = "99.7% (±3σ)"), alpha = 0.35) +
geom_area(data = subset(df, x >= -2 & x <= 2),
aes(fill = "95% (±2σ)"), alpha = 0.55) +
geom_area(data = subset(df, x >= -1 & x <= 1),
aes(fill = "68% (±1σ)"), alpha = 0.85) +
geom_line(color = "#1B5E20", linewidth = 0.8) +
scale_fill_manual(values = c(
"68% (±1σ)" = "#4CAF50",
"95% (±2σ)" = "#81C784",
"99.7% (±3σ)" = "#C8E6C9"),
name = NULL) +
scale_x_continuous(breaks = -3:3,
labels = c("μ-3σ","μ-2σ","μ-1σ","μ",
"μ+1σ","μ+2σ","μ+3σ")) +
labs(x = "Desviaciones estándar", y = "f(x)") +
theme_minimal(base_size = 8) +
theme(legend.position = "bottom",
legend.text = element_text(size = 7),
legend.key.size = unit(0.25, "cm"))df_g <- data.frame(
x = seq(-4, 20, length.out = 200),
tipo = "X ~ N(8, 4)")
df_g$y <- dnorm(df_g$x, 8, 4)
df_s <- data.frame(
x = seq(-3.5, 3.5, length.out = 200),
tipo = "Z ~ N(0, 1)")
df_s$y <- dnorm(df_s$x, 0, 1)
df_c <- rbind(df_g, df_s)
ggplot(df_c, aes(x, y)) +
geom_area(fill = "#81C784", alpha = 0.45) +
geom_line(color = "#1B5E20", linewidth = 0.7) +
facet_wrap(~tipo, scales = "free") +
labs(title = "Z = (X − μ) / σ",
x = "Valor", y = "Densidad") +
theme_minimal(base_size = 8) +
theme(strip.background = element_rect(
fill = "#E8F5E9", color = "#1B5E20"),
strip.text = element_text(
face = "bold", size = 8, color = "#1B5E20"),
plot.title = element_text(
size = 9, face = "bold",
hjust = 0.5, color = "#1B5E20"))Normal: finanzas (retornos, riesgo), control de calidad (medidas), educación (notas), biología/medicina (estatura, presión arterial), ingeniería (errores), logística (demanda).
Normal estándar: tabla universal de probabilidades, puntajes \(z\) para comparar escalas, intervalos de confianza, pruebas de hipótesis, VaR.
Un inversionista mide el riesgo anual de su portafolio diversificado de acciones.
Modelo: \(X \sim N(\mu = 8,\ \sigma = 12)\). (Valores ilustrativos).
Tres preguntas:
mu <- 8; sigma <- 12
# Pregunta 1: P(X < 0)
z_0 <- (0 - mu) / sigma
cat("1. P(pérdida): z =", round(z_0, 3),
"| P =", round(pnorm(z_0), 4), "\n")#> 1. P(pérdida): z = -0.667 | P = 0.2525
# Pregunta 2: P(X > 15)
z_15 <- (15 - mu) / sigma
cat("2. P(X>15): z =", round(z_15, 3),
"| P =", round(1 - pnorm(z_15), 4), "\n")#> 2. P(X>15): z = 0.583 | P = 0.2798
#> 3. VaR 95%: -11.74 %
# Crisis 2008
z_08 <- (-37 - mu) / sigma
cat("2008: z =", round(z_08, 2),
"| P =", format(pnorm(z_08), digits=2),
"\n")#> 2008: z = -3.75 | P = 8.8e-05
# Gráfico con zona de pérdida sombreada
xr <- seq(mu-3.5*sigma, mu+3.5*sigma, len=300)
dfr <- data.frame(x = xr, y = dnorm(xr, mu, sigma))
ggplot(dfr, aes(x, y)) +
geom_area(data = subset(dfr, x <= 0),
fill = "#E57373", alpha = 0.6) +
geom_area(data = subset(dfr, x > 0),
fill = "#C8E6C9", alpha = 0.3) +
geom_line(color = "#1B5E20", linewidth = 0.7) +
geom_vline(xintercept = 0, color = "#C62828",
linetype = "dashed", linewidth = 0.6) +
annotate("text", x = -12, y = 0.015,
label = "P(X<0) ≈ 25.3%",
color = "#C62828", fontface = "bold", size = 2.5) +
annotate("text", x = 22, y = 0.028,
label = "μ = 8%",
color = "#1B5E20", fontface = "bold", size = 2.5) +
labs(x = "Retorno anual (%)", y = "Densidad") +
theme_minimal(base_size = 8) +
theme(legend.position = "none")En 2008 el S&P 500 cayó ~37%. Con este modelo, \(z = \frac{-37-8}{12} = -3.75\), \(P \approx 0.00009\) (~1 vez cada 11.000 años), y aun así ocurrió. Las crisis traen más volatilidad y colas más pesadas de lo que la campana supone.