Modela variables positivas y asimétricas cuyo logaritmo sigue una distribución normal. Se usa para representar valores que no pueden ser negativos y presentan una cola hacia la derecha, como ingresos, precios, tiempos de vida o rendimientos financieros.
\[f(x)=\frac{1}{x\sigma \sqrt{2\pi
}}e^{-\frac{(Lnx - \mu )^{2}}{2\sigma^{2} }}, x>0\] f(x) =
función de densidad.
x = variable aleatoria positiva.
\(\mu\) = media del logaritmo de
x.
\(\sigma\) = desviación estándar del
logaritmo de x.
e = número de Euler
En el informe económico de Guadalajara de Buga para el año 2025 se reportaron las ventas de diferentes sectores económicos del municipio. Se desea estudiar el comportamiento de las ventas registradas. La variable X corresponde a las ventas reportadas por sector económico (en pesos) y los valores observados son:
| Sector | Ventas (COP) |
|---|---|
| Agrícola y Pesquero | 1.826.820.441.191 |
| Industria Manufacturera | 1.656.296.688.513 |
| Comercio | 1.311.424.914.006 |
| Transporte | 135.878.357.440 |
| Alojamiento y Servicios de Comida | 54.958.726.359 |
| Construcción | 73.992.500.441 |
| Tratamiento de Aguas | 79.980.683.220 |
| Minas | 1.772.257.000 |
Fuente: Informe Económico Guadalajara de Buga 2025
# Datos reales del ejemplo: ventas por sector en pesos
ventas <- c(1826820441191, 1656296688513, 1311424914006,
135878357440, 54958726359, 73992500441,
79980683220, 1772257000)
sectores <- c("Agrícola y Pesquero", "Industria Manufacturera", "Comercio",
"Transporte", "Alojamiento", "Construcción",
"Tratamiento de Aguas", "Minas")
# Parámetros de la distribución lognormal
# Se estiman a partir del logaritmo de los datos
log_ventas <- log(ventas)
u <- mean(log_ventas) # media del logaritmo
o <- sd(log_ventas) # desviación estándar del logaritmo
cat("Media del logaritmo (mu):", round(u, 4), "\n")
## Media del logaritmo (mu): 25.758
cat("Desv. estándar del logaritmo (sigma):", round(o, 4), "\n\n")
## Desv. estándar del logaritmo (sigma): 2.3399
# Algoritmo manual de la función de densidad lognormal
lognormal <- function(x, u, o) {
pi_val <- 3.141592653
dis <- (1 / (x * o * sqrt(2 * pi_val))) * exp(-((log(x) - u)^2) / (2 * o^2))
return(dis)
}
# Calcular f(x) para cada sector con el algoritmo propio
densidades_manual <- sapply(ventas, lognormal, u = u, o = o)
# Calcular f(x) para cada sector con la función de R
densidades_R <- dlnorm(ventas, meanlog = u, sdlog = o)
# Comparación de resultados
resultado <- data.frame(
Sector = sectores,
Ventas_COP = format(ventas, big.mark = ".", scientific = FALSE),
f_x_manual = format(densidades_manual, scientific = TRUE, digits = 4),
f_x_R = format(densidades_R, scientific = TRUE, digits = 4)
)
## Warning in prettyNum(.Internal(format(x, trim, digits, nsmall, width, 3L, :
## 'big.mark' y 'decimal.mark' son ambos '.', lo cual puede ser confuso
knitr::kable(resultado,
col.names = c("Sector", "Ventas (COP)", "f(x) Algoritmo", "f(x) dlnorm()"),
caption = "Densidad lognormal por sector económico - Buga 2025",
align = c("l","r","r","r"))
| Sector | Ventas (COP) | f(x) Algoritmo | f(x) dlnorm() |
|---|---|---|---|
| Agrícola y Pesquero | 1.826.820.441.191 | 5.333e-14 | 5.333e-14 |
| Industria Manufacturera | 1.656.296.688.513 | 6.143e-14 | 6.143e-14 |
| Comercio | 1.311.424.914.006 | 8.544e-14 | 8.544e-14 |
| Transporte | 135.878.357.440 | 1.253e-12 | 1.253e-12 |
| Alojamiento | 54.958.726.359 | 2.817e-12 | 2.817e-12 |
| Construcción | 73.992.500.441 | 2.195e-12 | 2.195e-12 |
| Tratamiento de Aguas | 79.980.683.220 | 2.050e-12 | 2.050e-12 |
| Minas | 1.772.257.000 | 1.561e-11 | 1.561e-11 |
# Gráfica de la distribución ajustada a los datos
x_seq <- seq(min(ventas) * 0.1, max(ventas) * 1.5, length.out = 500)
y_seq <- dlnorm(x_seq, meanlog = u, sdlog = o)
plot(x_seq, y_seq, type = "l", col = "steelblue", lwd = 2,
main = "Distribución Lognormal - Ventas por Sector (Buga 2025)",
xlab = "Ventas (COP)", ylab = "Densidad f(x)",
cex.main = 0.9)
points(ventas, dlnorm(ventas, meanlog = u, sdlog = o),
col = "red", pch = 19, cex = 0.9)
legend("topright", legend = c("Curva lognormal", "Sectores observados"),
col = c("steelblue", "red"), lty = c(1, NA), pch = c(NA, 19))
La distribución gaussiana o normal es simétrica respecto a su media y describe muchos fenómenos naturales, como alturas, pesos o errores de medición. Es la base de la estadística inferencial.
\[f(x)=\frac{1}{\sigma \sqrt{2\pi
}}e^{-\frac{(x - \mu )^{2}}{2\sigma^{2}}}\]
f(x) = función densidad.
x = valor de la variable.
\(\mu\) = media de la
distribución.
\(\sigma\) = desviación estándar
En Guadalajara de Buga se registró el número total de empresas durante varios periodos consecutivos. Se desea estudiar el comportamiento de la cantidad de empresas registradas a lo largo del tiempo. La variable X corresponde al número de empresas registradas por año y los valores observados son:
| Año | Empresas registradas |
|---|---|
| 2021 | 4.568 |
| 2022 | 4.868 |
| 2024 | 4.960 |
| 2025 | 5.065 |
Fuente: Cámara de Comercio de Guadalajara de Buga
# Datos reales del ejemplo: empresas registradas por año
empresas <- c(4568, 4868, 4960, 5065)
anios <- c(2021, 2022, 2024, 2025)
# Parámetros estimados a partir de los datos
u <- mean(empresas) # media
o <- sd(empresas) # desviación estándar
cat("Media (mu):", round(u, 2), "empresas\n")
## Media (mu): 4865.25 empresas
cat("Desviación estándar (sigma):", round(o, 2), "empresas\n\n")
## Desviación estándar (sigma): 213.89 empresas
# Algoritmo manual de la función de densidad gaussiana
gauss <- function(x, u, o) {
pi_val <- 3.141592653
dis <- (1 / (o * sqrt(2 * pi_val))) * exp(-(1/2) * ((x - u) / o)^2)
return(dis)
}
# Calcular f(x) para cada año con el algoritmo propio
densidades_manual <- sapply(empresas, gauss, u = u, o = o)
# Calcular f(x) con la función de R
densidades_R <- dnorm(empresas, mean = u, sd = o)
# Comparación de resultados
resultado <- data.frame(
Año = anios,
Empresas = empresas,
f_x_manual = round(densidades_manual, 8),
f_x_R = round(densidades_R, 8)
)
knitr::kable(resultado,
col.names = c("Año", "Empresas", "f(x) Algoritmo", "f(x) dnorm()"),
caption = "Densidad gaussiana - Empresas registradas Buga",
align = c("c","r","r","r"))
| Año | Empresas | f(x) Algoritmo | f(x) dnorm() |
|---|---|---|---|
| 2021 | 4568 | 0.0007101 | 0.0007101 |
| 2022 | 4868 | 0.0018651 | 0.0018651 |
| 2024 | 4960 | 0.0016909 | 0.0016909 |
| 2025 | 5065 | 0.0012060 | 0.0012060 |
# Gráfica de la distribución normal ajustada
x_seq <- seq(u - 4*o, u + 4*o, length.out = 400)
y_seq <- dnorm(x_seq, mean = u, sd = o)
plot(x_seq, y_seq, type = "l", col = "darkgreen", lwd = 2,
main = "Distribución Gaussiana - Empresas Registradas (Buga)",
xlab = "Número de empresas", ylab = "Densidad f(x)")
points(empresas, dnorm(empresas, mean = u, sd = o),
col = "red", pch = 19, cex = 1.1)
text(empresas, dnorm(empresas, mean = u, sd = o),
labels = anios, pos = 3, cex = 0.75, col = "darkred")
abline(v = u, lty = 2, col = "gray50")
legend("topright", legend = c("Curva normal", "Años observados"),
col = c("darkgreen", "red"), lty = c(1, NA), pch = c(NA, 19))
Modela la suma de cuadrados de variables normales estándar y solo toma valores positivos. Se utiliza principalmente en pruebas de hipótesis e inferencia estadística, como la prueba de independencia o la de bondad de ajuste.
\[\chi^2 = \sum_{i=1}^{k} \frac{(O_i -
E_i)^2}{E_i}\] \(\chi^2\) =
Estadístico chi cuadrado
k = Número de categorías.
\(O_i\) = Frecuencia observada.
\(E_i\) = Frecuencia esperada.
En el estudio empresarial de Guadalajara de Buga se registró la participación de cada sector económico sobre el total de ventas del municipio durante 2025. Se aplica la prueba chi cuadrado para verificar si existe diferencia significativa entre la participación de los sectores (hipótesis de distribución uniforme). La variable X corresponde a la participación porcentual de cada sector en las ventas totales:
| Sector | Participación (%) |
|---|---|
| Industria Manufacturera | 34.04 |
| Agrícola y Pesquero | 30.86 |
| Comercio | 24.43 |
| Transporte | 2.53 |
| Tratamiento de Aguas | 1.49 |
| Construcción | 1.38 |
| Alojamiento y Servicios de Comida | 1.02 |
| Minas | 0.03 |
Fuente: Informe Económico Guadalajara de Buga 2025
# Datos reales del ejemplo: participación porcentual por sector
# (se trabaja con los porcentajes escalados a frecuencias enteras)
participacion <- c(34.04, 30.86, 24.43, 2.53, 1.49, 1.38, 1.02, 0.03)
sectores <- c("Ind. Manufacturera", "Agrícola y Pesquero", "Comercio",
"Transporte", "Tratamiento Aguas", "Construcción",
"Alojamiento", "Minas")
# Se escalan los porcentajes para obtener frecuencias observadas enteras
# (multiplicamos por 100 y redondeamos para simular frecuencias sobre 10000)
o <- round(participacion * 100 / sum(participacion) * 1000)
k <- length(o)
n <- sum(o)
# Frecuencia esperada bajo hipótesis de distribución uniforme
e <- rep(n / k, k)
cat("Frecuencias observadas (escaladas):\n")
## Frecuencias observadas (escaladas):
print(o)
## [1] 35540 32220 25506 2641 1556 1441 1065 31
cat("\nFrecuencia esperada por sector:", round(e[1], 2), "\n\n")
##
## Frecuencia esperada por sector: 12500
# Algoritmo manual del estadístico chi cuadrado
chi_cu <- function(o, k, e) {
a <- 0
for (i in 1:k) {
dis <- ((o[i] - e[i])^2) / e[i]
a <- a + dis
}
return(a)
}
chi_manual <- chi_cu(o, k, e)
chi_R <- chisq.test(o)
cat("Chi cuadrado (algoritmo):", round(chi_manual, 4), "\n")
## Chi cuadrado (algoritmo): 137150.7
cat("Chi cuadrado (chisq.test):", round(chi_R$statistic, 4), "\n")
## Chi cuadrado (chisq.test): 137150.7
cat("Grados de libertad:", chi_R$parameter, "\n")
## Grados de libertad: 7
cat("Valor p:", round(chi_R$p.value, 6), "\n\n")
## Valor p: 0
# Tabla de aportes por sector
aportes <- ((o - e)^2) / e
resultado <- data.frame(
Sector = sectores,
Part_pct = participacion,
Obs = o,
Esp = round(e, 1),
Aporte_chi2 = round(aportes, 4)
)
knitr::kable(resultado,
col.names = c("Sector", "Part. (%)", "Obs.", "Esp.", "Aporte χ²"),
caption = paste0("Prueba Chi Cuadrado por sector - χ² = ",
round(chi_manual, 2), ", p = ",
round(chi_R$p.value, 4)),
align = c("l","r","r","r","r"))
| Sector | Part. (%) | Obs. | Esp. | Aporte χ² |
|---|---|---|---|---|
| Ind. Manufacturera | 34.04 | 35540 | 12500 | 42467.328 |
| Agrícola y Pesquero | 30.86 | 32220 | 12500 | 31110.272 |
| Comercio | 24.43 | 25506 | 12500 | 13532.483 |
| Transporte | 2.53 | 2641 | 12500 | 7775.990 |
| Tratamiento Aguas | 1.49 | 1556 | 12500 | 9581.691 |
| Construcción | 1.38 | 1441 | 12500 | 9784.119 |
| Alojamiento | 1.02 | 1065 | 12500 | 10460.738 |
| Minas | 0.03 | 31 | 12500 | 12438.077 |
# Gráfica de la distribución chi cuadrado con gl = k-1
gl <- k - 1
x_seq <- seq(0, chi_manual * 1.8, length.out = 400)
y_seq <- dchisq(x_seq, df = gl)
plot(x_seq, y_seq, type = "l", col = "purple", lwd = 2,
main = paste0("Distribución Chi Cuadrado (gl = ", gl, ") - Sectores Buga 2025"),
xlab = expression(chi^2), ylab = "Densidad")
abline(v = chi_manual, col = "red", lty = 2, lwd = 2)
x_region <- seq(qchisq(0.95, df = gl), max(x_seq), length.out = 200)
polygon(c(x_region, rev(x_region)),
c(dchisq(x_region, df = gl), rep(0, 200)),
col = rgb(1, 0, 0, 0.2), border = NA)
legend("topright",
legend = c("Densidad χ²", paste0("χ² observado = ", round(chi_manual,2)),
"Zona de rechazo (α=0.05)"),
col = c("purple","red", rgb(1,0,0,0.4)),
lty = c(1, 2, NA), fill = c(NA, NA, rgb(1,0,0,0.2)),
border = c(NA, NA, "red"))
Describe el número de eventos que ocurren en un intervalo de tiempo o espacio, cuando estos son independientes y tienen una tasa promedio constante. Se aplica para contar llegadas, errores o fallas, por ejemplo llamadas por minuto o defectos por metro cuadrado.
\[P\left (X = k \right )=
\frac{e^{-\lambda }\lambda ^{k}}{k!}\]
P(X=k) = probabilidad de que ocurran k eventos en el intérvalo.
\(\lambda\) = tasa promedio.
k = conteo de eventos.
La Cámara de Comercio de Guadalajara de Buga reportó la cantidad de empresas registradas durante diferentes años. Se modela el número de nuevas empresas registradas por año con una distribución Poisson, usando como tasa promedio (\(\lambda\)) el promedio histórico de registros anuales. La variable X corresponde al número de empresas registradas por periodo:
| Año | Empresas registradas |
|---|---|
| 2021 | 4.568 |
| 2022 | 4.868 |
| 2024 | 4.960 |
| 2025 | 5.065 |
Fuente: Cámara de Comercio de Guadalajara de Buga
# Datos reales del ejemplo
empresas <- c(4568, 4868, 4960, 5065)
anios <- c(2021, 2022, 2024, 2025)
# Lambda = promedio histórico de empresas registradas por año
lam <- mean(empresas)
cat("Lambda (promedio anual):", round(lam, 2), "empresas\n\n")
## Lambda (promedio anual): 4865.25 empresas
# Algoritmo manual del factorial
factorial_manual <- function(x) {
a <- 1
for (i in 1:x) {
a <- a * i
}
return(a)
}
# Algoritmo manual de la distribución Poisson
pois <- function(k, lam) {
e <- 2.71828182845
dis <- ((e^-lam) * (lam^k)) / factorial_manual(k)
return(dis)
}
# Para valores grandes de lambda, se usa el logaritmo para evitar desbordamiento numérico
pois_log <- function(k, lam) {
# log P(X=k) = -lam + k*log(lam) - log(k!)
log_prob <- -lam + k * log(lam) - sum(log(1:k))
return(exp(log_prob))
}
# Calcular P(X = empresas_i) para cada año observado
prob_manual <- sapply(empresas, pois_log, lam = lam)
prob_R <- dpois(empresas, lambda = lam)
# Tabla comparativa
resultado <- data.frame(
Año = anios,
k = empresas,
P_manual = format(prob_manual, scientific = TRUE, digits = 4),
P_R = format(prob_R, scientific = TRUE, digits = 4)
)
knitr::kable(resultado,
col.names = c("Año", "k (empresas)", "P(X=k) Algoritmo", "P(X=k) dpois()"),
caption = paste0("Distribución Poisson con λ = ", round(lam, 2),
" - Empresas registradas Buga"),
align = c("c","r","r","r"))
| Año | k (empresas) | P(X=k) Algoritmo | P(X=k) dpois() |
|---|---|---|---|
| 2021 | 4568 | 5.554e-07 | 5.554e-07 |
| 2022 | 4868 | 5.713e-03 | 5.713e-03 |
| 2024 | 4960 | 2.265e-03 | 2.265e-03 |
| 2025 | 5065 | 9.810e-05 | 9.810e-05 |
# Gráfica de probabilidades Poisson alrededor de lambda
k_seq <- seq(max(0, round(lam) - 200), round(lam) + 200, by = 10)
probs <- dpois(k_seq, lambda = lam)
plot(k_seq, probs, type = "h", col = "steelblue", lwd = 1.5,
main = paste0("Distribución Poisson (λ = ", round(lam, 0), ") - Empresas Buga"),
xlab = "Número de empresas (k)", ylab = "P(X = k)")
points(empresas, dpois(empresas, lambda = lam),
col = "red", pch = 19, cex = 1.2)
text(empresas, dpois(empresas, lambda = lam),
labels = anios, pos = 3, cex = 0.75, col = "darkred")
legend("topright", legend = c("P(X=k)", "Años observados"),
col = c("steelblue", "red"), lty = c(1, NA), pch = c(NA, 19))
La distribución exponencial es una distribución de probabilidad continua que modela el tiempo que transcurre hasta que ocurre un evento específico en un proceso donde los eventos ocurren de manera independiente a una tasa constante.
\[f(x) = \lambda e^{-\lambda x},
x>0\] f(x) = función densidad.
x = tiempo de espera (o valor positivo de la variable).
\(\lambda\) = tasa de eventos por
unidad de tiempo.
En Guadalajara de Buga se registró el crecimiento porcentual anual del sector de alojamiento y servicios de comida. La distribución exponencial se ajusta a estos datos para modelar la tasa de crecimiento. La variable X corresponde al crecimiento porcentual anual del sector:
| Periodo | Crecimiento (%) |
|---|---|
| 1 | 13.54 |
| 2 | 14.86 |
| 3 | 14.99 |
| 4 | 21.36 |
Fuente: Informes Económicos Guadalajara de Buga
# Datos reales del ejemplo: crecimiento porcentual anual del sector
crecimiento <- c(13.54, 14.86, 14.99, 21.36)
periodos <- c(1, 2, 3, 4)
# Lambda = inverso de la media (tasa de la distribución exponencial)
lam <- 1 / mean(crecimiento)
cat("Media de crecimientos:", round(mean(crecimiento), 4), "%\n")
## Media de crecimientos: 16.1875 %
cat("Lambda estimado (1/media):", round(lam, 6), "\n\n")
## Lambda estimado (1/media): 0.061776
# Algoritmo manual de la función de densidad exponencial
exponencial <- function(x, lam) {
e <- 2.71828182845
dis <- lam * (e^(-lam * x))
return(dis)
}
# Calcular f(x) para cada valor observado
densidades_manual <- sapply(crecimiento, exponencial, lam = lam)
densidades_R <- dexp(crecimiento, rate = lam)
# Tabla comparativa
resultado <- data.frame(
Periodo = periodos,
Crec_pct = crecimiento,
f_x_manual = round(densidades_manual, 6),
f_x_R = round(densidades_R, 6)
)
knitr::kable(resultado,
col.names = c("Periodo", "Crecimiento (%)", "f(x) Algoritmo", "f(x) dexp()"),
caption = paste0("Distribución Exponencial (λ = ", round(lam, 4),
") - Crecimiento sector alojamiento Buga"),
align = c("c","r","r","r"))
| Periodo | Crecimiento (%) | f(x) Algoritmo | f(x) dexp() |
|---|---|---|---|
| 1 | 13.54 | 0.026764 | 0.026764 |
| 2 | 14.86 | 0.024668 | 0.024668 |
| 3 | 14.99 | 0.024471 | 0.024471 |
| 4 | 21.36 | 0.016510 | 0.016510 |
# Gráfica de la distribución exponencial ajustada
x_seq <- seq(0, max(crecimiento) * 1.5, length.out = 400)
y_seq <- dexp(x_seq, rate = lam)
plot(x_seq, y_seq, type = "l", col = "darkorange", lwd = 2,
main = "Distribución Exponencial - Crecimiento Sector Alojamiento (Buga)",
xlab = "Crecimiento anual (%)", ylab = "Densidad f(x)")
points(crecimiento, dexp(crecimiento, rate = lam),
col = "red", pch = 19, cex = 1.2)
text(crecimiento, dexp(crecimiento, rate = lam),
labels = paste0("P", periodos), pos = 3, cex = 0.8, col = "darkred")
legend("topright", legend = c(paste0("Curva exp. (λ=", round(lam,4),")"),
"Periodos observados"),
col = c("darkorange","red"), lty = c(1, NA), pch = c(NA, 19))