L’analyse intersectionnelle multi-niveaux de l’hétérogénéité individuelle et de la précision discriminante, intersectional multilevel analysis of individual heterogeneity and discriminatory accuracy en anglais, appelée également MAIHDA, intersectional MAIHDA ou I-MAIHDA, est une approche innovante permettant d’étudier les inégalités en matière de santé, de maladie, mais également d’un point de vue psychosocial ou socio-économique. L’I-MAIHDA est une application de l’approche MAIHDA au sens large, qui permet de quantifier les inégalités dans un cadre théorique intersectionnel. Cette approche a gagné en popularité ces dernières années. En 2026, un package dédié, MAIHDA, est en développement actif. Pour une présentation plus générale et un tutoriel méthodologique, la référence est l’article de Clare Evans et ses collaborateurs (Evans et al. 2024), dont la lecture est fortement conseillée.
Le terme MAIHDA désigne l’utilisation de modèles multi-niveaux pour analyser les inégalités entre les différentes couches sociales, construits à partir de tableaux croisés multidimensionnels et multicatégoriels regroupant des identités, des conditions ou d’autres facteurs. Lorsqu’elle est appliquée dans un cadre intersectionnel, cette approche est plus précisément appelée I-MAIHDA et sert à analyser les inégalités en fonction de facteurs tels que le genre, la classe, le statut socio-économique ou la race.
Le terme de strates sociales pour désigner des sous-groupes analytiques, tels que certaines intersections entre genre, origine ethnique et classe sociale, est ici privilégié car il évoque l’adoption provisoire d’étiquettes à des fins d’analyses stratifiées, tout en restant sceptique vis-à-vis du terme groupe et en évitant de conceptualiser ces étiquettes comme monolithiques, immuables ou rigides. Dans le cadre d’une analyse MAIHDA, les inégalités entre strates ne sont pas seulement évaluées en termes de différences entre les moyennes des strates, mais également en déterminant la part de l’hétérogénéité totale du résultat qui se situe au niveau des strates.
52.1 Préparation des données et analyses préalables
Pour ce chapitre, nous allons utiliser le jeu données questionr::fecondite qui correspond à des données simulant une enquête démographique et de santé réalisée en Afrique sub-saharienne. Plus précisément, nous allons fusionner les données de la table femmes et de la table menages (pour récupérer le niveau de niveau de richesse du ménage). Notre indicateur d’intérêt sera le fait d’avoir déjà un réalisé un test de dépistage du VIH (variable test), dans la population des femmes âgées de 15 à 49 ans.
Pour constituer nos strates, nous allons considérer trois dimensions : le niveau d’études, le milieu de résidence et le niveau de richesse du ménage. Lorsque nous allons regarder plus loin les effets intersectionnels, les strates seront construites en croisant ces trois variables. Plus il y a de modalités, plus le nombre de strates sera élevé et plus nous aurons des strates avec très peu d’effectifs. C’est pourquoi nous allons regrouper les niveaux d’éducation secondaire et supérieur car il y a, dans cet échantillon, peu de femmes avec un niveau d’étude supérieur. De même, nous allons recoder les niveaux de richesses en seulement trois modalités.
En termes de préparation des données, nous allons également créer une variable groupe d’âges qui nous servira plus loin de variable d’ajustement et considérer la variable région que nous pourrons introduire comme variable de contexte. Enfin, nous allons supprimer les valeurs manquantes concernant notre variable d’intérêt test.
library(tidyverse)
── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
✔ dplyr 1.2.1 ✔ readr 2.2.0
✔ forcats 1.0.1 ✔ stringr 1.6.0
✔ ggplot2 4.0.3 ✔ tibble 3.3.1
✔ lubridate 1.9.5 ✔ tidyr 1.3.2
✔ purrr 1.2.2
── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
✖ dplyr::filter() masks stats::filter()
✖ dplyr::lag() masks stats::lag()
ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
On peut aisément estimer en amont le nombre et la taille des strates que l’on obtiendra en fonction des variables intersectionnelles retenues, en ayant recours à la fonction MAIHDA::make_strata() permettant de créer des strates (et en supprimant les éventuelles strates vides) et en utilisant la fonction guideR::tbl_strata_info() permettant de réaliser un tableau descriptif de la taille des strates.
L’analyse descriptive met en évidence, en analyse univariable, des effets marqués de nos trois variables intersectionnelles, l’accès au dépistage du VIH étant plus élevé pour les femmes éduquées, les femmes plus riches et celles vivant en milieu urbain. De même, nous voyons une influence du contexte avec des variations importantes selon les régions, et des effets d’âges significatifs.
Dans le cadre d’une analyse classique, nous pourrions poursuivre avec une régression logistique binaire multivariable (cf. Chapitre 23).
mod <-glm( test ~ educ + richesse + milieu,data = femmes,family = binomial)mod |> ggstats::ggcoef_table(exponentiate =TRUE)
Si l’on observe des effets additifs significatifs du milieu de résidence et du niveau d’éducation, les effets du niveau de richesse disparaissent une fois le modèle ajusté sur les deux autres variables. Cela se confirme en réalisant une Anova et en regardant les contributions des différentes variables (cf. Chapitre 29).
mod |> guideR::tbl_contributions(lang ="fr")
Registered S3 method overwritten by 'car':
method from
na.action.merMod lme4
Déviance
Contribution totale
(pseudo-R2 semi-partiel)
Contribution partielle
(pseudo-R2 partiel)
Contribution relative
p-valeur
Niveau d'éducation
42,9
1,6%
1,7%
26,5%
<0,001
Niveau de vie (quintiles)
1,8
0,1%
0,1%
1,1%
0,4
Milieu de résidence
24,6
0,9%
1,0%
15,2%
<0,001
Déviance totale (modèle nul) : 2 635,6
Déviance résiduelle (modèle complet) : 2 473,9
Pseudo R2 de McFadden : 6,1%
On peut déjà noter un pseudo R2 relativement faible (inférieure à 10%), suggérant qu’une part important des variations de recours au dépistage ne sont pas expliquées par nos trois variables. La p-valeur associée aux niveaux de richesse confirme que la variable n’a pas d’effet significatif dans notre modèle multivariable.
Une analyse de dominance (cf. Chapitre 29) permet de nuancer un peu plus ces premiers résultats.
mod |> guideR::tbl_dominance(lang ="fr")
Contribution totale moyenne
Contribution relative
Niveau d'éducation
2,5%
40,5%
Niveau de vie (quintiles)
1,3%
20,9%
Milieu de résidence
2,4%
38,6%
Total
6,1%
100,0%
Pseudo R2 de McFadden : 6,1%
En effet, le niveau de richesse est assez fortement corrélé au niveau d’éducation et au milieu de résidence. De fait, si l’analyse de dominance confirme l’importance du niveau d’éducation et du milieu de résidence (autour de 40% de contribution relative), la contribution du niveau de richesse n’est pas négligeable (autour 20%).
52.2 À la recherche des interactions
Il est important de faire la distinction entre le terme interaction dans le cadre théorique de l’intersectionnalité et le terme interaction utilisé en analyse de régression. Dans les modèles de régression, un effet d’interaction (cf. Chapitre 27) rend compte de la mesure dans laquelle deux (ou plusieurs) expositions sociales distinctes se combinent pour créer des schémas d’inégalité dans un résultat qui ne serait pas décrit de manière adéquate en utilisant uniquement des effets additifs (c’est-à-dire des effets principaux). Par exemple, évaluer le risque d’un résultat sanitaire de manière additive en fonction de l’origine migratoire et du genre (par exemple, les effets principaux additifs immigrée et femme) peut ne pas suffire à décrire la prévalence d’un résultat sanitaire particulier chez les personnes immigrées et femmes, ce qui nécessite un terme d’interaction multiplicatif supplémentaire (immigrée × femme).
En termes simples, l’intersectionnalité est un cadre qui nous permet de théoriser et de critiquer les expériences sociales (expositions) à des intersections particulières ainsi que les systèmes d’oppression qui génèrent ces expériences, tandis que les analyses de régression incluant des interactions permettent de saisir les effets de ces expériences sur des résultats spécifiques. Ainsi, l’effet des expositions peut ou non se traduire par des effets d’interaction statistiquement significatifs. L’absence d’effets d’interaction statistiquement significatifs ne dit rien sur la validité de l’intersectionnalité : elle ne prouve ni ne réfute l’existence d’expériences intersectionnelles. En ce sens, il vaut mieux considérer l’intersectionnalité comme un cadre d’analyse.
Ceci étant posé, nous pourrions être tenté de réaliser un modèle de régression classique en y intégrant une interaction de l’ensemble de nos variables intersectionnelles. Or, lorsque l’on croise nos différentes variables intersectionnelles, le nombre de modalités devient très vite important, ici de l’ordre de 3×3×2 soit 18 combinaisons théoriquement possibles, sachant que certaines ne sont peut être pas observées dans les données. Dans ce genre de situation, un modèle GLM classique peut avoir des difficultés à converger, voir ne pas converger du tout.
L’approche MAIHDA adopte une autre stratégie : les strates (la combinaison de nos variables intersectionnelles) sont intégrées sous la forme d’une variable aléatoire d’un modèle mixte. Si, de ce fait, MAIHDA peut gérer beaucoup mieux que d’autres approches le fait d’avoir des strates avec un petit nombre d’observations, cela ne permet pas pour autant d’éviter complètement le problème des petits N. En pratique, cela signifie que l’on cherchera à réduire le nombre de strates avec moins de 10 ou 20 observations, quitte à procéder à des recodages de catégories en amont (par exemple ici recoder le niveau de richesse en trois modalités) et à limiter le nombre de dimensions intersectionnelles inclues dans l’analyse.
52.3 Analyse MAIHDA classique (modèle nul et modèle ajusté)
L’analyse MAIHDA classique, celle présentée dans l’article de Evans et al. (Evans et al. 2024), repose sur deux modèles mixtes. Le premier, dit modèle nul, ne contient qu’un intercept et les différentes strates (interaction des variables intersectionnelles) entrées comme effet aléatoire. Dans notre exemple, son équation est test ~ 1 + (1 | educ:richesse:milieu), avec (1 | educ:richesse:milieu) représentant les effets aléatoires. Le second modèle, dit modèle ajusté, inclut chacune des variables intersectionnelles comme effet fixe tout en conservant les strates intersectionnelles comme effet aléatoire. Son équation dans notre exemple est test ~ educ + richesse + milieu + (1 | educ:richesse:milieu).
Le package MAIHDA fournit tout un ensemble de fonctions permettant de réaliser aisément des analyses MAIHDA sous R. Le package guideR, le compagnon de guide-R, fournit plusieurs fonctions permettant de présenter les résultats obtenus sous la forme de tableaux mis en forme et prêts à être publiés.
La fonction MAIHDA::maihda() permet de réaliser une analyse MAIHDA complète en un seul appel. On lui passera l’équation du modèle complet. Elle en déduira les variables composant les strates intersectionnelles et générera automatiquement les différentes strates (et, au besoin, éliminera les strates non observées dans les données). Comme notre variable d’intérêt est binaire, on lui précisera family = "binomial".
m <- MAIHDA::maihda( test ~ educ + richesse + milieu + (1| educ:richesse:milieu),data = femmes,family ="binomial")
Binary outcome 'test' recoded to 0/1: 'non' = 0 (reference), 'oui' = 1 (modeled event). Set the factor levels (or supply a 0/1 outcome) to control which level is the event.
En premier lieu, nous pouvons vérifier la distribution de nos strates en fonction de leur nombre d’observations avec guideR::tbl_strata_info() qui permet de reproduire l’équivalent de la Table de 2 de Evans et al. (Evans et al. 2024).
m |> guideR::tbl_strata_info()
Sample size per stratum
Number of strata
Proportion of strata
≥ 100
7
38.9%
≥ 50
8
44.4%
≥ 30
12
66.7%
≥ 20
13
72.2%
≥ 10
15
83.3%
< 10
3
16.7%
Total number of strata: 18
Dans notre exemple, nous avons 3/18 strates (soit 17% des strates) avec un effectif inférieur à 10 observations.
Reproduisons le tableau principal des résultats, cf. la table 3 de Evans et al. (Evans et al. 2024), avec guideR::tbl_maihda(). On notera que, par défaut, guideR::tbl_maihda() renvoie des statistiques supplémentaires par rapport à celles présentées par Evans et al.
Evans, Clare R., George Leckie, S. V. Subramanian, Andrew Bell, et Juan Merlo. 2024. « A tutorial for conducting intersectional multilevel analysis of individual heterogeneity and discriminatory accuracy (MAIHDA) ». SSM - Population Health 26 (juin): 101664. https://doi.org/10.1016/j.ssmph.2024.101664.
Le premier élément à regarder est le modèle nul et plus précisément le VPC ou Variance Partition Coefficient comme le nomme Evans et al. Cette même métrique également connue sous le nom de ICC ajusté ou adjusted Intraclass Correlation Coefficient (coefficient de corrélation intra-classe ajusté). Il représente la variance entre les strates (between-stratum variance) exprimée en proportion de la variance totale non-expliquée par les effets fixes1.
1 La proportion de la variance totale expliquée par les effets aléatoires correspond à l’ICC non ajusté ou unadjusted ICC qui est également présentée dans le tableau. En l’occurrence, dans ce modèle nul, il n’y a pas d’effet fixe et donc le VPC ou ICC ajusté est égal à l’ICC non ajusté.
Dans notre exemple, près de 8% de la variance totale est expliquée par les effets des strates intersectionnelles (le reste étant expliqué par l’hétérogénéité des individus au sein des strates). D’une certaine manière, nous pouvons mettre cette proportion en regard des 6% du pseudo R2 de notre modèle logistique classique que nous avons calculé en introduction.
La question qui se pose ensuite est de savoir, concernant le VPC, quelle est la part qui est due aux effets additifs des variables intersectionnelles et la part expliquée par les effets d’interactions (i.e. au-delà des effets additifs). Pour cela, nous pouvons nous pencher sur le second modèle, le modèle ajusté.
Cette fois-ci les effets additifs sont capturés par les effets fixes associés à nos trois variables et inclus dans ce second modèle. La part de variance expliquée par les effets fixes correspond au R2 marginal de Nakagawa, ici 9,6%. Le R2 conditionnel correspond quant à lui à la part de variance expliquée à la fois par les effets fixes et les effets aléatoires. La différence entre les deux indique donc la part des variance expliquée par les effets aléatoires et correspond donc à l’ICC non ajusté2. Dans ce modèle ajusté, les effets aléatoires associés aux strates ne capturent plus que les effets d’interactions.
3 Dit autrement, le VPC ou ICC ajusté correspond donc à la variance expliquée par les effets aléatoires (between-stratum variance) divisée par la variance totale moins la variance expliquée par les effets fixes. Exprimé autrement : \(VPC = ICC_{adjusted} = ICC_{unadjusted} / (1 - R^2_{marginal})\).
Si l’on regarde le VPC, il n’est plus que de 0,24%, représentant la part de la variance non expliquée par les effets fixes expliquée par les effets d’interactions3. Le PVC ou Proportional Change in Variance (changement proportionnel de la variance) représente cette diminution du VPC entre les deux modèles : 97% de la variance entre les strates du modèle nul est additive et seulement 3%, dans notre exemple, correspond à des effets d’interaction entre les variables intersectionnelles.
Astuce
La fonction summary() permet d’afficher dans la console de nombreux éléments. Ne pas hésiter à y jeter un œil en complément du tableau retournée par guideR::tbl_maihda().
summary(m)
MAIHDA Model Summary
====================
Null model. Use which = "adjusted" for the adjusted model.
Variance Partition Coefficient (VPC/ICC):
Estimate: 0.0793
Variance Components:
component variance sd proportion
Between-stratum (random) 0.2835 0.5324 0.07934
Within-stratum (residual) 3.2899 1.8138 0.92066
Total 3.5734 1.8903 1.00000
Discriminatory accuracy (binomial MAIHDA)
AUC (C-statistic): 0.673
Median Odds Ratio: 1.662
Cases / controls: 768 / 1203
(AUC is apparent / in-sample: scored on the same rows used to fit the
model, so it is optimistically biased -- more so with sparse strata. It
is a descriptive measure, not cross-validated out-of-sample discrimination.)
Fixed Effects (Wald 95% intervals):
term estimate se statistic p_value lower upper
(Intercept) -0.3122 0.1505 -2.075 0.038 -0.6072 -0.01733
Stratum Estimates (first 10):
stratum stratum_id label
1 1 aucun × moyen × rural
2 2 aucun × pauvre/très pauvre × rural
3 3 primaire × pauvre/très pauvre × rural
4 4 secondaire/supérieur × pauvre/très pauvre × rural
5 5 secondaire/supérieur × riche/très riche × urbain
6 6 aucun × riche/très riche × urbain
7 7 primaire × moyen × urbain
8 8 primaire × riche/très riche × urbain
9 9 primaire × riche/très riche × rural
10 10 aucun × riche/très riche × rural
random_effect se lower_95 upper_95
-0.9068 0.1664 -1.233031 -0.580608
-0.9065 0.1062 -1.114776 -0.698280
-0.1387 0.1485 -0.429676 0.152331
0.2715 0.2602 -0.238406 0.781489
0.7359 0.1197 0.501193 0.970523
0.2133 0.1225 -0.026818 0.453440
0.5123 0.2634 -0.003909 1.028453
0.2418 0.1508 -0.053783 0.537332
-0.3087 0.3255 -0.946639 0.329276
-0.4267 0.2158 -0.849753 -0.003659
... and 8 more strata
Ceci posé, on pourra chercher à savoir quelles sont les strates avec la plus faible ou la plus forte probabilité de vivre l’évènement étudié. Pour cela, on pourra avoir recours à guideR::tbl_strata_predictions(). Par défaut, les 5 strates avec la plus forte prédiction et les 5 strates avec la plus faible prédiction sont affichées. Cela peut être modifié avec l’argument n_strata (utiliser Inf pour tout afficher).
On peut aisément ajouter la valeur moyenne des prédictions avec show_mean_line = TRUE et surligner les strates avec des petits effectifs avec highlight_n_below.
m |> guideR::plot_strata_predictions(show_mean_line =TRUE,highlight_n_below =20 )
Il apparaît que les prédictions les plus élevées sont observées en milieu urbain et que les plus faibles sont en milieu rural. Pour une comparaison visuelle des prédictions selon le milieu de résidence, on pourra avoir recours à l’argument by.
m |> guideR::plot_strata_predictions(by = milieu)
Il est possible de diviser le graphique selon une autre variable avec des facettes.
m |> guideR::plot_strata_predictions(by = milieu, sort =FALSE) +facet_grid(rows =vars(richesse), space ="free_y", scale ="free_y" )
Le graphique obtenu avec l’option plot(type = "effect_decomp") permet de visualiser la décomposition entre les effets additifs (représentés en gris) et les effets d’interaction (en orange)4. Dans notre exemple, sans surprise au regard du PVC, les effets d’interaction sont faibles.
Le recours aux modèles partiellement ajustés vise à quantifier dans quelle mesure les différentes dimensions utilisées pour construire les strates intersectionnelles contribuent à la variance entre les strates observées dans le modèle nul.
Pour cela, on va recalculer, pour chaque variable intersectionnelle, un modèle comprenant cette variable seule en effet fixe et les strates en effet aléatoire5. À chaque fois, on calculera le PCV par rapport au modèle nul. La fonction guideR::tbl_partially_adjusted_maihda() permet de réaliser ces opérations en un seul appel et de présenter l’ensemble des résultats dans un tableau.
Nous retrouvons un effet limité du niveau de richesse, afin un PCV entre 7 et 8%, alors que les deux autres dimensions (niveau d’éducation et milieu de résidence) ont des contributions plus importantes avec des PCV de l’ordre de plus de 50%.
52.5 Variables d’ajustement et variables de contexte
Il est possible d’ajouter des variables d’ajustement et des variables de contexte dans le modèle, sachant que les deux ne sont pas traitées de la même manière.
Dans nos données descriptives, nous avons vu que l’âge était également associé significativement au fait d’avoir déjà réaliser un test de dépistage du VIH. Selon notre cadre théorique, nous pourrions éventuellement considérer cette variable comme une variable intersectionnelle et en faire une dimension additionnelle pour la construction des strates. Alternativement, nous pouvons envisager de ne pas l’inclure comme dimension intersectionnelle mais vouloir ajuster notre modèle sur l’âge pour tenir compte du fait que la structure par âges diffère d’une strate à l’autre. Dans ce cas, nous allons simplement ajouter la variable groupe_ages comme effet fixe dans le modèle mais sans le faire apparaître dans les effets aléatoires.
Par ailleurs, nous avons vu également que le taux de dépistage variait fortement d’une région à l’autre. Il pourrait alors être pertinent d’ajouter cette information contextuelle au modèle. Pour cela on utilisera l’argument context de la fonction MAIHDA::maihda(). Cette dernière ajoutera un effet aléatoire séparé sur cette variable de contexte, comme c’est l’usage dans les modèles multi-niveaux.
Calculons notre modèle et regardons les résultats.
mac <- MAIHDA::maihda( test ~ groupe_ages + educ + richesse + milieu + (1| educ:richesse:milieu),data = femmes,family ="binomial",context ="region")
Binary outcome 'test' recoded to 0/1: 'non' = 0 (reference), 'oui' = 1 (modeled event). Set the factor levels (or supply a 0/1 outcome) to control which level is the event.
mac
MAIHDA Analysis
===============
Null formula: test ~ groupe_ages + (1 | stratum) + (1 | region)
Adjusted formula:test ~ groupe_ages + educ + richesse + milieu + (1 | stratum) + (1 | region)
Engine: lme4 | Family: binomial
Context: region (crossed contextual random intercept in the null and adjusted models)
VPC/ICC (null): 0.0747
Context share (null): 0.0471 (between-region share of unexplained variance)
PCV (null -> adjusted): 0.9585
Between-stratum variance: 0.2798 (null) -> 0.0116 (adjusted)
~95.9% of the between-stratum variance is additive (the dimensions' main
effects); the remainder is the between-stratum variance remaining after the
additive main effects -- a model-dependent quantity
Discriminatory accuracy (null model):
AUC: 0.693 | MOR: 1.656 | cases/controls: 768/1203
Adjusted-model AUC: 0.690
Strata: 18
Intersectional interactions: 0 of 18 strata flagged (95% interval, BH-adjusted)
Use summary() for variance components and plot(type = ...) for figures.
mac |> guideR::tbl_maihda(exponentiate =TRUE, global_p =TRUE )
Conditional Nakagawa's R2 (fixed + random effects)
14,7%
15,1%
Marginal Nakagawa's R2 (fixed effects only)
2,90%
10,9%
Abréviations: IC = intervalle de confiance, OR = rapport de cotes
Strata: 18, Observations: 1971, Engine: lme4, Family: binomial, Variable(s) in context: region
Par rapport à notre analyse précédente, le PCVa légèrement diminué indiquant des effets d’interaction un plus élevé. Nous voyons que notre variable d’ajustement (le groupe d’âges) contribue significativement au modèle. Enfin, notre variable de contexte (la région) a un VPC en propre, indiquée sur la ligne context share, de 4,7% dans le modèle nul et de 4,4% dans le modèle ajusté.
52.6 Usages avancés
52.6.1 Intervalle de confiance de la PCV
Si vous utilisez engine = "lme4" (l’approche par défaut de MAIHDA), il est possible d’estimer un intervalle de confiance pour le VPC via une approche de type bootstrap. Il suffit de passer bootstrap_vpc = TRUE à guideR::tbl_maihda().
De même, le PCV peut également être estimé par une approche bootstrap avec bootstrap_pcv = TRUE.
Avertissement
ATTENTION : le temps de calcul est particulièrement long (facilement plusieurs heures selon vos données).
On pourra procéder en deux temps en utilisant l’option return_data = TRUE qui permet de lancer le calcul et de récupérer une liste avec les modèles augmentés des informations calculées, puis de passer cette liste directement à guideR::tbl_maihda() sans avoir à recalculer les bootstraps. Il sera ainsi plus facile de personnaliser le tableau final.
l <- m |> guideR::tbl_maihda(bootstrap_vpc =TRUE,bootstrap_pcv =TRUE )l |> guideR::tbl_maihda(exponentiate =TRUE)
52.6.2 Modèles bayésiens
La méthode MAIHDA intersectionnelle décompose la variation inter-strates en une partie additive (les effets principaux des dimensions intersectionnelles) et une partie d’interaction (l’écart par rapport à l’additivité impliqué par le modèle). Cette conclusion n’est défendable que lorsque chaque strate intersectionnelle est suffisamment peuplée pour permettre l’estimation de son effet. En pratique, ce n’est souvent pas le cas. Le croisement de plusieurs dimensions multiplie le nombre de strates alors que la taille de l’échantillon reste fixe, ce qui entraîne une baisse rapide du nombre de cellules. Il est difficile d’estimer une variance d’interaction à partir de cellules de ce type.
Dans ce type de situation, il peut être pertinent d’utiliser une approche bayésienne via le package brms plutôt qu’un modèle mixte fréquentiste avec lme4. Pour cela, il suffit de lancer MAIHDA::maihda() ou MAIHDA::fit_maihda() avec l’option engine = "brms". Avec ce type de modèle, la distribution a priori régularise les écarts-types inter-strates loin de la limite (afin que l’ajustement ne soit pas singulier) et la distribution a posteriori fournit un intervalle de crédibilité à la place d’un simple nombre. De fait, ce type d’approches permet de générer un intervalle de crédibilité autour du VPC sans avoir à passer par une approche bootstratp. Par contre, pour la PCV, une approche de type bootstrap reste nécessaire.
Nous ne présenterons pas ici d’exemple car le temps de calcul de ce type de modèles est relativement long (plusieurs minutes à plusieurs dizaines de minutes). Pour plus de détails sur ce point, voir la vignette dédiée (en anglais) sur le site de documentation de MAIHDA.
52.6.3 Poids d’enquête
Dans le cadre de données d’enquêtes pondérées avec plan d’échantillonnage complexe (cf. Chapitre 30), il n’existe pas encore d’implémentation des modèles mixtes à effets aléatoires compatibles avec le package survey. Ceci dit, le package WeMix permet le calcul de modèles mixtes avec prise en compte de poids d’enquêtes et le package MAIHDA peut être utilisé avec le package WeMix. Pour cela, on précisera engine = "wemix" et le nom de la variable contenant les poids d’enquête sera précisée avec l’argument sampling_weights.
mp <- MAIHDA::maihda( test ~ educ + richesse + milieu + (1| educ:richesse:milieu),data = femmes,family ="binomial",engine ="wemix",sampling_weights ="poids")
Binary outcome 'test' recoded to 0/1: 'non' = 0 (reference), 'oui' = 1 (modeled event). Set the factor levels (or supply a 0/1 outcome) to control which level is the event.
Le package MAIHDA propose, en alternative à l’approche classique basée sur deux modèles (modèle nul et modèle ajusté), une approche reposant sur un seul modèle et une décomposition inter-dimensionnelle ou crossed-dimensions decomposition.
Dans cette approche, les effets additifs des variables intersectionnelles sont estimés en introduisant chaque variable intersectionnelle sous la forme d’un effet aléatoire autonome et en ajoutant également un effet aléatoire pour les strates intersectionnelles. Dans notre exemple, le modèle estimé a donc pour équation test ~ 1 + (1 | educ) + (1 | richesse) + (1 | milieu) + (1 | educ:richesse:milieu).
Pour le calculer, nous appellerons la fonction MAIHDA::maihda() avec l’option decomposition = "crossed-dimensions". Il nous suffit de définir les strates et le package MAIHDA rajoutera de lui-même les effets aléatoires additifs.
Binary outcome 'test' recoded to 0/1: 'non' = 0 (reference), 'oui' = 1 (modeled event). Set the factor levels (or supply a 0/1 outcome) to control which level is the event.
boundary (singular) fit: see help('isSingular')
Dans notre exemple, nous voyons un message d’avertissement boundary (singular) nous indiquant qu’au moins que la variance d’au moins un des éléments a été estimée à 0, indiquant un problème de convergence et nous alertant sur le fait que l’analyse de variance n’est pas fiable. Regardons de plus prêt les résultats. Comme nous n’avons pas d’effet fixe, nous pouvons nous permettre de masquer les coefficients avec hide_coefficients = TRUE. À noter, en raison de la singularité déjà mentionnée, le R2 ne peut être correctement calculé.
Warning: Can't compute random effect variances. Some variance components equal
zero. Your model may suffer from singularity (see `?lme4::isSingular`
and `?performance::check_singularity`).
Decrease the `tolerance` level to force the calculation of random effect
variances, or impose priors on your random effects parameters (using
packages like `brms` or `glmmTMB`).
boundary (singular) fit: see help('isSingular')
Warning: Can't compute random effect variances. Some variance components equal
zero. Your model may suffer from singularity (see `?lme4::isSingular`
and `?performance::check_singularity`).
Decrease the `tolerance` level to force the calculation of random effect
variances, or impose priors on your random effects parameters (using
packages like `brms` or `glmmTMB`).
Random effect variances not available. Returned R2 does not account for random effects.
De nouveaux éléments apparaissent dans ce tableau. Tout d’abord, la variance expliquée par les variables intersectionnelles (effets additifs et intersectionnels) est de 0,312 correspondant à 8,66% de la variance totale (VPC). Cette variance entre les strates peut se décomposer entre une dimension additive (somme de la variance de chaque variable intersectionnelle prise isolément) de 0,273 (soit 87,5% du VPC) et une dimension intersectionnelle (variance associée à l’effet aléatoire des strates) de 0,039 (soit 12,5%).
La proportion de variance associée aux effets additifs (additive share of between-strata variance) peut être interprétée de manière similaire du PCV de l’approche classique. Cependant, il ne s’agit pas exactement de la même métrique. Elles abordent toutes deux la même question générale, à savoir quelle part de la variance inter-strates est additive, mais en utilisant des estimateurs différents (effets principaux fixes dans les deux modèles contre variances aléatoires des effets principaux d’un seul modèle, qui sont partiellement regroupées). Elles peuvent être similaires sur le plan directionnel, mais ne sont pas nécessairement proches sur le plan numérique ; il ne faut pas considérer l’une comme une validation de l’autre.
Les dimensions avec peu de modalités sont mal identifiées. La variance additive d’une dimension est estimée à partir de ces quelques niveaux. Une dimension binaire (par exemple, une variable sexe) contribue à une variance estimée à partir de seulement deux groupes ; ainsi, lme4 peut estimer une ou plusieurs composantes de variance égales ou proches de zéro (un ajustement singulier comme dans notre exemple). Cela rend instables les parts additives et interactionnelles.
En présence d’ajustement singulier, une possible est d’avoir recours à l’option engine = "brms" qui est moins sensible. Ou se rabattre sur l’approche classique à deux modèles. Enfin, il est possible de considérer un modèle plus simple en supprimant l’une des dimensions des variables intersectionnelles (mais au prix d’un changement de la question de recherche initiale).
Binary outcome 'test' recoded to 0/1: 'non' = 0 (reference), 'oui' = 1 (modeled event). Set the factor levels (or supply a 0/1 outcome) to control which level is the event.
L’article de référence : Clare R. Evans, George Leckie, S.V. Subramanian, Andrew Bell, and Juan Merlo. 2024. “A Tutorial for Conducting Intersectional MultilevelAnalysis of Individual Heterogeneity and Discriminatory Accuracy(MAIHDA).” SSM - Population Health 26 (June): 101664. https://doi.org/10.1016/j.ssmph.2024.101664.