TD3 - Ajuster un modèle hiérarchique spatial avec INLA
Author
Affiliations
Marie-Pierre Etienne (sur la base des idées expolorée dans FinistR2023 )
ENSAI - CREST
https://marieetienne.github.io/statspat
Published
March 11, 2025
# Base de R INLAlibrary(tidyverse)
── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
✔ dplyr 1.1.4 ✔ readr 2.1.5
✔ forcats 1.0.0 ✔ stringr 1.5.1
✔ ggplot2 3.5.1 ✔ tibble 3.2.1
✔ lubridate 1.9.4 ✔ tidyr 1.3.1
✔ purrr 1.0.4
── 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
library(INLA)
Loading required package: Matrix
Attaching package: 'Matrix'
The following objects are masked from 'package:tidyr':
expand, pack, unpack
This is INLA_24.12.11 built 2024-12-11 19:58:26 UTC.
- See www.r-inla.org/contact-us for how to get help.
- List available models/likelihoods/etc with inla.list.models()
- Use inla.doc(<NAME>) to access documentation
library(sf)
Linking to GEOS 3.12.1, GDAL 3.8.4, PROJ 9.4.0; sf_use_s2() is TRUE
Etude du nombre de cas de malaria en Gambie
Nous nous intéressons à un jeu de données concernant la prévalence de la malaria en Gambie (disponible dans le package {geoR}). Cet exemple est repris du livre “Spatial and Spatio-temporal Bayesian Models with R-INLA”.
data(gambia, package ="geoR")# les coordonnées correspondent au village où se trouve les enfantsgambia <- gambia |>mutate(village_index =factor(as.numeric(factor(paste(x,y, sep="_")))))
Le jeu de données contient pour chaque personne testée
les coordonées du village (x, y)
le résultat du test (pos),
l’âge en jours, *l’utilisation d’une moustiquaire netuse,
l’administration éventuel d’un traitement sur la moustiquaire treated,
une mesure par satellite de la végétation proche green,
la présence ou non d’un centre de santé dans le village.
Calculer la prévalence (proportion de cas positif) dans chaque village
Dans les approches INLA, le champs gaussien caché est vu comme la solution d’une Equation aux Dérivées Partielles Stochastiques (EDPS) qui va être résolue sur un maillage. On peut définir le maillage.
hull =inla.nonconvex.hull(gambia_sf,convex =-0.1)gambia_mesh <-inla.mesh.2d(boundary = hull, max.edge=0.2)plot(gambia_mesh,main="",asp=1)coo <-st_coordinates(gambia_sf)points(coo, col ="red")
Mais pour résoudre l’EDPS, on a besoin de mettre des conditions de nullité au bord du domaine ce qui a des conséquences forte sur la solution. Pour limiter l’impact on ajoute buffer autour avec une maille plus large.
Changer la valeur de max.edge. Que se passe t il ?
En général, l’utilisation des paramètres du maillage est assez complexe.
Il est naturel d’espèrer un résultat plus fin aux endroits où l’on a des données, on peut lui passer les localisations du jeu de données pour construire le maillage grâce à l’argument loc. Que constatez vous ?
On définit à partir du maillage le champ spatial SPDE qui correspond à un champ spatial gaussien avec une covariance Matérn. Nous considérons les lois a priori par défaut sur les paramètres de variance et de portée du champ spatial.
L’argument constr = TRUE impose une moyenne nulle pour le champs spatial.
On souhaite ajuster le modèle suivant
Pour l’enfant \(j\) du village \(i\), on suppose que conditionnellement aux covariables et à un champs spatial caché, l’infection à la malaria est le résultat d’un tirage de bernoulli.
Ecrire le modèle correspondant sous forme mathématique.
La mise en oeuvre dans INLA est ensuite un peu technique (le package inlabru permettrait de simplifier les étapes suivantes)
6.b Une matrice de projection. Cette matrice fait le lien entre les positions des observations et les noeuds du maillage. C’est une matrice très creuse.
A <-inla.spde.make.A(mesh = gambia_mesh, loc = coo)
6.c On doit ensuite empiler ces données dans une structure spécifique à INLA
le package geodata contient les altitudes en Gambie. Reprenez les étapes pour ajuster un modèle dans lequel on explique la prévalence de la malaria par l’altitude. On pourra alors grouper les données par village.