Una de las opciones cuando se quiere comparar una variable continua entre dos grupos consiste en comparar los resultados promedio obtenidos para cada uno. El hecho de que los valores promedio de cada grupo no sean iguales no implica que haya evidencias de una diferencia significativa. Dado que cada grupo tiene su propia variabilidad, aunque el tratamiento no sea eficaz, las medias muestrales no tienen por qué ser exactas.
Para estudiar si la diferencia observada entre las medias de dos grupos es significativa, se puede recurrir a métodos paramétricos como el basado en Z-scores o en la distribución T-student. En ambos casos, se pueden calcular tanto intervalos de confianza para saber entre que valores se encuentra la diferencia real de las medias poblacionales o test de hipótesis para determinar si la diferencia es significativa.
La distribución T-student se asemeja en gran medida a la distribución normal. Tiene como parámetros la media, la varianza y además incorpora a través de los grados de libertad una modificación que permite flexibilizar las colas en función del tamaño que tenga la muestra. A medida que se reduce el tamaño muestral, la probabilidad acumulada en las colas aumenta, siendo así menos estricta de lo cabría esperar en una distribución normal. Una distribución T-student con 30 o más grados de libertad es prácticamente igual a una distribución normal.
Las condiciones para calcular intervalos de confianza o aplicar un test de hipótesis basados en la distribución T-student son las mismas que para el teorema del límite central.
Independencia: Las observaciones tienen que ser independientes unas de las otras. Para ello el muestreo debe ser aleatorio y el tamaño de la muestra inferior al 10% de la población.
Normalidad: Las poblaciones que se comparan tienen que distribuirse de forma normal. A pesar de que la condición de normalidad recae sobre las poblaciones, normalmente no se dispone de información sobre ellas por lo que las muestras (dado que son reflejo de la población) tiene que distribuirse de forma aproximadamente normal. En caso de cierta asimetría los t-test son considerablemente robustos cuando el tamaño de las muestras es mayor o igual a 30.
Igualdad de varianza (homocedasticidad): la varianza de ambas poblaciones comparadas debe de ser igual. Tal como ocurre con la condición de normalidad, si no se dispone de información de las poblaciones, esta condición se ha de asumir a partir de las muestras. En caso de no cumplirse esta condición se puede emplear un Welch Two Sample t-test. Esta corrección se incorpora a través de los grados de libertad permitiendo compensar la diferencia de varianzas pero con el inconveniente de que pierde precisión.
El datset births del paquete openintro contiene información sobre 150 nacimientos junto con información de las madres. Se quiere determinar si existen evidencias significativas de que el peso de los recién nacidos cuyas madres fuman (f) difiere de aquéllos cuyas madres no fuman (nf).
library(openintro)
## Warning: package 'openintro' was built under R version 4.2.3
## Loading required package: airports
## Warning: package 'airports' was built under R version 4.2.3
## Loading required package: cherryblossom
## Warning: package 'cherryblossom' was built under R version 4.2.3
## Loading required package: usdata
## Warning: package 'usdata' was built under R version 4.2.3
library(tidyverse)
## Warning: package 'tidyverse' was built under R version 4.2.3
## Warning: package 'ggplot2' was built under R version 4.2.3
## Warning: package 'tibble' was built under R version 4.2.3
## Warning: package 'tidyr' was built under R version 4.2.3
## Warning: package 'readr' was built under R version 4.2.3
## Warning: package 'purrr' was built under R version 4.2.3
## Warning: package 'dplyr' was built under R version 4.2.3
## Warning: package 'forcats' was built under R version 4.2.3
## Warning: package 'lubridate' was built under R version 4.2.3
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr 1.1.2 ✔ readr 2.1.4
## ✔ forcats 1.0.0 ✔ stringr 1.5.0
## ✔ ggplot2 3.4.2 ✔ tibble 3.2.1
## ✔ lubridate 1.9.2 ✔ tidyr 1.3.0
## ✔ purrr 1.0.1
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
## ℹ Use the ]8;;http://conflicted.r-lib.org/conflicted package]8;; to force all conflicts to become errors
data("births")
head(births, 5)
## # A tibble: 5 × 9
## f_age m_age weeks premature visits gained weight sex_baby smoke
## <int> <int> <int> <fct> <int> <int> <dbl> <fct> <fct>
## 1 31 30 39 full term 13 1 6.88 male smoker
## 2 34 36 39 full term 5 35 7.69 male nonsmoker
## 3 36 35 40 full term 12 29 8.88 male nonsmoker
## 4 41 40 40 full term 13 30 9 female nonsmoker
## 5 42 37 40 full term NA 10 7.94 male nonsmoker
_**H0: La media del peso (nf) coincide con la medio del peso (f)**_
_**H1: La media del peso (nf) difiere con la media del peso (f)**_
smoker <- births %>% filter(smoke == "smoker") %>% pull(weight)
nonsmoker <- births %>% filter(smoke == "nonsmoker") %>% pull(weight)
# Descriptivos
#================================00
summary(smoker)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 1.690 6.220 6.970 6.779 7.810 9.130
summary(nonsmoker)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 1.630 6.702 7.440 7.179 8.060 10.130
# Diferencia me medias
#==================================
mean(nonsmoker)-mean(smoker)
## [1] 0.4005
El peso medio del niño, estimado, de una no fumadora superaría en 0.40 unidades al peso del niño cuando la mujer es fumadora.
Se da por hecho que se cumple, pues los datos del archivo proceden de un muestreo aleatorio simple (MAS).
ggplot(births, aes(x=weight))+
geom_histogram(aes(y=..density.., colour = smoke))+
facet_grid(.~smoke)+
theme_bw()+
theme(legend.position = "right")
## Warning: The dot-dot notation (`..density..`) was deprecated in ggplot2 3.4.0.
## ℹ Please use `after_stat(density)` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
Se puede aceptar la distribución normal para los datos.
par(mar = c(2,2,2,2))
par(mfrow = c(1,2))
qqnorm(nonsmoker, xlab="weight", ylab = "y", main = "nonsmoker", col="red")
qqline(nonsmoker)
qqnorm(smoker, xlab="x", ylab = "y", main= "smoker", col="darkgreen")
qqline(smoker)
Tenemos datos atípicos, debido a la asimetría de las distribuciones. No
se puede verificar una distribución normal.
shapiro.test(nonsmoker)
##
## Shapiro-Wilk normality test
##
## data: nonsmoker
## W = 0.92374, p-value = 2.234e-05
El p valor es 0.000 < 0.05. No se acepta la distribución norma para los datos.
shapiro.test(smoker)
##
## Shapiro-Wilk normality test
##
## data: smoker
## W = 0.89491, p-value = 0.0003276
El p valor es 0.0003 < 0.05. No se acepta la distribución normal para los datos.
Aunque no tenemos normalidad, no es recomendable emplear el test de Wilcoxon(que se usaba con datos no normales para comparación de medias de dos variables cuantitativas).
Pues el tamaño muestral > 100 y se cumple que la prueba T es robusta ante la ausencia de normalidad ante este tamaño muestral.
En este caso concreto, debemos usar la Prueba T en vez del test de Wilcoxon, pues es la prueba más potente en esta situación.
Aplicaremos la prueba de comparación de medias T Student
# Boxplots
#========================
ggplot(data=births)+
geom_boxplot(aes(x=smoke, y=weight, colour = smoke))+
theme_bw() + theme(legend.position = "right")
Los dos grupos presentan valores extremos inferiores (<5). Esto
provocaba una asimetría a la izquierda en los histogramas y por ello no
se aceptaba la hipótesis de normalidad.
Se puede decir que la altura de las cajas es similar presentando una parecida dispersión (homocedasticidad).
Dado que los diagramas comparten valores, es aceptable pensar que las medias sean similares.
library(car)
## Warning: package 'car' was built under R version 4.2.3
## Loading required package: carData
## Warning: package 'carData' was built under R version 4.2.3
##
## Attaching package: 'car'
## The following object is masked from 'package:dplyr':
##
## recode
## The following object is masked from 'package:purrr':
##
## some
## The following object is masked from 'package:openintro':
##
## densityPlot
fligner.test(weight ~ smoke, data=births)
##
## Fligner-Killeen test of homogeneity of variances
##
## data: weight by smoke
## Fligner-Killeen:med chi-squared = 0.56858, df = 1, p-value = 0.4508
El estadístico asciende a 0.56 con un p valor de 0.45 > 0.05. Tenemos evidencia empírica suficiente para aceptar la hipótesis de homocedasticidad.
leveneTest (weight ~smoke, data = births, center = "median")
## Levene's Test for Homogeneity of Variance (center = "median")
## Df F value Pr(>F)
## group 1 0.4442 0.5062
## 148
El estadístico asciende a 0.44 con un p valor de 0.5062 > 0.05. Tenemos evidencia empírica suficiente para aceptar la hipótesis de homocedasticidad.
t.test(
x = smoker,
y = nonsmoker,
alternative = "two.sided",
mu = 0,
var.equal = TRUE,
conf.level = 0.95
)
##
## Two Sample t-test
##
## data: smoker and nonsmoker
## t = -1.5517, df = 148, p-value = 0.1229
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
## -0.9105531 0.1095531
## sample estimates:
## mean of x mean of y
## 6.7790 7.1795
El estadístico del contraste asciende a -1.55 con un p valor de 0.12>0.05. Tenemos evidencia empírica suficiente para aceptar la hipótesis de igualdad de medias al 5%.
El peso de los niños es simlar independientemente de que la madre fume o no durante el embarazo.
El intervalo de confianza de la diferencia de medias poblacionales al 95% indica que el peso del niño cuando la madre no es fumadora estaría entre 0.91 unidades inferior y 0.11 unidades superior al peso medio del niño cuando la mujer sí es fumadora. Ya que los extremos del intervalo (-;+) implican que el valor cero es compatible con el intervalo de confianza. Por ello, se aceptaría la hipótesis nula de igualdad de medias poblacionales.
El peso de los niños es similar, independientmeente de que la madre fume o no durante el embarazo.
library(effsize)
## Warning: package 'effsize' was built under R version 4.2.3
cohen.d(formula = weight ~ smoke, data = births, paired = FALSE) # False al ser MÁS
##
## Cohen's d
##
## d estimate: 0.2687581 (small)
## 95 percent confidence interval:
## lower upper
## -0.07488708 0.61240332
Los límites más utilizados para clasificar el tamaño del efecto con d-Cohen son:
d ≤ 0.2 pequeño d ≥ 0.5 mediano d = 0.8 grande
El tamaño dele fecto es pequeño –> por esto se acepta la hipótesis nula de igualdad de medias (no existen diferencias significativas entre los promedios)
El intervalo de confianza es -0.07; 0.61, el valor de 0.20 o inferior es compatible en el intervalo de confianza; por eso, se indica que es menor.
sesion_info <- devtools::session_info()
dplyr::select(
tibble::as_tibble(sesion_info$packages),
c(package, loadedversion, source)
)
## # A tibble: 82 × 3
## package loadedversion source
## <chr> <chr> <chr>
## 1 abind 1.4-5 CRAN (R 4.2.0)
## 2 airports 0.1.0 CRAN (R 4.2.3)
## 3 bslib 0.4.2 CRAN (R 4.2.2)
## 4 cachem 1.0.6 CRAN (R 4.2.2)
## 5 callr 3.7.3 CRAN (R 4.2.3)
## 6 car 3.1-2 CRAN (R 4.2.3)
## 7 carData 3.0-5 CRAN (R 4.2.3)
## 8 cherryblossom 0.1.0 CRAN (R 4.2.3)
## 9 cli 3.6.0 CRAN (R 4.2.2)
## 10 colorspace 2.1-0 CRAN (R 4.2.3)
## # ℹ 72 more rows