Hoja de referencia — Maestría en Economía de la Salud · Bioestadística
t.test(x, mu = μ₀, alternative = "two.sided", conf.level = 0.95)
# Hipótesis: ¿La estancia media es 5 días? dias <- c(4,6,5,7,5,6,4,8,5,6,5,4,7,5,6) t.test(dias, mu = 5, alternative = "two.sided", conf.level = 0.95)
# El IC ya está en t.test(): resultado <- t.test(x, conf.level = 0.95) resultado$conf.int # extraer IC
gasto <- c(120,145,98,160,132,155,110,140,125,138) res <- t.test(gasto, conf.level = 0.95) cat("IC 95%:", res$conf.int) # Cálculo manual: n <- length(gasto) x̄ <- mean(gasto) s <- sd(gasto) t_c <- qt(0.975, df = n - 1) c(x̄ - t_c * s / sqrt(n), x̄ + t_c * s / sqrt(n))
| Argumento | Descripción |
|---|---|
| x | Vector numérico de datos |
| y | Segundo vector (2 muestras) |
| mu | Valor H₀ de la media |
| alternative | "two.sided" / "greater" / "less" |
| paired | TRUE para muestras pareadas |
| var.equal | TRUE si varianzas iguales |
| conf.level | Nivel de confianza (ej. 0.95) |
res <- t.test(x) res$statistic # estadístico t res$p.value # valor-p res$conf.int # intervalo de confianza res$estimate # media(s) estimada(s) res$parameter # grados de libertad
prop.test(x, # éxitos n, # total p = p₀, # H₀ alternative = "two.sided", conf.level = 0.95, correct = TRUE)
# 180 de 300 pacientes adhieren al tratamiento # H₀: p = 0.55 (referencia nacional) prop.test(180, 300, p = 0.55, alternative = "two.sided", conf.level = 0.95)
# prop.test usa método Wilson por defecto res <- prop.test(180, 300, conf.level = 0.95) res$conf.int # IC Wilson
# binom.test para muestras pequeñas binom.test(18, 30, p = 0.55, conf.level = 0.95)
p̂ <- 180 / 300 z <- qnorm(0.975) se <- sqrt(p̂ * (1 - p̂) / 300) c(p̂ - z * se, p̂ + z * se)
library(DescTools) # BinomCI soporta múltiples métodos BinomCI(180, 300, conf.level = 0.95, method = "wilson") # method: "wald","wilson","clopper-pearson", # "jeffreys","agresti-coull"
| Método | Uso recomendado |
|---|---|
| Wilson | General, n moderado-grande |
| Clopper-Pearson | Exacto, p extremas o n pequeño |
| Agresti-Coull | n ≥ 10, buen desempeño general |
| Jeffreys | Bayesiano, cobertura equilibrada |
| Wald | Solo si np > 5 y n(1-p) > 5 |
library(car) leveneTest(y ~ grupo, data = mi_datos, center = "median") # más robusto
library(car) costo <- c(500,520,480,510,495,540,515,505, 480,460,490,475,485,470,500,465) hosp <- factor(rep(c("A","B"), each=8)) datos <- data.frame(costo, hosp) leveneTest(costo ~ hosp, data = datos, center = "median")
var.equal = TRUE en t.test().var.test(x1, x2) # asume normalidad estricta
t.test(x1, x2, alternative = "two.sided", var.equal = TRUE, conf.level = 0.95) # Pooled t-test (Student)
t.test(x1, x2, var.equal = FALSE, # default conf.level = 0.95) # Welch t-test (ajusta gl)
hosp_a <- c(500,520,480,510,495,540,515,505) hosp_b <- c(480,460,490,475,485,470,500,465) # Levene no rechazó → var.equal = TRUE t.test(hosp_a, hosp_b, var.equal = TRUE, conf.level = 0.95)
t.test(x1, x2, paired = TRUE, alternative = "two.sided", conf.level = 0.95) # Equivale a t.test(x1-x2, mu=0)
antes <- c(140,138,145,142,150,148,135,143) despues <- c(132,130,138,136,142,140,128,136) t.test(antes, despues, paired = TRUE, conf.level = 0.95)
# Se obtiene directamente de t.test()$conf.int t.test(x1, x2)$conf.int
prop.test(c(x1, x2), c(n1, n2), alternative = "two.sided", conf.level = 0.95, correct = TRUE)
# Subsidiado: 45/200 rehospitalizados # Contributivo: 30/250 rehospitalizados prop.test(c(45, 30), c(200, 250), alternative = "two.sided", conf.level = 0.95)
p1 <- 45/200; p2 <- 30/250 n1 <- 200; n2 <- 250 z <- qnorm(0.975) se <- sqrt(p1*(1-p1)/n1 + p2*(1-p2)/n2) dif <- p1 - p2 c(dif - z*se, dif + z*se)
tabla <- matrix(c(45,155,30,220), nrow = 2) chisq.test(tabla, correct = FALSE) fisher.test(tabla) # si frecuencias < 5
| Situación | Función R |
|---|---|
| μ, 1 muestra, σ desconocida | t.test(x, mu=μ₀) |
| μ₁-μ₂, var. iguales | t.test(x,y, var.equal=T) |
| μ₁-μ₂, var. desiguales | t.test(x,y, var.equal=F) |
| μd, pareadas | t.test(x,y, paired=T) |
| p, 1 muestra, n grande | prop.test(x,n,p=p₀) |
| p, 1 muestra, n pequeño | binom.test(x,n,p=p₀) |
| p₁-p₂, muestras grandes | prop.test(c(x1,x2),c(n1,n2)) |
| p₁-p₂, celdas < 5 | fisher.test(tabla) |
| σ₁² = σ₂² (normalidad) | var.test(x,y) |
| σ₁² = σ₂² (robusto) | leveneTest(y~g, data=df) |
t.test(x, mu = 5, alternative = "greater")
t.test(x, mu = 5, alternative = "less")
gasto <- c(120,145,98,160,132,155,110,140,125,138) t.test(gasto, mu = 130, alternative = "greater", conf.level = 0.95)
shapiro.test(x) # H₀: los datos son normales # p > 0.05 → no rechazamos normalidad
ks.test(x, "pnorm", mean(x), sd(x))
qqnorm(x); qqline(x, col="red") # Puntos sobre la línea → normalidad
dias <- c(4,6,5,7,5,6,4,8,5,6,5,4,7,5,6) shapiro.test(dias)
wilcox.test() como alternativa no paramétrica.# Normal estándar z qnorm(0.975) # z = 1.96 qnorm(0.95) # z = 1.645 # t de Student qt(0.975, df=14) # t_{0.025, 14} qt(0.95, df=29) # unilateral # Chi-cuadrado qchisq(0.95, df=1) # χ²_crit = 3.84 # F de Fisher qf(0.95, df1=1, df2=28)
# Bilateral desde estadístico t 2 * pt(-abs(t_stat), df=n-1) # Unilateral derecha desde z 1 - pnorm(z_stat)
| Prefijo | Descripción |
|---|---|
| q___ | Cuantil (valor crítico) |
| p___ | Prob. acumulada (valor-p) |
| d___ | Densidad de probabilidad |
| r___ | Generación de números aleatorios |
# ───────────────────────────────────────────── # CONTEXTO: Comparar gasto promedio en salud # entre beneficiarios de dos EPS # ───────────────────────────────────────────── # PASO 1 — Cargar datos eps_a <- c(850,920,780,1050,890,960,810,990,870,930) eps_b <- c(720,680,760,710,740,695,770,725,745,715) # PASO 2 — Estadísticos descriptivos summary(eps_a); summary(eps_b) sd(eps_a); sd(eps_b) # PASO 3 — Verificar normalidad shapiro.test(eps_a) # p = 0.88 → normal shapiro.test(eps_b) # p = 0.74 → normal # PASO 4 — Prueba de Levene (igualdad de varianzas) library(car) gasto <- c(eps_a, eps_b) grupo <- factor(rep(c("A","B"), each=10)) leveneTest(gasto ~ grupo, center = "median") # F = 0.53, p = 0.475 → varianzas iguales # PASO 5 — Prueba t (Student, var.equal=TRUE) resultado <- t.test(eps_a, eps_b, var.equal = TRUE, conf.level = 0.95) # PASO 6 — Reportar resultados cat("t =", resultado$statistic, "\np =", resultado$p.value, "\nIC 95%:", resultado$conf.int)
# ───────────────────────────────────────────── # CONTEXTO: ¿Difiere la cobertura de vacunación # entre zonas urbana y rural? # ───────────────────────────────────────────── # Datos: # Urbana: 320/400 vacunados → p̂₁ = 0.80 # Rural: 210/350 vacunados → p̂₂ = 0.60 # PASO 1 — prop.test bilateral res <- prop.test( c(320, 210), c(400, 350), alternative = "two.sided", conf.level = 0.95, correct = TRUE ) print(res)
# PASO 2 — Tabla de contingencia + chi² tab <- matrix( c(320, 80, 210, 140), nrow = 2, dimnames = list( c("Vacunado", "No vacunado"), c("Urbano", "Rural") ) ) chisq.test(tab) # PASO 3 — Razón de Odds (odds ratio) library(epitools) oddsratio(tab) # OR + IC