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.
Preguntas de Investigación y Pruebas Estadísticas Correspondientes
¿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.
Supuestos de las Pruebas Paramétricas
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.
Requisitos de pruebas estadísticas (supuestos)
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 .
¿Cómo evaluar la normalidad de los datos?
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.
¿Cómo evaluar la igualdad de varianzas?
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.
Prueba de normalidad en R
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 .
Instalar los paquetes R necesarios
dplyr para manipulación de datos
if (!requireNamespace("dplyr", quietly =TRUE)) install.packages("dplyr")library(dplyr)
Adjuntando el paquete: 'dplyr'
The following objects are masked from 'package:stats':
filter, lag
The following objects are masked from 'package:base':
intersect, setdiff, setequal, union
ggpubr para una fácil visualización de datos basada en ggplot2
if (!requireNamespace("ggpubr", quietly =TRUE)) install.packages("ggpubr")library(ggpubr)
Cargando paquete requerido: ggplot2
Trabajaremos para esta practica con unos datos integrados en R llamados ToothGrowth
#guardamos los datos en una variable objeto que se llamará my_datamy_data <- ToothGrowth
Verifique sus datos
Comenzamos mostrando una muestra aleatoria de 10 filas usando la función sample_n ()[en el paquete dplyr ].
Queremos probar si la variable len (longitud del diente) se distribuye normalmente.
Caso de muestras de gran tamaño
*Si el tamaño de la muestra es suficientemente grande (n > 30), podemos ignorar la distribución de los datos y utilizar pruebas paramétricas.
El teorema del límite central nos dice que no importa qué distribución tengan las cosas, la distribución de muestreo tiende a ser normal si la muestra es lo suficientemente grande (n > 30).
Sin embargo, para ser consistente, la normalidad se puede verificar mediante inspección visual [ gráficos normales (histograma) , gráfico QQ (gráfico cuantil-cuantil)] o mediante pruebas de significancia ].
Métodos visuales
El gráfico de densidad y el gráfico QQ se pueden utilizar para comprobar la normalidad visualmente.
Gráfico de densidad : el gráfico de densidad proporciona un juicio visual sobre si la distribución tiene forma de campana.
library("ggpubr")ggdensity(my_data$len, main ="Density plot of tooth length",xlab ="Tooth length")
Diagrama QQ : el diagrama QQ (o diagrama cuantil-cuantil) traza la correlación entre una muestra dada y la distribución normal. También se traza una línea de referencia de 45 grados.
library(ggpubr)ggqqplot(my_data$len)
También es posible utilizar la función qqPlot () [en el paquete car ]:
library("car")
Cargando paquete requerido: carData
Adjuntando el paquete: 'car'
The following object is masked from 'package:dplyr':
recode
qqPlot(my_data$len)
[1] 23 1
Como todos los puntos caen aproximadamente a lo largo de esta línea de referencia, podemos asumir la normalidad.
Prueba de normalidad
La inspección visual, descrita en la sección anterior, no suele ser fiable. Es posible utilizar una prueba de significación comparando la distribución de la muestra con una distribución normal para determinar si los datos muestran o no una desviación grave de la normalidad.
Existen varios métodos para realizar pruebas de normalidad, como la prueba de normalidad de Kolmogorov-Smirnov (KS) y la prueba de Shapiro-Wilk .
La hipótesis nula de estas pruebas es que “la distribución de la muestra es normal”.
Si la prueba es significativa , la distribución no es normal.
H0 = p > 0.05 : La distribución de la muestra es Normal
Ha = p < 0.05 : La distribución de la muestra NO es Normal
El método de Shapiro-Wilk es ampliamente recomendado para las pruebas de normalidad y ofrece mayor potencia que el de KS. Se basa en la correlación entre los datos y las puntuaciones normales correspondientes.
Tenga en cuenta que la prueba de normalidad es sensible al tamaño de la muestra. Las muestras pequeñas suelen pasar las pruebas de normalidad. Por lo tanto, es importante combinar la inspección visual y la prueba de significancia para tomar la decisión correcta.
La función R shapiro.test () se puede utilizar para realizar la prueba de normalidad Shapiro-Wilk para una variable (univariada):
shapiro.test(my_data$len)
Shapiro-Wilk normality test
data: my_data$len
W = 0.96743, p-value = 0.1091
A partir de los resultados, el valor p > 0,05 implica que la distribución de los datos no es significativamente diferente de la distribución normal. En otras palabras, podemos asumir la normalidad.
Podemos demostrarlo visualmente también con las figuras que se han creado arriba.
Paquete dlookr
El paquete dlookr, proporciona una herramientas para el diagnóstico, exploración y transformación de datos, incluyendo la función normality() que ejecuta la prueba de Shapiro-Wilk para evaluar la normalidad de variables numéricas.
Para ilustrar el uso del paquete dlookr en R, continuaremos utilizando el conjunto de datos ToothGrowth, que forma parte de los datasets incorporados en R. Este conjunto de datos registra la longitud del diente de cobayas en función del tipo de suplemento administrado (VC para vitamina C y OJ para jugo de naranja) y la dosis suministrada.
A continuación, se detallan los pasos para diagnosticar la calidad de los datos y evaluar la normalidad de las variables numéricas utilizando dlookr:
Instalación y carga del paquete dlookr:
Si aún no tienes instalado dlookr, puedes instalarlo desde CRAN:
if (!requireNamespace("dlookr", quietly =TRUE)) install.packages("dlookr")
Registered S3 methods overwritten by 'dlookr':
method from
plot.transform scales
print.transform scales
library(dlookr)
Adjuntando el paquete: 'dlookr'
The following object is masked from 'package:base':
transform
Carga y exploración inicial de los datos:
Cargamos el conjunto de datos ToothGrowth y realizamos una exploración básica para comprender su estructura:
# Cargar el conjunto de datos ToothGrowthdata("ToothGrowth")# Visualizar las primeras filas del conjunto de datoshead(ToothGrowth)
Esta función proporciona información sobre el tipo de datos, conteo de valores faltantes, porcentaje de valores únicos y otros detalles relevantes para cada variable.
Diagnóstico específico de variables numéricas:
Para profundizar en las variables numéricas, empleamos diagnose_numeric(), que ofrece estadísticas descriptivas detalladas:
# Diagnóstico de variables numéricasdiagnose_numeric(ToothGrowth)
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
Esta función proporciona estadísticas como la media, mediana, desviación estándar, valores mínimos y máximos, entre otros, para cada variable numérica.
Evaluación de la normalidad de las variables numéricas:
Para evaluar si las variables numéricas siguen una distribución normal, utilizamos la función normality(), que realiza la prueba de Shapiro-Wilk:
# Evaluación de la normalidad de las variables numéricasnormality(ToothGrowth)
# A tibble: 2 × 4
vars statistic p_value sample
<chr> <dbl> <dbl> <dbl>
1 len 0.967 0.109 60
2 dose 0.765 0.0000000199 60
Visualización de la distribución y normalidad de la variable len:
Para complementar el análisis, es útil visualizar la distribución de la variable len (longitud del diente) mediante un histograma y un gráfico Q-Q con :
plot_normality(ToothGrowth)
Para evaluar la normalidad de la variable len (longitud del diente) en el conjunto de datos ToothGrowth según el tipo de suplemento (supp), utilizamos las funciones normality() y plot_normality() del paquete dlookr en combinación con group_by() de dplyr.
. Evaluación de la normalidad por grupo:
El siguiente código agrupa los datos por el tipo de suplemento y luego aplica la prueba de normalidad de Shapiro-Wilk a la variable len dentro de cada grupo:
Gráfico Q-Q (Quantile-Quantile) para evaluar visualmente la normalidad.
Histograma de los datos transformados logarítmicamente (log(len)).
Histograma de los datos transformados con raíz cuadrada (sqrt(len)).
Estos gráficos permiten identificar visualmente si la distribución de len se aproxima a una distribución normal en cada grupo de supp. Si los datos no siguen una distribución normal, las transformaciones logarítmica o de raíz cuadrada pueden ayudar a normalizar la distribución.
Al utilizar normality() y plot_normality() junto con group_by(), podemos evaluar y visualizar la normalidad de una variable numérica dentro de diferentes niveles de una variable categórica, facilitando así un análisis más detallado de los datos.
Practica
Vamos a realizar un análisis estadístico con datos experimentales ficticios en R, utilizando el formato de Quarto. Este análisis incluye estadísticas descriptivas, pruebas de hipótesis y representación gráfica, incorporando resultados de significancia estadística.
Instalación y Carga de Paquetes
Primero, asegurémonos de instalar y cargar los paquetes necesarios para el análisis.
# Instalar paquetes si es necesarioif (!require(tidyverse)) install.packages("tidyverse")
Cargando paquete requerido: tidyverse
── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
✔ forcats 1.0.0 ✔ stringr 1.5.1
✔ lubridate 1.9.4 ✔ tibble 3.2.1
✔ purrr 1.0.2 ✔ tidyr 1.3.1
✔ readr 2.1.5
── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
✖ tidyr::extract() masks dlookr::extract()
✖ dplyr::filter() masks stats::filter()
✖ dplyr::lag() masks stats::lag()
✖ car::recode() masks dplyr::recode()
✖ purrr::some() masks car::some()
ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
if (!require(ggplot2)) install.packages("ggplot2")if (!require(dlookr)) install.packages("dlookr")if (!require(ggpubr)) install.packages("ggpubr")# Cargar paqueteslibrary(tidyverse)library(ggplot2)library(dlookr)library(ggpubr)
Prueba t
Creación del Conjunto de Datos
# Fijar semilla para reproducibilidadset.seed(123)# Crear el data frame para prueba tdata_t <-data.frame(Grupo =rep(c("control", "tratamiento"), each =30),PearsonCC =c(rnorm(30, mean =0.75, sd =0.05), # Valores para el grupo controlrnorm(30, mean =0.65, sd =0.1) # Valores para el grupo tratamiento ))# Visualizar las primeras filasdata_t %>%head()
Grupo PearsonCC
1 control 0.7219762
2 control 0.7384911
3 control 0.8279354
4 control 0.7535254
5 control 0.7564644
6 control 0.8357532
Explicación: - data.frame: Crea un conjunto de datos con dos columnas (Grupo y PearsonCC). - rnorm: Genera datos aleatorios con una distribución normal. - rep: Repite valores para definir los grupos. - head: Muestra las primeras filas del conjunto de datos.
# A tibble: 2 × 6
Grupo Media Mediana Desviacion Minimo Maximo
<chr> <dbl> <dbl> <dbl> <dbl> <dbl>
1 control 0.748 0.746 0.0491 0.652 0.839
2 tratamiento 0.668 0.655 0.0835 0.495 0.867
Explicación: - group_by: Agrupa los datos por el factor Grupo. - summarise: Calcula estadísticas descriptivas como media y desviación estándar.
Prueba de Normalidad
data_t %>%group_by(Grupo) %>%normality(PearsonCC)
# 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
Explicación: - normality: Evalúa si los datos siguen una distribución normal usando la prueba de Shapiro-Wilk.
Prueba t
# Prueba t para comparar grupost_test <-t.test(PearsonCC ~ Grupo, data = data_t, var.equal =TRUE)t_test
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
Explicación: - t.test: Realiza una prueba t para comparar las medias de dos grupos. - var.equal: Especifica si se asume igualdad de varianzas entre los grupos.
Representación Gráfica
ggboxplot(data_t, x ="Grupo", y ="PearsonCC", fill ="Grupo", palette ="jco") +stat_compare_means(method ="t.test", label ="p.signif") +labs(title ="Índices de Pearson por Grupo (Prueba t)",x ="Grupo",y ="Índice de Correlación de Pearson" )
Explicación: - ggboxplot: Crea un gráfico de cajas con opciones de estilo predefinidas. - stat_compare_means: Agrega valores p y niveles de significancia al gráfico usando la prueba especificada.
ANOVA
Creación del Conjunto de Datos
# Crear el data frame para ANOVAdata_anova <-data.frame(Grupo =rep(c("Zika24h", "NS2B3Mut", "NS2B3WT"), each =10),PearsonCC =c(rnorm(10, mean =0.55, sd =0.05), # Valores para Zika24hrnorm(10, mean =1.00, sd =0.08), # Valores para NS2B3Mutrnorm(10, mean =0.75, sd =0.07) # Valores para NS2B3WT ))# Visualizar las primeras filasdata_anova %>%head()
# ANOVA de una víaanova_result <-aov(PearsonCC ~ Grupo, data = data_anova)summary(anova_result)
Df Sum Sq Mean Sq F value Pr(>F)
Grupo 2 1.1034 0.5517 199.2 <2e-16 ***
Residuals 27 0.0748 0.0028
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# Post-hoc con prueba de Tukeyposthoc <-TukeyHSD(anova_result)posthoc
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.2541124 -0.3124612 -0.1957636 0
Zika24h-NS2B3Mut -0.4692315 -0.5275802 -0.4108827 0
Zika24h-NS2B3WT -0.2151191 -0.2734678 -0.1567703 0
Explicación: - aov: Realiza un análisis de varianza. - TukeyHSD: Evalúa diferencias entre pares de grupos.
Representación Gráfica
ggboxplot(data_anova, x ="Grupo", y ="PearsonCC", fill ="Grupo", palette ="jco") +stat_compare_means(method ="anova", label ="p.format") +stat_compare_means(comparisons =list(c("Zika24h", "NS2B3Mut"), c("Zika24h", "NS2B3WT"), c("NS2B3Mut", "NS2B3WT")),label ="p.signif",method ="t.test" ) +labs(title ="Índices de Pearson por Grupo (ANOVA)",x ="Grupo",y ="Índice de Correlación de Pearson" )
Explicación: - ggboxplot: Simplifica la creación de gráficos de cajas con ggplot2. - stat_compare_means(method = "anova"): Muestra el valor p del análisis ANOVA. - stat_compare_means(comparisons = ...): Agrega comparaciones específicas con la prueba t. - label = "p.signif": Muestra los niveles de significancia (p < 0.05, etc.).
Conclusión
En esta clase:
Realizamos análisis separados para pruebas t y ANOVA.
Exploramos y evaluamos la normalidad de los datos.
Aplicamos pruebas estadísticas y representamos gráficamente los resultados.
Entrega: - Replicar ambos análisis y generar gráficos con anotaciones estadísticas.
Referencias - Documentación oficial de R. - Librerías tidyverse, ggplot2, dlookr.