Dr. Juan Fidel Osuna-Ramos
2024-01-23
La estadística es una rama de las matemáticas que se ocupa de la recopilación, análisis, interpretación y presentación de masas de datos numéricos.
La ciencia de datos es un campo interdisciplinario que utiliza métodos científicos, procesos, algoritmos y sistemas para extraer conocimientos y perspectivas de muchos tipos de datos, tanto estructurados como no estructurados.
En la investigación biomédica, la estadística es crucial para:
tidyverse: Colección de paquetes para ciencia de datos
(incluye ggplot2, dplyr, tidyr,
etc.).
data.table: Extensión de data.frame para
manipulación de datos de alta velocidad.
dplyrdplyr: Un Paquete
del tidyverseEl paquete dplyr es una herramienta fundamental en R
para la manipulación de datos. Forma parte del tidyverse,
un conjunto de paquetes que facilitan la ciencia de datos en R.
dplyr proporciona funciones que permiten:
dplyrdplyr es un paquete del tidyverse que
facilita la manipulación y limpieza de datos en R. Proporciona un
conjunto de herramientas coherente y fácil de usar para operaciones
comunes de manipulación de datos.
dplyrEl paquete viene predeterminado cuando instalamos el paquete
tidiverse
# Instalar dplyr si aún no está instalado
if (!requireNamespace("dplyr", quietly = TRUE)) {
install.packages("dplyr")
}
# Cargar el paquete dplyr
library(dplyr)##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
dplyrfilter(): Filtra filas basadas en condiciones.select(): Selecciona columnas específicas.mutate(): Crea o transforma columnas.summarise(): Resume datos estadísticos.group_by(): Agrupa datos por una o más variables.Tubos o Pipes (%>%): Permite
encadenar múltiples operaciones de manera legible. Cada operación se
aplica sucesivamente al resultado de la anterior. (ctr + m, linux: cmd +
m)
Funciones de Manipulación de Datos:
dplyr incluye varias funciones para transformar datos, como
filter(), select(), mutate(),
summarise(), y más.
irisLa base de datos iris es un conjunto de datos clásico en
el campo de la estadística y el aprendizaje automático. Contiene
mediciones de las características de las flores de iris de tres especies
diferentes: Setosa, Versicolor y Virginica.
## Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 1 5.1 3.5 1.4 0.2 setosa
## 2 4.9 3.0 1.4 0.2 setosa
## 3 4.7 3.2 1.3 0.2 setosa
## 4 4.6 3.1 1.5 0.2 setosa
## 5 5.0 3.6 1.4 0.2 setosa
## 6 5.4 3.9 1.7 0.4 setosa
## 7 4.6 3.4 1.4 0.3 setosa
## 8 5.0 3.4 1.5 0.2 setosa
## 9 4.4 2.9 1.4 0.2 setosa
## 10 4.9 3.1 1.5 0.1 setosa
## 11 5.4 3.7 1.5 0.2 setosa
## 12 4.8 3.4 1.6 0.2 setosa
## 13 4.8 3.0 1.4 0.1 setosa
## 14 4.3 3.0 1.1 0.1 setosa
## 15 5.8 4.0 1.2 0.2 setosa
## 16 5.7 4.4 1.5 0.4 setosa
## 17 5.4 3.9 1.3 0.4 setosa
## 18 5.1 3.5 1.4 0.3 setosa
## 19 5.7 3.8 1.7 0.3 setosa
## 20 5.1 3.8 1.5 0.3 setosa
## 21 5.4 3.4 1.7 0.2 setosa
## 22 5.1 3.7 1.5 0.4 setosa
## 23 4.6 3.6 1.0 0.2 setosa
## 24 5.1 3.3 1.7 0.5 setosa
## 25 4.8 3.4 1.9 0.2 setosa
## 26 5.0 3.0 1.6 0.2 setosa
## 27 5.0 3.4 1.6 0.4 setosa
## 28 5.2 3.5 1.5 0.2 setosa
## 29 5.2 3.4 1.4 0.2 setosa
## 30 4.7 3.2 1.6 0.2 setosa
## 31 4.8 3.1 1.6 0.2 setosa
## 32 5.4 3.4 1.5 0.4 setosa
## 33 5.2 4.1 1.5 0.1 setosa
## 34 5.5 4.2 1.4 0.2 setosa
## 35 4.9 3.1 1.5 0.2 setosa
## 36 5.0 3.2 1.2 0.2 setosa
## 37 5.5 3.5 1.3 0.2 setosa
## 38 4.9 3.6 1.4 0.1 setosa
## 39 4.4 3.0 1.3 0.2 setosa
## 40 5.1 3.4 1.5 0.2 setosa
## 41 5.0 3.5 1.3 0.3 setosa
## 42 4.5 2.3 1.3 0.3 setosa
## 43 4.4 3.2 1.3 0.2 setosa
## 44 5.0 3.5 1.6 0.6 setosa
## 45 5.1 3.8 1.9 0.4 setosa
## 46 4.8 3.0 1.4 0.3 setosa
## 47 5.1 3.8 1.6 0.2 setosa
## 48 4.6 3.2 1.4 0.2 setosa
## 49 5.3 3.7 1.5 0.2 setosa
## 50 5.0 3.3 1.4 0.2 setosa
## 51 7.0 3.2 4.7 1.4 versicolor
## 52 6.4 3.2 4.5 1.5 versicolor
## 53 6.9 3.1 4.9 1.5 versicolor
## 54 5.5 2.3 4.0 1.3 versicolor
## 55 6.5 2.8 4.6 1.5 versicolor
## 56 5.7 2.8 4.5 1.3 versicolor
## 57 6.3 3.3 4.7 1.6 versicolor
## 58 4.9 2.4 3.3 1.0 versicolor
## 59 6.6 2.9 4.6 1.3 versicolor
## 60 5.2 2.7 3.9 1.4 versicolor
## 61 5.0 2.0 3.5 1.0 versicolor
## 62 5.9 3.0 4.2 1.5 versicolor
## 63 6.0 2.2 4.0 1.0 versicolor
## 64 6.1 2.9 4.7 1.4 versicolor
## 65 5.6 2.9 3.6 1.3 versicolor
## 66 6.7 3.1 4.4 1.4 versicolor
## 67 5.6 3.0 4.5 1.5 versicolor
## 68 5.8 2.7 4.1 1.0 versicolor
## 69 6.2 2.2 4.5 1.5 versicolor
## 70 5.6 2.5 3.9 1.1 versicolor
## 71 5.9 3.2 4.8 1.8 versicolor
## 72 6.1 2.8 4.0 1.3 versicolor
## 73 6.3 2.5 4.9 1.5 versicolor
## 74 6.1 2.8 4.7 1.2 versicolor
## 75 6.4 2.9 4.3 1.3 versicolor
## 76 6.6 3.0 4.4 1.4 versicolor
## 77 6.8 2.8 4.8 1.4 versicolor
## 78 6.7 3.0 5.0 1.7 versicolor
## 79 6.0 2.9 4.5 1.5 versicolor
## 80 5.7 2.6 3.5 1.0 versicolor
## 81 5.5 2.4 3.8 1.1 versicolor
## 82 5.5 2.4 3.7 1.0 versicolor
## 83 5.8 2.7 3.9 1.2 versicolor
## 84 6.0 2.7 5.1 1.6 versicolor
## 85 5.4 3.0 4.5 1.5 versicolor
## 86 6.0 3.4 4.5 1.6 versicolor
## 87 6.7 3.1 4.7 1.5 versicolor
## 88 6.3 2.3 4.4 1.3 versicolor
## 89 5.6 3.0 4.1 1.3 versicolor
## 90 5.5 2.5 4.0 1.3 versicolor
## 91 5.5 2.6 4.4 1.2 versicolor
## 92 6.1 3.0 4.6 1.4 versicolor
## 93 5.8 2.6 4.0 1.2 versicolor
## 94 5.0 2.3 3.3 1.0 versicolor
## 95 5.6 2.7 4.2 1.3 versicolor
## 96 5.7 3.0 4.2 1.2 versicolor
## 97 5.7 2.9 4.2 1.3 versicolor
## 98 6.2 2.9 4.3 1.3 versicolor
## 99 5.1 2.5 3.0 1.1 versicolor
## 100 5.7 2.8 4.1 1.3 versicolor
## 101 6.3 3.3 6.0 2.5 virginica
## 102 5.8 2.7 5.1 1.9 virginica
## 103 7.1 3.0 5.9 2.1 virginica
## 104 6.3 2.9 5.6 1.8 virginica
## 105 6.5 3.0 5.8 2.2 virginica
## 106 7.6 3.0 6.6 2.1 virginica
## 107 4.9 2.5 4.5 1.7 virginica
## 108 7.3 2.9 6.3 1.8 virginica
## 109 6.7 2.5 5.8 1.8 virginica
## 110 7.2 3.6 6.1 2.5 virginica
## 111 6.5 3.2 5.1 2.0 virginica
## 112 6.4 2.7 5.3 1.9 virginica
## 113 6.8 3.0 5.5 2.1 virginica
## 114 5.7 2.5 5.0 2.0 virginica
## 115 5.8 2.8 5.1 2.4 virginica
## 116 6.4 3.2 5.3 2.3 virginica
## 117 6.5 3.0 5.5 1.8 virginica
## 118 7.7 3.8 6.7 2.2 virginica
## 119 7.7 2.6 6.9 2.3 virginica
## 120 6.0 2.2 5.0 1.5 virginica
## 121 6.9 3.2 5.7 2.3 virginica
## 122 5.6 2.8 4.9 2.0 virginica
## 123 7.7 2.8 6.7 2.0 virginica
## 124 6.3 2.7 4.9 1.8 virginica
## 125 6.7 3.3 5.7 2.1 virginica
## 126 7.2 3.2 6.0 1.8 virginica
## 127 6.2 2.8 4.8 1.8 virginica
## 128 6.1 3.0 4.9 1.8 virginica
## 129 6.4 2.8 5.6 2.1 virginica
## 130 7.2 3.0 5.8 1.6 virginica
## 131 7.4 2.8 6.1 1.9 virginica
## 132 7.9 3.8 6.4 2.0 virginica
## 133 6.4 2.8 5.6 2.2 virginica
## 134 6.3 2.8 5.1 1.5 virginica
## 135 6.1 2.6 5.6 1.4 virginica
## 136 7.7 3.0 6.1 2.3 virginica
## 137 6.3 3.4 5.6 2.4 virginica
## 138 6.4 3.1 5.5 1.8 virginica
## 139 6.0 3.0 4.8 1.8 virginica
## 140 6.9 3.1 5.4 2.1 virginica
## 141 6.7 3.1 5.6 2.4 virginica
## 142 6.9 3.1 5.1 2.3 virginica
## 143 5.8 2.7 5.1 1.9 virginica
## 144 6.8 3.2 5.9 2.3 virginica
## 145 6.7 3.3 5.7 2.5 virginica
## 146 6.7 3.0 5.2 2.3 virginica
## 147 6.3 2.5 5.0 1.9 virginica
## 148 6.5 3.0 5.2 2.0 virginica
## 149 6.2 3.4 5.4 2.3 virginica
## 150 5.9 3.0 5.1 1.8 virginica
Para explorar y entender mejor los datos, utilizamos funciones como
View() y str() en R.
View()View() abre una nueva ventana que muestra el
conjunto de datos en un formato de hoja de cálculo.str()La función str() proporciona una visión concisa de la
estructura interna de un objeto R.
str() revelará:## 'data.frame': 150 obs. of 5 variables:
## $ Sepal.Length: num 5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
## $ Sepal.Width : num 3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...
## $ Petal.Length: num 1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
## $ Petal.Width : num 0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...
## $ Species : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ...
Estas funciones son herramientas esenciales en el análisis de datos, ya que permiten:
La estadística es fundamental para comprender y analizar fenómenos observados en la investigación biomédica y en la ciencia de datos. Según Kaloyerou (2018).
Implica la recopilación, análisis, interpretación y presentación de datos. En ciencia de datos, como lo describe Rutkowski et al. (2019), se utilizan métodos científicos y algoritmos para extraer conocimientos de grandes conjuntos de datos.
base: Funciones básicas de estadística en R.ggplot2: Visualización de datos avanzada.dplyr: Manipulación de datos.summary()## Sepal.Length Sepal.Width Petal.Length Petal.Width
## Min. :4.300 Min. :2.000 Min. :1.000 Min. :0.100
## 1st Qu.:5.100 1st Qu.:2.800 1st Qu.:1.600 1st Qu.:0.300
## Median :5.800 Median :3.000 Median :4.350 Median :1.300
## Mean :5.843 Mean :3.057 Mean :3.758 Mean :1.199
## 3rd Qu.:6.400 3rd Qu.:3.300 3rd Qu.:5.100 3rd Qu.:1.800
## Max. :7.900 Max. :4.400 Max. :6.900 Max. :2.500
## Species
## setosa :50
## versicolor:50
## virginica :50
##
##
##
ggplot2# Cargar el paquete ggplot2
library(ggplot2)
# Gráfico de dispersión de Sepal.Length vs Sepal.Width
ggplot(iris, aes(x = Sepal.Length, y = Sepal.Width, color = Species)) +
geom_point() +
labs(title = "Dispersión de Longitud vs Ancho del Sépalo por Especie",
x = "Longitud del Sépalo",
y = "Ancho del Sépalo")La estadística en la investigación biomédica es crucial para el diseño de experimentos, análisis de datos y la interpretación de resultados. Según Stojanović et al. (2018), la elección adecuada de pruebas estadísticas influye en la interpretación de los datos en la investigación biomédica.
rstatix en Rrstatix proporciona un conjunto de funciones para
realizar análisis estadísticos básicos y avanzados en R. Es
especialmente útil en el contexto de la investigación biomédica y
experimental.
irisUtilizaremos para calcular medidas de tendencia central de la base de
datos iris.
rstatix##
## Attaching package: 'rstatix'
## The following object is masked from 'package:stats':
##
## filter
Calculada usando la función de rstatix
get_summary_stats()
Se usa type = para indicar que estadigrafo queremos
encontrar
## # A tibble: 1 × 3
## variable n mean
## <fct> <dbl> <dbl>
## 1 Sepal.Length 150 5.84
Calculada usando la función de rstatix
get_summary_stats()
Calculamos mediana con función
get_summary_stats
## # A tibble: 1 × 3
## variable n median
## <fct> <dbl> <dbl>
## 1 Sepal.Width 150 3
## setosa
## 1
La estadística descriptiva resume y describe las características de un conjunto de datos. Incluye medidas de tendencia central y de variabilidad.
iris# Cálculo de desviación estándar de Sepal.Length
desviacion_std_sepal_length <- iris %>%
get_summary_stats(Sepal.Length, type = "mean_sd")
desviacion_std_sepal_length## # A tibble: 1 × 4
## variable n mean sd
## <fct> <dbl> <dbl> <dbl>
## 1 Sepal.Length 150 5.84 0.828
La estadística inferencial utiliza muestras de datos para hacer inferencias sobre una población más grande.
Las pruebas de hipótesis evalúan si una afirmación sobre una población es estadísticamente significativa.
La estadística descriptiva e inferencial son fundamentales en la
investigación biomédica para entender y analizar datos. El paquete
rstatix en R facilita la realización de estos análisis.
La Exploración de Datos (EDA) es un enfoque analítico para comprender las características y patrones subyacentes en los datos. Incluye técnicas de visualización y estadísticas descriptivas.
gtsummary para
EDAEl paquete gtsummary en R proporciona una forma sencilla
de crear tablas descriptivas elegantes y listas para publicación.
## #Uighur
gtsummary# Crear una tabla descriptiva de la base de datos iris
tabla_descriptiva <- iris %>%
tbl_summary(by = Species,
type = all_continuous() ~ "continuous2",
missing = "no") %>%
add_n() %>%
add_p()tbl_summary():Esta función crea tablas descriptivas sumarizando cada variable en el conjunto de datos. Las tablas resultantes incluyen estadísticas como medias para variables continuas y frecuencias para variables categóricas.
by = Species:Este argumento divide los datos por la variable Species. Esto significa que las estadísticas se calcularán por separado para cada especie de iris en el conjunto de datos.
type = all_continuous() \~ "continuous2":Aquí se especifica cómo se deben resumir las variables. all_continuous() ~ “continuous2” indica que todas las variables continuas deben ser resumidas con el estilo “continuous2”, que generalmente incluye la media y la desviación estándar.
missing = "no":Este argumento indica que no se incluirán estadísticas para los datos faltantes en el resumen.
add_n():Añade una fila al principio de la tabla que muestra el número total de observaciones en cada grupo (por especie en este caso).
add_p():Añade una columna con el valor p para pruebas de hipótesis, comparando las distribuciones de cada variable entre los grupos especificados en el argumento by.
https://www.danieldsjoberg.com/gtsummary/
gtsummary para
EDALa EDA es un paso crucial en el análisis de datos, especialmente en la investigación biomédica.
Herramientas como gtsummary y ggplot2 en R facilitan este proceso, permitiendo una comprensión más profunda de los datos.
La visualización es un componente clave de la EDA.
ggplot2 es un paquete de R ampliamente utilizado para este
propósito.
Para que tbl_summary funcione correctamente los datos
deben estar en un formato adecuado:
Los datos no deben tener estructuras complejas como listas o matrices dentro de las columnas.
El contraste de hipótesis es un método estadístico que permite tomar decisiones sobre una población basándose en los resultados obtenidos de una muestra. ### Pruebas de Hipótesis en R
R ofrece varias funciones para realizar pruebas de hipótesis, incluyendo pruebas t, pruebas de chi-cuadrado, y ANOVA.
Vamos a comparar las medias de la longitud del sépalo
(Sepal.Length) entre dos especies de iris.
# Cargar la base de datos iris si aún no está cargada
data(iris)
# Visualizar las primeras filas de la base de datos iris
head(iris)## Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 1 5.1 3.5 1.4 0.2 setosa
## 2 4.9 3.0 1.4 0.2 setosa
## 3 4.7 3.2 1.3 0.2 setosa
## 4 4.6 3.1 1.5 0.2 setosa
## 5 5.0 3.6 1.4 0.2 setosa
## 6 5.4 3.9 1.7 0.4 setosa
# Realizar una prueba t para comparar la media de Sepal.Length entre setosa versicolor
t_test_result <- t.test(Sepal.Length ~ Species, data = subset(iris, Species %in% c("setosa", "versicolor")))Este código realiza una prueba t para comparar las medias de Sepal.Length entre las especies setosa y versicolor.
##
## Welch Two Sample t-test
##
## data: Sepal.Length by Species
## t = -10.521, df = 86.538, p-value < 2.2e-16
## alternative hypothesis: true difference in means between group setosa and group versicolor is not equal to 0
## 95 percent confidence interval:
## -1.1057074 -0.7542926
## sample estimates:
## mean in group setosa mean in group versicolor
## 5.006 5.936
Los intervalos de confianza proporcionan un rango estimado de valores dentro del cual se espera que se encuentre el verdadero valor del parámetro de la población.
#Calcular intervalo de confianza para la media de Sepal.Length en setosa
ci_setosa<- t.test(Sepal.Length~ Species == "setosa", data = iris)$conf.int
# Mostrar intervalo de confianza
ci_setosa## [1] 1.092102 1.419898
## attr(,"conf.level")
## [1] 0.95
Este código calcula el intervalo de confianza al 95% para la media de Sepal.Length en la especie setosa.
En la investigación biomédica, el valor p y los intervalos de confianza son herramientas estadísticas fundamentales. Sin embargo, su interpretación y aplicación adecuada son esenciales para extraer conclusiones válidas.
El valor p indica la probabilidad de obtener un resultado al menos tan extremo como el observado, asumiendo que la hipótesis nula es cierta. Un valor p bajo sugiere que es improbable que el efecto observado se deba al azar.
Los intervalos de confianza ofrecen un rango de valores dentro del cual se espera que se encuentre el verdadero valor del parámetro de la población.
Según Abbott et al. (2017), los valores p son omnipresentes en la investigación en educación en profesiones de la salud, pero los intervalos de confianza rara vez se informan. Esto sugiere una dependencia excesiva en el valor p para inferencias estadísticas.
Lyu et al. (2020) destacan que tanto los valores p como los intervalos de confianza son a menudo malinterpretados en diferentes campos, incluyendo la investigación biomédica, lo que subraya la necesidad de una mejor formación estadística.
La elección entre el valor p y los intervalos de confianza depende de los objetivos del estudio y de la naturaleza de los datos. Mientras que el valor p puede indicar la significancia estadística, los intervalos de confianza proporcionan una comprensión más rica de la magnitud y la relevancia del efecto observado.
Escenario: Un investigador está probando la eficacia de un nuevo fármaco para reducir la presión arterial. Quiere saber si hay una diferencia estadísticamente significativa en la reducción de la presión arterial entre el grupo que recibe el fármaco y el grupo de control.
Escenario: Un equipo de investigación está estudiando el efecto de una dieta especial en los niveles de colesterol. Además de saber si el cambio es estadísticamente significativo, están interesados en la magnitud y la precisión de la reducción del colesterol.
Aplicación del Valor P: Se realiza una prueba t de Student para comparar las medias de reducción de la presión arterial entre los dos grupos. Un valor p menor a 0.05 indicaría que la diferencia observada no es probable que sea debido al azar.
t_test_result <- t.test(presion_arterial ~ grupo, data = datos_estudio)
Supongamos que el resultado de la prueba t para comparar las medias de reducción de la presión arterial entre el grupo que recibe el fármaco y el grupo de control arroja un valor p de 0.03.
Interpretación: Un valor p de 0.03 significa que hay una probabilidad del 3% de observar una diferencia tan grande o mayor en las medias de reducción de la presión arterial entre los dos grupos, asumiendo que no hay ninguna diferencia real (es decir, la hipótesis nula es cierta). Dado que este valor p es menor que el umbral convencional de 0.05, podemos rechazar la hipótesis nula y concluir que hay una diferencia estadísticamente significativa en la reducción de la presión arterial entre los grupos.
Aplicación de Intervalos de Confianza: Se calcula el intervalo de confianza al 95% para la media de la reducción del colesterol. Este intervalo proporcionará un rango dentro del cual se espera que se encuentre la verdadera media de la reducción del colesterol en la población.
ci_result <- t.test(colesterol ~ dieta, data = datos_dieta)$conf.int
Imaginemos que el intervalo de confianza al 95% para la media de la reducción del colesterol es de 10 mg/dL a 20 mg/dL.
Interpretación: Este intervalo de confianza indica que, con un 95% de confianza, la verdadera media de la reducción del colesterol en la población se encuentra entre 10 mg/dL y 20 mg/dL. Esto no solo muestra que la dieta parece tener un efecto en la reducción del colesterol, sino que también proporciona una estimación de la magnitud de este efecto. A diferencia del valor p, el intervalo de confianza nos da una idea de la relevancia clínica y la precisión de nuestra estimación.
Valor P: Nos indica si una diferencia o efecto observado es estadísticamente significativo, pero no nos dice nada sobre la magnitud de este efecto.
Intervalos de Confianza: Nos proporcionan información sobre la magnitud del efecto y la precisión de nuestras estimaciones, lo cual es crucial para evaluar la relevancia clínica o práctica de los resultados.
La elección entre el valor p y los intervalos de confianza debe basarse en los objetivos específicos del estudio y en la naturaleza de la pregunta de investigación. Mientras que el valor p es útil para pruebas de significancia, los intervalos de confianza proporcionan una comprensión más amplia del efecto y su variabilidad.
La estadística inferencial en R permite realizar pruebas de hipótesis y calcular intervalos de confianza, proporcionando herramientas esenciales para la toma de decisiones basadas en el análisis de datos en investigación biomédica.
Este módulo cubre las pruebas paramétricas y no paramétricas en R.
Las pruebas paramétricas asumen que los datos siguen una distribución específica, generalmente la normal. Las pruebas no paramétricas, en cambio, no requieren dicha suposición.
La prueba t se utiliza para comparar las medias de una o dos muestras.
t.test(x = datos$variable, mu = valor_esperado)
t.test(datos$variable1, datos$variable2)
Estas pruebas no paramétricas se usan cuando no se pueden cumplir los supuestos para una prueba t.
wilcox.test(datos$variable1, datos$variable2, paired = FALSE)
wilcox.test(datos$variable1, datos$variable2, paired = TRUE)
ANOVA se utiliza para comparar las medias entre tres o más grupos.
anova_test(datos, dv = variable_dependiente, between = variable_independiente)
anova_test(datos, dv = variable_dependiente, between = c(variable1, variable2))
Comparaciones Múltiples, Kruskal-Wallis y Prueba de Friedman Después de ANOVA, las comparaciones múltiples identifican dónde están las diferencias estadísticamente significativas.
tukey_hsd(anova_modelo)
kruskal_test(datos, dv = variable_dependiente, between = variable_independiente)
friedman_test(datos, dv = variable_dependiente, within = variable_independiente)
Fórmula: No hay una fórmula simplificada para la prueba Mann-Whitney. Se basa en rangos y no asume normalidad.
Usaremos bases de datos como iris para ejemplificar
pruebas estadísticas.
Fórmula: \[ t = \frac{\bar{x} - \mu}{s / \sqrt{n}} \] Donde ({x}) es la media de la muestra, () es la media poblacional, (s) es la desviación estándar de la muestra, y (n) es el tamaño de la muestra.
Ejemplo en R:
##
## One Sample t-test
##
## data: iris$Sepal.Length
## t = 0.64092, df = 149, p-value = 0.5226
## alternative hypothesis: true mean is not equal to 5.8
## 95 percent confidence interval:
## 5.709732 5.976934
## sample estimates:
## mean of x
## 5.843333
Fórmula:
\[ t = \frac{\bar{x} - \mu}{s / \sqrt{n}} \]
Donde ({x}) es la media de la muestra, () es la media poblacional, (s) es la desviación estándar de la muestra, y (n) es el tamaño de la muestra.
# Comparando dos especies en la base de datos iris
t.test(iris$Sepal.Length[iris$Species == "setosa"],
iris$Sepal.Length[iris$Species == "versicolor"])##
## Welch Two Sample t-test
##
## data: iris$Sepal.Length[iris$Species == "setosa"] and iris$Sepal.Length[iris$Species == "versicolor"]
## t = -10.521, df = 86.538, p-value < 2.2e-16
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
## -1.1057074 -0.7542926
## sample estimates:
## mean of x mean of y
## 5.006 5.936
Fórmula: No hay una fórmula simplificada para la prueba Mann-Whitney. Se basa en rangos y no asume normalidad.
Ejemplo en R:
# Prueba Mann-Whitney entre dos especies
wilcox.test(iris$Sepal.Length[iris$Species == "setosa"],
iris$Sepal.Length[iris$Species == "virginica"],
exact = FALSE)##
## Wilcoxon rank sum test with continuity correction
##
## data: iris$Sepal.Length[iris$Species == "setosa"] and iris$Sepal.Length[iris$Species == "virginica"]
## W = 38.5, p-value < 2.2e-16
## alternative hypothesis: true location shift is not equal to 0
# Crear los vectores de datos para cada grupo
grupo1 <- c(129, 111, 140, 139, 144, 120, 131, 129, 131, 154, 119, 138, 142, 110, 140)
grupo2 <- c(138, 120, 137, 154, 148, 122, 131, 128, 140, 145, 131, 120, 144, 129, 141)
# Combinar los vectores en un dataframe
datos <- data.frame(grupo1, grupo2)
# Realizar la prueba t de dos muestras
resultado_prueba_t <- t.test(datos$grupo1, datos$grupo2)
#print(resultado_prueba_t)## [1] 15
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 110.0 124.5 131.0 131.8 140.0 154.0
## [1] 15
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 120.0 128.5 137.0 135.2 142.5 154.0
## grupo1 grupo2
## 1 129 138
## 2 111 120
## 3 140 137
## 4 139 154
## 5 144 148
## 6 120 122
## 7 131 131
## 8 129 128
## 9 131 140
## 10 154 145
## 11 119 131
## 12 138 120
## 13 142 144
## 14 110 129
## 15 140 141
## grupo1 grupo2
## Min. :110.0 Min. :120.0
## 1st Qu.:124.5 1st Qu.:128.5
## Median :131.0 Median :137.0
## Mean :131.8 Mean :135.2
## 3rd Qu.:140.0 3rd Qu.:142.5
## Max. :154.0 Max. :154.0
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ forcats 1.0.0 ✔ stringr 1.5.1
## ✔ lubridate 1.9.3 ✔ tibble 3.2.1
## ✔ purrr 1.0.2 ✔ tidyr 1.3.0
## ✔ readr 2.1.4
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ rstatix::filter() masks dplyr::filter(), stats::filter()
## ✖ dplyr::lag() masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
## 'data.frame': 15 obs. of 2 variables:
## $ grupo1: num 129 111 140 139 144 120 131 129 131 154 ...
## $ grupo2: num 138 120 137 154 148 122 131 128 140 145 ...
| Characteristic | N = 151 |
|---|---|
| grupo1 | 131 (16) |
| grupo2 | 137 (14) |
| 1 Median (IQR) | |
datos2 <- datos %>% gather(.,key = grupos, value = Valores,
1:2) #le indico qué columnas juntar
datos2## grupos Valores
## 1 grupo1 129
## 2 grupo1 111
## 3 grupo1 140
## 4 grupo1 139
## 5 grupo1 144
## 6 grupo1 120
## 7 grupo1 131
## 8 grupo1 129
## 9 grupo1 131
## 10 grupo1 154
## 11 grupo1 119
## 12 grupo1 138
## 13 grupo1 142
## 14 grupo1 110
## 15 grupo1 140
## 16 grupo2 138
## 17 grupo2 120
## 18 grupo2 137
## 19 grupo2 154
## 20 grupo2 148
## 21 grupo2 122
## 22 grupo2 131
## 23 grupo2 128
## 24 grupo2 140
## 25 grupo2 145
## 26 grupo2 131
## 27 grupo2 120
## 28 grupo2 144
## 29 grupo2 129
## 30 grupo2 141
datos2 %>% tbl_summary(by= grupos, statistic = all_continuous()~"{median} ({sd})") %>% add_p(test = everything() ~ "t.test")| Characteristic | grupo1, N = 151 | grupo2, N = 151 | p-value2 |
|---|---|---|---|
| Valores | 131 (13) | 137 (10) | 0.4 |
| 1 Median (SD) | |||
| 2 Welch Two Sample t-test | |||
## # A tibble: 1 × 3
## variable statistic p
## <chr> <dbl> <dbl>
## 1 grupo1 0.952 0.550
## # A tibble: 1 × 3
## variable statistic p
## <chr> <dbl> <dbl>
## 1 grupo2 0.961 0.715
Interpretación de los Resultados de la Prueba F Valor F Calculado: Este es el ratio de las varianzas de los dos grupos que estás comparando. Un valor F cercano a 1 sugiere que las varianzas son similares, mientras que un valor significativamente mayor o menor que 1 indica diferencias en las varianzas.
Valor p:
p < 0.05: Si el valor p es menor que el nivel de significancia (generalmente establecido en 0.05), hay evidencia estadísticamente significativa para rechazar la hipótesis nula, lo que indica que las varianzas de los dos grupos son diferentes (heterocedasticidad).
p ≥ 0.05: Si el valor p es mayor o igual que el nivel de significancia, no hay suficiente evidencia para rechazar la hipótesis nula, y se asume que las varianzas de los dos grupos son iguales (homocedasticidad). Intervalo de Confianza para la Razón de las Varianzas: La prueba F también proporciona un intervalo de confianza para la razón de las varianzas. Si este intervalo incluye el valor 1, es otra indicación de que las varianzas pueden ser iguales.
Usamos la función var.test
# Realizar la prueba F para igualdad de varianzas
resultado_prueba_F <- var.test(grupo1, grupo2)
# Mostrar los resultados
print(resultado_prueba_F)##
## F test to compare two variances
##
## data: grupo1 and grupo2
## F = 1.4459, num df = 14, denom df = 14, p-value = 0.4992
## alternative hypothesis: true ratio of variances is not equal to 1
## 95 percent confidence interval:
## 0.4854433 4.3068448
## sample estimates:
## ratio of variances
## 1.445935
Basado en el valor p y el intervalo de confianza, no hay evidencia suficiente para afirmar que existe una diferencia significativa en las varianzas entre los dos grupos. Por lo tanto, se puede asumir homocedasticidad (igualdad de varianzas) para análisis posteriores que asuman esta condición.
Por lo tanto usamos la función var.equal y el boleano
TRUE
##
## Paired t-test
##
## data: datos$grupo1 and datos$grupo2
## t = -1.3994, df = 14, p-value = 0.1835
## alternative hypothesis: true mean difference is not equal to 0
## 95 percent confidence interval:
## -8.61093 1.81093
## sample estimates:
## mean difference
## -3.4
Se desea probar si hay diferencias en el nivel de estrés entre enfermeras de terapia intensiva ( X1 ) y de las de urgencias (X2) , el nivel de estrés se midió en una escala de 0 = nada, 1 = bajo, 2 = medio, 3 = alto, 4 = muy alto.
## [1] 7
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.000 1.000 1.000 1.429 2.000 3.000
## [1] 7
## Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
## 1.000 2.000 2.000 2.333 2.750 4.000 1
library(tidyverse)
library(rstatix)
data2 <- data.frame(x1, x2)
#normalidad
#rstatistix
data2 %>% shapiro_test(x1)## # A tibble: 1 × 3
## variable statistic p
## <chr> <dbl> <dbl>
## 1 x1 0.937 0.609
## # A tibble: 1 × 3
## variable statistic p
## <chr> <dbl> <dbl>
## 1 x2 0.915 0.473
##
## Wilcoxon rank sum test with continuity correction
##
## data: x1 and x2
## W = 11, p-value = 0.1559
## alternative hypothesis: true location shift is not equal to 0
El análisis de varianza (ANOVA) es una técnica estadística utilizada para comparar las medias de tres o más grupos.
Fórmula: \[ F = \frac{\text{Varianza entre grupos}}{\text{Varianza dentro de los grupos}} \]
La función para R es: aov
# Código para ANOVA de una vía en R
library(tidyverse)
data(iris)
res.aov <- aov(Sepal.Length ~ Species, data = iris)
summary(res.aov)## Df Sum Sq Mean Sq F value Pr(>F)
## Species 2 63.21 31.606 119.3 <2e-16 ***
## Residuals 147 38.96 0.265
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
El ANOVA de una vía se utiliza para comparar las medias de tres o más grupos independientes, bajo la hipótesis de que todas las medias son iguales. Las hipótesis para esta prueba son:
Trabajaremos con la base de datos PlantGrowth
# Cargamos los datos
data("PlantGrowth")
my_data <- PlantGrowth
# Realizamos el ANOVA
res.aov <- aov(weight ~ group, data = my_data)
summary(res.aov)## Df Sum Sq Mean Sq F value Pr(>F)
## group 2 3.766 1.8832 4.846 0.0159 *
## Residuals 27 10.492 0.3886
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Antes de interpretar los resultados del ANOVA, debemos verificar las asunciones de normalidad y homogeneidad de varianzas.
Homogeneidad de Varianzas La homogeneidad de las varianzas puede ser probada con la prueba de Levene Bartlett en R, que es sensible a la normalidad:
##
## Bartlett test of homogeneity of variances
##
## data: weight by group
## Bartlett's K-squared = 2.8786, df = 2, p-value = 0.2371
## Loading required package: carData
##
## Attaching package: 'car'
## The following object is masked from 'package:purrr':
##
## some
## The following object is masked from 'package:dplyr':
##
## recode
## Levene's Test for Homogeneity of Variance (center = median)
## Df F value Pr(>F)
## group 2 1.1192 0.3412
## 27
Un valor p mayor a 0.05 en estas pruebas indica que no hay evidencia suficiente para rechazar la hipótesis de que las varianzas son iguales.
la función clave es plot , para visualizarlos de manera
visual
Gráficos de residuos vs. valores ajustados: Verifican la homogeneidad de las varianzas.
cómo interpretar este gráfico:
Dispersión de los Residuos: Buscamos una dispersión aleatoria y constante de los residuos a lo largo de los valores ajustados. Si los residuos se dispersan de manera uniforme a través de los valores ajustados sin formar patrones distintos, esto sugiere que la varianza de los errores es constante (homocedasticidad).
Línea Horizontal en Cero: La línea roja horizontal en el gráfico representa el valor residual cero. Idealmente, los residuos deben estar simétricamente distribuidos alrededor de esta línea a lo largo de todo el rango de valores ajustados, sin ningún patrón claro.
Puntos Fuera de lo Común (Outliers): Los números que aparecen en el gráfico señalan observaciones que podrían ser outliers. En este caso, los puntos 17 y 15 podrían ser outliers porque están más alejados de la línea central en comparación con los otros puntos.
Para verificar la normalidad de los residuos en R, se utiliza la prueba de Shapiro-Wilk, que es adecuada para muestras pequeñas. La función en R es:
Los gráficos Q-Q y los gráficos de residuos versus valores ajustados también son herramientas visuales útiles para evaluar los supuestos de normalidad y homocedasticidad:
Un valor p mayor a 0.05 sugiere que no hay evidencia suficiente para rechazar la hipótesis de normalidad.
Conceptos Teóricos La prueba de Tukey HSD compara todas las diferencias posibles entre las medias y es adecuada cuando todas las muestras tienen el mismo tamaño. Es una prueba conservadora que controla la tasa de error familiar (Family-Wise Error Rate, FWER).
## Tukey multiple comparisons of means
## 95% family-wise confidence level
##
## Fit: aov(formula = weight ~ group, data = my_data)
##
## $group
## diff lwr upr p adj
## trt1-ctrl -0.371 -1.0622161 0.3202161 0.3908711
## trt2-ctrl 0.494 -0.1972161 1.1852161 0.1979960
## trt2-trt1 0.865 0.1737839 1.5562161 0.0120064
Los resultados mostrarán pares de grupos con su diferencia de medias, intervalos de confianza y valores p ajustados. Las diferencias con un valor p ajustado menor a 0.05 son consideradas estadísticamente significativas.
Además de la prueba de Tukey, hay varias otras pruebas post hoc que pueden ser adecuadas dependiendo de las circunstancias, como la prueba de Bonferroni, la prueba de Dunnett, la prueba de Scheffé, entre otras.
Existen otras pruebas post-hoc que pueden ser útiles dependiendo de la situación:
##
## Pairwise comparisons using t tests with pooled SD
##
## data: PlantGrowth$weight and PlantGrowth$group
##
## ctrl trt1
## trt1 0.583 -
## trt2 0.263 0.013
##
## P value adjustment method: bonferroni
La prueba de Bonferroni ajusta los valores p dividiendo el nivel de significancia por el número de comparaciones. Es una prueba muy conservadora.
## Loading required package: mvtnorm
## Loading required package: survival
## Loading required package: TH.data
## Loading required package: MASS
##
## Attaching package: 'MASS'
## The following object is masked from 'package:gtsummary':
##
## select
## The following object is masked from 'package:rstatix':
##
## select
## The following object is masked from 'package:dplyr':
##
## select
##
## Attaching package: 'TH.data'
## The following object is masked from 'package:MASS':
##
## geyser
##
## Simultaneous Tests for General Linear Hypotheses
##
## Multiple Comparisons of Means: Dunnett Contrasts
##
##
## Fit: aov(formula = weight ~ group, data = my_data)
##
## Linear Hypotheses:
## Estimate Std. Error t value Pr(>|t|)
## trt1 - ctrl == 0 -0.3710 0.2788 -1.331 0.323
## trt2 - ctrl == 0 0.4940 0.2788 1.772 0.153
## (Adjusted p values reported -- single-step method)
La prueba de Dunnett compara todos los tratamientos contra un control. Es útil cuando se tiene un grupo de control claro y se desea comparar todos los otros tratamientos con él.
Recuerda que la elección de la prueba post-hoc depende del diseño de tu estudio y de las preguntas específicas de investigación que estás tratando de responder.
Utilizada para entender si hay una interacción entre dos factores independientes.
# Código para ANOVA de dos vías en R
res.aov2 <- aov(Sepal.Length ~ Species + Sepal.Width, data = iris)
summary(res.aov2)## Df Sum Sq Mean Sq F value Pr(>F)
## Species 2 63.21 31.606 164.8 < 2e-16 ***
## Sepal.Width 1 10.95 10.953 57.1 4.19e-12 ***
## Residuals 146 28.00 0.192
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Conceptos Teóricos El ANOVA de dos vías extiende el de una vía al incluir dos factores independientes. Se utiliza para evaluar si hay una interacción entre los dos factores en su efecto sobre la variable dependiente continua. Además, permite evaluar la interacción entre estos dos factores, es decir, si el efecto de un factor depende del nivel del otro factor.
En el ANOVA de dos vías, se plantean tres conjuntos de hipótesis:
Utilizaremos el conjunto de datos ToothGrowth, incluido
en R, que contiene datos sobre el crecimiento del diente en cobayas en
función de la dosis de vitamina C y el tipo de entrega de la vitamina
(VC o OJ).
## len supp dose
## 1 4.2 VC 0.5
## 2 11.5 VC 0.5
## 3 7.3 VC 0.5
## 4 5.8 VC 0.5
## 5 6.4 VC 0.5
## 6 10.0 VC 0.5
# Realizamos ANOVA de dos vías
res.aov2 <- aov(len ~ supp + dose + supp:dose, data = ToothGrowth)
summary(res.aov2)## Df Sum Sq Mean Sq F value Pr(>F)
## supp 1 205.4 205.4 12.317 0.000894 ***
## dose 1 2224.3 2224.3 133.415 < 2e-16 ***
## supp:dose 1 88.9 88.9 5.333 0.024631 *
## Residuals 56 933.6 16.7
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Para que los resultados del ANOVA de dos vías sean válidos, se deben cumplir varios supuestos, incluyendo normalidad y homogeneidad de varianzas.
Normalidad: Se puede comprobar mediante una gráfica Q-Q de los residuales o con pruebas formales como la prueba de Shapiro-Wilk.
Homogeneidad de Varianzas: Puede evaluarse con el test de Levene o el test de Bartlett. En R, estas pruebas se pueden realizar de la siguiente manera:
##
## Shapiro-Wilk normality test
##
## data: residuals(res.aov2)
## W = 0.98162, p-value = 0.5008
# Verificamos la homogeneidad de las varianzas
library(car)
leveneTest(len ~ supp, data = ToothGrowth)## Levene's Test for Homogeneity of Variance (center = median)
## Df F value Pr(>F)
## group 1 1.2136 0.2752
## 58
Si se violan estos supuestos, se pueden considerar transformaciones de datos o utilizar técnicas estadísticas alternativas, como modelos lineales mixtos o métodos no paramétricos.
La salida de summary(res.aov2) proporcionará los
valores p para cada factor y su interacción. Un valor p bajo (<0.05
generalmente) indica que hay una diferencia estadísticamente
significativa para ese factor o interacción.
Es importante interpretar la interacción antes de los efectos principales, ya que una interacción significativa sugiere que el efecto de un factor depende del nivel del otro factor.
Las pruebas post hoc en el contexto del ANOVA se utilizan para realizar comparaciones múltiples entre grupos después de que un test ANOVA ha indicado diferencias estadísticamente significativas entre las medias de los grupos.
Estas pruebas son esenciales para identificar qué pares específicos de grupos difieren entre sí. Algunas de las pruebas post hoc más comunes incluyen:
Prueba de Tukey (HSD - Honest Significant Difference): Es una de las pruebas post hoc más comunes utilizadas después del ANOVA. Controla la tasa de error familiar y es adecuada cuando todas las comparaciones son de interés y los tamaños de muestra son iguales o similares.
Prueba de Bonferroni: Ajusta los p-valores para múltiples comparaciones. Es más conservadora que la prueba de Tukey y es útil cuando se realizan pocas comparaciones planificadas.
Prueba de Dunnett: Se utiliza para comparar todos los tratamientos con un control.
Test de Scheffé: Proporciona un procedimiento más flexible pero más conservador que el de Tukey. Es útil cuando se exploran comparaciones no planificadas o cuando los tamaños de los grupos son muy desiguales.
Volvamos al conjunto de datos ToothGrowth y realicemos una prueba post hoc de Tukey para investigar las diferencias entre los grupos.
# ANOVA de dos vías
res.aov2 <- aov(len ~ supp + dose + supp:dose, data = ToothGrowth)
# Prueba de Tukey
TukeyHSD(res.aov2, "supp")## Tukey multiple comparisons of means
## 95% family-wise confidence level
##
## Fit: aov(formula = len ~ supp + dose + supp:dose, data = ToothGrowth)
##
## $supp
## diff lwr upr p adj
## VC-OJ -3.7 -5.811942 -1.588058 0.0008936
La salida de la prueba de Tukey incluirá diferencias de medias estimadas entre grupos, intervalos de confianza y p-valores ajustados. Un p-valor (<0.05) ajustado bajo indica una diferencia significativa entre ese par específico de grupos.
Otras Pruebas Post Hoc Si necesitas utilizar otro tipo de pruebas
post hoc, R ofrece funciones específicas o paquetes para realizarlas.
Por ejemplo, para la prueba de Bonferroni puedes usar la función
pairwise.t.test con el argumento
p.adjust.method = "bonferroni".
##
## Pairwise comparisons using t tests with pooled SD
##
## data: ToothGrowth$len and ToothGrowth$supp
##
## OJ
## VC 0.06
##
## P value adjustment method: bonferroni
Comparación Realizada: La prueba ha comparado las medias de la longitud del crecimiento del diente entre los grupos que recibieron los suplementos VC y OJ.
P-Valor de 0.06: Esto indica que, tras ajustar por múltiples comparaciones usando el método de Bonferroni, el p-valor obtenido para la diferencia en las medias entre los grupos VC y OJ es de 0.06.
Un p-valor de 0.06, que es mayor que el umbral convencional de 0.05, sugiere que no hay una diferencia estadísticamente significativa en la longitud del crecimiento del diente entre los grupos que recibieron VC y los que recibieron OJ. Cercano al Umbral: Sin embargo, el valor es relativamente cercano al umbral de 0.05, lo que puede indicar una tendencia o una diferencia que podría ser explorada más a fondo en estudios adicionales o con un mayor tamaño de muestra.
Este método es conocido por ser conservador, lo que significa que tiende a reducir el riesgo de encontrar falsos positivos (error de Tipo I). Este ajuste es especialmente importante en análisis con múltiples comparaciones, ya que el riesgo de encontrar diferencias significativas por casualidad aumenta con el número de comparaciones realizadas.
La prueba utiliza una desviación estándar agrupada, lo que implica que se asume que las varianzas en los grupos comparados son iguales.
En resumen, el ANOVA de dos vías en R permite investigar no solo los efectos individuales de dos factores independientes, sino también cómo estos factores interactúan entre sí en relación con una variable dependiente continua. La verificación de supuestos es crucial para la validez de las conclusiones del ANOVA.
No es común en conjuntos de datos pequeños debido a la complejidad en la interpretación de interacciones.