Paquetes necesarios

library(readxl)
library(vcd)
library(tidyverse)
library(Hmisc)
library(ggplot2)

Inferencias y Pruebas de Hipótesis

La inferencia estadística es una rama de la estadística que se encarga de hacer predicciones o generalizaciones acerca de una población a partir de una muestra. Las pruebas de hipótesis son un procedimiento estadístico que se utiliza para tomar decisiones acerca de una población a partir de una muestra.

Ejemplo 1: Inferencia sobre la media de una muestra

Una técnica ambiental mide la concentración de PCB en el agua en 30 puntos de monitoreo en un río cercano a varias industrias y que desemboca en un embalse. La concentración permitida de PCB es hasta un máximo de 0.5 \(\mu g/L\) en agua de consumo humano. La técnica quiere saber si las concentraciones medidas en el río son mayores que el límite permitido, usando un intervalo de confianza de 95%.

Los datos de concentración de PCB en el agua en los 30 puntos de monitoreo son:

# Datos de concentración de PCB en el agua
conc_pcb <- read.csv("datos_pcb.csv")

La media de la concentración de PCB en el agua en los 30 puntos de monitoreo es de 0.55 \(\mu g/L\).

Las hipótesis son las siguientes:

  • Hipótesis nula (\(H_0\)): \(\mu = 0.5\) \(\mu g/L\).
  • Hipótesis alternativa (\(H_1\)): \(\mu > 0.5\) \(\mu g/L\).

Para realizar la prueba sobre la media de una muestra, se puede usar la función t.test() de R:

# Prueba de hipótesis para la media de una muestra
t1 <- t.test(conc_pcb$concPCB, mu = 0.5, alternative = "greater", conf.level = 0.95)
t1
## 
##  One Sample t-test
## 
## data:  conc_pcb$concPCB
## t = 1.8727, df = 29, p-value = 0.03561
## alternative hypothesis: true mean is greater than 0.5
## 95 percent confidence interval:
##  0.5045715       Inf
## sample estimates:
## mean of x 
## 0.5493333

Interpretación: La media de la concentración de PCB en el agua en los 30 puntos de monitoreo es de 0.5493333 \(\mu g/L\). El intervalo de confianza del 95% para la media de la concentración de PCB en el agua es $-$0.5045715, . El valor p de la prueba de hipótesis es 0.0356148.

Conclusión: Dado que el valor p de la prueba de hipótesis es menor que el nivel de significancia \(\alpha = 0.05\), se rechaza la hipótesis nula. Por lo tanto, hay suficiente evidencia para concluir que la concentración de PCB en el agua en los 30 puntos de monitoreo es mayor que el límite permitido de 0.5 $g/L.

EJERCICIO: ¿Cuál sería el resultado si se disminuye el límite aceptable de PCB en agua a 0.6 \(\mu g/L\)?

Ejemplo 2: Inferencia y prueba de hipótesis sobre la diferencia de medias de dos muestras

Un estudio de campo se realizó para comparar la masa de semillas de Thespesia populnea en dos años diferentes.

semillas <- read.csv("semillas-sample.csv")
str(semillas)
## 'data.frame':    40 obs. of  3 variables:
##  $ year   : int  2016 2016 2016 2016 2016 2016 2016 2016 2016 2016 ...
##  $ masa_g : num  0.204 0.176 0.282 0.12 0.22 0.18 0.3 0.236 0.266 0.316 ...
##  $ long_mm: num  8.3 9.7 12.2 18.9 9.9 10.1 11.6 11.5 12.6 11.3 ...

Las hipótesis son las siguientes:

  • Hipótesis nula (\(H_0\)): \(\mu_1 = \mu_2\).
  • Hipótesis alternativa (\(H_1\)): \(\mu_1 \neq \mu_2\).

Para realizar la prueba sobre la diferencia de medias de dos muestras, se puede usar la función t.test() de R:

