Las variables provienen de mi tesis de maestría en Ingeniería Automotriz (ESPOCH), que construye un ciclo de conducción representativo para la ciudad de Riobamba: una curva de velocidad en función del tiempo que resume cómo se conduce en la ciudad (se usa, por ejemplo, para estimar consumo y emisiones). Los datos se registraron con el puerto OBD2 de un vehículo, a una lectura por segundo: 145 514 registros, 40.42 horas y 1 861.37 km. La conducción se divide en microviajes (tramos entre dos detenciones, es decir, entre dos instantes con velocidad cero), por lo que el número de paradas y la duración de cada detención son variables centrales del estudio.
| Variable | Definición | Tipo | Modelo | Origen del parámetro |
|---|---|---|---|---|
| X | Paradas en un tramo de 10 km | Discreta | Poisson, lambda = 4.06 | 755 paradas en 1 861.37 km = 0.406 paradas/km, es decir, 4.06 en 10 km |
| Y | Duración de una detención (s) | Continua | Exponencial, media = 14.5 s | Media de las 702 detenciones registradas |
Los modelos son supuestos: la Poisson supone paradas independientes con tasa constante, y la Exponencial es la ley habitual para duraciones con cola larga. En las detenciones observadas, la mediana es 7 s y el percentil 90 es 30 s; la Exponencial propuesta da 10.1 s y 33.4 s, así que reproduce bien la media y el percentil 90, y es menos precisa en la mediana.
# Parametros tomados de la investigacion (ciclo de conduccion de Riobamba)
tasa_km <- 0.406 # paradas por km (755 paradas / 1861.37 km)
tramo_km <- 10 # tramo de referencia (km)
media_y <- 14.5 # duracion media de una detencion (segundos)
# Variable discreta X ~ Poisson(lambda_p)
lambda_p <- tasa_km * tramo_km # 4.06 paradas en 10 km
E_X <- lambda_p # E[X] = lambda
DE_X <- sqrt(lambda_p) # DE(X) = sqrt(lambda)
# Variable continua Y ~ Exponencial(lambda_e)
lambda_e <- 1 / media_y # tasa (1/segundo)
E_Y <- 1 / lambda_e # E[Y] = 1/lambda
DE_Y <- 1 / lambda_e # DE(Y) = 1/lambda
\(X\): número de paradas del vehículo en un tramo de 10 km, \(X \sim \text{Poisson}(\text{lambda} = 4.06)\).
x_d <- 0:14
fx_d <- dpois(x_d, lambda = lambda_p) # FMP
Fx_d <- ppois(x_d, lambda = lambda_p) # FDA
par(mfrow = c(1, 2))
plot(x_d, fx_d, type = "h", lwd = 6, lend = 1, col = "steelblue",
main = "FMP: Poisson(lambda = 4.06)",
xlab = "x = numero de paradas en 10 km", ylab = "P(X = x)")
plot(stepfun(x_d, c(0, Fx_d)), verticals = FALSE, do.points = TRUE,
pch = 19, col = "steelblue", main = "FDA: Poisson(lambda = 4.06)",
xlab = "x = numero de paradas en 10 km", ylab = "F(x) = P(X <= x)",
xlim = c(0, 14), ylim = c(0, 1))
par(mfrow = c(1, 1))
Interpretación. El valor más probable es 4 paradas por cada 10 km (con 3 casi igual de probable), y más del 98 % de la probabilidad se concentra entre 0 y 9 paradas, como muestra la FDA.
\(Y\): tiempo (en segundos) que el vehículo permanece detenido en una parada, \(Y \sim \text{Exponencial}(\text{lambda} = 1/14.5 \approx 0.069)\).
par(mfrow = c(1, 2))
curve(dexp(x, rate = lambda_e), from = 0, to = 90, lwd = 2, col = "steelblue",
main = "FDP: Exponencial(media = 14.5 s)",
xlab = "y = duracion de la detencion (s)", ylab = "f(y)")
curve(pexp(x, rate = lambda_e), from = 0, to = 90, lwd = 2, col = "steelblue",
main = "FDA: Exponencial(media = 14.5 s)",
xlab = "y = duracion de la detencion (s)", ylab = "F(y) = P(Y <= y)",
ylim = c(0, 1))
par(mfrow = c(1, 1))
Interpretación. La mayoría de las detenciones son cortas (la densidad es máxima en 0 y decrece), pero existen detenciones largas poco frecuentes. Por ejemplo, \(P(Y \le 14.5) = 0.6321\): aproximadamente el 63 % de las detenciones dura menos que el promedio.
Se generan muestras de tamaño B = 10, 50, 100, 1000 y 10000 para cada variable. En cada gráfico, el panel izquierdo muestra el histograma de la muestra (gris) con su FMP o FDP teórica (rojo oscuro), la línea roja punteada de E[X] y la línea azul punteada del promedio muestral; el panel derecho muestra en verde el promedio acumulado, con E[X] como línea roja punteada.
# set.seed(): semilla de partida para poder replicar los resultados
set.seed(2026)
# Variable discreta: X ~ Poisson
# rpois(B, lambda): genera B valores aleatorios de una Poisson
x_d10 <- rpois(10, lambda = lambda_p)
x_d50 <- rpois(50, lambda = lambda_p)
x_d100 <- rpois(100, lambda = lambda_p)
x_d1000 <- rpois(1000, lambda = lambda_p)
x_d10000 <- rpois(10000, lambda = lambda_p)
# Variable continua: Y ~ Exponencial
# rexp(B, rate): genera B valores aleatorios de una Exponencial
x_c10 <- rexp(10, rate = lambda_e)
x_c50 <- rexp(50, rate = lambda_e)
x_c100 <- rexp(100, rate = lambda_e)
x_c1000 <- rexp(1000, rate = lambda_e)
x_c10000 <- rexp(10000, rate = lambda_e)
B <- 10
x <- x_d10
par(mfrow = c(1, 2))
# Histograma de la muestra con la FMP teorica
hist(x, breaks = seq(-0.5, 20.5, by = 1), prob = T, col = "gray", border = "white",
xlim = c(-0.5, 15), ylim = c(0, 0.45),
main = "Muestra aleatoria de X (B = 10)",
xlab = "x = numero de paradas en 10 km", ylab = "Frecuencia relativa")
points(0:20, dpois(0:20, lambda_p), type = "o", pch = 19, col = "darkred")
abline(v = E_X, col = "red", lty = 2, lwd = 2)
abline(v = mean(x), col = "blue", lty = 2, lwd = 2)
# Grafico de convergencia del promedio muestral
promedio_acumulado <- cumsum(x) / (1:B)
plot(promedio_acumulado, type = "l", col = "darkgreen", lwd = 2, log = "x",
ylim = c(3, 5.5), main = "Convergencia del promedio (B = 10)",
xlab = "n = observaciones acumuladas (escala log)",
ylab = "Promedio de paradas por 10 km")
abline(h = E_X, col = "red", lty = 2, lwd = 2)
par(mfrow = c(1, 1))
# Resultados
prom <- mean(x)
cat("Promedio muestral =", round(prom, 4), "\n")
## Promedio muestral = 3.6
B <- 50
x <- x_d50
par(mfrow = c(1, 2))
# Histograma de la muestra con la FMP teorica
hist(x, breaks = seq(-0.5, 20.5, by = 1), prob = T, col = "gray", border = "white",
xlim = c(-0.5, 15), ylim = c(0, 0.35),
main = "Muestra aleatoria de X (B = 50)",
xlab = "x = numero de paradas en 10 km", ylab = "Frecuencia relativa")
points(0:20, dpois(0:20, lambda_p), type = "o", pch = 19, col = "darkred")
abline(v = E_X, col = "red", lty = 2, lwd = 2)
abline(v = mean(x), col = "blue", lty = 2, lwd = 2)
# Grafico de convergencia del promedio muestral
promedio_acumulado <- cumsum(x) / (1:B)
plot(promedio_acumulado, type = "l", col = "darkgreen", lwd = 2, log = "x",
ylim = c(2, 6), main = "Convergencia del promedio (B = 50)",
xlab = "n = observaciones acumuladas (escala log)",
ylab = "Promedio de paradas por 10 km")
abline(h = E_X, col = "red", lty = 2, lwd = 2)
par(mfrow = c(1, 1))
# Resultados
prom <- mean(x)
cat("Promedio muestral =", round(prom, 4), "\n")
## Promedio muestral = 3.54
B <- 100
x <- x_d100
par(mfrow = c(1, 2))
# Histograma de la muestra con la FMP teorica
hist(x, breaks = seq(-0.5, 20.5, by = 1), prob = T, col = "gray", border = "white",
xlim = c(-0.5, 15), ylim = c(0, 0.35),
main = "Muestra aleatoria de X (B = 100)",
xlab = "x = numero de paradas en 10 km", ylab = "Frecuencia relativa")
points(0:20, dpois(0:20, lambda_p), type = "o", pch = 19, col = "darkred")
abline(v = E_X, col = "red", lty = 2, lwd = 2)
abline(v = mean(x), col = "blue", lty = 2, lwd = 2)
# Grafico de convergencia del promedio muestral
promedio_acumulado <- cumsum(x) / (1:B)
plot(promedio_acumulado, type = "l", col = "darkgreen", lwd = 2, log = "x",
ylim = c(2, 6), main = "Convergencia del promedio (B = 100)",
xlab = "n = observaciones acumuladas (escala log)",
ylab = "Promedio de paradas por 10 km")
abline(h = E_X, col = "red", lty = 2, lwd = 2)
par(mfrow = c(1, 1))
# Resultados
prom <- mean(x)
cat("Promedio muestral =", round(prom, 4), "\n")
## Promedio muestral = 3.81
B <- 1000
x <- x_d1000
par(mfrow = c(1, 2))
# Histograma de la muestra con la FMP teorica
hist(x, breaks = seq(-0.5, 20.5, by = 1), prob = T, col = "gray", border = "white",
xlim = c(-0.5, 15), ylim = c(0, 0.25),
main = "Muestra aleatoria de X (B = 1000)",
xlab = "x = numero de paradas en 10 km", ylab = "Frecuencia relativa")
points(0:20, dpois(0:20, lambda_p), type = "o", pch = 19, col = "darkred")
abline(v = E_X, col = "red", lty = 2, lwd = 2)
abline(v = mean(x), col = "blue", lty = 2, lwd = 2)
# Grafico de convergencia del promedio muestral
promedio_acumulado <- cumsum(x) / (1:B)
plot(promedio_acumulado, type = "l", col = "darkgreen", lwd = 2, log = "x",
ylim = c(2, 6), main = "Convergencia del promedio (B = 1000)",
xlab = "n = observaciones acumuladas (escala log)",
ylab = "Promedio de paradas por 10 km")
abline(h = E_X, col = "red", lty = 2, lwd = 2)
par(mfrow = c(1, 1))
# Resultados
prom <- mean(x)
cat("Promedio muestral =", round(prom, 4), "\n")
## Promedio muestral = 4.106
B <- 10000
x <- x_d10000
par(mfrow = c(1, 2))
# Histograma de la muestra con la FMP teorica
hist(x, breaks = seq(-0.5, 20.5, by = 1), prob = T, col = "gray", border = "white",
xlim = c(-0.5, 15), ylim = c(0, 0.25),
main = "Muestra aleatoria de X (B = 10000)",
xlab = "x = numero de paradas en 10 km", ylab = "Frecuencia relativa")
points(0:20, dpois(0:20, lambda_p), type = "o", pch = 19, col = "darkred")
abline(v = E_X, col = "red", lty = 2, lwd = 2)
abline(v = mean(x), col = "blue", lty = 2, lwd = 2)
# Grafico de convergencia del promedio muestral
promedio_acumulado <- cumsum(x) / (1:B)
plot(promedio_acumulado, type = "l", col = "darkgreen", lwd = 2, log = "x",
ylim = c(2, 6), main = "Convergencia del promedio (B = 10000)",
xlab = "n = observaciones acumuladas (escala log)",
ylab = "Promedio de paradas por 10 km")
abline(h = E_X, col = "red", lty = 2, lwd = 2)
par(mfrow = c(1, 1))
# Resultados
prom <- mean(x)
cat("Promedio muestral =", round(prom, 4), "\n")
## Promedio muestral = 4.0517
B <- 10
x <- x_c10
par(mfrow = c(1, 2))
# Histograma de la muestra con la FDP teorica
hist(x, breaks = 5, prob = T, col = "gray", border = "white",
ylim = c(0, 0.08),
main = "Muestra aleatoria de Y (B = 10)",
xlab = "y = duracion de la detencion (s)", ylab = "Densidad")
curve(dexp(x, rate = lambda_e), add = T, col = "darkred", lwd = 2)
abline(v = E_Y, col = "red", lty = 2, lwd = 2)
abline(v = mean(x), col = "blue", lty = 2, lwd = 2)
# Grafico de convergencia del promedio muestral
promedio_acumulado <- cumsum(x) / (1:B)
plot(promedio_acumulado, type = "l", col = "darkgreen", lwd = 2, log = "x",
ylim = c(10, 42), main = "Convergencia del promedio (B = 10)",
xlab = "n = observaciones acumuladas (escala log)",
ylab = "Promedio de la duracion (s)")
abline(h = E_Y, col = "red", lty = 2, lwd = 2)
par(mfrow = c(1, 1))
# Resultados
prom <- mean(x)
cat("Promedio muestral =", round(prom, 4), "s\n")
## Promedio muestral = 20.4057 s
B <- 50
x <- x_c50
par(mfrow = c(1, 2))
# Histograma de la muestra con la FDP teorica
hist(x, breaks = 10, prob = T, col = "gray", border = "white",
ylim = c(0, 0.08),
main = "Muestra aleatoria de Y (B = 50)",
xlab = "y = duracion de la detencion (s)", ylab = "Densidad")
curve(dexp(x, rate = lambda_e), add = T, col = "darkred", lwd = 2)
abline(v = E_Y, col = "red", lty = 2, lwd = 2)
abline(v = mean(x), col = "blue", lty = 2, lwd = 2)
# Grafico de convergencia del promedio muestral
promedio_acumulado <- cumsum(x) / (1:B)
plot(promedio_acumulado, type = "l", col = "darkgreen", lwd = 2, log = "x",
ylim = c(10, 30), main = "Convergencia del promedio (B = 50)",
xlab = "n = observaciones acumuladas (escala log)",
ylab = "Promedio de la duracion (s)")
abline(h = E_Y, col = "red", lty = 2, lwd = 2)
par(mfrow = c(1, 1))
# Resultados
prom <- mean(x)
cat("Promedio muestral =", round(prom, 4), "s\n")
## Promedio muestral = 17.8376 s
B <- 100
x <- x_c100
par(mfrow = c(1, 2))
# Histograma de la muestra con la FDP teorica
hist(x, breaks = 15, prob = T, col = "gray", border = "white",
ylim = c(0, 0.08),
main = "Muestra aleatoria de Y (B = 100)",
xlab = "y = duracion de la detencion (s)", ylab = "Densidad")
curve(dexp(x, rate = lambda_e), add = T, col = "darkred", lwd = 2)
abline(v = E_Y, col = "red", lty = 2, lwd = 2)
abline(v = mean(x), col = "blue", lty = 2, lwd = 2)
# Grafico de convergencia del promedio muestral
promedio_acumulado <- cumsum(x) / (1:B)
plot(promedio_acumulado, type = "l", col = "darkgreen", lwd = 2, log = "x",
ylim = c(10, 30), main = "Convergencia del promedio (B = 100)",
xlab = "n = observaciones acumuladas (escala log)",
ylab = "Promedio de la duracion (s)")
abline(h = E_Y, col = "red", lty = 2, lwd = 2)
par(mfrow = c(1, 1))
# Resultados
prom <- mean(x)
cat("Promedio muestral =", round(prom, 4), "s\n")
## Promedio muestral = 16.8966 s
B <- 1000
x <- x_c1000
par(mfrow = c(1, 2))
# Histograma de la muestra con la FDP teorica
hist(x, breaks = 30, prob = T, col = "gray", border = "white",
ylim = c(0, 0.08),
main = "Muestra aleatoria de Y (B = 1000)",
xlab = "y = duracion de la detencion (s)", ylab = "Densidad")
curve(dexp(x, rate = lambda_e), add = T, col = "darkred", lwd = 2)
abline(v = E_Y, col = "red", lty = 2, lwd = 2)
abline(v = mean(x), col = "blue", lty = 2, lwd = 2)
# Grafico de convergencia del promedio muestral
promedio_acumulado <- cumsum(x) / (1:B)
plot(promedio_acumulado, type = "l", col = "darkgreen", lwd = 2, log = "x",
ylim = c(10, 30), main = "Convergencia del promedio (B = 1000)",
xlab = "n = observaciones acumuladas (escala log)",
ylab = "Promedio de la duracion (s)")
abline(h = E_Y, col = "red", lty = 2, lwd = 2)
par(mfrow = c(1, 1))
# Resultados
prom <- mean(x)
cat("Promedio muestral =", round(prom, 4), "s\n")
## Promedio muestral = 14.3787 s
B <- 10000
x <- x_c10000
par(mfrow = c(1, 2))
# Histograma de la muestra con la FDP teorica
hist(x, breaks = 50, prob = T, col = "gray", border = "white",
ylim = c(0, 0.08),
main = "Muestra aleatoria de Y (B = 10000)",
xlab = "y = duracion de la detencion (s)", ylab = "Densidad")
curve(dexp(x, rate = lambda_e), add = T, col = "darkred", lwd = 2)
abline(v = E_Y, col = "red", lty = 2, lwd = 2)
abline(v = mean(x), col = "blue", lty = 2, lwd = 2)
# Grafico de convergencia del promedio muestral
promedio_acumulado <- cumsum(x) / (1:B)
plot(promedio_acumulado, type = "l", col = "darkgreen", lwd = 2, log = "x",
ylim = c(10, 30), main = "Convergencia del promedio (B = 10000)",
xlab = "n = observaciones acumuladas (escala log)",
ylab = "Promedio de la duracion (s)")
abline(h = E_Y, col = "red", lty = 2, lwd = 2)
par(mfrow = c(1, 1))
# Resultados
prom <- mean(x)
cat("Promedio muestral =", round(prom, 4), "s\n")
## Promedio muestral = 14.5449 s
Según mi criterio, el gráfico muestra una estabilización visual clara cuando la curva verde se aplana sobre la línea roja de E[X]. Con B = 10, 50 y 100 la curva todavía sube y baja de forma notable. B = 1000 es el valor de n, entre los trabajados, en el que el azar deja de producir fluctuaciones significativas (promedios de 4.11 y 14.38 s, muy cerca de 4.06 y 14.5 s). Con B = 10000 la curva es prácticamente una recta sobre E[X] y solo se confirma lo observado.