Bienvenido/a al tutorial práctico en RStudio correspondiente al Capítulo 4: Fundamentos para la Inferencia Estadística.
El objetivo de esta guía es proporcionar las herramientas conceptuales y computacionales necesarias para:
En investigación médica, nuestro objetivo es conocer las características de una población objetivo (medidas por parámetros fijos e ignorados como la media poblacional \(\mu\) y la desviación estándar \(\sigma\)). Sin embargo, solo podemos trabajar con muestras representativas, de las cuales calculamos estadísticos o estimadores puntuales:
Dado que muestras independientes de tamaño \(n\) extraídas de la misma población producen diferentes medias \(\bar{X}\), la distribución de todas las posibles medias muestrales se denomina Distribución Muestral de la Media.
El Teorema del Límite Central (TCL) establece que, si el tamaño muestral es suficientemente grande (\(n \ge 30\)), la distribución muestral de \(\bar{X}\) se aproximará a una Distribución Normal, independientemente de la forma de la población original.
La dispersión de las medias muestrales alrededor de \(\mu\) se mide mediante el Error Estándar (\(SE\)):
\[SE = \frac{s}{\sqrt{n}}\]
Regla Teórica Fundamental: A medida que el tamaño de muestra \(n\) aumenta, el \(SE\) disminuye de forma proporcional a \(\sqrt{n}\), incrementando la precisión de nuestra estimación.
Un Intervalo de Confianza proporciona un rango de valores plausibles para el verdadero parámetro poblacional \(\mu\), incorporando el margen de variabilidad muestral:
\[IC_{(1-\alpha)\%} = \bar{X} \pm \text{Margen de Error } (ME)\] \[IC_{(1-\alpha)\%} = \bar{X} \pm \left( t_{\alpha/2, \, df} \cdot \frac{s}{\sqrt{n}} \right)\]
Donde:
El contraste de hipótesis enfrenta dos proposiciones mutuamente excluyentes:
El estadístico de prueba mide cuántos errores estándar se aleja la media observada del valor nulo:
\[t_{\text{calc}} = \frac{\bar{X} - \mu_0}{SE} = \frac{\bar{X} - \mu_0}{s / \sqrt{n}}\]
Un valor \(p < 0.05\) indica que la diferencia observada es difícil de explicar por mero azar, pero no garantiza que sea clínicamente importante.
Evaluaremos el Informe G13, en el cual se estudió la calidad del sueño en estudiantes de medicina mediante la escala PSQI (donde un puntaje \(> 5.0\) indica mala calidad del sueño o insomnio clínico).
Datos Muestrales del Informe G13:
\[SE = \frac{s}{\sqrt{n}} = \frac{2.11}{\sqrt{41}} = \frac{2.11}{6.4031} = \mathbf{0.3295 \text{ puntos}}\]
Para \(df = 41 - 1 = 40\) y un nivel de confianza del \(95\%\) (\(\alpha/2 = 0.025\)):
Cálculo del Estadístico \(t\): \[t_{\text{calc}} = \frac{\bar{X} - \mu_0}{SE} = \frac{7.88 - 5.0}{0.3295} = \frac{2.88}{0.3295} = \mathbf{8.7405}\]
A continuación, implementaremos este análisis en R utilizando tres enfoques programáticos.
# --- Parámetros de Entrada (Informe G13) ---
n <- 41
xbar <- 7.88
s <- 2.11
mu0 <- 5.0
conf_level <- 0.95
# 1. Error Estándar
se <- s / sqrt(n)
# 2. Intervalo de Confianza al 95%
df_val <- n - 1
t_crit <- qt(1 - (1 - conf_level)/2, df = df_val)
me <- t_crit * se
ic_inferior <- xbar - me
ic_superior <- xbar + me
# 3. Prueba de Hipótesis
t_calc <- (xbar - mu0) / se
p_valor <- 2 * pt(-abs(t_calc), df = df_val)
# --- Impresión de Resultados ---
cat("==============================================\n")## ==============================================
## RESULTADOS DE INFERENCIA ESTADÍSTICA (G13)
## ==============================================
## Media Muestral (Xbar): 7.88 puntos
## Error Estándar (SE) : 0.3295 puntos
## Valor Crítico t(40) : 2.0211
## Margen de Error (ME) : 0.6660 puntos
## IC 95% para mu : [7.214, 8.546] puntos
## Estadístico t_calc : 8.7398
## p-valor : 8.09e-11 (p < 0.0001)
## ==============================================
Podemos construir una función en R que realice todo el procedimiento de inferencia para cualquier conjunto de datos resumidos:
inferencia_media_resumida <- function(n, xbar, s, mu0 = 0, conf_level = 0.95, alternativa = "two.sided") {
se <- s / sqrt(n)
df_val <- n - 1
# Intervalo de confianza
t_crit <- qt(1 - (1 - conf_level)/2, df = df_val)
me <- t_crit * se
ic <- xbar + c(-1, 1) * me
# Prueba t
t_calc <- (xbar - mu0) / se
if (alternativa == "two.sided") {
p_val <- 2 * pt(-abs(t_calc), df = df_val)
} else if (alternativa == "greater") {
p_val <- pt(t_calc, df = df_val, lower.tail = FALSE)
} else {
p_val <- pt(t_calc, df = df_val, lower.tail = TRUE)
}
resultado <- list(
n = n,
media = xbar,
desv_est = s,
se = se,
ic = ic,
t_calc = t_calc,
df = df_val,
p_valor = p_val
)
return(resultado)
}
# Prueba de la función con datos del Informe G13
res_g13 <- inferencia_media_resumida(n = 41, xbar = 7.88, s = 2.11, mu0 = 5.0)
print(res_g13$ic)## [1] 7.214002 8.545998
## [1] 8.08522e-11
t.test() con Datos VectorialesSi disponemos del vector completo de datos de los pacientes (simulado
aquí con la misma media y desviación del informe), podemos ejecutar
directamente la función nativa t.test() de R:
set.seed(2026)
# Vector de datos que simula la muestra de n = 41 estudiantes del Informe G13
datos_psqi <- rnorm(n = 41, mean = 7.88, sd = 2.11)
# Aplicación de la función t.test()
prueba_psqi <- t.test(datos_psqi, mu = 5.0, conf.level = 0.95)
# Visualización del objeto t.test
print(prueba_psqi)##
## One Sample t-test
##
## data: datos_psqi
## t = 8.2852, df = 40, p-value = 3.259e-10
## alternative hypothesis: true mean is not equal to 5
## 95 percent confidence interval:
## 7.067984 8.402429
## sample estimates:
## mean of x
## 7.735206
A continuación, graficaremos la distribución \(t\) de Student bajo \(H_0\), resaltando las zonas críticas de rechazo y la ubicación del estadístico observado.
# Construcción del gráfico de la prueba de hipótesis
x_seq <- seq(-4.5, 9, length.out = 1000)
df_t_plot <- data.frame(
x = x_seq,
density = dt(x_seq, df = 40)
)
ggplot(df_t_plot, aes(x = x, y = density)) +
geom_area(data = filter(df_t_plot, x >= -2.021 & x <= 2.021), fill = "#A8DADC", alpha = 0.5) +
geom_area(data = filter(df_t_plot, x <= -2.021), fill = "#E63946", alpha = 0.75) +
geom_area(data = filter(df_t_plot, x >= 2.021), fill = "#E63946", alpha = 0.75) +
geom_line(color = "#1D3557", size = 1.1) +
geom_vline(xintercept = t_calc, color = "#1D3557", linetype = "solid", size = 1.2) +
annotate("label", x = 6.5, y = 0.15,
label = paste0("t_calc = ", round(t_calc, 2), "\n(p < 0.0001)\nRechazo de H0"),
color = "#1D3557", fontface = "bold", fill = "#F8F5EE", size = 3.8) +
scale_x_continuous(
name = "Estadístico t (df = 40)",
breaks = c(-2.021, 0, 2.021, round(t_calc, 2)),
labels = c("-2.02", "0\n(H0)", "+2.02", paste0("t_calc\n", round(t_calc, 2)))
) +
labs(
title = "Prueba de Hipótesis para la Calidad del Sueño PSQI (Informe G13)",
subtitle = "H0: mu = 5.0 vs H1: mu != 5.0 | n = 41 | alpha = 0.05",
y = "Densidad de Probabilidad bajo H0"
) +
theme_minimal(base_size = 12) +
theme(
plot.title = element_text(face = "bold", color = "#1D3557"),
plot.subtitle = element_text(color = "#457B9D")
)| Función en R | Descripción y Uso Principal | Ejemplo de Código |
|---|---|---|
mean(x) |
Calcula la media muestral (\(\bar{X}\)) de un vector
x. |
xbar <- mean(datos) |
sd(x) |
Calcula la desviación estándar muestral (\(s\)) de un vector x. |
s <- sd(datos) |
length(x) |
Devuelve el tamaño de la muestra (\(n\)). | n <- length(datos) |
qt(p, df) |
Devuelve el valor crítico \(t\) para una probabilidad p y
grados de libertad df. |
t_crit <- qt(0.975, df = 35) |
pt(q, df) |
Devuelve la probabilidad acumulada para un valor de
estadístico q. |
p_val <- 2 * pt(-abs(t), df = 35) |
qnorm(p) |
Devuelve el valor crítico \(Z\) de la distribución Normal estándar. | z_crit <- qnorm(0.975) |
t.test(x, mu) |
Ejecuta la prueba \(t\) completa para una muestra e imprime el \(IC\) y \(p\)-valor. | t.test(datos, mu = 120) |
Cada grupo de investigación deberá utilizar la siguiente matriz de
datos extraída de sus propios informes preliminares para redactar un
script en RMarkdown (.Rmd) que resuelva las tareas
analíticas asignadas.
| Grupo | Tema e Informe | n | Xbar (Media) | s (SD) | mu_0 (Referencia) |
|---|---|---|---|---|---|
| Grupo 1 | Uso Nocturno de Pantallas (G1) | 30 | 145.00 | 35.00 | 120 |
| Grupo 2 | Conocimientos en Diabetes (G2) | 25 | 68.00 | 12.00 | 75 |
| Grupo 3 | Sedentarismo Diario (G3) | 40 | 8.50 | 2.10 | 6 |
| Grupo 4 | Conocimiento Antibióticos (G4) | 32 | 75.00 | 10.00 | 80 |
| Grupo 5 | Estrategia Brief-COPE (G5) | 50 | 28.40 | 4.20 | 25 |
| Grupo 6 | Horas de Sueño Nocturno (G6) | 18 | 6.20 | 1.35 | 7 |
| Grupo 7 | Ansiedad GAD-7 en Vapeadores (G7) | 35 | 11.20 | 3.80 | 10 |
| Grupo 8 | Prevención de ITS (G8) | 30 | 62.00 | 15.00 | 70 |
| Grupo 9 | Tensión Académica DASS-21 (G9) | 45 | 16.80 | 5.10 | 14 |
| Grupo 10 | Automedicación en Años Iniciales (G10) | 38 | 17.50 | 2.10 | 18 |
| Grupo 11 | IMC en Estudiantes Inactivos (G11) | 40 | 24.80 | 3.20 | 23 |
| Grupo 12 | Uso Movil Nocturno y GAD-7 (G12) | 28 | 9.80 | 3.10 | 8 |
| Grupo 13 | Calidad de Sueño PSQI (G13) | 41 | 7.88 | 2.11 | 5 |
| Grupo 14 | Conocimiento Genética Prenatal (G14) | 32 | 81.00 | 9.00 | 75 |
| Grupo 15 | Consumo de Energizantes (G15) | 35 | 5.20 | 1.10 | 7 |
Cada grupo de estudiantes debe crear un archivo RMarkdown denominado
Tarea_Capitulo4_GrupoX.Rmd (reemplazando X por
el número de su grupo) y desarrollar los siguientes 4 apartados:
ggplot2 que muestre la curva de
la distribución \(t\), la región de
rechazo al 5% y la ubicación de su estadístico \(t_{\text{calc}}\).# ==============================================================================
# PLANTILLA PARA LA TAREA GRUPAL — CAPÍTULO 4
# Grupo No: _____ | Integrantes: ____________________________________
# ==============================================================================
library(ggplot2)
library(dplyr)
# 1. Cargar parámetros asignados al grupo
n_grupo <- 30 # Reemplazar con el n de su grupo
xbar_grupo <- 145.0 # Reemplazar con la Xbar de su grupo
s_grupo <- 35.0 # Reemplazar con la s de su grupo
mu0_grupo <- 120.0 # Reemplazar con la mu_0 de su grupo
alpha <- 0.05
# 2. Cálculos de Inferencia
se_grupo <- s_grupo / sqrt(n_grupo)
df_grupo <- n_grupo - 1
t_crit_grupo <- qt(1 - alpha/2, df = df_grupo)
me_grupo <- t_crit_grupo * se_grupo
ic_inf_grupo <- xbar_grupo - me_grupo
ic_sup_grupo <- xbar_grupo + me_grupo
t_calc_grupo <- (xbar_grupo - mu0_grupo) / se_grupo
p_val_grupo <- 2 * pt(-abs(t_calc_grupo), df = df_grupo)
# 3. Impresión de Resultados
cat(sprintf("SE: %.4f\n", se_grupo))
cat(sprintf("IC 95%%: [%.3f, %.3f]\n", ic_inf_grupo, ic_sup_grupo))
cat(sprintf("t_calc: %.4f | p-valor: %.4f\n", t_calc_grupo, p_val_grupo))¡Éxitos en la resolución del tutorial y en el desarrollo de la tarea grupal!