On importe les données :
parcelles <- read.csv2("1.csv",
header = TRUE,
fileEncoding = "CP1252",
stringsAsFactors = FALSE)
dico <- read.csv2("2.csv",
header = TRUE,
fileEncoding = "CP1252",
stringsAsFactors = FALSE)
str(parcelles)
## 'data.frame': 25365 obs. of 109 variables:
## $ ID : int 20003 20003 20005 20005 20005 20005 20005 20007 20007 20007 ...
## $ ORIGINE : chr "DAAF - BASE2010" "DAAF - BASE2010" "DAAF - BASE2010" "DAAF - BASE2010" ...
## $ PARC_CAD : chr "9722130000W0490" "9722130000W0490" "9722030000C0434" "9722030000C0434" ...
## $ PROFOND : int 2 2 2 2 2 2 2 2 2 2 ...
## $ ANNEE : int 2010 2010 2010 2010 2010 2010 2010 2010 2010 2010 ...
## $ COMMU_LAB : chr "LAMENTIN(LE)" "LAMENTIN(LE)" "BASSE-POINTE" "BASSE-POINTE" ...
## $ NUMERO_SIG : chr NA NA NA NA ...
## $ Positionne : chr "Plusieurs points GPS" "Plusieurs points GPS" "Plusieurs points GPS" "Plusieurs points GPS" ...
## $ RPG19_COD : chr "BEF" "BEF" "CSF" "CSF" ...
## $ ocs_gid : int 74838 81193 106665 106665 106665 106665 106665 105216 107387 105216 ...
## $ ocs_id : chr "OCSGE0000000000006484456" "OCSGE0000000000006490811" "OCSGE0000000000006516282" "OCSGE0000000000006516282" ...
## $ ocs_code_cs : chr "CS1.1.2.1" "CS2.2.2.2.2" "CS2.2.1.4.5.5" "CS2.2.1.4.5.5" ...
## $ ocs_code_us : chr "US1.1" "US1.1" "US1.1" "US1.1" ...
## $ ocs_millesime : int 2017 2017 2017 2017 2017 2017 2017 2017 2017 2017 ...
## $ ocs_source : chr "saisie" "RPG" "RPG" "RPG" ...
## $ ocs_ossature : int 0 0 0 0 0 0 0 0 0 0 ...
## $ ocs_id_origine : chr "NC" "NC" "NC" "NC" ...
## $ ocs_code_or : chr "NC" "NC" "NC" "NC" ...
## $ formationvegetales_gid : int NA NA NA NA NA NA NA NA NA NA ...
## $ formationvegetales_tfv : chr NA NA NA NA ...
## $ formationvegetales_theme : chr NA NA NA NA ...
## $ formationvegetales_libelle : chr NA NA NA NA ...
## $ pluviométrie_moyenne_annuelle: chr "2000-3000" "2000-3000" "2000-3000" "2000-3000" ...
## $ sol.simple_OBJECTID : int 293 293 12141 12141 12141 12141 12141 12141 12141 12141 ...
## $ sol.simple_ENSEMBLECD : chr "C" "C" "P" "P" ...
## $ sol.simple_SOUSENSV : chr NA NA "P1" "P1" ...
## $ sol.simple_FACIESCD : chr NA NA "e" "e" ...
## $ sol.simple_SSFACIESCD : chr NA NA NA NA ...
## $ sol.simple_COMPLEXECD : chr "Ab Bb" "Ab Bb" NA NA ...
## $ sol.simple_TENDANCE : chr "A, B" "A, B" "P" "P" ...
## $ sol.simple_OID_ : int 1 1 36 36 36 36 36 36 36 36 ...
## $ sol.simple_SYMBOLE : chr "A, B" "A, B" "P" "P" ...
## $ sol.simple_TYPE_DE_SO : chr "Alluvium, Colluvium" "Alluvium, Colluvium" "Andosol" "Andosol" ...
## $ sol.complexe_OBJECTID : int 1318 1318 8313 8574 8575 8341 8342 8470 8470 8161 ...
## $ sol.complexe_ENSEMBLECD : chr "A" "A" "J" "J" ...
## $ sol.complexe_SOUSENSV : chr "A3" "A3" "J1" "J2" ...
## $ sol.complexe_FACIESCD : chr "d" "d" NA NA ...
## $ sol.complexe_SSFACIESCD : chr NA NA NA NA ...
## $ sol.complexe_VARIANTECD : chr NA NA NA NA ...
## $ sol.complexe_ASSOCD : chr NA NA NA NA ...
## $ sol.complexe_COMPLEXECD : chr NA NA NA NA ...
## $ sol.complexe_TENDANCE : chr "A" "A" "J" "J" ...
## $ mnt.exposition_mean : num 98.2 105.3 131 63.9 53.5 ...
## $ mnt.exposition_median : num 0 0 79.6 63.9 50.7 ...
## $ mnt.exposition_stdev : num 137.779 119.415 123.826 0.503 12.503 ...
## $ mnt.exposition_min : num 0 0 11.3 63.4 36.9 ...
## $ mnt.exposition_max : num 315 315 341.6 64.4 71.6 ...
## $ mnt.exposition_minority : num 315 45 11.3 63.4 36.9 ...
## $ mnt.exposition_majority : num 0 0 341.6 63.4 36.9 ...
## $ mnt.exposition_variance : num 1.90e+04 1.43e+04 1.53e+04 2.53e-01 1.56e+02 ...
## $ mnt.ombrage_mean : num 181 181 179 172 179 ...
## $ mnt.ombrage_median : num 181 181 180 172 179 ...
## $ mnt.ombrage_stdev : num 0.437 1.084 6.234 0.5 2.135 ...
## $ mnt.ombrage_min : int 181 178 164 171 176 157 165 183 174 175 ...
## $ mnt.ombrage_max : int 182 184 186 172 182 189 179 189 188 189 ...
## $ mnt.ombrage_minority : int 182 184 164 171 176 159 165 183 174 175 ...
## $ mnt.ombrage_majority : int 181 181 179 171 176 171 173 189 175 175 ...
## $ mnt.ombrage_variance : num 0.191 1.176 38.859 0.25 4.56 ...
## $ mnt.pente_mean : num 0.22 0.761 3.641 13.082 5.702 ...
## $ mnt.pente_median : num 0 0.354 2.689 13.082 5 ...
## $ mnt.pente_stdev : num 0.309 0.863 3.399 0.334 0.996 ...
## $ mnt.pente_min : num 0 0 1.58 12.75 4.74 ...
## $ mnt.pente_max : num 0.707 2.236 12.51 13.416 7.106 ...
## $ mnt.pente_minority : num 0.707 2.121 2 12.748 4.743 ...
## $ mnt.pente_majority : num 0 0 1.58 12.75 4.74 ...
## $ mnt.pente_variance : num 0.0957 0.7455 11.5557 0.1118 0.9924 ...
## $ mnt.rugosité_mean : num 0.312 0.5 2.375 8.5 4.2 ...
## $ mnt.rugosité_median : num 0 0.5 2 8.5 4 7 7 6 4 7 ...
## $ mnt.rugosité_stdev : num 0.437 0.5 1.798 0.5 1.166 ...
## $ mnt.rugosité_min : int 0 0 1 8 3 2 3 5 2 6 ...
## $ mnt.rugosité_max : int 1 1 7 9 6 10 10 7 8 9 ...
## $ mnt.rugosité_minority : int 1 0 7 8 4 2 3 5 2 6 ...
## $ mnt.rugosité_majority : int 0 0 2 8 3 7 7 5 4 7 ...
## $ mnt.rugosité_variance : num 0.191 0.25 3.234 0.25 1.36 ...
## $ mnt.tpi_mean : num 0.039 -0.0278 0.5312 -0.3125 -0.425 ...
## $ mnt.tpi_median : num 0 0 0.375 -0.312 -0.25 ...
## $ mnt.tpi_stdev : num 0.0547 0.2353 0.544 0.8125 0.6154 ...
## $ mnt.tpi_min : num 0 -0.625 -0.25 -1.125 -1.375 ...
## $ mnt.tpi_max : num 0.125 0.625 1.625 0.5 0.25 ...
## $ mnt.tpi_minority : num 0.125 -0.625 -0.25 -1.125 -1.375 ...
## $ mnt.tpi_majority : num 0 0 0.375 -1.125 -1.375 ...
## $ mnt.tpi_variance : num 0.00299 0.05536 0.2959 0.66016 0.37875 ...
## $ mnt.tri_mean : num 0.039 0.148 0.812 2.562 1.175 ...
## $ mnt.tri_median : num 0 0.0625 0.625 2.5625 1.25 ...
## $ mnt.tri_stdev : num 0.0547 0.1849 0.6281 0.0625 0.2031 ...
## $ mnt.tri_min : num 0 0 0.25 2.5 0.875 ...
## $ mnt.tri_max : num 0.125 0.625 2.375 2.625 1.375 ...
## $ mnt.tri_minority : num 0.125 0.625 0.25 2.5 0.875 ...
## $ mnt.tri_majority : num 0 0 0.625 2.5 1.375 ...
## $ mnt.tri_variance : num 0.00299 0.03419 0.39453 0.00391 0.04125 ...
## $ surface.parcelle_m2 : num 43.2 33477.9 5132.4 1306.3 2879.2 ...
## $ type_sol : chr "Alluvions continentales" "Alluvions continentales" "Sols peu ‚volu‚s sur cendres" "Sols peu ‚volu‚s sur cendres" ...
## $ Date_prelevement : chr "06/12/2005" "06/12/2005" "08/12/2005" "08/12/2005" ...
## $ Année : int 2005 2005 2005 2005 2005 2005 2005 2005 2005 2005 ...
## $ Numero_sig : chr "MA/PSCH/02-VG" "MA/PSCH/02-VG" "MA/PSCH/03-VG" "MA/PSCH/03-VG" ...
## $ Origine_donnee : int 5 5 5 5 5 5 5 5 5 5 ...
## $ Interet : int 1 1 1 1 1 1 1 1 1 1 ...
## $ Date_enregistrement : chr "06/12/2005" "06/12/2005" "08/12/2005" "08/12/2005" ...
## $ Adresse_parcelle : chr "Union" "Union" "Eyma" "Eyma" ...
## [list output truncated]
dim(parcelles)
## [1] 25365 109
On a donc 25365 observations pour 109 variables.
On construit l’objet DATA en ne gardant que les variables demandées dans l’énoncé.
DATA <- parcelles[, c("Taux_chlordecone",
"surface.parcelle_m2",
"mnt.pente_mean",
"mnt.rugosité_mean",
"mnt.ombrage_mean",
"mnt.exposition_mean",
"pluviométrie_moyenne_annuelle",
"ocs_source",
"Interet")]
str(DATA)
## 'data.frame': 25365 obs. of 9 variables:
## $ Taux_chlordecone : num 3.6 3.6 2.7 2.7 2.7 2.7 2.7 1.9 1.9 1.9 ...
## $ surface.parcelle_m2 : num 43.2 33477.9 5132.4 1306.3 2879.2 ...
## $ mnt.pente_mean : num 0.22 0.761 3.641 13.082 5.702 ...
## $ mnt.rugosité_mean : num 0.312 0.5 2.375 8.5 4.2 ...
## $ mnt.ombrage_mean : num 181 181 179 172 179 ...
## $ mnt.exposition_mean : num 98.2 105.3 131 63.9 53.5 ...
## $ pluviométrie_moyenne_annuelle: chr "2000-3000" "2000-3000" "2000-3000" "2000-3000" ...
## $ ocs_source : chr "saisie" "RPG" "RPG" "RPG" ...
## $ Interet : int 1 1 1 1 1 1 1 1 1 1 ...
On dispose maintenant d’un tableau réduit, plus simple à manipuler pour les analyses suivantes.
On réalise un tableau récapitulatif du type et du rôle de chaque variable de DATA.
vars <- c("Taux_chlordecone",
"surface.parcelle_m2",
"mnt.pente_mean",
"mnt.rugosité_mean",
"mnt.ombrage_mean",
"mnt.exposition_mean",
"pluviométrie_moyenne_annuelle",
"ocs_source",
"Interet")
type_var <- c("quantitative continue",
"quantitative continue",
"quantitative continue",
"quantitative continue",
"quantitative continue",
"quantitative continue",
"qualitative ordinale (par classes)",
"qualitative nominale",
"qualitative nominale")
role_var <- c("réponse",
"explicative",
"explicative",
"explicative",
"explicative",
"explicative",
"regroupement / explicative",
"explicative / contexte",
"regroupement")
descr <- data.frame(Variable = vars,
Type = type_var,
Role = role_var,
stringsAsFactors = FALSE)
knitr::kable(descr, caption = "Typologie des variables (Question A3)")
| Variable | Type | Role |
|---|---|---|
| Taux_chlordecone | quantitative continue | réponse |
| surface.parcelle_m2 | quantitative continue | explicative |
| mnt.pente_mean | quantitative continue | explicative |
| mnt.rugosité_mean | quantitative continue | explicative |
| mnt.ombrage_mean | quantitative continue | explicative |
| mnt.exposition_mean | quantitative continue | explicative |
| pluviométrie_moyenne_annuelle | qualitative ordinale (par classes) | regroupement / explicative |
| ocs_source | qualitative nominale | explicative / contexte |
| Interet | qualitative nominale | regroupement |
On identifie ainsi la variable de réponse (taux de chlordécone), les explicatives quantitatives (surface et indicateurs MNT) et les qualitatives de regroupement.
On corrige les types des variables de DATA et on regarde la présence de valeurs manquantes.
DATA$Taux_chlordecone <- as.numeric(DATA$Taux_chlordecone)
DATA$surface.parcelle_m2 <- as.numeric(DATA$surface.parcelle_m2)
DATA$mnt.pente_mean <- as.numeric(DATA$mnt.pente_mean)
DATA$mnt.rugosité_mean <- as.numeric(DATA$mnt.rugosité_mean)
DATA$mnt.ombrage_mean <- as.numeric(DATA$mnt.ombrage_mean)
DATA$mnt.exposition_mean <- as.numeric(DATA$mnt.exposition_mean)
DATA$pluviométrie_moyenne_annuelle <- as.factor(DATA$pluviométrie_moyenne_annuelle)
DATA$ocs_source <- as.factor(DATA$ocs_source)
DATA$Interet <- as.factor(DATA$Interet)
summary(DATA)
## Taux_chlordecone surface.parcelle_m2 mnt.pente_mean mnt.rugosité_mean
## Min. : 0.0010 Min. : 0.00 Min. : 0.00 Min. : 0.00
## 1st Qu.: 0.0013 1st Qu.: 10.58 1st Qu.: 10.74 1st Qu.: 7.40
## Median : 0.0033 Median : 99.96 Median : 17.72 Median :11.96
## Mean : 0.4817 Mean : 843.26 Mean : 20.03 Mean :13.29
## 3rd Qu.: 0.1525 3rd Qu.: 540.75 3rd Qu.: 26.84 3rd Qu.:17.62
## Max. :17.3500 Max. :104365.91 Max. :124.95 Max. :85.06
## mnt.ombrage_mean mnt.exposition_mean pluviométrie_moyenne_annuelle
## Min. : 24.79 Min. : 0.0 0-1250 : 309
## 1st Qu.:159.50 1st Qu.: 90.0 1250-1500: 1460
## Median :177.06 Median :169.9 1500-2000: 6540
## Mean :175.03 Mean :170.2 2000-3000:13857
## 3rd Qu.:193.01 3rd Qu.:248.2 3000-5000: 3107
## Max. :254.44 Max. :359.1 5000-8000: 92
## ocs_source Interet
## BDForet:5828 1: 8490
## BDTopo :4433 2:10509
## calcul : 1 4: 3041
## mixte : 782 5: 3325
## RPG :4735
## saisie :9586
colSums(is.na(DATA))
## Taux_chlordecone surface.parcelle_m2
## 0 0
## mnt.pente_mean mnt.rugosité_mean
## 0 0
## mnt.ombrage_mean mnt.exposition_mean
## 0 0
## pluviométrie_moyenne_annuelle ocs_source
## 0 0
## Interet
## 0
Les variables ont maintenant un type adapté, et le comptage des NA servira à décider quelles lignes exclure dans les analyses qui suivent.
On étudie la distribution de pluviométrie_moyenne_annuelle avec un tableau et des graphiques.
tab_pluv <- table(DATA$pluviométrie_moyenne_annuelle)
tab_pluv
##
## 0-1250 1250-1500 1500-2000 2000-3000 3000-5000 5000-8000
## 309 1460 6540 13857 3107 92
prop_pluv <- prop.table(tab_pluv) * 100
round(prop_pluv, 1)
##
## 0-1250 1250-1500 1500-2000 2000-3000 3000-5000 5000-8000
## 1.2 5.8 25.8 54.6 12.2 0.4
mode_pluv <- names(tab_pluv)[which.max(tab_pluv)]
mode_pluv
## [1] "2000-3000"
barplot(tab_pluv,
main = "Pluviométrie moyenne annuelle",
xlab = "Classe de pluviométrie",
ylab = "Effectifs")
lbl <- paste0(names(prop_pluv), " (", round(prop_pluv, 1), " %)")
pie(prop_pluv,
labels = lbl,
main = "Répartition de la pluviométrie moyenne annuelle")
La classe 2000–3000mm est la plus fréquente, les classes extrêmes sont presque absentes.
On crée deux nouvelles variables qualitatives à partir du taux de chlordécone et de la surface.
qT <- quantile(DATA$Taux_chlordecone, probs = c(0.25, 0.75), na.rm = TRUE)
seuil1_T <- qT[1]
seuil2_T <- qT[2]
DATA$Taux_cat <- cut(DATA$Taux_chlordecone,
breaks = c(-Inf, seuil1_T, seuil2_T, Inf),
labels = c("faible", "moyen", "élevé"),
right = TRUE)
qS <- quantile(DATA$surface.parcelle_m2, probs = c(1/3, 2/3), na.rm = TRUE)
seuil1_S <- qS[1]
seuil2_S <- qS[2]
DATA$surface_classe <- cut(DATA$surface.parcelle_m2,
breaks = c(-Inf, seuil1_S, seuil2_S, Inf),
labels = c("petite", "moyenne", "grande"),
right = TRUE)
table(DATA$Taux_cat, useNA = "ifany")
##
## faible moyen élevé
## 6439 12592 6334
table(DATA$surface_classe, useNA = "ifany")
##
## petite moyenne grande
## 8456 8454 8455
On obtient des classes faible/moyen/élevé pour le taux et petite/moyenne/grande pour la surface, avec des effectifs raisonnables dans chaque catégorie.
On étudie le lien entre Taux_cat et la pluviométrie moyenne annuelle à l’aide d’un tableau croisé et d’un test du χ².
tab_B3 <- table(DATA$Taux_cat, DATA$pluviométrie_moyenne_annuelle)
tab_B3
##
## 0-1250 1250-1500 1500-2000 2000-3000 3000-5000 5000-8000
## faible 103 645 2424 3049 218 0
## moyen 201 784 3038 6821 1656 92
## élevé 5 31 1078 3987 1233 0
prop_B3_lignes <- prop.table(tab_B3, margin = 1) * 100
round(prop_B3_lignes, 1)
##
## 0-1250 1250-1500 1500-2000 2000-3000 3000-5000 5000-8000
## faible 1.6 10.0 37.6 47.4 3.4 0.0
## moyen 1.6 6.2 24.1 54.2 13.2 0.7
## élevé 0.1 0.5 17.0 62.9 19.5 0.0
test_chi <- chisq.test(tab_B3)
test_chi
##
## Pearson's Chi-squared test
##
## data: tab_B3
## X-squared = 2083.7, df = 10, p-value < 2.2e-16
test_chi$stdres
##
## 0-1250 1250-1500 1500-2000 2000-3000 3000-5000 5000-8000
## faible 3.229927 16.995545 25.190397 -13.580910 -25.114571 -5.604834
## moyen 5.449454 3.192468 -5.990369 -1.464526 4.350785 9.677920
## élevé -9.542320 -20.776155 -18.408624 15.346879 20.226287 -5.543591
Le test du χ² donne une p‑value très petite (p‑value < 2,2·10⁻¹⁶). On rejette donc H0 au seuil de 5% : Taux_cat et pluviométrie_moyenne_annuelle ne sont pas indépendantes.
On calcule les indicateurs de base (moyenne, médiane, min, max, etc.) pour les variables quantitatives.
varsC <- c("Taux_chlordecone",
"surface.parcelle_m2",
"mnt.pente_mean")
indicateurs <- data.frame(
Variable = varsC,
Moyenne = sapply(DATA[varsC], mean, na.rm = TRUE),
Mediane = sapply(DATA[varsC], median, na.rm = TRUE),
Q1 = sapply(DATA[varsC], quantile, probs = 0.25, na.rm = TRUE),
Q3 = sapply(DATA[varsC], quantile, probs = 0.75, na.rm = TRUE),
Min = sapply(DATA[varsC], min, na.rm = TRUE),
Max = sapply(DATA[varsC], max, na.rm = TRUE),
Var = sapply(DATA[varsC], var, na.rm = TRUE),
Sd = sapply(DATA[varsC], sd, na.rm = TRUE)
)
indicateurs
## Variable Moyenne Mediane Q1 Q3
## Taux_chlordecone Taux_chlordecone 0.4816993 0.00330 0.00130 0.15250
## surface.parcelle_m2 surface.parcelle_m2 843.2608100 99.95569 10.57776 540.75378
## mnt.pente_mean mnt.pente_mean 20.0265018 17.71580 10.73836 26.83766
## Min Max Var Sd
## Taux_chlordecone 0.001 17.35 1.855045e+00 1.36200
## surface.parcelle_m2 0.000 104365.91 8.818724e+06 2969.63368
## mnt.pente_mean 0.000 124.95 1.700549e+02 13.04051
Ces valeurs donnent une idée du niveau moyen et de la dispersion de chaque variable.
On représente la distribution du taux de chlordécone et de la surface par des histogrammes.
par(mfrow = c(1,2))
hist(DATA$Taux_chlordecone,
main = "Histogramme du Taux_chlordecone",
xlab = "Taux_chlordecone")
hist(DATA$surface.parcelle_m2,
main = "Histogramme de la surface",
xlab = "surface.parcelle_m2")
par(mfrow = c(1,1))
Ces graphiques permettent de visualiser la forme des distributions (concentration, asymétrie, valeurs extrêmes éventuelles).
On compare le taux de chlordécone entre les différentes classes de pluviométrie.
boxplot(Taux_chlordecone ~ pluviométrie_moyenne_annuelle,
data = DATA,
xlab = "Pluviométrie moyenne annuelle",
ylab = "Taux_chlordecone",
main = "Taux_chlordecone selon la pluviométrie")
Le boxplot permet de comparer les médianes, la dispersion et les valeurs extrêmes entre les classes de pluviométrie.
On détermine un nombre de classes raisonnable pour la surface et on construit l’histogramme associé.
x <- DATA$surface.parcelle_m2
x <- x[!is.na(x)]
n <- length(x)
xmin <- min(x)
xmax <- max(x)
kYule <- 2.5 * n^(1/4)
kSturges <- 1 + 3.3 * log10(n)
kYule; kSturges
## [1] 31.54995
## [1] 15.53398
k <- round(kSturges)
bornes <- seq(from = xmin, to = xmax, length.out = k + 1)
classe_surface <- cut(x, breaks = bornes, include.lowest = TRUE)
tabC4 <- table(classe_surface)
freqC4 <- prop.table(tabC4) * 100
tabC4
## classe_surface
## [0,6.52e+03] (6.52e+03,1.3e+04] (1.3e+04,1.96e+04] (1.96e+04,2.61e+04]
## 24704 443 106 47
## (2.61e+04,3.26e+04] (3.26e+04,3.91e+04] (3.91e+04,4.57e+04] (4.57e+04,5.22e+04]
## 33 11 5 5
## (5.22e+04,5.87e+04] (5.87e+04,6.52e+04] (6.52e+04,7.18e+04] (7.18e+04,7.83e+04]
## 4 0 2 1
## (7.83e+04,8.48e+04] (8.48e+04,9.13e+04] (9.13e+04,9.78e+04] (9.78e+04,1.04e+05]
## 0 0 2 2
round(freqC4, 1)
## classe_surface
## [0,6.52e+03] (6.52e+03,1.3e+04] (1.3e+04,1.96e+04] (1.96e+04,2.61e+04]
## 97.4 1.7 0.4 0.2
## (2.61e+04,3.26e+04] (3.26e+04,3.91e+04] (3.91e+04,4.57e+04] (4.57e+04,5.22e+04]
## 0.1 0.0 0.0 0.0
## (5.22e+04,5.87e+04] (5.87e+04,6.52e+04] (6.52e+04,7.18e+04] (7.18e+04,7.83e+04]
## 0.0 0.0 0.0 0.0
## (7.83e+04,8.48e+04] (8.48e+04,9.13e+04] (9.13e+04,9.78e+04] (9.78e+04,1.04e+05]
## 0.0 0.0 0.0 0.0
hist(x,
breaks = bornes,
main = "Surface par classes (Sturges/Yule)",
xlab = "surface.parcelle_m2")
On obtient ainsi une partition de la surface en classes de taille comparable et on voit dans quelles classes se concentrent les parcelles.
On étudie le lien linéaire entre la pente moyenne et le taux de chlordécone.
plot(DATA$mnt.pente_mean, DATA$Taux_chlordecone,
xlab = "mnt.pente_mean",
ylab = "Taux_chlordecone",
main = "Taux_chlordecone en fonction de la pente moyenne")
cor_pente <- cor(DATA$mnt.pente_mean, DATA$Taux_chlordecone,
use = "complete.obs", method = "pearson")
cor_pente
## [1] 0.01359255
Le nuage de points et la corrélation montrent à quel point la pente et le taux de chlordécone sont liés, et dans quel sens.
On ajuste un modèle linéaire qui explique le taux de chlordécone à partir de la surface et des variables topographiques.
mod <- lm(Taux_chlordecone ~ surface.parcelle_m2 +
mnt.pente_mean +
mnt.rugosité_mean +
mnt.ombrage_mean,
data = DATA)
summary(mod)
##
## Call:
## lm(formula = Taux_chlordecone ~ surface.parcelle_m2 + mnt.pente_mean +
## mnt.rugosité_mean + mnt.ombrage_mean, data = DATA)
##
## Residuals:
## Min 1Q Median 3Q Max
## -5.0822 -0.4717 -0.4007 -0.2904 16.6046
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 3.606e-02 5.851e-02 0.616 0.538
## surface.parcelle_m2 6.024e-05 2.857e-06 21.087 < 2e-16 ***
## mnt.pente_mean -1.187e-02 2.622e-03 -4.525 6.08e-06 ***
## mnt.rugosité_mean 2.358e-02 4.080e-03 5.778 7.64e-09 ***
## mnt.ombrage_mean 1.823e-03 3.098e-04 5.885 4.03e-09 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1.349 on 25360 degrees of freedom
## Multiple R-squared: 0.0198, Adjusted R-squared: 0.01965
## F-statistic: 128.1 on 4 and 25360 DF, p-value: < 2.2e-16
coef(mod)
## (Intercept) surface.parcelle_m2 mnt.pente_mean mnt.rugosité_mean
## 3.606336e-02 6.023633e-05 -1.186541e-02 2.357773e-02
## mnt.ombrage_mean
## 1.823292e-03
Le résumé du modèle donne les coefficients, les p‑values et le R², ce qui permet de voir quelles variables sont significatives et combien de variabilité du taux de chlordécone est expliquée.
Dans ce TP, on prend en main le jeu de données sur la chlordécone : on importe les deux fichiers, on sélectionne les variables pertinentes et on nettoie la base (types, valeurs manquantes). On décrit ensuite les variables qualitatives et quantitatives à l’aide de tableaux, d’indicateurs et de graphiques (pluviométrie, surface, pente, etc.). Le test du χ² met en évidence un lien significatif entre les classes de pluviométrie et les niveaux de contamination (p‑value < 2,2·10⁻¹⁶), ce qui conduit à rejeter l’hypothèse d’indépendance. On ajuste enfin un modèle de régression linéaire multiple avec la surface et les variables topographiques : les coefficients sont significatifs mais le R² reste faible (environ 2%), donc le modèle explique peu la variabilité du taux de chlordécone. Globalement, on observe que les facteurs environnementaux étudiés ont un impact, mais qu’ils ne suffisent pas à eux seuls pour prédire précisément la contamination des parcelles