library(readxl)
library(vcd)
library(tidyverse)
library(Hmisc)
library(ggplot2)
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.
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:
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.
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:
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.
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)
)
# 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:
Tratamiento
y Respuesta
son
independientes.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.
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:
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.
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.
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.
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
.
Glucose
a partir de la variable
BMI
.Glucose
a partir de las variables
Insulin
y BMI
.