# Prueba de hipótesis para la diferencia de medias de dos muestras
t_test_result <- t.test(masa_g ~ year, data = semillas)
t_test_result
## 
##  Welch Two Sample t-test
## 
## data:  masa_g by year
## t = 0.47319, df = 33.119, p-value = 0.6392
## alternative hypothesis: true difference in means between group 2016 and group 2017 is not equal to 0
## 95 percent confidence interval:
##  -0.03051555  0.04901555
## sample estimates:
## mean in group 2016 mean in group 2017 
##            0.23355            0.22430

Interpretación: La diferencia entre la dos medias está alrededor de 0, según lo revela el intervalo de confianza del 95% para la diferencia de medias, que es -0.0305156, 0.0490156. El valor p de la prueba de hipótesis es 0.639181.

Conclusión: Dado que el valor p de la prueba de hipótesis es mayor que el nivel de significancia \(\alpha = 0.05\), no se rechaza la hipótesis nula. Por lo tanto, no hay suficiente evidencia para concluir que hay una diferencia significativa en la masa de las semillas de Thespesia populnea en los dos años.

EJERCICIO: Realizar la prueba de hipótesis para las medias de la longitud de las semillas.

EJERCICIO: Construya gráficas de caja para comparar las distribuciones de la masa y longitud de las semillas en los dos años.


Ejemplo 3: Inferencia y prueba de hipótesis sobre la independencia de dos variables categóricas

Vamos a considerar un estudio clínico en el que se evalúa la eficacia de dos tratamientos para una enfermedad. Se registraron los resultados de los pacientes tratados con los dos tratamientos y se desea determinar si hay una asociación entre el tratamiento y la recuperación de los pacientes.

Los datos se presentan en la siguiente tabla de contingencia:

# Instalar y cargar el paquete vcd
library(vcd)

# Example data
datos2 <- data.frame(
  Tratamiento = c("Droga", "Droga", "Droga", "Placebo", "Placebo", "Placebo"),
  Respuesta = c("Mejoría", "Igual", "Empeora", "Mejoría", "Igual", "Empeora"),
  Count = c(30, 5, 5, 20, 10, 10)
)
Tabla de contingencia
# Create contingency table
contingency_table2 <- xtabs(Count ~ Tratamiento + Respuesta, data = datos2)
contingency_table2
##            Respuesta
## Tratamiento Empeora Igual Mejoría
##     Droga         5     5      30
##     Placebo      10    10      20

Las hipótesis son las siguientes:

  • Hipótesis nula (\(H_0\)): Las variables Tratamiento y Respuesta son independientes.
  • Hipótesis alternativa (\(H_1\)): Las variables Tratamiento y Respuesta no son independientes.

Vamos a realizar una prueba de Chi-cuadrado para determinar si hay una asociación significativa entre el tratamiento y la recuperación de los pacientes.

# Perform chi-squared test
chi_test2 <- chisq.test(contingency_table2)

# Observed values
observed2 <- chi_test2$observed

# Expected values
expected2 <- chi_test2$expected

# Print results
observed2
##            Respuesta
## Tratamiento Empeora Igual Mejoría
##     Droga         5     5      30
##     Placebo      10    10      20
# addmargins(expected2)
expected2
##            Respuesta
## Tratamiento Empeora Igual Mejoría
##     Droga       7.5   7.5      25
##     Placebo     7.5   7.5      25
chi_test2
## 
##  Pearson's Chi-squared test
## 
## data:  contingency_table2
## X-squared = 5.3333, df = 2, p-value = 0.06948

Interpretación: Los valores observados y esperados de la tabla de contingencia se presentan arriba. El valor p de la prueba de Chi-cuadrado es 0.0694835.

Conclusión: Dado que el valor p de la prueba de Chi-cuadrado es mayor que el nivel de significancia \(\alpha = 0.05\), no se rechaza la hipótesis nula. Por lo tanto, no hay suficiente evidencia para concluir que hay una asociación significativa entre el tratamiento y la recuperación de los pacientes.

EJERCICIO: Se encontró que las observaciones en los pacientes con placebo y mejoría estaban duplicados. Haga la corrección y recalcule la prueba.


Análisis de Varianza

