En el punto 2 se utilizó un modelo de regresión logística binomial, la cual es conveniente al querer una variable respuesta de tipo dicotómica, o sea, que determine si es ausente o presente, en este caso, los satélites en los cangrejos. Sin embargo, queremos proponer el modelo de regresión de Poisson para que nos presente la variable respuesta a modo de conteo de eventos, en este caso, el número total de satélites por cangrejo. A continuación, se presenta el código empleado para ajustar el modelo de Poisson al conjunto de datos.
#Cargar la base de datos
load("~/Bioestadistica/crab.RData")
#Se revisa el archivo para verificar como se llaman las variables y poder definir las variables
ls()
## [1] "crab"
head(crab)
## crab satellites weight width color spine y
## 1 1 8 3.05 28.3 2 3 1
## 2 2 0 1.55 22.5 3 3 0
## 3 3 9 2.30 26.0 1 1 1
## 4 4 0 2.10 24.8 3 3 0
## 5 5 4 2.60 26.0 3 3 1
## 6 6 0 2.10 23.8 2 3 0
#Ajustar el modelo de regresión de Poisson
modelo_poisson <- glm(satellites ~ width + weight + color + spine,
data = crab, family = poisson)
#Ver el resumen del modelo
summary(modelo_poisson)
##
## Call:
## glm(formula = satellites ~ width + weight + color + spine, family = poisson,
## data = crab)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -0.52848 0.94867 -0.557 0.57748
## width 0.02753 0.04794 0.574 0.56588
## weight 0.47246 0.16490 2.865 0.00417 **
## color -0.18493 0.06652 -2.780 0.00544 **
## spine 0.03998 0.05681 0.704 0.48160
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for poisson family taken to be 1)
##
## Null deviance: 632.79 on 172 degrees of freedom
## Residual deviance: 551.85 on 168 degrees of freedom
## AIC: 917.15
##
## Number of Fisher Scoring iterations: 6
#Exponenciar los coeficientes para interpretarlos como razones de tasas
exp(coef(modelo_poisson))
## (Intercept) width weight color spine
## 0.5895020 1.0279074 1.6039422 0.8311604 1.0407862
#Crear tabla con razones de tasas y sus intervalos de confianza
library(broom)
library(knitr)
tabla_poisson <- tidy(modelo_poisson, exponentiate = TRUE, conf.int = TRUE)
kable(tabla_poisson , digits = 3, caption = "Razones de tasas (Rate Ratios) del modelo de Poisson")
| term | estimate | std.error | statistic | p.value | conf.low | conf.high |
|---|---|---|---|---|---|---|
| (Intercept) | 0.590 | 0.949 | -0.557 | 0.577 | 0.092 | 3.807 |
| width | 1.028 | 0.048 | 0.574 | 0.566 | 0.935 | 1.128 |
| weight | 1.604 | 0.165 | 2.865 | 0.004 | 1.162 | 2.218 |
| color | 0.831 | 0.067 | -2.780 | 0.005 | 0.729 | 0.946 |
| spine | 1.041 | 0.057 | 0.704 | 0.482 | 0.932 | 1.165 |
El modelo de regresión de Poisson se ajustó para evaluar la relación entre el número de satélites (variable de conteo) y las características de los cangrejos, incluyendo el ancho, peso, color y espinas del caparazón. A diferencia del modelo logístico binomial del punto anterior (que solo considera si el evento ocurre o no), este modelo permite estudiar cómo aumenta o disminuye la tasa esperada de satélites según las variables explicativas.
El modelo de regresión logística binomial presenta ventajas en cuanto a su simplicidad y facilidad de interpretación, permite estimar la probabilidad de que un individuo presente satélites según sus características pero su limitación radica en que reduce la información sabiendo que la variable es un conteo y este solo nos permite saber un si o un no, nos quita la magnitud y se pierde detalle. Por otro lado, el de Poisson si permite recoger toda la información disponible con la cantidad de cangrejos y por consiguiente poder estimar cómo cambian las tasas de este conteo con relación a las variables explicativas. Estas razones de tasas (rate ratios) son fáciles de interpretar pero este modelo tiene la desventaja de que asume que la media y la varianza iguales por lo que si presenta una sobredispersión (la variabilidad de los datos es mayor que la esperada, o que la media) pueden haber resultados menos confiables y los errores estándar se subestiman.
# Evaluar posible sobredispersión
deviance(modelo_poisson) / df.residual(modelo_poisson)
## [1] 3.284841
Por esto mismo, y en el caso específico de los cangrejos que presenta una sobredispersión fuerte ya que la razón entre la desviancia y los grados de libertad fue mucho mayor a 1 (probando que el modelo de Poisson estándar no es muy adecuado), se puede recurrir a hacer un modelo que se ajuste mejor como el de quasi-Poisson, que permite que la varianza sea proporcional pero no necesariamente igual a la media. Esto nos dice además que el número de satélites puede variar mucho entre individuos con características similares y que puede que se vea influenciado por procesos biológicos o ambientales adicionales o a diferencias biológicas que no están explicadas por las variables medidas.
Este modelo quasi-Poisson puedes proponerse de la siguiente forma, este ajusta automáticamente la varianza para corregir la sobredispersión y los coeficientes se interpretan igual, pero los errores estándar y los valores p son más confiables.
# Ajuste del modelo quasi-Poisson
modelo_qp <- glm(satellites ~ width + weight + color + spine,
data = crab, family = quasipoisson)
# Resumen del modelo
summary(modelo_qp)
##
## Call:
## glm(formula = satellites ~ width + weight + color + spine, family = quasipoisson,
## data = crab)
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -0.52848 1.70807 -0.309 0.757
## width 0.02753 0.08632 0.319 0.750
## weight 0.47246 0.29690 1.591 0.113
## color -0.18493 0.11978 -1.544 0.124
## spine 0.03998 0.10228 0.391 0.696
##
## (Dispersion parameter for quasipoisson family taken to be 3.241788)
##
## Null deviance: 632.79 on 172 degrees of freedom
## Residual deviance: 551.85 on 168 degrees of freedom
## AIC: NA
##
## Number of Fisher Scoring iterations: 6
# Exponenciar coeficientes para interpretar como razones de tasas
exp(coef(modelo_qp))
## (Intercept) width weight color spine
## 0.5895020 1.0279074 1.6039422 0.8311604 1.0407862
# Tabla con resultados
library(broom)
library(knitr)
tabla_qp <- tidy(modelo_qp, exponentiate = TRUE, conf.int = TRUE)
kable(tabla_qp, digits = 3, caption = "Razones de tasas (Rate Ratios) del modelo quasi-Poisson")
| term | estimate | std.error | statistic | p.value | conf.low | conf.high |
|---|---|---|---|---|---|---|
| (Intercept) | 0.590 | 1.708 | -0.309 | 0.757 | 0.021 | 17.079 |
| width | 1.028 | 0.086 | 0.319 | 0.750 | 0.866 | 1.214 |
| weight | 1.604 | 0.297 | 1.591 | 0.113 | 0.900 | 2.878 |
| color | 0.831 | 0.120 | -1.544 | 0.124 | 0.654 | 1.047 |
| spine | 1.041 | 0.102 | 0.391 | 0.696 | 0.854 | 1.277 |
Ambos modelos coinciden en la dirección de los efectos, aunque el quasi-Poisson refleja de manera más realista la heterogeneidad biológica presente en los conteos de satélites, conserva la misma estructura e interpretación que la Poisson estándar, pero corrige los errores estándar y produce resultados estadísticamente más confiables. En consecuencia, este último se considera el modelo más adecuado para describir y explicar la relación entre las características de los cangrejos y la cantidad de satélites observados.