POSGRADO
ACTIVIDAD PRÁCTICO EXPERIMENTAL
Integrantes del grupo
Mishell Nathaly De La Cruz
Pilaguano
Carlos Ernesto Donoso Vinueza
David Patricio Guamán
Cullispuma
Edgar David Salazar Revelo
Asignatura: Teoría de Probabilidad
Quito, Ecuador | 11 de octubre de 2026
Resumen. Se analiza, mediante simulación Monte Carlo, la fluctuación y convergencia de dos variables aleatorias asociadas a un escenario ficticio de monitoreo de glucosa en ayunas. La variable continua se modela con una distribución Gamma y, a partir de ella, se construye un indicador Bernoulli que registra si una observación supera un umbral operativo de 130 mg/dL. Se presenta una serie sintética de 45 mediciones y se estudian cinco tamaños muestrales anidados (B = 10, 50, 100, 1000 y 10000). Para cada variable se comparan el promedio muestral acumulado, el histograma de la muestra y el valor esperado teórico. Como apoyo a la evaluación visual se adopta un criterio descriptivo de error relativo no mayor al 1%; en esta realización, ambos estimadores muestran estabilización a partir de B = 1000. Finalmente, se relacionan los resultados con la Ley de los Grandes Números y el Teorema del Límite Central mediante réplicas independientes. El documento utiliza exclusivamente datos sintéticos generados en R y sus conclusiones son de carácter estadístico, no clínico.
Palabras clave: simulación Monte Carlo; variable discreta; variable continua; glucosa en ayunas; Ley de los Grandes Números; Teorema del Límite Central.
Nota de alcance. Todos los datos y parámetros de este documento son sintéticos e ilustrativos. El umbral de 130 mg/dL es una regla operativa para construir la variable discreta; no constituye un criterio universal de gravedad ni una recomendación terapéutica. El estudio no se propone diagnosticar, evaluar tratamientos ni identificar causas clínicas de las fluctuaciones.
La glucosa en ayunas es una magnitud positiva que puede presentar fluctuaciones entre días. Para ilustrar su comportamiento sin utilizar información personal, se define un escenario enteramente hipotético de monitoreo cada dos días durante aproximadamente tres meses. En este escenario se generan concentraciones de glucosa que varían alrededor de un promedio teórico preestablecido, sin atribuir dichos valores a ninguna persona.
La cuestión estadística central es: ¿qué sucede con los promedios de muestras simuladas bajo un mismo modelo de probabilidad cuando aumenta su tamaño? La simulación permite estudiar la fluctuación de valores individuales, la convergencia de medias y proporciones, y la distribución muestral de estos estimadores. No permite identificar por sí sola factores fisiológicos, conductuales o terapéuticos responsables de cambios glucémicos.
¿Cómo cambian la media muestral de la concentración de glucosa y la proporción de mediciones superiores al umbral operativo cuando los tamaños de muestra simulados aumentan de B = 10 a B = 10000?
Delimitación: se analizan las fluctuaciones producidas por el mecanismo aleatorio de generación y no las causas médicas de las variaciones de glucosa.
Analizar la convergencia de una media continua y una proporción discreta mediante simulación Monte Carlo, usando como contexto un seguimiento de glucosa en ayunas.
Se presenta un estudio cuantitativo, descriptivo y computacional con datos simulados. La unidad de análisis de la variable continua es una concentración sintética de glucosa en ayunas (mg/dL); para la discreta, el indicador de superar o no un umbral operativo.
El diseño contiene dos niveles de simulación: (i) una serie ilustrativa de 45 registros espaciados por dos días, para mostrar las fluctuaciones de un seguimiento de aproximadamente tres meses; y (ii) muestras anidadas de tamaños B = 10, 50, 100, 1000 y 10000 para evaluar la convergencia estadística. Ambos niveles provienen del mismo modelo teórico, pero corresponden a secuencias simuladas diferentes. Ninguna observación constituye una medición personal.
Notación del tamaño muestral. En este documento se utiliza la letra B para representar los cinco tamaños muestrales considerados en la simulación. Estadísticamente, B desempeña el mismo papel que el tamaño muestral n.
El estudio se desarrolla íntegramente con números pseudoaleatorios generados por R; no utiliza fuentes externas de datos. Para construir un escenario con valores positivos y variabilidad apreciable, se fijan los siguientes parámetros hipotéticos:
Los parámetros permiten determinar la forma y la escala de una distribución Gamma mediante el método algebraico de momentos. Se establece una semilla para que los valores simulados y los gráficos sean reproducibles. No se ajusta el modelo a datos clínicos ni se afirma que esta distribución describa a una persona o población real.
# Parámetros teóricos HIPOTÉTICOS; no se importa ningún archivo.
media_base <- 145 # mg/dL
sd_base <- 30 # mg/dL
# Parametrización Gamma por forma y escala a partir de los momentos.
forma <- (media_base / sd_base)^2
escala <- sd_base^2 / media_base
media_teorica_X <- forma * escala
varianza_teorica_X <- forma * escala^2
desv_teorica_X <- sqrt(varianza_teorica_X)
# Y = 1 si la concentración simulada es mayor a 130 mg/dL.
prob_evento <- pgamma(umbral, shape = forma,
scale = escala, lower.tail = FALSE)
media_teorica_Y <- prob_evento
varianza_teorica_Y <- prob_evento * (1 - prob_evento)
desv_teorica_Y <- sqrt(varianza_teorica_Y)
parametros <- data.frame(
Concepto = c("Gamma: forma", "Gamma: escala",
"Glucosa: esperanza", "Glucosa: varianza",
"Glucosa: desviación estándar",
"Probabilidad de superar umbral",
"Bernoulli: esperanza", "Bernoulli: varianza"),
Valor = c(forma, escala, media_teorica_X, varianza_teorica_X,
desv_teorica_X, prob_evento, media_teorica_Y,
varianza_teorica_Y),
Unidad = c("Sin unidad", "mg/dL", "mg/dL", "(mg/dL)^2",
"mg/dL", "Sin unidad", "Sin unidad", "Sin unidad")
)
knitr::kable(parametros, digits = 4,
caption = "Tabla 1. Parámetros teóricos del escenario simulado")| Concepto | Valor | Unidad |
|---|---|---|
| Gamma: forma | 23.3611 | Sin unidad |
| Gamma: escala | 6.2069 | mg/dL |
| Glucosa: esperanza | 145.0000 | mg/dL |
| Glucosa: varianza | 900.0000 | (mg/dL)^2 |
| Glucosa: desviación estándar | 30.0000 | mg/dL |
| Probabilidad de superar umbral | 0.6732 | Sin unidad |
| Bernoulli: esperanza | 0.6732 | Sin unidad |
| Bernoulli: varianza | 0.2200 | Sin unidad |
Interpretación. Por construcción, la esperanza del modelo continuo es E(X) = 145.00 mg/dL y su desviación estándar es 30.00 mg/dL. En el modelo binario, E(Y) = 0.6732 equivale a la proporción esperada de observaciones superiores al umbral. Estos son valores teóricos asumidos, no estimaciones de una muestra clínica.
Se generan 45 concentraciones independientes y se les asignan fechas ilustrativas cada dos días. Este procedimiento reproduce el calendario de un seguimiento, pero no simula autocorrelación temporal, efectos de medicación ni cambios en los hábitos. El código siguiente constituye toda la fuente de los datos del documento.
set.seed(20261009)
n_seguimiento <- 45
fechas <- seq(as.Date("2026-07-01"), by = "2 days",
length.out = n_seguimiento)
glucosa_serie <- rgamma(n_seguimiento, shape = forma, scale = escala)
registros_simulados <- data.frame(
Fecha = fechas,
Dia = seq(1, by = 2, length.out = n_seguimiento),
Glucosa_mg_dl = round(glucosa_serie, 1),
Supera_130 = as.integer(glucosa_serie > umbral)
)
knitr::kable(head(registros_simulados, 10),
col.names = c("Fecha", "Día", "Glucosa (mg/dL)", "Supera 130 mg/dL"),
caption = "Tabla 2. Primeras diez observaciones de la serie sintética")| Fecha | Día | Glucosa (mg/dL) | Supera 130 mg/dL |
|---|---|---|---|
| 2026-07-01 | 1 | 101.3 | 0 |
| 2026-07-03 | 3 | 142.3 | 1 |
| 2026-07-05 | 5 | 148.6 | 1 |
| 2026-07-07 | 7 | 211.9 | 1 |
| 2026-07-09 | 9 | 114.5 | 0 |
| 2026-07-11 | 11 | 129.2 | 0 |
| 2026-07-13 | 13 | 155.4 | 1 |
| 2026-07-15 | 15 | 115.9 | 0 |
| 2026-07-17 | 17 | 152.1 | 1 |
| 2026-07-19 | 19 | 167.1 | 1 |
La serie completa y reproducible contiene 45 registros. Su media descriptiva es 147.69 mg/dL, el mínimo es 90.15 mg/dL y el máximo es 224.81 mg/dL. La proporción de valores superiores a 130 mg/dL es 64.44%. Estos resultados corresponden solamente a la serie sintética de 45 valores y pueden diferir de los parámetros de la población hipotética por azar.
plot(fechas, glucosa_serie, type = "o", pch = 16, cex = 0.6,
lwd = 1.5, col = color_base, xlab = "Fecha ilustrativa",
ylab = "Glucosa simulada (mg/dL)",
main = "Serie sintética: 45 mediciones en tres meses")
abline(h = media_teorica_X, col = color_media, lty = 2, lwd = 2)
abline(h = umbral, col = "#747474", lty = 3, lwd = 1.5)
legend("topright", c("E(X) teórica", "Umbral operativo"),
col = c(color_media, "#747474"), lty = c(2, 3),
bty = "n", cex = 0.8)Figura 1. Evolución de 45 valores de glucosa en ayunas simulados cada dos días.
Interpretación: los picos y descensos reflejan variación aleatoria alrededor de un modelo invariable. Su presencia en la figura demuestra que un proceso con esperanza fija todavía puede generar registros individuales fluctuantes. No identifica el origen de fluctuaciones reales ni permite atribuirlas a hábitos, fármacos o enfermedad.
Definición: X = concentración de glucosa en ayunas (mg/dL).
Espacio de valores posibles o soporte matemático:
todos los números reales positivos, es decir, X > 0. El
glucómetro puede redondear los valores, pero la concentración física
subyacente es continua.
Modelo:
X ~ Gamma(shape = forma, scale = escala).
Su función de densidad (FDP) es:
f(x) = x^(shape - 1) * exp(-x / scale) / (gamma(shape) * scale^shape),
para x > 0.
Su función de distribución acumulada (FDA) es
F(x) = P(X <= x). La FDP describe las concentraciones
relativas de densidad; la FDA expresa probabilidades acumuladas.
Las relaciones de sus momentos son E(X) = shape * scale,
Var(X) = shape * scale^2 y
DE(X) = sqrt(Var(X)).
x_modelo <- seq(0, qgamma(0.999, forma, scale = escala), length.out = 600)
par(mfrow = c(1, 2), mar = c(4.7, 4.6, 3.5, 1.1))
plot(x_modelo, dgamma(x_modelo, shape = forma, scale = escala),
type = "l", lwd = 2.5, col = color_base,
main = "FDP - glucosa en ayunas", xlab = "Glucosa (mg/dL)",
ylab = "Densidad de probabilidad")
abline(v = media_teorica_X, lwd = 2, lty = 2, col = color_media)
legend("topright", "E(X)", col = color_media, lty = 2,
lwd = 2, bty = "n", cex = 0.85)
plot(x_modelo, pgamma(x_modelo, shape = forma, scale = escala),
type = "l", lwd = 2.5, col = color_base,
main = "FDA - glucosa en ayunas", xlab = "Glucosa (mg/dL)",
ylab = "Probabilidad acumulada", ylim = c(0, 1))
abline(v = umbral, lwd = 2, lty = 2, col = color_media)
legend("bottomright", "Umbral operativo", col = color_media,
lty = 2, lwd = 2, bty = "n", cex = 0.78)
par(mfrow = c(1, 1))Figura 2. Función de densidad (FDP) y función de distribución acumulada (FDA) de la Gamma propuesta.
Lectura contextual: la FDP alcanza su máximo
alrededor de la moda teórica del modelo, aproximadamente 138.79 mg/dL.
El área bajo la curva a la izquierda de un valor dado representa una
probabilidad acumulada; en cambio, la altura de la FDP en un punto
expresa densidad y no la probabilidad exacta de observar ese valor. La
FDA permite leer directamente P(X <= x).
# Ejemplo de cálculo de probabilidad y mediana del modelo.
prob_menor_igual_130 <- pgamma(umbral, shape = forma, scale = escala)
prob_mayor_130 <- pgamma(umbral, shape = forma,
scale = escala, lower.tail = FALSE)
mediana_X <- qgamma(0.5, shape = forma, scale = escala)
c(prob_menor_igual_130 = prob_menor_igual_130,
prob_mayor_130 = prob_mayor_130,
mediana_mg_dl = mediana_X)## prob_menor_igual_130 prob_mayor_130 mediana_mg_dl
## 0.32682 0.67318 142.93637
Interpretación de probabilidad: bajo el modelo simulado, P(X > 130) = 0.6732, es decir, 67.32%. Es la probabilidad teórica de superar el umbral en una observación sintética, no una probabilidad de complicación clínica.
Definición: Y = 1 cuando una medición supera 130
mg/dL, y Y = 0 cuando no lo supera. Su soporte es
{0, 1}.
Se propone una distribución Bernoulli, que equivale
a una binomial con una prueba:
Y ~ Binomial(size = 1, prob = p).
p = P(Y = 1) = P(X > 130).P(Y = 0) = 1 - p y P(Y = 1) = p.F(y) = P(Y <= y).E(Y) = p y Var(Y) = p * (1 - p).Nota conceptual: si se cuenta el número de
mediciones superiores al umbral entre m observaciones
independientes con igual probabilidad p, el conteo sigue
una Binomial con size = m. Aquí se usa Bernoulli para que
la media de los indicadores sea directamente la proporción de
observaciones superiores al umbral. El supuesto de independencia puede
no sostenerse en mediciones reales consecutivas.
y_posibles <- 0:1
probabilidades_Y <- dbinom(y_posibles, size = 1, prob = prob_evento)
acumuladas_Y <- pbinom(y_posibles, size = 1, prob = prob_evento)
par(mfrow = c(1, 2), mar = c(4.7, 4.6, 3.5, 1.1))
barplot(probabilidades_Y, names.arg = y_posibles, col = color_barras,
border = color_base, main = "FMP - indicador binario",
xlab = "0 = no supera | 1 = supera", ylab = "Probabilidad",
ylim = c(0, 1))
plot(NA, xlim = c(-0.4, 1.4), ylim = c(0, 1.04),
xlab = "Indicador 0 / 1", ylab = "Probabilidad acumulada",
main = "FDA - indicador binario", xaxt = "n")
axis(1, at = 0:1)
segments(-0.4, 0, 0, 0, lwd = 2.5, col = color_base)
segments(0, acumuladas_Y[1], 1, acumuladas_Y[1], lwd = 2.5, col = color_base)
segments(1, acumuladas_Y[2], 1.4, acumuladas_Y[2], lwd = 2.5, col = color_base)
points(c(0, 1), acumuladas_Y, pch = 19, col = color_base)
points(c(0, 1), c(0, acumuladas_Y[1]), pch = 1, col = color_base)
par(mfrow = c(1, 1))Figura 3. Función de masa de probabilidad (FMP) y distribución acumulada (FDA) del indicador Bernoulli.
Lectura contextual: la FMP muestra qué tan frecuentes serían los resultados 0 y 1 en el modelo. La FDA salta en los dos únicos valores posibles; no debe representarse como una función continua suavizada. Su esperanza teórica 0.6732 es la proporción esperada de mediciones superiores a 130 mg/dL en el modelo simulado.
El objetivo de simular es comprobar la variabilidad de promedios y proporciones entre tamaños muestrales crecientes y examinar su convergencia hacia parámetros conocidos por construcción. La serie sintética de 45 observaciones ilustra la dispersión individual, mientras que las muestras de hasta 10 000 observaciones permiten estudiar la Ley de los Grandes Números. Aumentar B no representa prolongar un seguimiento clínico real. La simulación Monte Carlo permite estudiar el comportamiento de un modelo mediante repetición pseudoaleatoria bajo parámetros controlados (Ross, 2013).
Se emplean estas funciones de R:
rgamma(n, shape, scale): genera n
concentraciones continuas del modelo Gamma.as.integer(x > 130): transforma cada concentración
generada en un indicador 0/1.rbinom(n, size = 1, prob = p): permite generar
directamente variables Bernoulli; también se usa en la demostración
adicional del TLC.cumsum(x) / seq_along(x): calcula el promedio acumulado
tras cada observación.hist(), lines(), abline() y
plot(): dibujan histogramas, curvas de referencia y
trayectorias.Para comparar tamaños B se crea una sola secuencia de 10 000 valores y se consideran sus primeros 10, 50, 100, 1000 y 10000 valores. De esta manera se obtienen muestras anidadas, no cinco muestras independientes; su dependencia favorece la lectura de una única trayectoria de convergencia. Esta decisión es apropiada para visualizar cómo evoluciona un mismo promedio acumulado a medida que aumenta el tamaño muestral.
set.seed(20261011) # Semilla fija para reproducibilidad.
simulacion_X <- rgamma(max(B_cortes), shape = forma, scale = escala)
simulacion_Y <- as.integer(simulacion_X > umbral)
# Demostración de simulación discreta directa, distribucionalmente equivalente:
set.seed(20261012)
ejemplo_bernoulli_directo <- rbinom(10, size = 1, prob = prob_evento)
invisible(ejemplo_bernoulli_directo) # Se conserva el ejemplo sin imprimir el vector.
resultados_X <- data.frame(
B = B_cortes,
Media_muestral = sapply(B_cortes, function(b) mean(simulacion_X[1:b])),
Esperanza_teorica = media_teorica_X
)
resultados_X$Error_absoluto <- abs(resultados_X$Media_muestral - media_teorica_X)
resultados_X$Error_relativo_pct <- 100 * resultados_X$Error_absoluto / media_teorica_X
resultados_Y <- data.frame(
B = B_cortes,
Proporcion_muestral = sapply(B_cortes, function(b) mean(simulacion_Y[1:b])),
Esperanza_teorica = media_teorica_Y
)
resultados_Y$Error_absoluto <- abs(resultados_Y$Proporcion_muestral - media_teorica_Y)
resultados_Y$Error_relativo_pct <- 100 * resultados_Y$Error_absoluto / media_teorica_Yknitr::kable(resultados_X, digits = 4,
col.names = c("B", "Media muestral", "Esperanza teórica",
"Error absoluto", "Error relativo (%)"),
caption = "Tabla 3. Convergencia de las medias de glucosa simulada")| B | Media muestral | Esperanza teórica | Error absoluto | Error relativo (%) |
|---|---|---|---|---|
| 10 | 144.25 | 145 | 0.7479 | 0.5158 |
| 50 | 142.24 | 145 | 2.7590 | 1.9027 |
| 100 | 141.86 | 145 | 3.1448 | 2.1688 |
| 1000 | 144.53 | 145 | 0.4682 | 0.3229 |
| 10000 | 145.20 | 145 | 0.2035 | 0.1404 |
En cada figura siguiente el panel izquierdo representa cómo cambia la media de glucosa al incluir sucesivamente nuevas observaciones; la línea horizontal roja es su esperanza teórica. El panel derecho presenta el histograma de la misma muestra, una curva de la FDP Gamma y una línea vertical en E(X).
grafico_continuo <- function(b) {
datos <- simulacion_X[seq_len(b)]
media_acumulada <- cumsum(datos) / seq_len(b)
limites <- range(c(media_acumulada, media_teorica_X))
if (diff(limites) < 1e-8) limites <- limites + c(-1, 1)
par(mfrow = c(1, 2), mar = c(4.7, 4.8, 3.4, 1.2))
plot(seq_len(b), media_acumulada, type = "l", col = color_base,
lwd = 1.8, xlab = "Número de observaciones simuladas",
ylab = "Media acumulada (mg/dL)", ylim = limites,
main = paste("Promedio muestral | B =", b))
abline(h = media_teorica_X, col = color_media, lty = 2, lwd = 2)
legend("topright", "E(X) teórica", col = color_media,
lty = 2, lwd = 2, bty = "n", cex = 0.76)
hist(datos, probability = TRUE, breaks = "FD",
col = color_barras, border = "white",
main = paste("Histograma | B =", b),
xlab = "Glucosa simulada (mg/dL)", ylab = "Densidad")
xx <- seq(0, max(datos, qgamma(0.999, forma, scale = escala)),
length.out = 500)
lines(xx, dgamma(xx, shape = forma, scale = escala),
col = color_base, lwd = 2)
abline(v = media_teorica_X, col = color_media, lty = 2, lwd = 2)
legend("topright", c("FDP Gamma", "E(X) teórica"),
col = c(color_base, color_media), lty = c(1, 2),
bty = "n", cex = 0.72)
par(mfrow = c(1, 1))
}Figura 4. Variable continua: media acumulada e histograma con B = 10.
Interpretación: la media calculada es 144.25 mg/dL y la distancia a E(X) es 0.75 mg/dL. Con solamente diez observaciones, unos pocos valores extremos pueden desplazar notablemente el promedio; el histograma es irregular por escasez de observaciones.
Figura 5. Variable continua: media acumulada e histograma con B = 50.
Interpretación: la media simulada es 142.24 mg/dL y su error relativo es 1.90%. La trayectoria ofrece más información que en B = 10, aunque las fluctuaciones siguen siendo posibles. Una aproximación más cercana no es una garantía matemática para cada muestra pequeña.
Figura 6. Variable continua: media acumulada e histograma con B = 100.
Interpretación: la media simulada es 141.86 mg/dL. La diferencia respecto de E(X) es 3.14 mg/dL. El histograma comienza a representar mejor la forma general de la distribución teórica, aunque no se espera coincidencia perfecta.
Figura 7. Variable continua: media acumulada e histograma con B = 1000.
Interpretación: se obtiene una media de 144.53 mg/dL con error relativo 0.32%. La reducción visual de las oscilaciones del promedio es compatible con la LGN; esto no implica que los valores individuales de glucosa se vuelvan constantes.
Figura 8. Variable continua: media acumulada e histograma con B = 10000.
Interpretación: la media acumulada al final es 145.20 mg/dL, frente a E(X) = 145.00 mg/dL. El error relativo es 0.14%. El acercamiento a la esperanza se refiere al promedio muestral de las observaciones simuladas, mientras que los valores individuales siguen presentando variabilidad.
knitr::kable(resultados_Y, digits = 4,
col.names = c("B", "Proporción muestral", "Esperanza teórica",
"Error absoluto", "Error relativo (%)"),
caption = "Tabla 4. Convergencia de las proporciones del indicador simulado")| B | Proporción muestral | Esperanza teórica | Error absoluto | Error relativo (%) |
|---|---|---|---|---|
| 10 | 0.7000 | 0.6732 | 0.0268 | 3.9838 |
| 50 | 0.6000 | 0.6732 | 0.0732 | 10.8710 |
| 100 | 0.6400 | 0.6732 | 0.0332 | 4.9291 |
| 1000 | 0.6760 | 0.6732 | 0.0028 | 0.4186 |
| 10000 | 0.6707 | 0.6732 | 0.0025 | 0.3687 |
Aquí la media muestral de los indicadores es una
proporción: promedio(Y) = cantidad de unos / B. El panel
izquierdo de cada figura representa esa proporción acumulada y la línea
horizontal en E(Y) = p. El segundo panel representa el histograma de los
valores 0 y 1, la FMP teórica y la posición de la esperanza.
grafico_discreto <- function(b) {
datos <- simulacion_Y[seq_len(b)]
proporcion_acumulada <- cumsum(datos) / seq_len(b)
par(mfrow = c(1, 2), mar = c(4.7, 4.8, 3.4, 1.2))
plot(seq_len(b), proporcion_acumulada, type = "l", col = color_base,
lwd = 1.8, xlab = "Número de observaciones simuladas",
ylab = "Proporción acumulada", ylim = c(0, 1),
main = paste("Promedio muestral | B =", b))
abline(h = media_teorica_Y, col = color_media, lty = 2, lwd = 2)
legend("topright", "E(Y) teórica", col = color_media,
lty = 2, lwd = 2, bty = "n", cex = 0.76)
hist(datos, breaks = c(-0.5, 0.5, 1.5), probability = TRUE,
xaxt = "n", col = color_barras, border = "white",
xlim = c(-0.5, 1.5), ylim = c(0, 1.08),
main = paste("Histograma | B =", b),
xlab = "Indicador 0 / 1", ylab = "Frecuencia relativa")
axis(1, at = 0:1)
points(0:1, dbinom(0:1, 1, prob_evento), type = "b",
pch = 19, col = color_base, lwd = 2)
abline(v = media_teorica_Y, col = color_media, lty = 2, lwd = 2)
legend("top", c("FMP teórica", "E(Y) teórica"),
col = c(color_base, color_media), lty = c(1, 2),
bty = "n", cex = 0.72)
par(mfrow = c(1, 1))
}Figura 9. Variable discreta: proporción acumulada e histograma con B = 10.
Interpretación: la proporción de observaciones superiores al umbral es 0.700, frente a la proporción teórica 0.673. El cambio de un solo indicador de 0 a 1 representa 10 puntos porcentuales en una muestra de diez datos; por ello la trayectoria fluctúa fuertemente.
Figura 10. Variable discreta: proporción acumulada e histograma con B = 50.
Interpretación: la proporción simulada es 0.600, con una diferencia absoluta de 0.073 respecto de E(Y). Una sola observación altera la proporción en 2 puntos porcentuales: menos que en B = 10, pero todavía puede influir.
Figura 11. Variable discreta: proporción acumulada e histograma con B = 100.
Interpretación: el promedio del indicador es 0.640, y su error relativo es 4.93%. La mayor muestra permite comparar mejor la frecuencia relativa observada de ceros y unos con la FMP Bernoulli teórica.
Figura 12. Variable discreta: proporción acumulada e histograma con B = 1000.
Interpretación: la proporción simulada es 0.676, con una diferencia absoluta de 0.003. Aunque cada indicador sigue tomando exclusivamente 0 o 1, su promedio acumulado suele variar cada vez menos en términos relativos.
Figura 13. Variable discreta: proporción acumulada e histograma con B = 10000.
Interpretación: la proporción simulada final es 0.671, frente a E(Y) = 0.673. La discrepancia absoluta observada es 0.0025. Este promedio de indicadores representa la frecuencia relativa de excedencias en 10 000 registros simulados.
Una apreciación visual necesita contrastarse con los resultados numéricos. Para este trabajo se adopta como criterio descriptivo que el error relativo de la media o proporción simulada sea igual o inferior al 1% respecto a su esperanza teórica y que dicho criterio se mantenga en los cortes posteriores analizados. El umbral del 1% no constituye una prueba formal ni implica que el azar haya desaparecido; se utiliza únicamente como apoyo cuantitativo para identificar una estabilización visual clara.
tabla_estabilidad <- data.frame(
B = B_cortes,
Error_continuo_pct = round(resultados_X$Error_relativo_pct, 3),
Error_discreto_pct = round(resultados_Y$Error_relativo_pct, 3)
)
knitr::kable(tabla_estabilidad,
col.names = c("B", "Error continuo (%)", "Error discreto (%)"),
caption = "Tabla 5. Error relativo de cada media o proporción simulada")
# Primer corte en el que se cumple el criterio y se sigue cumpliendo
# en TODOS los cortes posteriores de la tabla (no en cada punto intermedio).
primer_corte_estable <- function(errores, cortes, limite = 1) {
cumple <- vapply(seq_along(errores), function(i) {
all(errores[i:length(errores)] <= limite)
}, logical(1))
if (!any(cumple)) return("ninguno de los cinco cortes")
paste0("B = ", cortes[which(cumple)[1]])
}
estable_X <- primer_corte_estable(resultados_X$Error_relativo_pct, B_cortes)
estable_Y <- primer_corte_estable(resultados_Y$Error_relativo_pct, B_cortes)| B | Error continuo (%) | Error discreto (%) |
|---|---|---|
| 10 | 0.516 | 3.984 |
| 50 | 1.903 | 10.871 |
| 100 | 2.169 | 4.929 |
| 1000 | 0.323 | 0.419 |
| 10000 | 0.140 | 0.369 |
Evaluación del modelo continuo: el primer corte que cumple el criterio del 1% y continúa cumpliéndolo en todos los cortes posteriores mostrados es B = 1000.
Evaluación del modelo discreto: el primer corte que cumple el mismo criterio del 1% y continúa cumpliéndolo en los cortes posteriores mostrados es B = 1000.
Interpretación: con el criterio descriptivo adoptado, ambos modelos muestran una estabilización clara a partir de B = 1000, ya que desde ese corte los errores relativos permanecen por debajo del 1% en los tamaños analizados. Los resultados de B = 10, 50 y 100 evidencian que una media o proporción puede quedar cerca del valor teórico por casualidad y luego alejarse nuevamente. Por ello, la expresión “deja de producir fluctuaciones significativas” se interpreta como disminución sustancial de la influencia relativa del azar sobre el promedio, y no como desaparición del azar ni como una prueba de significación estadística.
plot(B_cortes, resultados_X$Error_relativo_pct, type = "b", pch = 19,
lwd = 2, log = "x", col = color_base, xaxt = "n",
ylim = c(0, max(c(resultados_X$Error_relativo_pct,
resultados_Y$Error_relativo_pct, 1)) * 1.12),
xlab = "Tamaño de muestra B (escala logarítmica)",
ylab = "Error relativo (%)", main = "Error de estimación por tamaño muestral")
axis(1, at = B_cortes, labels = B_cortes)
lines(B_cortes, resultados_Y$Error_relativo_pct, type = "b", pch = 17,
lwd = 2, col = color_media)
abline(h = 1, lty = 3, col = "#6b7078")
legend("topright", c("Media continua", "Proporción discreta", "Referencia 1%"),
col = c(color_base, color_media, "#6b7078"),
lty = c(1, 1, 3), pch = c(19, 17, NA), bty = "n", cex = 0.8)Figura 14. Comparación del error relativo de ambos estimadores en los cinco tamaños simulados.
La simulación proporciona un entorno donde se conoce de antemano la distribución teórica y, por tanto, su esperanza. Esto permite comparar el parámetro del modelo con medias y proporciones de muestras de tamaño creciente, estudiar el error de simulación y comprender cómo los histogramas reproducen progresivamente la distribución generadora.
En particular, simular 10 000 valores no significa disponer de más información clínica: solo agrega información acerca de los resultados esperables si fueran correctos los parámetros, la distribución y los supuestos del modelo.
Bajo el supuesto de observaciones independientes e idénticamente
distribuidas con esperanza finita, cuando B aumenta, la media muestral
tiende a aproximarse a la esperanza poblacional del modelo (Casella y
Berger, 2002). Por ello, en el caso continuo se espera que la media
acumulada de glucosa simulada se acerque a E(X), mientras que en el caso
discreto la proporción de indicadores con valor 1 se acerque a
p.
Los paneles izquierdos de las diez figuras de simulación muestran una trayectoria concreta de ese fenómeno. La ley no afirma que cada observación individual se estabilice ni que las fluctuaciones desaparezcan: el resultado se refiere a la media de la secuencia.
El TLC explica otro fenómeno: al generar muchas muestras independientes, todas del mismo tamaño B, la distribución de sus promedios estandarizados se aproxima a una distribución normal cuando B crece y se cumplen las condiciones requeridas (Casella y Berger, 2002). Esta afirmación no implica que los datos originales Gamma o Bernoulli sigan una distribución normal.
Para evidenciarlo se generan 2000 réplicas de tamaño B = 10 y B = 100 por modelo. Se calculan las medias y se estandarizan usando:
Z = (media_muestral - E) / (DE / sqrt(B)).
Los gráficos de esta sección complementan las diez figuras del análisis de convergencia; ilustran la distribución de las medias entre réplicas y no solo la media acumulada de una trayectoria.
set.seed(20261013)
replicas <- 2000
cortes_tlc <- c(10, 100)
par(mfrow = c(2, 2), mar = c(4.5, 4.5, 3.4, 1.1))
for (b in cortes_tlc) {
medias <- replicate(replicas, mean(rgamma(b, shape = forma, scale = escala)))
z <- (medias - media_teorica_X) / (desv_teorica_X / sqrt(b))
hist(z, probability = TRUE, breaks = 30, col = color_barras,
border = "white", main = paste("Gamma: B =", b),
xlab = "Media estandarizada Z", ylab = "Densidad")
curve(dnorm(x), add = TRUE, col = color_media, lwd = 2)
}
for (b in cortes_tlc) {
medias <- replicate(replicas, mean(rbinom(b, size = 1, prob = prob_evento)))
z <- (medias - media_teorica_Y) / (desv_teorica_Y / sqrt(b))
hist(z, probability = TRUE, breaks = 25, col = color_barras,
border = "white", main = paste("Bernoulli: B =", b),
xlab = "Proporción estandarizada Z", ylab = "Densidad")
curve(dnorm(x), add = TRUE, col = color_media, lwd = 2)
}
par(mfrow = c(1, 1))Figura 15. Distribución de medias estandarizadas: 2000 réplicas para cada modelo y tamaño B.
Interpretación: las curvas rojas representan la densidad normal estándar y los histogramas las medias estandarizadas simuladas. A B = 100 se espera una aproximación visual más clara que a B = 10, aunque la velocidad de acercamiento depende de la distribución de origen y de sus parámetros. Así se diferencia el TLC de la LGN: el TLC describe la forma de la distribución muestral de las medias y proporciones estandarizadas entre réplicas, mientras que la LGN describe la convergencia de un promedio muestral hacia su esperanza.
El escenario permite separar variabilidad individual de estabilidad de un promedio. En la serie de 45 observaciones aparecen subidas y bajadas aun cuando todos los valores proceden de la misma distribución Gamma. Por otra parte, al aumentar B, los promedios simulados pueden acercarse a 145 mg/dL y las proporciones de excedencia pueden aproximarse a 0.6732. Son propiedades del mecanismo aleatorio escogido.
Esta interpretación permite visualizar por qué una muestra pequeña puede ofrecer estimaciones inestables y cómo se reduce parte del error aleatorio al aumentar el tamaño muestral. La simulación no explica causas médicas, puesto que no incluye variables explicativas ni reproduce el funcionamiento fisiológico de una persona.
El documento fue desarrollado íntegramente en R Markdown, de manera que la exposición metodológica, el código fuente, los resultados numéricos, las tablas y las figuras quedan integrados en un único archivo reproducible. Los bloques de código se mantienen visibles para documentar el procedimiento seguido y facilitar su revisión.
La variable continua principal se genera con
rgamma(n, shape, scale). La variable discreta principal se
construye a partir de esas realizaciones mediante
as.integer(X > 130), por lo que cada observación toma
los valores 0 o 1 y tiene distribución Bernoulli con probabilidad
p = P(X > 130). La función rbinom() se
utiliza de forma adicional para mostrar una generación Bernoulli directa
y en la demostración del Teorema del Límite Central. Los cálculos,
gráficos y transformaciones se realizan con funciones de R base
(R Core Team, s. f.), mientras que knitr y
rmarkdown organizan la salida del documento.
Para favorecer la reproducibilidad se utilizan semillas fijas
mediante set.seed(). En consecuencia, al ejecutar el
archivo bajo la misma configuración de R se obtienen nuevamente las
mismas secuencias pseudoaleatorias, tablas y figuras. El documento es
autocontenido y no requiere archivos externos de datos,
porque todas las observaciones empleadas son sintéticas y se generan
dentro del propio código.
La reproducibilidad computacional no convierte los parámetros hipotéticos en evidencia empírica: garantiza la repetición del procedimiento programado, no la validez clínica o poblacional del escenario propuesto.
Casella, G., y Berger, R. L. (2002). Statistical Inference (2nd ed.). Duxbury.
R Core Team. (s. f.). R: A Language and Environment for Statistical Computing. R Foundation for Statistical Computing. https://www.r-project.org/
Ross, S. M. (2013). Simulation (5th ed.). Academic Press.