El análisis de varianza (ANOVA) es una técnica estadística que se utiliza para comparar las medias de tres o más grupos. El ANOVA se puede utilizar para determinar si hay diferencias significativas entre los grupos y cuáles son los grupos que difieren entre sí.

melocactus <- read_excel("melocactus.xlsx", sheet = "2019")
str(melocactus)
## tibble [125 × 7] (S3: tbl_df/tbl/data.frame)
##  $ grupo        : chr [1:125] "N" "N" "N" "N" ...
##  $ planta_id    : num [1:125] 1 2 3 4 5 6 7 8 9 10 ...
##  $ azimuto      : num [1:125] 35 35 35 25 25 24 5 340 343 35 ...
##  $ distancia    : num [1:125] 6.22 6.22 6.22 6.67 4.53 4.53 5.22 6.06 6.54 1.59 ...
##  $ altura_planta: num [1:125] 51 24 3 20 36 8 10 32 47 9 ...
##  $ long_inflo   : num [1:125] 17 10 0 20 9 0 0 0 11 0 ...
##  $ estado       : chr [1:125] "E" "X" "E" "X" ...

Las hipótesis son las siguientes:

  • Hipótesis nula (\(H_0\)): Las medias de los grupos son iguales.
  • Hipótesis alternativa (\(H_1\)): Al menos una de las medias de los grupos es diferente.

Vamos a realizar un análisis de varianza para determinar si hay diferencias significativas en la altura de los cactus en los diferentes grupos.

# Perform ANOVA
anova_result <- aov(altura_planta ~ estado, data = melocactus)
summary(anova_result)
##              Df Sum Sq Mean Sq F value Pr(>F)  
## estado        2   1504   751.9   4.376 0.0146 *
## Residuals   122  20965   171.8                 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Interpretación: La prueba del modelo ANOVA muestra que el factor estado tiene un efecto significativo en la altura de los cactus, con un valor p menor de 0.05.

La prueba ANOVA no nos dice cuáles grupos son significativamente diferentes entre sí. Para determinar las diferencias entre los grupos, podemos realizar una prueba post-hoc, como la prueba de Tukey. Prueba Tukey para comparaciones múltiples:

# Perform Tukey test
tukey_result <- TukeyHSD(anova_result)
tukey_result
##   Tukey multiple comparisons of means
##     95% family-wise confidence level
## 
## Fit: aov(formula = altura_planta ~ estado, data = melocactus)
## 
## $estado
##          diff        lwr       upr     p adj
## S-E -8.061058 -14.777702 -1.344413 0.0142156
## X-E -3.147321 -11.195911  4.901268 0.6238126
## X-S  4.913736  -2.117051 11.944523 0.2255452
# Tukey graph
par(cex = 0.6)
plot(tukey_result)

Conclusión: Además de la prueba ANOVA, la prueba de Tukey muestra que hay diferencias significativas en la altura de los cactus entre los estados Saludable y Enfermo.

EJERCICIO: Construir un gráfico de cajas para comparar las distribuciones de la altura de los cactus en los diferentes estados.

EJERCICIO: Filtrar los valores de 0 en la longitud de la inflorescencia y realizar el ANOVA para comparar las medias de la longitud de la inflorescencia en los diferentes estados.


Análisis de Correlación y Regresión

El análisis de correlación y regresión es una técnica estadística que se utiliza para evaluar la relación entre dos o más variables. La correlación se utiliza para medir la fuerza y la dirección de la relación entre dos variables, mientras que la regresión se utiliza para predecir una variable a partir de otra.

Correlación

Vamos a realizar un análisis de correlación para evaluar la relación entre variables del estudio de diabetes y seleccionar variables para un modelo de regresión.

