UNIVERSIDAD POLITÉCNICA ESTATAL DEL CARCHI

POSGRADO

ACTIVIDAD PRÁCTICO EXPERIMENTAL

Simulación de la variabilidad de glucosa en ayunas y convergencia de medias muestrales mediante Monte Carlo

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.

1 Introducción

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.

1.1 Problema de investigación

¿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.

1.2 Objetivo general

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.

1.3 Objetivos específicos

  1. Definir una variable aleatoria continua y otra discreta, sus parámetros, soportes, función de densidad de probabilidad (FDP), función de masa de probabilidad (FMP) y función de distribución acumulada (FDA).
  2. Simular para ambas variables cinco tamaños: B = 10, 50, 100, 1000 y 10000.
  3. Generar, en cada corte, una figura con la trayectoria del promedio muestral, un histograma y una referencia al valor esperado teórico.
  4. Identificar y justificar el corte a partir del cual se observa estabilización de los promedios.
  5. Explicar la utilidad y las restricciones de la simulación y relacionar los resultados con la Ley de los Grandes Números (LGN) y el Teorema del Límite Central (TLC).

2 Materiales y métodos

2.1 Tipo de estudio y unidad de análisis

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.

2.2 Generación de datos y supuestos estadísticos

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:

  • Esperanza de la concentración: 145 mg/dL.
  • Desviación estándar de la concentración: 30 mg/dL.
  • Umbral operativo para definir el indicador discreto: 130 mg/dL.
  • Seguimiento ilustrativo: 45 mediciones, con una observación cada dos días.

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")
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.

2.3 Serie sintética de tres meses

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")
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.

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.

3 Fase 1. Variables y leyes de probabilidad

3.1 Variable aleatoria continua: nivel de glucosa en ayunas

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.

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.

3.2 Variable aleatoria discreta: indicador de medición superior a 130 mg/dL

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).
  • FMP: P(Y = 0) = 1 - p y P(Y = 1) = p.
  • FDA: 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.

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.

4 Fase 2. Simulación y visualización

4.1 Motivo de la simulación y funciones de R

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_Y

4.2 Simulaciones de la variable continua

knitr::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")
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))
}

4.2.1 Corte B = 10

grafico_continuo(10)
Figura 4. Variable continua: media acumulada e histograma con B = 10.

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.

4.2.2 Corte B = 50

grafico_continuo(50)
Figura 5. Variable continua: media acumulada e histograma con B = 50.

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.

4.2.3 Corte B = 100

grafico_continuo(100)
Figura 6. Variable continua: media acumulada e histograma con B = 100.

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.

4.2.4 Corte B = 1000

grafico_continuo(1000)
Figura 7. Variable continua: media acumulada e histograma con B = 1000.

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.

4.2.5 Corte B = 10000

grafico_continuo(10000)
Figura 8. Variable continua: media acumulada e histograma con B = 10000.

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.

4.3 Simulaciones de la variable discreta

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")
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))
}

4.3.1 Corte B = 10

grafico_discreto(10)
Figura 9. Variable discreta: proporción acumulada e histograma con B = 10.

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.

4.3.2 Corte B = 50

grafico_discreto(50)
Figura 10. Variable discreta: proporción acumulada e histograma con B = 50.

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.

4.3.3 Corte B = 100

grafico_discreto(100)
Figura 11. Variable discreta: proporción acumulada e histograma con B = 100.

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.

4.3.4 Corte B = 1000

grafico_discreto(1000)
Figura 12. Variable discreta: proporción acumulada e histograma con B = 1000.

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.

4.3.5 Corte B = 10000

grafico_discreto(10000)
Figura 13. Variable discreta: proporción acumulada e histograma con B = 10000.

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.

4.4 Comparación cuantitativa y punto de estabilización

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)
Tabla 5. Error relativo de cada media o proporción simulada
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.

Figura 14. Comparación del error relativo de ambos estimadores en los cinco tamaños simulados.

4.5 Discusión estadística e interpretación

4.5.1 ¿Por qué se simulan datos?

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.

4.5.2 Restricciones y limitaciones de la simulación

  1. Tamaño inicial: las 45 observaciones ilustrativas ofrecen una trayectoria corta; su promedio puede distanciarse de la esperanza por variabilidad de muestreo.
  2. Independencia asumida: las extracciones Gamma se generan de forma independiente. Una serie auténtica de glucosa podría presentar autocorrelación y no seguir este supuesto.
  3. Parámetros fijados: una media de 145 mg/dL y una desviación de 30 mg/dL fueron escogidas para ilustración, no estimadas a partir de una población.
  4. Factores omitidos: el modelo no incorpora alimentación, medicación, actividad física, sueño, estrés, enfermedad ni errores instrumentales; por ello no permite estudiar sus efectos.
  5. Representatividad: un generador pseudoaleatorio reproduce el modelo elegido, pero no garantiza su aplicabilidad clínica o poblacional.
  6. Elección de la Gamma: sirve como ejemplo de soporte positivo y forma asimétrica, sin demostrar que sea la distribución correcta de glucosa en situaciones reales.
  7. Pérdida de información al binarizar: convertir cada concentración en 0 o 1 descarta la magnitud de las diferencias respecto del umbral.
  8. Interpretación de B: los cortes 1000 y 10000 representan simulaciones computacionales, no una acumulación efectiva de miles de mediciones de una persona.

4.5.3 Ley de los Grandes Números (LGN)

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.

4.5.4 Teorema del Límite Central (TLC)

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.

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.

4.5.5 Interpretación de la variabilidad en el escenario simulado

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.

5 Fase 3. Desarrollo técnico en R Markdown

5.1 Implementación computacional

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.

5.2 Reproducibilidad

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.

6 Conclusiones

  1. Se definieron dos variables aleatorias relacionadas con el mismo contexto: la concentración de glucosa en ayunas (continua, Gamma) y el indicador de superar un umbral (discreta, Bernoulli). Para ambas se expusieron soporte, parámetros, esperanza, varianza y funciones FDP/FMP y FDA.
  2. Se analizaron cinco cortes muestrales anidados por tipo de variable, con tamaños B = 10, 50, 100, 1000 y 10000. Las diez figuras dobles presentan simultáneamente el promedio muestral acumulado, el histograma y la referencia al valor esperado teórico.
  3. El análisis muestra que el promedio de la variable continua y la proporción de la variable discreta tienden a aproximarse a sus esperanzas teóricas. Con el criterio descriptivo de error relativo no mayor al 1%, ambos modelos muestran una estabilización clara a partir de B = 1000; este punto corresponde a la realización simulada y al criterio adoptado, por lo que no constituye un umbral universal ni garantiza ausencia de fluctuaciones.
  4. Los resultados permiten distinguir la convergencia descrita por la LGN de la aproximación normal de la distribución muestral de medias y proporciones estandarizadas explicada por el TLC; la demostración con múltiples réplicas complementa la lectura de las trayectorias individuales.
  5. Las 45 observaciones de seguimiento y las muestras de 10 a 10 000 registros son exclusivamente sintéticas. Ilustran la variabilidad por azar y la convergencia estadística sin representar evidencias clínicas o causas fisiológicas.

7 Referencias

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.