Capítulo 5 Modelos con respuesta no normal
En este capítulo veremos los modelos estadísticos para analizar medidas repetidas cuando la variable respuesta no es normal. En concreto, nos centraremos sobretodo cuando la variable respuesta es binaria: sí/no, caso/control, evento/no evento, … No se estudiará el caso de tener eventos censurados de estudios de cohorte o de seguimiento.
En cuanto a los modelos de regresión que veremos serán:
Modelos lineales generalizados mixtos (GLMM)
Generalized Estimation Equations (GEE).
5.1 Distribución de la variable respuesta
Cuando se habla “generalizado”, se entienden toda una familia de distribuiones entre las cuales se incluyen la Binomial (o binaria), la Poisson (propia de contajes) y también la distribución Normal, entre otras.
No incluye la distribución de Weibull (propia de análisis de supervivencia). Tampoco veremos extensiones como la censura, truncamiento o inflación en el cero.
5.1.1 Distribución Binomial
\[Y \sim B(n, p), \quad P(Y=k) = \begin{pmatrix} n \\ k \end{pmatrix} p^k (1-p)^{n-k}\]
Donde \(n\) es el número de ensayos y \(p\) es la probabilidad del éxito en cada ensayo.
Cuando \(n\)=1 tenemos la distribución de Bernoulli.
La regresión logística es el modelo que para predecir respuesta Bernoulli o Binomial, donde la relación entre las variables independientes y el valor esperado de la variable respuesta es la función logística (link canónico).
\[g(E(Y))=\text{logit}(p) = \log\left(\frac{p}{1-p}\right) = \beta_0 + \sum_{k=1}^K \beta_k x_k\] donde \(g\) es la función link que en el caso de la regresión logística corresponde a la función logit.
El término \(\frac{p}{1-p}\) se conoce como el odds del evento. De aquí se deriva que \(e^{\beta_k}\) sea el Odds Ratio de la variable \(x_k\).
En la regresión logística, para obtener las predicciones o valor esperado:
\[E(Y) = p = \frac{1}{1+\text{exp} \left(-(\beta_0 + \sum_{k=1}^K \beta_k x_k)\right)}\]
5.1.2 Distribución Poisson
\[Y \sim \text{Pois}(\lambda), \quad P(Y=k) = \frac{\lambda^k e^{-\lambda}}{k!}\] Donde \(\lambda\) es la incidencia o riesgo y coincide con la esperanza.
La regresión log-lineal es el modelo asociado a la distribución de Poisson que asocia la \(\lambda\) con las variables independientes mediante el link logarítmico (link canónico).
\[\log(\lambda) = \beta_0 + \sum_{k=1}^K \beta_k x_k\] De aquí que \(e^{\beta_k}\) es el riesgo relativo de la variable \(x_k\).
La función link para la regresión log-lineal de Poisson es el función logarítmica.
Para la regresión log-lineal de Poisson, las predicciones se obtienen como:
\[E(Y) = \lambda = \exp \left( \beta_0 + \sum_{k=1}^K \beta_k x_k \right)\]
5.2 Modelos lineales generalizados mixtos
5.2.1 Ecuación
Los modelos lineales generalizados mixtos, Generalized Linear Mixed Models (GLMM), son una generalización de los modelos lineales para respuesta dentro de la família exponencial.
Cuando la respuesta no es normal la ecuación del modelo es
\[g(E(y_{ij} | x_{ijk},\color{blue}{\beta_{0i},\cdots,\beta_{Ki}})) = \beta_{0i} + \sum_{k=1}^K \beta_{ki} x_{ijk}\] Donde \(g\) es la función link.
Fíjate que la ecuación es muy similar a lo de los modelos LMM. Sin embargo las diferencias son importantes:
A la izquierda de la igualdad no hay la variable respuesta, \(Y\), sino el link del valor esperado, \(\text{link}(E(y_{ij}))\).
A la derecha del igual no aparecen los errores. Por lo tanto no habrá matriz de correlaciones de los residuos.
Como en los LMM, \(\beta_{01}\) es la constante aleatoria y \(\beta_{ki}\) son las pendientes o coeficientes aleatorios. El vector formado por la constante y pendientes aleatorios son los efectos aleatorios y también siguen una distribución normal:
\[\vec{\beta}_i = (\beta_{0i},\beta_{1i},\ldots,\beta_{Ki})^t \sim N(\vec{\beta}, \Omega), \quad \forall i\]
5.2.2 Predicciones
Existen dos tipus de predicciones que serán diferentes:
- Las predicciones en el valor esperado de los efectos aleatorios, o sea en un “individuo promedio”
- para regresión logística
\[E(y_{ij}|x_{ijk}, \color{blue}{\beta_0,\cdots,\beta_K}) = \frac{1}{1+\text{exp} \left(-(\color{blue}{\beta_{0}} + \sum_{k=1}^K \color{blue}{\beta_{k}} x_{ijk}) \right)}\] - para regresión log-lineal de Poisson
\[E(y_{ij}|x_{ijk}, \color{blue}{\beta_0,\cdots,\beta_K}) = \text{exp} \left(\color{blue}{\beta_{0}} + \sum_{k=1}^K \color{blue}{\beta_{k}} x_{ijk} \right)\]
- Las predicciones promedio o marginales
- para regresión logística
\[E(y_{ij}|x_{ijk}) = \int_{-\infty}^{-\infty} \cdots \int_{-\infty}^{-\infty} \frac{1}{1+\text{exp} \left(-(\color{blue}{\beta_{0i}} + \sum_{k=1}^K \color{blue}{\beta_{ki}} x_{ijk}) \right)} \phi(\beta_{0i},\ldots,\beta_{Ki})\]
- para regresión logística
\[E(y_{ij}|x_{ijk}) = \int_{-\infty}^{-\infty} \cdots \int_{-\infty}^{-\infty} \text{exp} \left(\color{blue}{\beta_{0i}} + \sum_{k=1}^K \color{blue}{\beta_{ki}} x_{ijk} \right) \phi(\beta_{0i},\ldots,\beta_{Ki})\]
Donde \(\phi()\) es la función de densidad multivariante de los efectos aleatorios. Esta predicción es computacionalmente mucho más difícil de calcular ya que requiere de integración múltiple y require de métodos numéricos intensivos.
Interpretación de los OR/RR
Supongamos un modelo con una sola variable independiente (sexo), y en que se considera la constante aleatoria:
\[g(E(y_{ij}|x_{i},\beta_{0i})) = \beta_{0i} + \beta_1 x_i\] donde \(x_i\) puede tomar valores de 0 (hombre) o 1 (mujer).
El Odds Ratio (OR) o el Riesgo Relativo (RR) de la variable \(x\) para la regresión logística o para la regresión log-lineal de Poisson respectivamente son
\[\text{RR ó OR} = \frac{e^{\beta_{0\color{blue}{i}} + \beta_1}}{e^{\beta_{0\color{red}{j}}}} = e^{\beta_{0i}-\beta_{0j}} e^{\beta_1}\]
Fíjate que las constante aleatoria \(\beta_{0i}\) es distinto en el numerador que en denominador ya que el individuo está anidado a la variable sexo cada individuo es de una categoría de sexo pero no puede ser de ambas.
Luego el RR o el OR depende de los efectos aleatorio de la constante. Si tomamos el valor esperado del RR o del OR:
\[E(\text{RR ó OR}) = e^{\beta_1}\cdot E\left(e^{\beta_{0i}-\beta_{0j}}\right) = e^{\beta_1}\cdot \color{blue}{e^{\sigma_{\beta_{0}}^2}} \]
ya que \(\beta_{0i}-\beta_{0j} \sim N\left(0, 2\sigma_{\beta_{0}}^2\right)\).
Por lo tanto, cuanta más variabilidad haya entre individuos (\(\sigma_{\beta_{0}}^2\)), mayor es la discrepancia entre \(e^{\beta_1}\) el OR (ó RR) marginal.
Nota que para la regresión lineal los efectos aleatorios se cancelan: \(E(y|mujeres)-E(y|hombres) = \beta_1 + E(\beta_{0i})-E(\beta_{0j}) = \beta_1 + \beta_{0}-\beta_{0} = \beta_1\).
Pero cuando el link no es lineal ésto no sucede y la interpretación del efecto marginal de una variable depende de la varianza de los efectos aleatorios.
5.2.3 Función glmer
Una de las funciones más conocidas para analizar los datos mediante modelos GLMM para respuesta no normal es la función glmer
del paquete lme4
.
Esta paquete tiene la función lmer
para ajustar modelos LMM. Su sintaxis es similar a lme
. No obstante no permite modelizar la matriz de correlaciones de los residuos.
Los argumentos que tiene la función glmer
, entre otros:
formula
: para especificar tanto los efectos fijos como los efectos aleatorios.family
: para especificar la distribución de la variable respuesta.
La diferencia importante respecto a lme
es que no hay un argumento separado para especificar los términos fijos y los aleatorios; los términos aleatorios se especifican dentro del argumento formula
:
+ (1 | sujeto)
para la constante aleatoria
+ (var1 + var2 +...+ var3 | sujeto)
Par constante y pendientes aleatorios.
Otra diferencia es que no existe el argumento correlation
, ya que no hay matriz de correlación de los residuos en estos modelos generalizados (respuesta no normal).
Para especificar que no hay correlación entre los efectos aleatorios
+ (1 | sujeto) + (0 + var1 | sujeto) + (0 + var2 | sujeto) + (0 + var3 | sujeto)
ó equivalentemente
+ (var1 + var2 + var3 || sujeto)
Otro argumento específico en esta función glmer
que no estaba en la función lme
es el argumento family
:
binomial
,binomial()
ó"binomial"
: para regresión logísticapoisson
,poisson()
ó"poisson"
: para regresión log-lineal de poisson
Al argumento weights
de la función glmer
, a diferencia de la función lme
, hay que pasarle un vector numérico con tantas componentes como observaciones. Por lo tanto, este vector contiene literlmente los pesos que se le quiere dar a cada observación, y no hay necesidad de usar ninguna función intermedia (varident
, varPower
, …) como pasaba con lme
.
glmer(..., weights = pesos, ...)
5.2.4 Función mixed_model
Una alternativa a glmer
es la función mixed_model
del paquete GLMMadaptive
.
Los argumentos mixed_model
son los mismos que lme
excepto que no tiene el argumento correlation
, ya que, al igual que pasa con glmer
no se pueden especificar la correlación de los errores.
Como en la función lme
se especifican los efectos fijos y los aleatorios con los argumentos fixed
y random
, respectivamente, y de la misma forma.
Al igual que ocurre con la función glmer
, para especificar que no hay correlación entre los efectos aleatoorios se especifica con ||
random = ~ tiempo || indiv
Comparado con la función glmer
, las implementaciones nuevas son:
método robusto para calcular los errores estándar de las estimaciones de los coeficientes fijos.
calcula el intervalo de confianza también de las varianzas de los efectos aleatorios.
estima predicciones promedio y también los Odds Ratios o Riesgos Relativos marginales
usa un método más completo de optimización.
La función mixed_model
también tiene implementado el argumento weights
. Pero es diferente de la función lme
y de la función glmer
. Para mixed_model
hay que pasarle un vector con tantas componentes como individuos. Así pues, lo que hace mixed_model
es ponderar todas las observaciones de un individuo de la misma manera (pondera los individuos en lugar de las observacioens).
5.2.5 Ejemplo
Para ilustrar la función mixed_model
y también la función glmer
, cogemos unos datos simulados (véase la vignette del package GLMMadaptive
).
Ahora no nos tendremos que preocupar de especificar bien la matriz de correlaciones de los errores, y sólo de los efectos aleatorios.
set.seed(1234)
n <- 100 # number of subjects
K <- 8 # number of measurements per subject
t_max <- 15 # maximum follow-up time
# we constuct a data frame with the design:
# everyone has a baseline measurment, and then measurements at random follow-up times
DF <- data.frame(id = rep(seq_len(n), each = K),
time = c(replicate(n, c(0, sort(runif(K - 1, 0, t_max))))),
sex = rep(gl(2, n/2, labels = c("male", "female")), each = K))
# design matrices for the fixed and random effects
X <- model.matrix(~ sex * time, data = DF)
Z <- model.matrix(~ time, data = DF)
betas <- c(-2.13, -0.25, 0.24, -0.05) # fixed effects coefficients
D11 <- 0.48 # variance of random intercepts
D22 <- 0.1 # variance of random slopes
# we simulate random effects
b <- cbind(rnorm(n, sd = sqrt(D11)), rnorm(n, sd = sqrt(D22)))
# linear predictor
eta_y <- as.vector(X %*% betas + rowSums(Z * b[DF$id, ]))
# we simulate binary longitudinal data
DF$y <- rbinom(n * K, 1, plogis(eta_y))
Uso de la función glmer
###################
library(lme4)
modelo1.glmer <- glmer(formula = y ~ sex * time + (time | id),
data = DF,
family = binomial)
summary(modelo1.glmer) # quizá no converge...
Generalized linear mixed model fit by maximum likelihood (Laplace
Approximation) [glmerMod]
Family: binomial ( logit )
Formula: y ~ sex * time + (time | id)
Data: DF
AIC BIC logLik deviance df.resid
737.4 770.2 -361.7 723.4 793
Scaled residuals:
Min 1Q Median 3Q Max
-2.4321 -0.3856 -0.2495 0.2682 5.6186
Random effects:
Groups Name Variance Std.Dev. Corr
id (Intercept) 0.30005 0.5478
time 0.05274 0.2297 1.00
Number of obs: 800, groups: id, 100
Fixed effects:
Estimate Std. Error z value Pr(>|z|)
(Intercept) -2.006281 0.277957 -7.218 5.28e-13 ***
sexfemale -1.161754 0.445313 -2.609 0.00908 **
time 0.253460 0.050181 5.051 4.40e-07 ***
sexfemale:time 0.003337 0.071668 0.047 0.96286
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Correlation of Fixed Effects:
(Intr) sexfml time
sexfemale -0.561
time -0.407 0.227
sexfemal:tm 0.256 -0.467 -0.689
convergence code: 0
boundary (singular) fit: see ?isSingular
## sin correlación entre los efectos aleatorios
modelo2.glmer <- glmer(formula = y ~ sex*time + (1 | id) + (0 + time | id),
data = DF,
family = binomial)
summary(modelo2.glmer)
Generalized linear mixed model fit by maximum likelihood (Laplace
Approximation) [glmerMod]
Family: binomial ( logit )
Formula: y ~ sex * time + (1 | id) + (0 + time | id)
Data: DF
AIC BIC logLik deviance df.resid
736.8 765.0 -362.4 724.8 794
Scaled residuals:
Min 1Q Median 3Q Max
-2.1926 -0.3595 -0.2348 0.2528 4.2005
Random effects:
Groups Name Variance Std.Dev.
id (Intercept) 0.93315 0.9660
id.1 time 0.07655 0.2767
Number of obs: 800, groups: id, 100
Fixed effects:
Estimate Std. Error z value Pr(>|z|)
(Intercept) -2.129111 0.341967 -6.226 4.78e-10 ***
sexfemale -1.180758 0.488406 -2.418 0.0156 *
time 0.268665 0.059755 4.496 6.92e-06 ***
sexfemale:time 0.001354 0.082590 0.016 0.9869
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Correlation of Fixed Effects:
(Intr) sexfml time
sexfemale -0.500
time -0.556 0.278
sexfemal:tm 0.298 -0.550 -0.668
# o bien
modelo2b.glmer <- glmer(formula = y ~ sex*time + (time || id),
data = DF,
family = binomial)
summary(modelo2b.glmer)
Generalized linear mixed model fit by maximum likelihood (Laplace
Approximation) [glmerMod]
Family: binomial ( logit )
Formula: y ~ sex * time + (time || id)
Data: DF
AIC BIC logLik deviance df.resid
736.8 765.0 -362.4 724.8 794
Scaled residuals:
Min 1Q Median 3Q Max
-2.1926 -0.3595 -0.2348 0.2528 4.2005
Random effects:
Groups Name Variance Std.Dev.
id (Intercept) 0.93315 0.9660
id.1 time 0.07655 0.2767
Number of obs: 800, groups: id, 100
Fixed effects:
Estimate Std. Error z value Pr(>|z|)
(Intercept) -2.129111 0.341967 -6.226 4.78e-10 ***
sexfemale -1.180758 0.488406 -2.418 0.0156 *
time 0.268665 0.059755 4.496 6.92e-06 ***
sexfemale:time 0.001354 0.082590 0.016 0.9869
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Correlation of Fixed Effects:
(Intr) sexfml time
sexfemale -0.500
time -0.556 0.278
sexfemal:tm 0.298 -0.550 -0.668
# sólo la constante aleatoria
modelo3.glmer <- glmer(formula = y ~ sex*time + (1 | id),
data = DF,
family = binomial)
summary(modelo3.glmer)
Generalized linear mixed model fit by maximum likelihood (Laplace
Approximation) [glmerMod]
Family: binomial ( logit )
Formula: y ~ sex * time + (1 | id)
Data: DF
AIC BIC logLik deviance df.resid
762.7 786.1 -376.4 752.7 795
Scaled residuals:
Min 1Q Median 3Q Max
-2.7974 -0.4510 -0.1705 0.3872 9.6837
Random effects:
Groups Name Variance Std.Dev.
id (Intercept) 4.038 2.009
Number of obs: 800, groups: id, 100
Fixed effects:
Estimate Std. Error z value Pr(>|z|)
(Intercept) -2.60968 0.43910 -5.943 2.79e-09 ***
sexfemale -1.31596 0.63367 -2.077 0.0378 *
time 0.28432 0.03944 7.209 5.64e-13 ***
sexfemale:time 0.03976 0.05413 0.735 0.4626
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Correlation of Fixed Effects:
(Intr) sexfml time
sexfemale -0.612
time -0.665 0.374
sexfemal:tm 0.415 -0.679 -0.654
Data: DF
Models:
modelo3.glmer: y ~ sex * time + (1 | id)
modelo2.glmer: y ~ sex * time + (1 | id) + (0 + time | id)
modelo1.glmer: y ~ sex * time + (time | id)
npar AIC BIC logLik deviance Chisq Df Pr(>Chisq)
modelo3.glmer 5 762.71 786.13 -376.36 752.71
modelo2.glmer 6 736.84 764.95 -362.42 724.84 27.8677 1 1.299e-07 ***
modelo1.glmer 7 737.42 770.22 -361.71 723.42 1.4202 1 0.2334
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
No hay diferencias entre el modelo 1 y el 2. Elegimos el modelo 2 que es más simple.
- Estimación de los efectos fijos e IC de las varianzas
(Intercept) sexfemale time sexfemale:time
-2.12911112 -1.18075771 0.26866464 0.00135373
2.5 % 97.5 %
.sig01 0.0000000 1.6396438
.sig02 0.1930528 0.3754032
(Intercept) -2.8815750 -1.5223540
sexfemale -2.1822470 -0.2373969
time 0.1511398 0.3899473
sexfemale:time -0.1662188 0.1640243
- Varianzas y covarianzas de los efectos aleatorios
Groups Name Std.Dev.
id (Intercept) 0.96600
id.1 time 0.27667
Generalized linear mixed model fit by maximum likelihood (Laplace
Approximation) [glmerMod]
Family: binomial ( logit )
Formula: y ~ sex * time + (1 | id) + (0 + time | id)
Data: DF
AIC BIC logLik deviance df.resid
736.8 765.0 -362.4 724.8 794
Scaled residuals:
Min 1Q Median 3Q Max
-2.1926 -0.3595 -0.2348 0.2528 4.2005
Random effects:
Groups Name Variance Std.Dev.
id (Intercept) 0.93315 0.9660
id.1 time 0.07655 0.2767
Number of obs: 800, groups: id, 100
Fixed effects:
Estimate Std. Error z value Pr(>|z|)
(Intercept) -2.129111 0.341967 -6.226 4.78e-10 ***
sexfemale -1.180758 0.488406 -2.418 0.0156 *
time 0.268665 0.059755 4.496 6.92e-06 ***
sexfemale:time 0.001354 0.082590 0.016 0.9869
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Correlation of Fixed Effects:
(Intr) sexfml time
sexfemale -0.500
time -0.556 0.278
sexfemal:tm 0.298 -0.550 -0.668
- Predicciones
Para las siguientes combinaciones de las variables:
time sex id
1 0 male 1
2 5 male 1
3 10 male 1
4 15 male 1
5 0 female 1
6 5 female 1
7 10 female 1
8 15 female 1
1 2 3 4 5 6 7
0.06478403 0.13742550 0.26816339 0.45733350 0.02082663 0.04693906 0.10236844
8
0.20890577
- Gráfico de predicciones
library(ggeffects)
pr.random <- ggpredict(modelo2.glmer, c("time [all]","sex"), type="random")
pr.random
# Predicted probabilities of y
# x = time
# sex = male
x | Predicted | 95% CI
--------------------------------
0.00 | 0.11 | [0.02, 0.47]
2.94 | 0.21 | [0.04, 0.65]
5.17 | 0.32 | [0.06, 0.78]
7.68 | 0.48 | [0.11, 0.88]
10.03 | 0.64 | [0.17, 0.94]
14.98 | 0.87 | [0.37, 0.99]
# sex = female
x | Predicted | 95% CI
--------------------------------
0.00 | 0.04 | [0.00, 0.23]
2.94 | 0.07 | [0.01, 0.38]
5.17 | 0.13 | [0.02, 0.52]
7.68 | 0.23 | [0.04, 0.69]
10.03 | 0.35 | [0.06, 0.82]
14.98 | 0.68 | [0.16, 0.96]
Adjusted for:
* id = 0 (population-level)
# Predicted probabilities of y
# x = time
# sex = male
x | Predicted | 95% CI
--------------------------------
0.00 | 0.11 | [0.06, 0.19]
2.94 | 0.21 | [0.13, 0.31]
5.17 | 0.32 | [0.21, 0.47]
7.68 | 0.48 | [0.30, 0.67]
10.03 | 0.64 | [0.40, 0.82]
14.98 | 0.87 | [0.60, 0.97]
# sex = female
x | Predicted | 95% CI
--------------------------------
0.00 | 0.04 | [0.02, 0.08]
2.94 | 0.07 | [0.04, 0.14]
5.17 | 0.13 | [0.07, 0.22]
7.68 | 0.23 | [0.12, 0.38]
10.03 | 0.35 | [0.18, 0.58]
14.98 | 0.68 | [0.33, 0.90]
Adjusted for:
* id = 0 (population-level)
library(gridExtra)
grid.arrange(
plot(pr.random) + ggtitle("random"),
plot(pr.fixed) + ggtitle("fixed"),
nrow=1, ncol=2)
Usando la función mixed_model
El modelo escogido usando el glmer
se ajustaría con la siguiente sintaxis:
library(GLMMadaptive)
modelo2.mixed <- mixed_model(fixed = y ~ sex*time,
random = ~ time || id,
data = DF,
family = binomial)
summary(modelo2.mixed)
Call:
mixed_model(fixed = y ~ sex * time, random = ~time || id, data = DF,
family = binomial)
Data Descriptives:
Number of Observations: 800
Number of Groups: 100
Model:
family: binomial
link: logit
Fit statistics:
log.Lik AIC BIC
-359.4719 730.9439 746.5749
Random effects covariance matrix:
StdDev
(Intercept) 0.9705
time 0.2910
Fixed effects:
Estimate Std.Err z-value p-value
(Intercept) -2.1282 0.3399 -6.2604 < 1e-04
sexfemale -1.1903 0.4937 -2.4109 0.015915
time 0.2701 0.0611 4.4183 < 1e-04
sexfemale:time 0.0031 0.0848 0.0371 0.970435
Integration:
method: adaptive Gauss-Hermite quadrature rule
quadrature points: 11
Optimization:
method: hybrid EM and quasi-Newton
converged: TRUE
- efectos condicionales e intervalos de confianza
2.5 % Estimate 97.5 %
(Intercept) -2.7944495 -2.128177211 -1.4619049
sexfemale -2.1579607 -1.190288979 -0.2226173
time 0.1502626 0.270061739 0.3898609
sexfemale:time -0.1631059 0.003143801 0.1693935
- efectos marginales e intervalos de confianza
Estimate Std.Err z-value p-value
(Intercept) -1.5846 0.2558 -6.1937 < 1e-04
sexfemale -1.0912 0.3769 -2.8957 0.0037835
time 0.1738 0.0302 5.7456 < 1e-04
sexfemale:time 0.0516 0.0434 1.1874 0.2350639
- Estimación de las varianzas de los efectos aleatorios con sus intervalos de confianza
2.5 % Estimate 97.5 %
var.(Intercept) 0.2271032 0.94180306 3.9056830
var.time 0.0448401 0.08469908 0.1599893
- Predicciones
Para las siguientes combinaciones de las variables:
time sex
1 0 male
2 5 male
3 10 male
4 15 male
5 0 female
6 5 female
7 10 female
8 15 female
1 2 3 4 5 6 7
0.17014959 0.32836686 0.53827642 0.73543836 0.06441622 0.17525201 0.39606205
8
0.66930686
1 2 3 4 5 6 7
0.10638816 0.31477945 0.63932604 0.87244465 0.03494309 0.12428771 0.35745881
8
0.68559754
y con los errores estándar (del predictor lineal).
$pred
1 2 3 4 5 6 7
0.17014959 0.32836686 0.53827642 0.73543836 0.06441622 0.17525201 0.39606205
8
0.66930686
$se.fit
1 2 3 4 5 6 7 8
0.2558341 0.1980894 0.2424415 0.3522307 0.3249897 0.2098850 0.2067862 0.3189744
$pred
1 2 3 4 5 6 7
0.10638816 0.31477945 0.63932604 0.87244465 0.03494309 0.12428771 0.35745881
8
0.68559754
$se.fit
1 2 3 4 5 6 7 8
0.3399411 0.3099182 0.5131671 0.7857693 0.4358726 0.3421853 0.4913996 0.7504220
Para el modelo ajustado con mixed_model
, las funciones summary
, confint
, predict
y marginal_coefs
, tiene el argumento sandwich=TRUE
con el que los errores estándar se calculan mediante el método sandwich (más robusto). Sin embargo, sólo funciona si el modelo tiene sólo la constante aleatoria.
5.3 Generalized Estimation Equations
5.3.1 Ecuación
Los modelo GEE (“Generalized Estimation Equations”), se basan en la primera derivada de la función de verosimilitud, y encontrar los parámetros que igualen esta derivada a cero.
Es importante remarcar que no se basan propiamente en la función de verosimilitud. Por lo tanto, no se podrán realizar contrastes de LRT para comparar modelos anidados ni obtener los índices AIC ni BIC.
En su lugar, sí que se pueden calcular los QIC (“quasi-likelihood information criteria”) para comparar modelos.
5.3.2 Función geeglm
Para ajustar los modelos GEE usaremos la función geeglm
del package geepack
, el cual es una extensión del paquete gee
. El valor añadio de geepack
es que aporta la función QIC
(“quasi-likelihood information criteria”) que permite comparar modelos para escojer entre matrices de correlación de los errores.
Las posibles matrices de correlación (“working matrices”) son:
- “independence”
- “exchangeable”
- “ar1”
- “unstructured”
- “userdefined”
El argumento weights
de la función geeglm
tiene el mismo significado y funcionamiento que en la función glmer
, o sea que es un vector de pesos para cada observación.
5.3.3 Ejemplos
Fíjate en el argumento waves
.
library(geepack)
modelo2.gee <- geeglm(formula = y ~ sex*time,
id = id,
waves = time,
corstr = "ar1",
family = binomial(),
std.err = "san.se", #default; others: 'jack', 'j1s', 'fij'
data = DF)
summary(modelo2.gee)
Call:
geeglm(formula = y ~ sex * time, family = binomial(), data = DF,
id = id, waves = time, corstr = "ar1", std.err = "san.se")
Coefficients:
Estimate Std.err Wald Pr(>|W|)
(Intercept) -1.48199 0.24155 37.643 8.50e-10 ***
sexfemale -1.10837 0.36403 9.271 0.00233 **
time 0.15915 0.02656 35.900 2.08e-09 ***
sexfemale:time 0.05526 0.03923 1.985 0.15891
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Correlation structure = ar1
Estimated Scale Parameters:
Estimate Std.err
(Intercept) 1.004 0.1171
Link = identity
Estimated Correlation Parameters:
Estimate Std.err
alpha 0.9936 0.001097
Number of clusters: 100 Maximum cluster size: 8
Analysis of 'Wald statistic' Table
Model: binomial, link: logit
Response: y
Terms added sequentially (first to last)
Df X2 P(>|Chi|)
sex 1 3.0 0.085 .
time 1 86.6 <2e-16 ***
sex:time 1 2.0 0.159
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
QIC QICu Quasi Lik CIC params QICC
918.317 919.327 -455.663 3.495 4.000 918.393
Por defecto, los errores estándard se calculan mediante el método sandwich. Otra posibilidad es usar el método jacknife.
Comparamos los resultados de los coeficientes fijos con la función glmer
, mixed_model
(modelos mixtos) y la función geeglm
(GEE):
Estimate Std. Error z value Pr(>|z|)
(Intercept) -2.129111 0.34197 -6.22606 4.783e-10
sexfemale -1.180758 0.48841 -2.41758 1.562e-02
time 0.268665 0.05976 4.49607 6.922e-06
sexfemale:time 0.001354 0.08259 0.01639 9.869e-01
Estimate Std.Err z-value p-value
(Intercept) -2.128177 0.33994 -6.26043 3.839e-10
sexfemale -1.190289 0.49372 -2.41086 1.591e-02
time 0.270062 0.06112 4.41832 9.947e-06
sexfemale:time 0.003144 0.08482 0.03706 9.704e-01
Estimate Std.Err z-value p-value
(Intercept) -1.5846 0.2558 -6.194 <1e-04
sexfemale -1.0912 0.3769 -2.896 0.0038
time 0.1738 0.0302 5.746 <1e-04
sexfemale:time 0.0516 0.0434 1.187 0.2351
Estimate Std.err Wald Pr(>|W|)
(Intercept) -1.48199 0.24155 37.643 8.496e-10
sexfemale -1.10837 0.36403 9.271 2.329e-03
time 0.15915 0.02656 35.900 2.077e-09
sexfemale:time 0.05526 0.03923 1.985 1.589e-01
5.4 Ejercicios
5.4.1 Ejercicio 1
En un estudio se quiere evaluar como se modifica un biomarcador en sangre después de aplicar un fármaco. Para ello, se seleccionan 500 individuos, y a la mitad de ellos se le aplica el fármaco (tx=2) y a la otra mitad un placebo (tx=1). Finalmente se miden los niveles del biomarcador a los 2, 4, 6 y 8 días. Como se sospecha que la edad del partipante puede influir en el resultado, ésta variable también se recoge. En muchas determinaciones el valor del biomarcador queda por debajo del límite de detección del aparato. Por lo tanto, solo se registra si el valor está por encima (biom=1) o por debajo (biom=1) del límite de detección.
Analiza los datos con el modelo más apropiado para ver si la evolución del biomarcador a lo largo de los días es el mismo para los dos grupos (tratados y control ó placebo).
5.4.2 Ejercicio 2
La base de datos “tasas.csv” contiene la información sobre el estado de hipertensión (sí/no), HTA, definido según si la tensión arterial sistólica es superior a 140 mmHg ó si la tensión arterial diastólica es superior a 90mmHg o si está tomando medicamentos para reducir la tensión arterial. La información se ha obtenido en los registros de visitas a los centros de atención primaria del sistema de salud pública de Catalunya.
Calcula la tasa específica de HTA por grupos de edad: [20-30), [30-40), [40-50), [50-60), [60-70) y [70-80).
Tomando los pesos de la población catalana para cada uno de los grupo de edad (4, 6, 6, 5, 3 y 2) calcula la tasa estandarizada de hipertensión.
La base de datos “tasas.csv” también contiene los niveles de colesterol total de las mismas personas para las mismas visitas. Repite los dos apartados anteriores pero con el colesterol.
5.4.3 Ejercicio 3
Analiza los datos toenail
disponible en el package HSAUR3
. En ellos hay la información de un estudio para comparar dos fármacos sobre la evolución de una infección.
Analiza cómo cambia el riesgo de paceder una infección moderada o severa (“moderate or severe”) según a lo largo de las visitas según el tratamiento.
Prueba de usar tanto las funciones para ajustar los modelos GLMM como para los modelos GEE.