Géographie et développement urbains
Guide étape par étape pour la mise en oeuvre de la régression spatiale avec R
Table of Contents
La régression spatiale est une technique statistique puissante utilisée pour analyser les données liées à l'espace, permettant aux chercheurs de comprendre comment les facteurs géographiques influencent divers phénomènes, allant des modèles environnementaux au développement urbain, aux résultats en santé publique et aux tendances économiques.
Comprendre la régression spatiale et son importance
Les problèmes de régression dans la géographie impliquent intrinsèquement des emplacements géographiques, et les conséquences de l'utilisation des données de localisation peuvent inclure la dépendance spatiale (autocorrélation spatiale) et l'hétérogénéité ou les tendances spatiales (non-stationnaire). Contrairement aux modèles de régression traditionnels qui supposent l'indépendance entre les observations, la régression spatiale explique explicitement le fait que les observations proches les unes des autres dans l'espace tendent à être plus semblables que celles qui sont plus éloignées.
Comme le dit la première loi de Tobler sur la géographie : « Tout est lié à tout le reste, mais les choses proches sont plus liées que les choses éloignées ». Ce principe fondamental sous-tend toute analyse spatiale et souligne pourquoi les techniques de régression standard peuvent produire des résultats trompeurs lorsqu'elles sont appliquées aux données spatiales.
De nombreuses questions de recherche en sciences sociales dépendent de l'espace, comme les résultats des votes, les prix du logement, les marchés du travail, les comportements de protestation ou les décisions de migration. Lorsque l'autocorrélation spatiale est présente dans les résidus de régression, elle indique une mauvaise spécification du modèle et signifie que les valeurs p et les estimations de coefficients ne peuvent être fiables.
Les paquets R essentiels pour la régression spatiale
Avant de commencer votre analyse de régression spatiale, vous devez installer et charger plusieurs paquets R clés. L'écosystème d'analyse spatiale de R a évolué de façon significative, avec des paquets modernes offrant une fonctionnalité complète pour les opérations de données spatiales et la modélisation.
Les paquets de base pour l'analyse spatiale
Les paquets importants pour les opérations spatiales fondamentales comprennent sf pour la manipulation des données spatiales, mapview et tmap pour la visualisation, et spdep pour les poids et les relations spatiales. Le paquet sf est devenu la norme moderne pour la manipulation des données vectorielles spatiales en R, remplaçant l'ancien paquet sp par une approche plus intuitive et plus efficace.
Pour la modélisation de régression spatiale en particulier, vous aurez besoin du paquet spatialreg, qui fournit des fonctions pour l'ajustement de modèles de décalage et d'erreur spatiale. Le paquet spdep est essentiel pour diagnostiquer la dépendance spatiale et créer des matrices de poids spatiaux. Installez ces paquets en utilisant le code suivant:
install.packages(c("sf", "spdep", "spatialreg", "tmap", "mapview"))
Une fois installé, chargez les paquets au début de votre session R :
library(sf) library(spdep) library(spatialreg) library(tmap) library(mapview)
Préparation et chargement de vos données spatiales
La préparation adéquate des données est le fondement d'une analyse de régression spatiale réussie. Votre ensemble de données doit comprendre à la fois des données d'attributs (les variables que vous voulez analyser) et des informations spatiales (coordonnées ou géométries qui définissent les emplacements).
Exigences relatives au format des données
Spatial data can come in various formats, with the most common being shapefiles (.shp), GeoJSON files (.geojson), and GeoPackage files (.gpkg). The sf package can read all these formats using the st_read() function. Here's how to load a shapefile:
spatial_data <- st_read("your_data.shp")
Pour les fichiers GeoJSON, la syntaxe est identique :
spatial_data <- st_read("your_data.geojson")
Nettoyage et validation des données
Avant de procéder à l'analyse, nettoyez soigneusement votre ensemble de données pour assurer la qualité des données :
- Vérifier et gérer les valeurs manquantes dans les géométries spatiales et les données d'attributs
- Supprimer ou corriger les géométries non valides en utilisant et
- S'assurer que toutes les observations contiennent des données complètes pour les variables que vous prévoyez inclure dans votre modèle
- Vérifier qu'il n'y a pas de doublons spatiaux
- Vérifiez les valeurs aberrantes qui pourraient influencer indûment vos résultats de régression
Vous pouvez vérifier les valeurs manquantes avec :
summary(spatial_data) sum(is.na(spatial_data$your_variable))
Systèmes de référence de coordonnées
L'un des aspects les plus critiques de la préparation des données spatiales est de s'assurer que tous les ensembles de données utilisent le même système de référence de coordonnées (SIR).
st_crs(spatial_data)
Si vous devez transformer vos données en un SIR différent, utilisez la fonction . Par exemple, pour transformer en WGS84 (EPSG:4326):
spatial_data <- st_transform(spatial_data, crs = 4326)
Pour l'analyse de la distance, il est souvent préférable d'utiliser un système de coordonnées projetées (mesurée en mètres ou en pieds) plutôt qu'un système de coordonnées géographiques (mesurée en degrés).
Analyse et visualisation exploratoires des données spatiales
L'exploration visuelle est une première étape essentielle de l'analyse de régression spatiale. Elle vous aide à identifier les modèles, à détecter les aberrations potentielles, à comprendre la distribution spatiale de vos variables et à formuler des hypothèses sur les relations spatiales.
Création de cartes de base
La façon la plus simple de visualiser vos données spatiales est d'utiliser la fonction de la courbe de base:
plot(spatial_data["variable_name"])
Pour des visualisations plus interactives et informatives, utilisez les paquets tmap ou mapview[. Le paquet tmap fournit une grammaire d'approche graphique similaire à ggplot2:
tm_shape(spatial_data) +
tm_polygons("variable_name",
style = "quantile",
palette = "Blues",
title = "Your Variable") +
tm_layout(legend.outside = TRUE)
Le paquet Mapview crée des cartes interactives qui vous permettent de zoomer, de faire une panoramique et de cliquer sur les fonctionnalités :
mapview(spatial_data, zcol = "variable_name")
Examen des distributions variables
Avant d'adapter des modèles de régression, examinez les distributions statistiques de vos variables. Créez des histogrammes, des boxplots et des statistiques sommaires :
hist(spatial_data$dependent_variable, main = "Distribution of Dependent Variable", xlab = "Value") summary(spatial_data$dependent_variable)
Recherchez l'étroitesse, les aberrations et si des transformations peuvent être nécessaires. Les variables fortement biaisées peuvent bénéficier de transformations logarithmiques ou carrées pour mieux répondre aux hypothèses de régression.
Analyse de corrélation
Examiner les corrélations entre vos variables indépendantes pour vérifier la multicolinéarité, ce qui peut causer des problèmes dans l'analyse de régression :
cor(st_drop_geometry(spatial_data[, c("var1", "var2", "var3")]))
La fonction supprime la colonne de géométrie spatiale, ne laissant que les données d'attribut pour l'analyse de corrélation.
Comprendre et tester l'autocorrélation spatiale
Avant de décider si vous avez besoin de régression spatiale, vous devez vérifier si l'autocorrélation spatiale est présente dans vos données ou dans les résidus d'un modèle de régression standard OLS. L'autocorrélation spatiale est caractérisée par une corrélation dans un signal entre des emplacements proches dans l'espace et est plus complexe que l'autocorrélation unidimensionnelle parce qu'elle est multidimensionnelle et multidirectionnelle.
Global Moran's I Statistical
Global Moran's I est une mesure de la grappe globale de données spatiales. Moran's I quantifie la similitude de chaque région avec ses voisins et en moyenne toutes ces évaluations. La statistique va d'environ -1 à +1, où:
- Les valeurs nettement supérieures à la valeur attendue indiquent une autocorrélation spatiale positive ou un regroupement, qui se produit lorsque les régions voisines ont tendance à avoir des valeurs similaires.
- Les valeurs nettement inférieures à la valeur attendue indiquent une autocorrélation spatiale négative ou une dispersion, lorsque les régions proches les unes des autres ont tendance à avoir des valeurs différentes.
- Les valeurs autour de la valeur attendue indiquent une randomisation, c'est-à-dire l'absence de patron spatial
Essai de l'autocorrélation spatiale dans les variables
Vous pouvez tester l'autocorrélation spatiale dans une variable en utilisant directement la fonction du paquet spdep. Cependant, vous devez d'abord créer une matrice de poids spatiaux (examinée en détail dans la section suivante):
# Create neighbors and weights (simplified example) neighbors <- poly2nb(spatial_data) weights <- nb2listw(neighbors) # Test for spatial autocorrelation moran.test(spatial_data$variable_name, weights)
Pour la statistique I du Moran mondial, l'hypothèse nulle indique que l'attribut analysé est distribué au hasard parmi les caractéristiques de votre zone d'étude. Lorsque la valeur p retournée par cet outil est statistiquement significative, vous pouvez rejeter l'hypothèse nulle.
Essai de l'autocorrélation spatiale dans les résidus de régression
Il est important d'évaluer les résidus pour l'autocorrélation spatiale, car ils sont censés être indépendants, non corrélés. Si les résidus sont géocroiseurs, cela indique que le modèle est mal spécifié.
ols_model <- lm(dependent_var ~ independent_var1 + independent_var2, data = spatial_data)
Ensuite, testez les résidus pour l'autocorrélation spatiale en utilisant :
lm.morantest(ols_model, weights)
Si ce test montre une autocorrélation spatiale significative dans les résidus, vous devez utiliser des méthodes de régression spatiale plutôt que la régression standard de l'OLS.
Simulation Monte Carlo pour les tests d'importance
La simulation de Monte Carlo est la méthode privilégiée pour tester la signification. La façon dont elle fonctionne est que les valeurs sont attribuées au hasard aux polygones et que l'I de Moran est calculé, répété plusieurs fois pour établir une distribution des valeurs attendues, et la valeur observée est comparée à la distribution simulée.
moran_mc <- moran.mc(spatial_data$variable_name, weights, nsim = 999) moran_mc
L'approche de Monte Carlo est particulièrement robuste car elle ne repose pas sur des hypothèses de distribution et fournit une valeur p plus fiable, surtout pour les plus petits échantillons.
Indicateurs locaux de l'association spatiale (LISA)
Les indicateurs locaux de l'association spatiale (LISA) sont conçus pour indiquer l'étendue du regroupement spatial significatif de valeurs similaires autour de chaque observation. Bien que le I de Moran vous donne une statistique pour l'ensemble de la zone d'étude, l'analyse LISA identifie des endroits précis où se produisent des regroupements ou des aberrations spatiales.
Vous pouvez calculer le code local de Moran en utilisant:
local_moran <- localmoran_perm(spatial_data$variable_name, weights, nsim = 9999) head(local_moran)
LISA peut aider à identifier HH (valeurs élevées entourées de valeurs élevées), LL (valeurs faibles entourées de valeurs faibles), HL (valeurs élevées entourées de valeurs faibles) et LH (valeurs faibles entourées de valeurs élevées).
Création de matrices de poids spatiaux
Les matrices de poids spatial sont fondamentales pour l'analyse de régression spatiale. Elles définissent les relations spatiales entre les observations, répondant essentiellement à la question : « Qui sont les voisins de chaque observation ? » Le choix des poids spatiaux peut affecter de façon significative les résultats de votre analyse, il est donc important de choisir une méthode appropriée pour votre question de recherche et votre structure de données.
Poids fondés sur la continuité
Les poids fondés sur la continuité définissent les voisins comme des unités spatiales qui partagent des frontières. Cette approche est le plus souvent utilisée pour les données sur les polygones, comme les secteurs de recensement, les comtés ou les pays.
- Contiguité de la reine: Les voisins partagent n'importe quel point de limite, y compris les coins (comme le mouvement de la reine dans les échecs)
- Contiguité de la prise: Les voisins doivent partager un bord de frontière, pas seulement un coin (comme le mouvement du rook dans les échecs)
Créer des voisins basés sur la contiguïté en utilisant la fonction :
# Queen contiguity (default) neighbors_queen <- poly2nb(spatial_data, queen = TRUE) # Rook contiguity neighbors_rook <- poly2nb(spatial_data, queen = FALSE) # Examine the neighbor structure summary(neighbors_queen)
Le résumé vous montrera le nombre de régions, la répartition des connexions avec les voisins et identifiera les régions sans voisins (îles), qui nécessitent une manipulation spéciale.
Poids à distance
Les poids basés sur la distance définissent les voisins en fonction de la proximité à l'intérieur d'un seuil de distance spécifié. Cette approche est utile lorsque vous voulez capturer des relations spatiales au-delà de l'adjacence immédiate ou lorsque vous travaillez avec des données ponctuelles.
# Get coordinates of centroids coords <- st_coordinates(st_centroid(spatial_data)) # K-nearest neighbors (e.g., 4 nearest neighbors) knn_neighbors <- knn2nb(knearneigh(coords, k = 4)) # Distance band (all neighbors within specified distance) distance_neighbors <- dnearneigh(coords, d1 = 0, d2 = 10000) # distance in map units
Lorsque vous utilisez des poids basés sur la distance, assurez-vous que vos données sont dans un système de coordonnées projeté afin que les distances soient mesurées en unités significatives (mètres ou pieds) plutôt que en degrés.
Convertir les voisins en poids
Une fois que vous avez défini la structure voisine, convertissez-la en une liste de poids en utilisant . Cette fonction vous permet de spécifier comment les poids doivent être normalisés:
# Row-standardized weights (most common) weights_W <- nb2listw(neighbors_queen, style = "W") # Binary weights weights_B <- nb2listw(neighbors_queen, style = "B") # Variance-stabilizing coding weights_S <- nb2listw(neighbors_queen, style = "S")
Les poids normalisés en ligne (style = "W") sont les plus couramment utilisés parce qu'ils garantissent que les poids pour chaque somme d'observations à 1, rendant l'interprétation plus simple. Les poids binaires (style = "B") indiquent simplement si les observations sont voisines (1) ou non (0).
Manipulation des îles et observations déconnectées
Certaines observations peuvent ne pas avoir de voisins sous votre définition choisie, créant des « îles » dans votre matrice de poids spatiaux. Cela peut causer des problèmes de régression spatiale. Vous pouvez identifier des îles avec:
which(card(neighbors_queen) == 0)
Si les îles existent, vous avez plusieurs options : les connecter à leur voisin le plus proche, utiliser une approche basée sur la distance plutôt, ou définir le paramètre pour TRUE dans vos fonctions d'analyse (bien que cela devrait être fait avec prudence).
Choisir entre le lag spatial et les modèles d'erreur spatiale
Une fois que vous avez confirmé que l'autocorrélation spatiale est présente, vous devez décider quel type de modèle de régression spatiale est le plus approprié pour vos données. Les deux principaux types sont les modèles de décalages spatiaux et les modèles d'erreurs spatiales, et ils représentent des concepts fondamentalement différents des processus spatiaux.
Comprendre les modèles de lag spatiale
Le modèle à décalage spatial intègre explicitement la dépendance spatiale en ajoutant une variable y «à décalage spatial» du côté droit de l'équation de régression, en disant essentiellement que les valeurs de y dans les zones voisines de l'observation i sont un prédicteur important de y sur chaque zone individuelle i.
La diffusion spatiale se produit lorsque les unités spatiales sont directement influencées par leurs voisins, et vice versa. Ceci représente un processus spatial substantiel où le résultat en un endroit affecte directement les résultats dans les endroits voisins. Par exemple, les taux de criminalité dans un quartier peuvent influencer les taux de criminalité dans les quartiers adjacents par des effets de débordement.
Le modèle de décalage spatial prend la forme suivante:
y = ρWy + Xβ + ε
où ρ (rho) est le paramètre spatial autorégressif, W est la matrice des poids spatiaux, X contient les variables indépendantes et ε est le terme d'erreur.
Comprendre les modèles d'erreur spatiale
Le modèle d'erreur spatiale traite l'autocorrélation spatiale comme une nuisance à laquelle il faut faire face, ce qui implique que la dépendance spatiale observée ne reflète pas un processus réellement spatial, mais simplement le regroupement géographique des sources du comportement d'intérêt, comme les citoyens des quartiers voisins qui favorisent le même candidat non pas parce qu'ils parlent à leurs voisins, mais parce que les citoyens ayant des revenus similaires tendent à se regrouper géographiquement.
Si les sources d'attribution ne peuvent être prises en compte en les incluant comme variables explicatives, le modèle affichera une dépendance spatiale en termes d'erreur, qui peut être modélisée par un terme d'erreur géospatialement décalé. Le modèle d'erreur spatiale est approprié lorsque l'autocorrélation spatiale résulte de variables omises qui sont elles-mêmes regroupées spatialement.
Le modèle d'erreur spatiale prend la forme:
y = Xβ + u, où u = λWu + ε
où λ (lambda) est le paramètre spatial autorégressif pour le terme d'erreur.
Utilisation de tests multiplieurs Lagrange pour la sélection des modèles
Les tests Lagrange Multiplier fournissent des outils pour aider à décider lequel de ces deux modèles est le plus approprié. Ces tests peuvent être effectués en utilisant la fonction :
# Fit OLS model first ols_model <- lm(dependent_var ~ independent_var1 + independent_var2, data = spatial_data) # Run Lagrange Multiplier tests lm.LMtests(ols_model, weights, test = "all")
La sortie comprendra plusieurs tests :
- LLlag[: Essais de dépendance spatiale au décalage
- LMerr: Essais de dépendance pour erreur spatiale
- RLMlag[: Test LM robuste pour le décalage (compte tenu de l'erreur)
- RLMerr: Test LM robuste pour l'erreur (compte tenu du décalage)
Si LMlag et LMerr sont significatifs, examinez les versions robustes. Choisissez le modèle de décalage spatial si RLMlag est significatif et RLMerr ne l'est pas, et choisissez le modèle d'erreur spatiale si RLMerr est significatif et RLMlag ne l'est pas. Si les deux tests robustes sont significatifs, vous devrez peut-être envisager des modèles plus complexes ou examiner soigneusement vos spécifications de modèle.
Montage de modèles de lag spatiale
Une fois que vous avez déterminé qu'un modèle de décalage spatial est approprié pour vos données, vous pouvez l'adapter en utilisant la fonction du paquet spatialreg. L'estimation maximale de probabilité du modèle de décalage spatial est effectuée avec la fonction lagsarlm(), avec les arguments requis étant une formule de régression, un ensemble de données et un objet de poids spatial listw.
Syntaxe de base du modèle de lag spatiale
La syntaxe pour l'ajustement d'un modèle de décalage spatial est similaire à la régression standard dans R:
library(spatialreg) spatial_lag_model <- lagsarlm(dependent_var ~ independent_var1 + independent_var2, data = spatial_data, listw = weights) summary(spatial_lag_model)
Interprétation de la sortie du modèle de lag spatiale
Le produit récapitulatif comprendra plusieurs éléments importants :
- Rho (ρ): La variable qui mesure la variable dépendante dans les secteurs définis comme entourant chaque secteur de la matrice des poids spatiaux, utilisée comme variable explicative supplémentaire pour tenir compte de l'agrégation spatiale
- Estimations de l'efficacité[: Les effets de vos variables indépendantes
- : y compris les essais de rapport de probabilité, les essais en z et les essais en Wald
- Statistiques de la conformité des modèles[: AIC, probabilité de loglihood, et autres mesures
Si le coefficient estimé pour rho est à la fois positif et statistiquement significatif, lorsque la variable dépendante dans les quartiers environnants augmente, en moyenne, la variable dépendante dans chaque secteur, même en adaptant pour d'autres variables explicatives.
Mesures d'impact informatique
L'interprétation des effets substantiels de chaque prédicteur dans un modèle de décalage spatial est beaucoup plus complexe que dans un modèle non spatial en raison de la présence du multiplicateur spatial qui relie les variables indépendantes à la dépendante, et l'effet d'un changement dans une variable indépendante n'est pas constant dans toutes les observations.
Pour interpréter correctement les coefficients dans un modèle de décalage spatial, vous devez calculer les mesures d'impact en utilisant la fonction :
impacts_lag <- impacts(spatial_lag_model, listw = weights, R = 999) summary(impacts_lag, zstats = TRUE)
Cela aura trois types d'impacts :
- Effets directs: L'effet d'un changement dans une variable indépendante en un seul endroit sur la variable dépendante en ce même endroit
- Effets indirects: L'effet d'un changement dans une variable indépendante à un endroit sur la variable dépendante à d'autres endroits (effets de débordement)
- Effets totaux: La somme des impacts directs et indirects
Ces mesures d'impact donnent une image complète de la façon dont les changements dans vos variables indépendantes affectent la variable dépendante, tant localement que par les retombées spatiales.
Raccordement de modèles d'erreurs spatiales
Lorsque vos tests diagnostiques indiquent qu'un modèle d'erreur spatiale est plus approprié, vous pouvez l'adapter en utilisant la fonction du paquet spatialreg. La syntaxe est très similaire au modèle de décalage spatial:
spatial_error_model <- errorsarlm(dependent_var ~ independent_var1 + independent_var2, data = spatial_data, listw = weights) summary(spatial_error_model)
Interprétation de la sortie du modèle d'erreur spatiale
Au lieu de Rho, le paramètre d'erreur de décalage est Lambda, qui est un décalage sur l'erreur, et si elle est positive et significative pour tous les tests, cela indique la nécessité de contrôler l'autocorrélation spatiale dans l'erreur.
Les principaux éléments de la production sont les suivants :
- Lambda (λ)[: Le paramètre spatial autorégressif pour le terme d'erreur
- Estimations de l'efficacité[: Ces estimations peuvent être interprétées directement, contrairement au modèle de décalage spatial
- Essais d'importance[: pour les coefficients et lambda
- Statistiques de la configuration du modèle[: AIC, probabilité de loglihood
Contrairement au modèle de décalage spatial, nous n'avons pas besoin d'exécuter impacts(), et les coefficients peuvent donc être directement comparés aux coefficients OLS. Cela rend l'interprétation plus simple, car les coefficients représentent l'effet direct de chaque variable indépendante sur la variable dépendante, la structure d'erreur spatiale tenant compte de l'autocorrélation spatiale dans les résidus.
Vérification de l'autocorrélation spatiale restante
Après avoir ajusté un modèle de décalage ou d'erreur spatiale, il est important de vérifier que le modèle a bien réglé l'autocorrélation spatiale. Vous pouvez tester les résidus de votre modèle spatial:
# Extract residuals residuals_spatial <- residuals(spatial_error_model) # Test for remaining spatial autocorrelation moran.test(residuals_spatial, weights)
Si le test I de Moran sur les résidus n'est plus significatif, votre modèle spatial a réussi à comptabiliser l'autocorrélation spatiale. Si l'autocorrélation significative reste, vous devrez peut-être reconsidérer votre spécification de modèle, ajouter des variables supplémentaires ou explorer des modèles spatiaux plus complexes.
Diagnostic et validation du modèle
Les diagnostics approfondis sont essentiels pour s'assurer que votre modèle de régression spatiale est valide et fiable. Les modèles doivent être diagnostiqués avant de les signaler, ce qui implique d'examiner plusieurs aspects de la performance du modèle.
Examen des résidus
Même après avoir tenu compte de l'autocorrélation spatiale, vous devriez examiner les résidus pour d'autres problèmes potentiels:
# Histogram of residuals hist(residuals(spatial_lag_model), main = "Distribution of Residuals", xlab = "Residuals") # Q-Q plot to check normality qqnorm(residuals(spatial_lag_model)) qqline(residuals(spatial_lag_model)) # Plot residuals against fitted values plot(fitted(spatial_lag_model), residuals(spatial_lag_model), xlab = "Fitted Values", ylab = "Residuals") abline(h = 0, col = "red")
Recherchez les patrons dans les résidus qui pourraient indiquer l'hétéroskédasticité, la non-linéarité, ou les valeurs aberrantes influentes.
Cartographie des résidus
La création d'une carte des résidus peut révéler des modèles spatiaux qui pourraient ne pas être visibles à partir des seuls essais statistiques :
# Add residuals to spatial data
spatial_data$residuals <- residuals(spatial_lag_model)
# Map the residuals
tm_shape(spatial_data) +
tm_polygons("residuals",
style = "jenks",
palette = "RdBu",
midpoint = 0,
title = "Model Residuals") +
tm_layout(legend.outside = TRUE)
Idéalement, les résidus ne devraient pas présenter de patron spatial clair. Les grappes de résidus élevés ou faibles suggèrent que le modèle peut être systématiquement sur- ou sous-prédictif dans certaines régions.
Comparaison des performances du modèle
Comparez votre modèle de régression spatiale au modèle de référence de l'OLS et éventuellement à d'autres spécifications spatiales :
# Compare AIC values (lower is better) AIC(ols_model) AIC(spatial_lag_model) AIC(spatial_error_model) # Compare log-likelihoods logLik(ols_model) logLik(spatial_lag_model) logLik(spatial_error_model)
Le modèle avec le plus bas AIC et le plus haut log-probabilité fournit généralement le meilleur ajustement aux données, bien que vous devriez également considérer la justification théorique et l'interprétabilité.
Vérification des observations influenceuses
Identifier les observations qui ont une influence disproportionnée sur les résultats de votre modèle :
# Cook's distance for OLS model cooks_d <- cooks.distance(ols_model) plot(cooks_d, type = "h", main = "Cook's Distance") abline(h = 4/nrow(spatial_data), col = "red", lty = 2) # Identify influential observations influential 4/nrow(spatial_data)) print(influential)
Étudier les observations influentes pour déterminer si elles représentent des erreurs de données, des aberrations réelles ou des cas importants que votre modèle devrait tenir compte.
Techniques avancées de régression spatiale
Au-delà des modèles de base de décalage spatial et d'erreur spatiale, plusieurs techniques avancées peuvent traiter des processus spatiaux et des structures de données plus complexes.
Modèle de Durbin spatial
Le modèle de Durbin spatial (SDM) comprend à la fois des variables dépendantes et des variables indépendantes, ce qui permet une modélisation plus souple des retombées spatiales:
spatial_durbin_model <- lagsarlm(dependent_var ~ independent_var1 + independent_var2, data = spatial_data, listw = weights, type = "mixed") summary(spatial_durbin_model)
Ce modèle vous permet de vérifier si les effets de débordement diffèrent selon les variables indépendantes et peut fournir des indications sur les facteurs qui génèrent des externalités spatiales.
Régression pondérée géographiquement
La régression pondérée géographique (RGO) permet de varier les coefficients de régression dans l'espace, en tenant compte de l'hétérogénéité spatiale dans les relations. Bien que ce n'est pas un modèle de régression spatiale au même sens que les modèles de décalage ou d'erreur spatiale, RGO est utile lorsque vous soupçonnez que les relations entre les variables diffèrent selon votre zone d'étude :
library(spgwr) # Determine optimal bandwidth bandwidth <- gwr.sel(dependent_var ~ independent_var1 + independent_var2, data = spatial_data, coords = st_coordinates(st_centroid(spatial_data))) # Fit GWR model gwr_model <- gwr(dependent_var ~ independent_var1 + independent_var2, data = spatial_data, coords = st_coordinates(st_centroid(spatial_data)), bandwidth = bandwidth)
Modèles de panneaux spatiaux
Lorsque vous avez des données spatiales observées sur plusieurs périodes, les modèles de panneaux spatiaux combinent les dimensions spatiales et temporelles. Le paquet splm fournit des fonctions pour adapter diverses spécifications de panneaux spatiaux:
library(splm) # Spatial panel lag model spatial_panel <- spml(dependent_var ~ independent_var1 + independent_var2, data = panel_data, listw = weights, model = "within", spatial.error = "none", lag = TRUE)
Présentation et présentation des résultats
Une présentation claire des résultats de régression spatiale est essentielle pour communiquer efficacement vos résultats aux publics techniques et non techniques.
Création de tableaux de qualité des publications
Plusieurs paquets R peuvent vous aider à créer des tables de régression à l'aspect professionnel. Le paquet Stargazer est particulièrement utile pour comparer plusieurs modèles:
library(stargazer)
stargazer(ols_model, spatial_lag_model, spatial_error_model,
type = "text", # use "html" or "latex" for publication
title = "Comparison of Regression Models",
column.labels = c("OLS", "Spatial Lag", "Spatial Error"),
model.numbers = FALSE)
Pour un formatage de table plus moderne, considérez le package de maquettes :
library(modelsummary)
models <- list("OLS" = ols_model,
"Spatial Lag" = spatial_lag_model,
"Spatial Error" = spatial_error_model)
modelsummary(models,
stars = TRUE,
gof_map = c("nobs", "aic", "logLik"))
Visualisation des effets spatiaux
Les cartes sont des outils puissants pour communiquer les résultats de régression spatiale.
- Valeurs observées de la variable dépendante
- Valeurs prévues de votre modèle
- Résidus (observés moins prévus)
- Impacts locaux (pour les modèles de décalages spatiaux)
# Add predictions to spatial data
spatial_data$predicted <- fitted(spatial_lag_model)
# Create side-by-side maps
tm_shape(spatial_data) +
tm_polygons(c("dependent_var", "predicted"),
style = "quantile",
palette = "YlOrRd",
title = c("Observed", "Predicted")) +
tm_layout(legend.outside = TRUE)
Rapports sur les résultats de la régression spatiale
Lors de l'écriture des résultats de régression spatiale, assurez-vous d'inclure:
- Description de la matrice de pondération spatiale utilisée et justification du choix
- Résultats des tests diagnostiques pour l'autocorrélation spatiale (essais de Moran I, LM)
- Comparaison des modèles de régression spatiale et des SLO
- Estimations coefficientes avec erreurs types et niveaux d'importance
- Pour les modèles de décalages spatiaux, les impacts directs, indirects et totaux
- Statistiques de l'ajustement du modèle (AIC, probabilité de loglihood, R-carré si disponible)
- Examen des diagnostics résiduels et validation du modèle
- Cartes ou autres visualisations des principaux résultats
Pièges communs et pratiques exemplaires
Un des aspects les plus importants de la modélisation est la sélection de variables, et un modèle mal spécifié ne sera jamais bon, peu importe combien vous faites pour corriger l'autocorrélation spatiale. Voici les principales considérations pour une analyse de régression spatiale réussie:
Sélection variable et spécification du modèle
Avant de recourir à la régression spatiale, assurez-vous d'avoir inclus toutes les variables théoriquement pertinentes dans votre modèle. Si l'autocorrélation spatiale persiste parce qu'il n'y a pas de données disponibles ou parce que vous n'avez aucune idée de la variable à rechercher, vous pouvez essayer de formuler un modèle de régression qui contrôle l'autocorrélation spatiale.
Considérations relatives à la taille de l'échantillon
La classe de caractéristiques d'entrée devrait contenir au moins 30 caractéristiques, car les résultats ne seront pas fiables avec moins de 30 caractéristiques. Les modèles de régression spatiale exigent des tailles d'échantillon adéquates pour produire des estimations stables, en particulier lors de l'estimation des paramètres spatiaux autorégressifs.
Choisir des poids spatiaux appropriés
Le choix de la matrice de poids spatial peut affecter vos résultats de façon significative. Il faut toujours justifier votre choix en fonction de la théorie et de la nature de vos données.
Interprétation de la causalité
Les modèles de régression spatiale, comme tous les modèles de régression, identifient les associations plutôt que les relations causales. Soyez prudents au sujet des revendications causales, en particulier avec les modèles de décalage spatial où la simultanéité peut compliquer l'interprétation. La présence d'autocorrélation spatiale n'implique pas nécessairement un processus spatial – elle peut simplement refléter des variables omises qui sont regroupées spatialement.
Faire face aux effets de bord
Les mesures globales peuvent être biaisées par les effets de bord lorsque des éléments importants du processus spatial se trouvent en dehors de la zone d'étude. Sachez que les observations aux extrémités de votre zone d'étude peuvent avoir des ensembles de voisins incomplets, ce qui pourrait biaiser les résultats.
Exemple pratique: Flux de travail complet
Voici un exemple complet de flux de travail qui regroupe toutes les étapes décrites dans ce guide :
# Load required packages
library(sf)
library(spdep)
library(spatialreg)
library(tmap)
# 1. Load and prepare data
spatial_data <- st_read("your_data.shp")
spatial_data <- st_transform(spatial_data, crs = 32618) # UTM Zone 18N
# 2. Explore data
summary(spatial_data)
tm_shape(spatial_data) +
tm_polygons("dependent_var", style = "quantile", palette = "YlOrRd")
# 3. Create spatial weights
neighbors <- poly2nb(spatial_data, queen = TRUE)
weights <- nb2listw(neighbors, style = "W")
# 4. Fit OLS model and test for spatial autocorrelation
ols_model <- lm(dependent_var ~ independent_var1 + independent_var2,
data = spatial_data)
lm.morantest(ols_model, weights)
# 5. Run Lagrange Multiplier tests
lm.LMtests(ols_model, weights, test = "all")
# 6. Fit spatial lag model
spatial_lag_model <- lagsarlm(dependent_var ~ independent_var1 + independent_var2,
data = spatial_data,
listw = weights)
summary(spatial_lag_model)
# 7. Compute impacts
impacts_lag <- impacts(spatial_lag_model, listw = weights, R = 999)
summary(impacts_lag, zstats = TRUE)
# 8. Check residuals
moran.test(residuals(spatial_lag_model), weights)
# 9. Map residuals
spatial_data$residuals <- residuals(spatial_lag_model)
tm_shape(spatial_data) +
tm_polygons("residuals", style = "jenks", palette = "RdBu", midpoint = 0)
# 10. Compare models
AIC(ols_model, spatial_lag_model)
Ressources supplémentaires et apprentissages complémentaires
Pour approfondir votre compréhension et rester à l'affût des pratiques exemplaires, envisagez d'explorer ces ressources :
Ressources en ligne
- R-Spatial - Ressources complètes pour la science des données spatiales avec R
- Spatial Data Science with R - Tutoriels et documentation pour l'analyse spatiale
- Géocomputation avec R - Livre en ligne gratuit couvrant l'analyse des données spatiales
- Statistiques spatiales pour la science des données[ - Approches modernes de l'analyse spatiale
- CRAN Task View: Analyse des données spatiales - Liste complète des paquets R pour l'analyse spatiale
Paquets clés R
Restez informé des derniers développements de ces paquets essentiels:
- sf - Des fonctionnalités simples pour R, la norme moderne pour les données vectorielles spatiales
- spdep - Dépendance spatiale : systèmes de pondération, statistiques et modèles
- spatialreg[ - Analyse de régression spatiale
- tmap - Cartes thématiques en R
- mapview - Affichage interactif des données spatiales
- spgwr - régression pondérée géographiquement
- splm - Modèles de données des panneaux spatiaux
Lecture recommandée
Pour les bases théoriques et les techniques avancées, consultez ces textes faisant autorité :
- Anselin, L. (1988). "Économétrie spatiale: méthodes et modèles" - Texte classique sur l'économétrie spatiale
- Bivand, R., Pebesma, E., & Gómez-Rubio, V. (2013). "Applied Spatial Data Analysis with R" - Guide complet d'analyse spatiale en R
- LeSage, J., & Pace, R. K. (2009). "Introduction à l'économétrie spatiale" - Traitement moderne de la régression spatiale
- Cressie, N. (1993). "Statistiques pour les données spatiales" - Fondements théoriques des statistiques spatiales
Conclusion
La mise en oeuvre de la régression spatiale en R implique un flux de travail systématique: préparation et exploration des données spatiales, création de matrices de poids spatiaux appropriés, essais d'autocorrélation spatiale, sélection entre les modèles de décalage et d'erreur spatiale, adaptation du modèle choisi et validation approfondie des résultats par des vérifications diagnostiques.
La clé d'une analyse de régression spatiale réussie réside non seulement dans la compétence technique avec R, mais aussi dans la prise en compte réfléchie des processus spatiaux sous-jacents à vos données. Toujours établir vos choix méthodologiques en théorie, valider soigneusement vos modèles et interpréter les résultats dans le contexte des phénomènes spatiaux et de fond que vous étudiez. En suivant le flux de travail complet décrit dans ce guide, vous serez bien équipé pour effectuer des analyses de régression spatiale rigoureuses qui permettent de mieux comprendre les relations spatiales complexes dans votre domaine de recherche.
Rappelez-vous que la régression spatiale est un domaine actif de développement méthodologique. Restez engagé avec la communauté de recherche, tenez vos paquets R à jour et continuez à apprendre sur les nouvelles techniques et les meilleures pratiques au fur et à mesure que le domaine évolue. L'investissement dans le développement de ces compétences va rapporter des dividendes dans la qualité et l'impact de votre analyse de données spatiales.