Comment adapter le bon modèle multiniveau à classification croisée

Aug 26 2020

. Je voudrais étudier le lien entre la mortalité (résultat et variable binaire) et la concurrence entre les hôpitaux (Predictor). La concurrence à laquelle l'hôpital est confronté est mesurée par l'indice Herfindahl-Hirschmann (HHI), qui est une variable continue. J'ai des variables au niveau du patient (âge, sexe, diagnostic, état général du patient), des variables au niveau de la zone (ville) (indice de défavorisation sociale de la ville, offre de soins dans la ville ...), des variables au niveau de l'hôpital (HHI, statut public ou privé de l'hôpital, charge de travail hospitalière). Les deux derniers groupes de variables se situent à un niveau supérieur, car je souhaite créer un modèle multiniveau croisé (les patients sont imbriqués dans les hôpitaux et les villes). Je recherche des scripts R pour implémenter le bon modèle. J'ai des centaines d'hôpitaux et des milliers de villes, donc je considérerais les hôpitaux et les effets de zone comme aléatoires.

Voici comment je compte procéder:

library lme4

model<- lmer(Death~age+sex+diagnos+patient_stat+ (1|Hospit_ID+HHI+Hospital_stat+HospCaseLoad) +
(1|City_ID+Deprivation_index,care offer),data=mydata).

Mais je ne suis pas sûr que le modèle soit bien implémenté.

Une autre préoccupation est la distance à parcourir entre la ville du patient et l'hôpital où il est traité. Si je décide de mettre cette variable au niveau 2, je ne sais pas s'il faut l'associer au niveau de l'hôpital ou de la ville, car tous les patients vivant dans la même ville ne sont pas à la même distance de leur hôpital de soins (s'ils sont traités dans des hôpitaux différents), et c'est vrai dans l'autre sens, tous les patients traités dans le même hôpital ne sont pas à la même distance de cet hôpital. Mais, tous les patients vivant dans la même ville et traités dans le même hôpital partageront la même distance de déplacement. Puis-je considérer cette variable comme étant de niveau 1? Quels sont les risques pour cela?

Dois-je suivre les mêmes étapes qu'un modèle simple pour la sélection des variables à mettre dans le modèle? Autrement dit, les analyses bivariées avec chaque variable d'ajustement (à l'exception des variables pertinentes) et le résultat? En pratique, quelles sont les conditions de validité pour vérifier un tel modèle?

Réponses

5 RobertLong Aug 25 2020 at 22:52

Première:

Dois-je suivre les mêmes étapes qu'un modèle simple pour la sélection des variables à mettre dans le modèle? Autrement dit, effectuez des analyses bivariées avec chaque variable d'ajustement (à l'exception des variables pertinentes) et le résultat?

Ce n'est jamais une bonne façon de faire une sélection de variables. Choisissez vos variables en considérant les chemins de causalité entre votre exposition principale, l'IHH et le résultat, et toutes les autres variables d'intérêt. Vous devez inclure des variables si elles sont des facteurs de confusion potentiels ou des expositions concurrentes, mais pas si elles sont des médiateurs. Voir cette réponse pour plus de détails:
Comment les DAG aident-ils à réduire le biais dans l'inférence causale?

Concernant votre modèle:

model<- lmer(Death~age+sex+diagnos+patient_stat+ (1|Hospit_ID+HHI+Hospital_stat+HospCaseLoad) + (1|City_ID+Deprivation_index,care offer),data=mydata)

Cela n'a pas beaucoup de sens. Vous ne pouvez pas avoir plusieurs variables après le |symbole dans la structure des effets aléatoires, vous ne pouvez en avoir qu'une (ou un terme d'interaction). Vous avez dit que vos variables de regroupement sont l'hôpital et la ville et que celles-ci sont croisées, donc votre modèle devrait être quelque chose comme:

Death ~ HHI + confounders + competing_exposures + (1|Hospit_ID) + (1|City_ID)

Étant donné que le résultat est binaire, vous voudrez ajuster un modèle logistique en utilisant glmeravec family=binomialnot lmer.

Revenons à la question du niveau de variation de la variable de distance parcourue: dans les modèles à effets mixtes, cela n'a pas d'importance. Le logiciel le traitera automatiquement au niveau correct.


Edit: Pour répondre à la question dans le commentaire sur la façon de dire au logiciel à quel «niveau» une variable varie.

Il n'est pas nécessaire, ni même possible d'indiquer au logiciel le niveau auquel une variable varie. Il n'a pas besoin de savoir. Nous pouvons le démontrer avec une simple simulation:

Nous simulons les patients au sein des hôpitaux, et deux effets fixes, l'un qui varie au niveau de l'hôpital et l'autre qui varie au niveau du patient et nous les simulerons avec les paramètres 10 et 5 respectivement:

> set.seed(1)
> dt <- expand.grid(hospID = 1:10, patientID = 1:20)
> dt$hosp_var <- dt$hospID/3
> dt$patient_var <- dt$patientID/3
> dt$Y <- 1 > > X <- model.matrix(~ hosp_var + patient_var, data = dt) > myFormula <- "Y ~ hosp_var + patient_var + (1 | hospID)" > > foo <- lFormula(eval(myFormula), dt) > Z <- t(as.matrix(foo$reTrms$Zt)) > > betas <- c(20, 10, 5) # fixed effects > b <- rnorm(10) # random effects > > dt$Y <- X %*% betas + Z %*% b + rnorm(nrow(dt))
> lmer(eval(myFormula), dt) %>% summary()

Fixed effects:
             Estimate Std. Error  
(Intercept)  19.97767    0.37073  
hosp_var     10.08795    0.15773
patient_var   5.01977    0.05032  

..et nous avons reculé les valeurs 10 et 5, comme prévu. Tout ce que nous avions à faire était d'inclure les variables sous forme d'effets fixes.