diabetes <- read.csv("diabetes.csv")
str(diabetes)
## 'data.frame':    768 obs. of  9 variables:
##  $ Pregnancies             : int  6 1 8 1 0 5 3 10 2 8 ...
##  $ Glucose                 : int  148 85 183 89 137 116 78 115 197 125 ...
##  $ BloodPressure           : int  72 66 64 66 40 74 50 0 70 96 ...
##  $ SkinThickness           : int  35 29 0 23 35 0 32 0 45 0 ...
##  $ Insulin                 : int  0 0 0 94 168 0 88 0 543 0 ...
##  $ BMI                     : num  33.6 26.6 23.3 28.1 43.1 25.6 31 35.3 30.5 0 ...
##  $ DiabetesPedigreeFunction: num  0.627 0.351 0.672 0.167 2.288 ...
##  $ Age                     : int  50 31 32 21 33 30 26 29 53 54 ...
##  $ Outcome                 : int  1 0 1 0 1 0 1 0 1 1 ...

Primero haremos una correlación múltiple entre todas las variables:

# Correlation matrix
correlation_matrix <- cor(diabetes)
correlation_matrix
##                          Pregnancies    Glucose BloodPressure SkinThickness
## Pregnancies               1.00000000 0.12945867    0.14128198   -0.08167177
## Glucose                   0.12945867 1.00000000    0.15258959    0.05732789
## BloodPressure             0.14128198 0.15258959    1.00000000    0.20737054
## SkinThickness            -0.08167177 0.05732789    0.20737054    1.00000000
## Insulin                  -0.07353461 0.33135711    0.08893338    0.43678257
## BMI                       0.01768309 0.22107107    0.28180529    0.39257320
## DiabetesPedigreeFunction -0.03352267 0.13733730    0.04126495    0.18392757
## Age                       0.54434123 0.26351432    0.23952795   -0.11397026
## Outcome                   0.22189815 0.46658140    0.06506836    0.07475223
##                              Insulin        BMI DiabetesPedigreeFunction
## Pregnancies              -0.07353461 0.01768309              -0.03352267
## Glucose                   0.33135711 0.22107107               0.13733730
## BloodPressure             0.08893338 0.28180529               0.04126495
## SkinThickness             0.43678257 0.39257320               0.18392757
## Insulin                   1.00000000 0.19785906               0.18507093
## BMI                       0.19785906 1.00000000               0.14064695
## DiabetesPedigreeFunction  0.18507093 0.14064695               1.00000000
## Age                      -0.04216295 0.03624187               0.03356131
## Outcome                   0.13054795 0.29269466               0.17384407
##                                  Age    Outcome
## Pregnancies               0.54434123 0.22189815
## Glucose                   0.26351432 0.46658140
## BloodPressure             0.23952795 0.06506836
## SkinThickness            -0.11397026 0.07475223
## Insulin                  -0.04216295 0.13054795
## BMI                       0.03624187 0.29269466
## DiabetesPedigreeFunction  0.03356131 0.17384407
## Age                       1.00000000 0.23835598
## Outcome                   0.23835598 1.00000000

Ahora vamos a obtener la significancia de los coeficientes de correlación.

# Calculate correlation matrix and p-values
corr_results <- rcorr(as.matrix(diabetes))
p_values <- corr_results$P
p_values[is.na(p_values)] <- 0
corr_matrix <- corr_results$r
p_values
##                           Pregnancies      Glucose BloodPressure SkinThickness
## Pregnancies              0.000000e+00 3.219491e-04  8.541846e-05  2.360795e-02
## Glucose                  3.219491e-04 0.000000e+00  2.169507e-05  1.124141e-01
## BloodPressure            8.541846e-05 2.169507e-05  0.000000e+00  6.606687e-09
## SkinThickness            2.360795e-02 1.124141e-01  6.606687e-09  0.000000e+00
## Insulin                  4.162094e-02 0.000000e+00  1.368350e-02  0.000000e+00
## BMI                      6.246376e-01 5.891412e-10  1.776357e-15  0.000000e+00
## DiabetesPedigreeFunction 3.535346e-01 1.345878e-04  2.533744e-01  2.856179e-07
## Age                      0.000000e+00 1.150191e-13  1.752065e-11  1.558278e-03
## Outcome                  5.065126e-10 0.000000e+00  7.151390e-02  3.834770e-02
##                               Insulin          BMI DiabetesPedigreeFunction
## Pregnancies              4.162094e-02 6.246376e-01             3.535346e-01
## Glucose                  0.000000e+00 5.891412e-10             1.345878e-04
## BloodPressure            1.368350e-02 1.776357e-15             2.533744e-01
## SkinThickness            0.000000e+00 0.000000e+00             2.856179e-07
## Insulin                  0.000000e+00 3.219695e-08             2.402264e-07
## BMI                      3.219695e-08 0.000000e+00             9.197970e-05
## DiabetesPedigreeFunction 2.402264e-07 9.197970e-05             0.000000e+00
## Age                      2.431822e-01 3.158330e-01             3.529797e-01
## Outcome                  2.861865e-04 0.000000e+00             1.254607e-06
##                                   Age      Outcome
## Pregnancies              0.000000e+00 5.065126e-10
## Glucose                  1.150191e-13 0.000000e+00
## BloodPressure            1.752065e-11 7.151390e-02
## SkinThickness            1.558278e-03 3.834770e-02
## Insulin                  2.431822e-01 2.861865e-04
## BMI                      3.158330e-01 0.000000e+00
## DiabetesPedigreeFunction 3.529797e-01 1.254607e-06
## Age                      0.000000e+00 2.209966e-11
## Outcome                  2.209966e-11 0.000000e+00

