ToothGrowth
En el análisis estadístico, es fundamental seleccionar la prueba adecuada para responder a una pregunta de investigación específica y asegurarse de que se cumplen los supuestos asociados a dicha prueba. A continuación, se detallan las preguntas de investigación comunes, las pruebas estadísticas correspondientes y los supuestos que deben verificarse antes de su aplicación.
En el análisis estadístico inferencial exige (i) traducir una pregunta de investigación a un contraste estadístico bien definido, (ii) justificar el cumplimiento (o tratamiento) de los supuestos del modelo, y (iii) reportar resultados priorizando tamaños de efecto e intervalos de confianza, evitando interpretaciones dicotómicas basadas exclusivamente en valores p.
Al finalizar, se espera que se pueda:
¿Existe correlación entre dos variables?
Prueba de correlación de Pearson (paramétrica): Evalúa la relación lineal entre dos variables cuantitativas.
Prueba de correlación de Spearman (no paramétrica): Utilizada cuando no se cumplen los supuestos de normalidad o la relación no es lineal.
¿Existen diferencias en las medias de dos grupos independientes?
Prueba t de Student (paramétrica): Compara las medias de dos grupos independientes.
Prueba de Wilcoxon-Mann-Whitney (no paramétrica): Alternativa cuando no se cumple la normalidad.
¿Existen diferencias en las medias de más de dos grupos?
ANOVA (Análisis de Varianza) (paramétrica): Extensión de la prueba t para comparar más de dos grupos.
Prueba de Kruskal-Wallis (no paramétrica): Alternativa no paramétrica al ANOVA.
¿Las varianzas de dos o más grupos son iguales o pareados?
Prueba F de Fisher (paramétrica): Compara las varianzas de dos grupos.
Prueba de Bartlett (paramétrica): Compara las varianzas de múltiples grupos.
Prueba de Levene (paramétrica): Menos sensible a desviaciones de la normalidad.
Las pruebas dependen de: (a) escala de medición (continua/ordinal/nominal), (b) diseño (independiente/pareado; >2 grupos), (c) distribución y homocedasticidad, y (d) objetivo (diferencia de medias, asociación, etc.).
# NOTA TÉCNICA:
# tibble::tribble() requiere que los nombres de columnas estén en la forma ~nombre
# o ~"nombre". El uso de "/" en ~Grupos/Relación se interpreta como operación aritmética.
# Por reproducibilidad (y evitar problemas de codificación), se usan nombres ASCII en el objeto
# y etiquetas “bonitas” sólo en la impresión.
mapa_pruebas <- tibble::tribble(
~Pregunta, ~Variable_respuesta, ~Grupos_Relacion, ~Prueba_parametrica, ~Alternativa_no_parametrica, ~Supuestos_clave,
"Asociación lineal entre dos variables", "Cuantitativa", "2 variables", "Correlación de Pearson", "Spearman", "Linealidad, independencia, (aprox.) normalidad bivariante",
"Diferencia de medias (2 grupos independientes)", "Cuantitativa", "2 grupos", "t de Student / Welch", "Wilcoxon–Mann–Whitney", "Independencia; normalidad de errores; varianzas (si Student)",
"Diferencia de medias (>2 grupos)", "Cuantitativa", ">2 grupos", "ANOVA (aov/lm)", "Kruskal–Wallis", "Independencia; normalidad de errores; homocedasticidad",
"Comparación de proporciones", "Categórica", "2×2 o RxC", "Chi-cuadrada / test exacto", "—", "Independencia; recuentos esperados adecuados"
)
knitr::kable(
mapa_pruebas,
col.names = c(
"Pregunta",
"Variable respuesta",
"Grupos/Relación",
"Prueba paramétrica",
"Alternativa no paramétrica",
"Supuestos clave"
)
)| Pregunta | Variable respuesta | Grupos/Relación | Prueba paramétrica | Alternativa no paramétrica | Supuestos clave |
|---|---|---|---|---|---|
| Asociación lineal entre dos variables | Cuantitativa | 2 variables | Correlación de Pearson | Spearman | Linealidad, independencia, (aprox.) normalidad bivariante |
| Diferencia de medias (2 grupos independientes) | Cuantitativa | 2 grupos | t de Student / Welch | Wilcoxon–Mann–Whitney | Independencia; normalidad de errores; varianzas (si Student) |
| Diferencia de medias (>2 grupos) | Cuantitativa | >2 grupos | ANOVA (aov/lm) | Kruskal–Wallis | Independencia; normalidad de errores; homocedasticidad |
| Comparación de proporciones | Categórica | 2×2 o RxC | Chi-cuadrada / test exacto | — | Independencia; recuentos esperados adecuados |
Las pruebas paramétricas, como la prueba t y el ANOVA, asumen que:
Normalidad: Los datos en cada grupo siguen una distribución normal.
Homogeneidad de varianzas: Las varianzas entre los grupos son iguales.
Es crucial verificar estos supuestos para garantizar la validez de los resultados.
Muchos de los procedimientos estadísticos, como la correlación, la regresión, la prueba t y el análisis de varianza, presuponen ciertas características de los datos.
Antes de utilizar una prueba paramétrica, debemos realizar algunas pruebas preliminares para asegurarnos de que se cumplan los supuestos de la prueba. En las situaciones en las que se violan los supuestos, se recomiendan pruebas no paramétricas .
Con tamaños de muestra suficientemente grandes (n > 30), la violación del supuesto de normalidad no debería causar mayores problemas (teorema del límite central). Esto implica que podemos ignorar la distribución de los datos y utilizar pruebas paramétricas.
Sin embargo, para ser consistentes, podemos utilizar la prueba de significancia de Shapiro-Wilk comparando la distribución de la muestra con una normal para determinar si los datos muestran o no una desviación grave de la normalidad.
La prueba t de Student estándar (que compara dos muestras independientes) y la prueba ANOVA (que compara múltiples muestras) suponen también que las muestras a comparar tienen varianzas iguales.
Si las muestras que se comparan siguen una distribución normal, entonces es posible utilizar:
Prueba F para comparar las varianzas de dos muestras
Prueba de Bartlett o prueba de Levene para comparar las varianzas de múltiples muestras.
Nota metodológica: con tamaños muestrales moderados-grandes, ciertos contrastes son relativamente robustos a desviaciones de normalidad; sin embargo, la robustez depende del equilibrio de tamaños de muestra, colas y asimetría, y de la presencia de outliers.
Muchas de las pruebas estadísticas, incluidas la correlación, la regresión, la prueba t y el análisis de varianza (ANOVA), suponen ciertas características de los datos. Requieren que los datos sigan una distribución normal o una distribución gaussiana . Estas pruebas se denominan pruebas paramétricas , porque su validez depende de la distribución de los datos.
La normalidad y las demás suposiciones realizadas en estas pruebas deben tomarse en serio para extraer interpretaciones y conclusiones fiables en nuestra investigación.
Antes de utilizar una prueba paramétrica, debemos realizar algunas pruebas preliminares para asegurarnos de que se cumplan los supuestos de la prueba.
En las situaciones en las que se violan los supuestos, se recomiendan pruebas no paramétricas .
dplyr para manipulación de datos (Se instala si
ya instalaste el paquete Tidyverse)
Además podremos usar el paquete ggpubr para una fácil visualización de datos basada en ggplot2
Trabajaremos para esta practica con unos datos integrados en R llamados ToothGrowth
ToothGrowthEste bloque utiliza el dataset base ToothGrowth para
ilustrar una ruta mínima de diagnóstico (estructura, valores faltantes,
distribución y normalidad).
paquetes <- c("dplyr", "ggplot2", "ggpubr", "dlookr", "car", "broom")
instalar <- paquetes[!vapply(paquetes, requireNamespace, logical(1), quietly = TRUE)]
if (length(instalar) > 0) install.packages(instalar)
library(dplyr)
library(ggplot2)
library(ggpubr)
library(dlookr)
library(car)
library(broom)## len supp dose
## 1 21.5 VC 2.0
## 2 17.3 VC 1.0
## 3 27.3 OJ 2.0
## 4 18.5 VC 2.0
## 5 8.2 OJ 0.5
## 6 26.4 OJ 1.0
## 7 25.8 OJ 1.0
## 8 5.2 VC 0.5
## 9 6.4 VC 0.5
## 10 9.4 OJ 0.5
## # A tibble: 3 × 6
## variables types missing_count missing_percent unique_count unique_rate
## <chr> <chr> <int> <dbl> <int> <dbl>
## 1 len numeric 0 0 43 0.717
## 2 supp factor 0 0 2 0.0333
## 3 dose numeric 0 0 3 0.05
## variables min Q1 mean median Q3 max zero minus outlier
## 1 len 4.2 13.075 18.813333 19.25 25.275 33.9 0 0 0
## 2 dose 0.5 0.500 1.166667 1.00 2.000 2.0 0 0 0
# Densidad e inspección
pp1 <- ggdensity(my_data$len, main = "Densidad de len", xlab = "len")
pp2 <- ggqqplot(my_data$len)
pp1##
## Shapiro-Wilk normality test
##
## data: my_data$len
## W = 0.96743, p-value = 0.1091
# Prueba de normalidad por grupo (Shapiro–Wilk) usando dlookr
my_data %>%
group_by(supp) %>%
normality(len)## # A tibble: 2 × 5
## variable supp statistic p_value sample
## <chr> <fct> <dbl> <dbl> <dbl>
## 1 len OJ 0.918 0.0236 30
## 2 len VC 0.966 0.428 30
Interpretación operativa: un p > 0.05 sugiere no rechazar normalidad; no obstante, el test es sensible a n. La decisión debe integrar inspección gráfica, plausibilidad del proceso generador y consecuencias inferenciales.
##
## Bartlett test of homogeneity of variances
##
## data: len by supp
## Bartlett's K-squared = 1.4217, df = 1, p-value = 0.2331
# Levene (más robusto; mediana como centro por defecto recomendado)
car::leveneTest(len ~ supp, data = my_data, center = median)## Levene's Test for Homogeneity of Variance (center = median)
## Df F value Pr(>F)
## group 1 1.2136 0.2752
## 58
El siguiente conjunto de datos es ficticio y se
utiliza para estandarizar el ejercicio. La variable
PearsonCC representa, por ejemplo, un índice de correlación
(o métrica cuantitativa continua) derivado de mediciones experimentales
en dos condiciones.
set.seed(123)
data_t <- data.frame(
Grupo = rep(c("control", "tratamiento"), each = 30),
PearsonCC = c(
rnorm(30, mean = 0.75, sd = 0.05),
rnorm(30, mean = 0.65, sd = 0.10)
)
)
dplyr::glimpse(data_t)## Rows: 60
## Columns: 2
## $ Grupo <chr> "control", "control", "control", "control", "control", "cont…
## $ PearsonCC <dbl> 0.7219762, 0.7384911, 0.8279354, 0.7535254, 0.7564644, 0.835…
data_t %>%
group_by(Grupo) %>%
summarise(
n = dplyr::n(),
media = mean(PearsonCC),
mediana = median(PearsonCC),
sd = sd(PearsonCC),
min = min(PearsonCC),
max = max(PearsonCC)
)## # A tibble: 2 × 7
## Grupo n media mediana sd min max
## <chr> <int> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 control 30 0.748 0.746 0.0491 0.652 0.839
## 2 tratamiento 30 0.668 0.655 0.0835 0.495 0.867
## # A tibble: 2 × 5
## variable Grupo statistic p_value sample
## <chr> <chr> <dbl> <dbl> <dbl>
## 1 PearsonCC control 0.979 0.797 30
## 2 PearsonCC tratamiento 0.987 0.961 30
## Levene's Test for Homogeneity of Variance (center = median)
## Df F value Pr(>F)
## group 1 5.5896 0.02144 *
## 58
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
En R, t.test() utiliza por defecto la versión de Welch
(var.equal = FALSE), preferible cuando no existe evidencia
sólida para asumir varianzas iguales.
# Welch (por defecto)
res_welch <- t.test(PearsonCC ~ Grupo, data = data_t, var.equal = FALSE)
res_welch##
## Welch Two Sample t-test
##
## data: PearsonCC by Grupo
## t = 4.5135, df = 46.881, p-value = 4.281e-05
## alternative hypothesis: true difference in means between group control and group tratamiento is not equal to 0
## 95 percent confidence interval:
## 0.0442354 0.1153866
## sample estimates:
## mean in group control mean in group tratamiento
## 0.7476448 0.6678338
# Student (varianzas iguales)
res_student <- t.test(PearsonCC ~ Grupo, data = data_t, var.equal = TRUE)
res_student##
## Two Sample t-test
##
## data: PearsonCC by Grupo
## t = 4.5135, df = 58, p-value = 3.17e-05
## alternative hypothesis: true difference in means between group control and group tratamiento is not equal to 0
## 95 percent confidence interval:
## 0.04441501 0.11520694
## sample estimates:
## mean in group control mean in group tratamiento
## 0.7476448 0.6678338
## # A tibble: 1 × 10
## estimate estimate1 estimate2 statistic p.value parameter conf.low conf.high
## <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 0.0798 0.748 0.668 4.51 0.0000428 46.9 0.0442 0.115
## # ℹ 2 more variables: method <chr>, alternative <chr>
set.seed(123)
data_anova <- data.frame(
Grupo = rep(c("Zika24h", "NS2B3Mut", "NS2B3WT"), each = 10),
PearsonCC = c(
rnorm(10, mean = 0.55, sd = 0.05),
rnorm(10, mean = 1.00, sd = 0.08),
rnorm(10, mean = 0.75, sd = 0.07)
)
)
dplyr::glimpse(data_anova)## Rows: 30
## Columns: 2
## $ Grupo <chr> "Zika24h", "Zika24h", "Zika24h", "Zika24h", "Zika24h", "Zika…
## $ PearsonCC <dbl> 0.5219762, 0.5384911, 0.6279354, 0.5535254, 0.5564644, 0.635…
data_anova %>%
group_by(Grupo) %>%
summarise(
n = dplyr::n(),
media = mean(PearsonCC),
mediana = median(PearsonCC),
sd = sd(PearsonCC)
)## # A tibble: 3 × 5
## Grupo n media mediana sd
## <chr> <int> <dbl> <dbl> <dbl>
## 1 NS2B3Mut 10 1.02 1.03 0.0830
## 2 NS2B3WT 10 0.720 0.703 0.0652
## 3 Zika24h 10 0.554 0.546 0.0477
## # A tibble: 3 × 5
## variable Grupo statistic p_value sample
## <chr> <chr> <dbl> <dbl> <dbl>
## 1 PearsonCC NS2B3Mut 0.953 0.702 10
## 2 PearsonCC NS2B3WT 0.936 0.514 10
## 3 PearsonCC Zika24h 0.924 0.389 10
## Levene's Test for Homogeneity of Variance (center = median)
## Df F value Pr(>F)
## group 2 0.5628 0.5761
## 27
## Df Sum Sq Mean Sq F value Pr(>F)
## Grupo 2 1.0998 0.5499 123 2.74e-14 ***
## Residuals 27 0.1207 0.0045
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## Tukey multiple comparisons of means
## 95% family-wise confidence level
##
## Fit: aov(formula = PearsonCC ~ Grupo, data = data_anova)
##
## $Grupo
## diff lwr upr p adj
## NS2B3WT-NS2B3Mut -0.2964089 -0.3705604 -0.22225739 0.00e+00
## Zika24h-NS2B3Mut -0.4629585 -0.5371100 -0.38880698 0.00e+00
## Zika24h-NS2B3WT -0.1665496 -0.2407011 -0.09239811 1.93e-05
# Alternativa cuando no se desea asumir varianzas iguales (Welch ANOVA)
# (se incluye como referencia operativa)
oneway.test(PearsonCC ~ Grupo, data = data_anova, var.equal = FALSE)##
## One-way analysis of means (not assuming equal variances)
##
## data: PearsonCC and Grupo
## F = 114.64, num df = 2.00, denom df = 17.13, p-value = 1.21e-10
comparaciones <- list(
c("Zika24h", "NS2B3Mut"),
c("Zika24h", "NS2B3WT"),
c("NS2B3Mut", "NS2B3WT")
)
ggboxplot(
data_anova,
x = "Grupo", y = "PearsonCC",
fill = "Grupo",
add = "jitter"
) +
stat_compare_means(method = "anova", label = "p.format") +
stat_compare_means(
comparisons = comparaciones,
method = "t.test",
label = "p.signif"
) +
labs(
title = "PearsonCC por grupo (ANOVA + comparaciones)",
x = "Grupo",
y = "PearsonCC"
)PearsonCC por una variable
cuantitativa de interés (real o simulada con fundamento) y re-ejecutar
el flujo.t.test() (prueba t; Student/Welch): https://stat.ethz.ch/R-manual/R-devel/library/stats/html/t.test.htmlaov() (ANOVA; wrapper de modelos lineales): https://stat.ethz.ch/R-manual/R-devel/library/stats/help/aov.htmlTukeyHSD() (comparaciones múltiples con control
familiar): https://stat.ethz.ch/R-manual/R-devel/library/stats/help/TukeyHSD.htmlshapiro.test() (Shapiro–Wilk): https://stat.ethz.ch/R-manual/R-devel/library/stats/help/shapiro.test.htmlbartlett.test() (Bartlett): https://stat.ethz.ch/R-manual/R-devel/library/stats/html/bartlett.test.htmlvar.test() (F para comparación de dos varianzas): https://stat.ethz.ch/R-manual/R-devel/library/stats/help/var.test.htmloneway.test() (ANOVA de Welch): https://stat.ethz.ch/R-manual/R-devel/library/stats/help/oneway.test.htmldlookr (diagnóstico/EDA; normalidad por grupo): https://cran.r-project.org/package=dlookrggpubr (gráficas “publication-ready” sobre
ggplot2): https://cran.r-project.org/package=ggpubrcar (incluye leveneTest): https://cran.r-project.org/package=carbroom (tidiado de resultados inferenciales): https://cran.r-project.org/package=broom