-
Notifications
You must be signed in to change notification settings - Fork 0
/
06b-matching_mailles.qmd
133 lines (108 loc) · 3.99 KB
/
06b-matching_mailles.qmd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
# Appariement de mailles dans/hors aires protégées {#sec-matching_mailles}
> **Attention : ** Ce chapitre est encore en cours d'élaboration.
## Procédure en avec/sans
Une procédure détaillée est proposée dans <https://github.com/openkfw/mapme.protectedareas>
On commence ici par une approche naïve, dans le sens où on apparie simplement les zones dans les aires protégées avec les zones hors aires protégées pour expliquer le principe du matching ("appariement", en français).
Les données ne peuvent pas contenir de données manquantes sur les variables d'appariement, donc on les écarte.
```{r}
library(tidyverse)
library(MatchIt)
library(stargazer)
library(sf)
library(cobalt)
library(tmap)
# Taille des titres des cartes
taille_titres_cartes = 1
load("data/grille_mada_summary_AP.rds")
# On référence le nom des variables qui vont servir à l'analyse
variables_analyse <- c("assetid","treatment","distance_minutes_5k_110mio",
"tri_mean", "elevation_mean", "mean_clay_5_15cm",
"treecover_2000", "var_treecover")
# On renomme le ficher 'df' (dataframe) : plus concis dans les commandes ensuite
df <- grille_mada_summary_AP %>%
# On supprime toutes les lignes pour lesquelles au moins 1 valeur variable
# est manquante parmi les variables d'analyse
mutate(treatment = position_ap == "Intérieur") %>%
drop_na(any_of(variables_analyse))
```
On analyse maintenant le score de propension.
```{r}
#| output: false
# Get propensity scores
glm_out <- glm(treatment ~
distance_minutes_5k_110mio +
mean_clay_5_15cm +
tri_mean +
elevation_mean +
treecover_2000,
family = binomial(link = "probit"),
data = df)
cellmatch_out1 <- stargazer(glm_out,
summary = TRUE,
type = "html",
title = "Probit regression for matching frame ") %>%
str_replace_all("\\*", "\\\\*")
# Dans un bloc plus bas et non affiché, on a le code suivant
# cat(cellmatch_out1)
```
```{r}
#| echo: false
#| output: asis
cat(cellmatch_out1)
```
On visualise la localisation des cellules utilisées comme contrôles.
```{r}
m_out <- matchit(treatment ~
distance_minutes_5k_110mio +
mean_clay_5_15cm +
tri_mean +
elevation_mean +
treecover_2000,
data = df,
method = "nearest",
replace = TRUE,
# exact = ~ as.factor(NAME_0),
distance = "glm",
discard = "both", # common support: drop units from both groups
link = "probit")
print(m_out)
# print(summary(m_out, un = FALSE))
bal_table <- bal.tab(m_out, un = TRUE)
print(bal_table)
m_data <- match.data(m_out) %>%
st_sf()
# On charge le countour des frontières malgaches
load("data/contour_mada.rds")
# On visualise les données appareillées
tm_shape(contour_mada) +
tm_borders() +
tm_shape(m_data) +
tm_fill(col = "treatment", palette = "Set1", title = "Groupes d'appariement",
labels = c("Contrôle", "Traitement")) +
tm_layout(legend.outside = TRUE,
main.title = "Localisation des groupes de traitement et de contrôle",
main.title.position = c("center", "top"),
main.title.size = taille_titres_cartes)
```
On réalise la régression.
```{r}
#| output: false
modele <- lm(formula = var_treecover ~
treatment +
distance_minutes_5k_110mio +
mean_clay_5_15cm +
tri_mean +
elevation_mean +
treecover_2000,
data = m_data,
weights = weights)
cellmatch_out2 <- stargazer(modele, type = "html") %>%
str_replace_all("\\*", "\\\\*")
# Dans un bloc plus bas et non affiché, on a le code suivant
# cat(cellmatch_out2)
```
```{r}
#| output: asis
#| echo: false
cat(cellmatch_out2)
```