Interpretación: Los valores de p asociados con los coeficientes de correlación se presentan arriba. Un valor p menor que 0.05 indica una correlación significativa.

Conclusión: Hay varias correlaciones significativas entre las variables del estudio de diabetes. Por ejemplo, la correlación entre Glucose e Insulin es significativa.


Regresión Lineal

Vamos a realizar un análisis de regresión lineal para predecir la variable y a partir de la variable x.

Seleccionamos variables con alta correlación y planteamos un modelo de regresión lineal simple. Vamos a empezar con glucosa e insulina, usando la variable insulina para predecir la glucosa.

# Fit linear regression model
lm_model1 <- lm(Glucose ~ Insulin, data = diabetes)
summary(lm_model1)
## 
## Call:
## lm(formula = Glucose ~ Insulin, data = diabetes)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -115.673  -21.231   -3.559   17.441   85.441 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept) 1.136e+02  1.325e+00   85.69   <2e-16 ***
## Insulin     9.193e-02  9.458e-03    9.72   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 30.19 on 766 degrees of freedom
## Multiple R-squared:  0.1098, Adjusted R-squared:  0.1086 
## F-statistic: 94.48 on 1 and 766 DF,  p-value: < 2.2e-16
coeficientes <- coef(lm_model1)

El valor de los coeficientes son el intercepto y la pendiente de la ecuación de la recta:

\[ \text{Glucose} = \beta_0 + \beta_1 \times \text{Insulin} \]

# Gráfica de la recta de regresión con ecuación
eq <- substitute(
  italic(y) == a + b %.% italic(x),
  list(
    a = round(as.numeric(coeficientes[1]), 3),
    b = round(as.numeric(coeficientes[2]), 3)
  )
)
# plot
ggplot(diabetes, aes(x = Insulin, y = Glucose)) +
  geom_point() +
  geom_smooth(method = "lm", se = TRUE, color = "red") +
  annotate("text", x = 600, y = 50, label = as.character(as.expression(eq)), parse = TRUE) +
  labs(x = "Insulin", y = "Glucose")

Figura 1: Gráfica de dispersión de la variable Insulin vs. la variable Glucose con la recta de regresión lineal y su ecuación.

Interpretación: El modelo de regresión lineal simple muestra que la variable Insulin es un predictor significativo de la variable Glucose, con un valor p menor que 0.05. Sin embargo el coeficiente de determinación \(R^2\) es bajo, lo que indica que la variable Insulin explica una pequeña proporción de la variabilidad en la variable Glucose.

Conclusión: La variable Insulin es un predictor significativo de la variable Glucose, pero no explica la mayor parte de la variabilidad en la variable Glucose.

EJERCICIO: Realizar un modelo de regresión lineal simple para predecir la variable Glucose a partir de la variable BMI.

EJERCICIO: Realizar un modelo de regresión lineal múltiple para predecir la variable Glucose a partir de las variables Insulin y BMI.