1 Contexto de las variables

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.

2 Fase 1: Definición de variables y ley de probabilidad

# 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

2.1 Variable discreta: paradas en un tramo de 10 km

\(X\): número de paradas del vehículo en un tramo de 10 km, \(X \sim \text{Poisson}(\text{lambda} = 4.06)\).

  • Espacio muestral: \(S_X = \{0, 1, 2, 3, \dots\}\) (enteros no negativos).
  • FMP: \(P(X = k) = \dfrac{e^{-\text{lambda}}\,\text{lambda}^{k}}{k!}\), para \(k = 0, 1, 2, \dots\)
  • Valor esperado y desviación estándar: \(E[X] = \text{lambda} = 4.06\) y \(DE(X) = \sqrt{\text{lambda}} = 2.0149\).
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.

2.2 Variable continua: duración de una detención

\(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)\).

  • Espacio muestral: \(S_Y = (0, \infty)\).
  • FDP: \(f(y) = \text{lambda}\,e^{-\text{lambda}\,y}\), para \(y > 0\). FDA: \(F(y) = 1 - e^{-\text{lambda}\,y}\).
  • Valor esperado y desviación estándar: \(E[Y] = 1/\text{lambda} = 14.5\) s y \(DE(Y) = 1/\text{lambda} = 14.5\) s.
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.

3 Fase 2: Simulación y visualización

3.1 Generación de las muestras

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)

3.2 Variable discreta: paradas en 10 km (Poisson)

3.2.1 B = 10

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

3.2.2 B = 50

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

3.2.3 B = 100

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

3.2.4 B = 1000

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

3.2.5 B = 10000

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

3.3 Variable continua: duración de una detención (Exponencial)

3.3.1 B = 10

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

3.3.2 B = 50

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

3.3.3 B = 100

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

3.3.4 B = 1000

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

3.3.5 B = 10000

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

4 Análisis

4.1 Razones para simular los datos

  • Conocer el azar antes de tener datos: como E[X] se conoce, se mide cuánto se aleja el promedio de ese valor según el tamaño de muestra.
  • Ahorrar costo y tiempo: obtener más registros de conducción implica horas de recorrido y de procesamiento; simular un modelo es inmediato.
  • Verificar la teoría (LGN y TLC) y aproximar resultados difíciles de calcular mediante Monte Carlo.

4.2 Restricciones al tomar una muestra aleatoria de cierto tamaño

  • Muestras pequeñas. Con B = 10 el promedio fue 3.6 en la variable discreta (E[X] = 4.06) y 20.41 s en la continua (E[Y] = 14.5 s): domina el azar.
  • Precisión lenta. El error estándar baja como \(DE/\sqrt{B}\), así que reducir el error a la mitad exige cuatro veces más observaciones.
  • Variables más dispersas. La Exponencial necesita más datos que la Poisson: con B = 1000 su error estándar es 3.2 % de E[Y], frente a 1.6 % de E[X].
  • Independencia y modelo. Se supone observaciones independientes y un modelo correcto; en la conducción real, las paradas dependen del tráfico y de los semáforos, y la simulación reproduce el modelo, no la realidad.
  • Datos reales limitados. Los 1 861.37 km registrados equivalen a unos 186 tramos de 10 km y a 702 detenciones.

4.3 Punto de estabilización del promedio

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.

4.4 Interpretación en el contexto del ejercicio

  • Paradas. En promedio hay 4.06 paradas por cada 10 km; con unos 1000 tramos el promedio ya estima de forma confiable la tasa de la ruta (0.406 paradas por km), mientras que la muestra real (unos 186 tramos) todavía está en el rango donde el promedio fluctúa.
  • Detenciones. La duración esperada es de 14.5 s. Con pocas detenciones el promedio se aleja mucho (con B = 10 fue 20.4 s); por eso, un ciclo de conducción con pocas paradas puede no representar el ralentí de la muestra completa.

4.5 Ley de los Grandes Números y Teorema del Límite Central

  • LGN. El promedio muestral \(\bar{X}_B\) converge a \(E[X]\) cuando \(B\) crece. Se ve en el panel derecho de todos los gráficos: la curva verde, que empieza con oscilaciones grandes, termina sobre la línea roja (4.06 paradas y 14.5 s).
  • TLC. Para \(B\) grande, \(\bar{X}_B \approx N\left(E[X],\ DE/\sqrt{B}\right)\) aunque la variable no sea Normal. Los histogramas de la Poisson y de la Exponencial conservan su asimetría sin importar B; lo que se estabiliza es el promedio, con error estándar de 0.02 paradas y 0.145 s con B = 10000.