Stage d’initiation à la statistique et cartographie avec R
Introduction
Objectif :
Appréhender une chaîne de traitement de données géographiques simples. Faire des traitements statistiques univariés, bivariés, et la cartographie choroplèthe associée.
Avec un volume horaire de 3 demi-journées (12), l’objectif est centré sur l’écriture d’un programme R puis un document Rmarkdown et d’effectuer des traitements de statistique univariée (valeurs centrales, paramètres de dispersion, histogramme, …) et bivariée (par exemple, corrélation, régression, analyse de variance, test d’égalité des moyennes, tableau de contingence, chi-2). Nous réaliserons ceci en mettant en oeuvre l’ensemble de la chaîne de traitement des données, des tableaux de données jusqu’à la cartographie univariée choroplèthe simple. Afin de vous assurer un accompagnement vers le stage commun avec Carthageo, nous utiliserons à la fois le langage standard R, et les nouvelles évolutions tant pour l’écriture du code (tidyverse) que pour les graphiques (ggplot2). L’objectif est que vous disposiez d’un kit méthodologique pour pouvoir traiter de l’univarié et du bivarié en autonomie, jusqu’à des opérations simples de cartographie.
Support de cours :
Le programme de cet enseignement sera basé sur les outils pédagogiques suivants :
d’une part les ressources mises à disposition par Claude Grasland sur l’initiation au langage R : https://claudegrasland.github.io/startR/ et celles de Julien Barnier dans son Introduction à R et au Tidyverse : https://juba.github.io/tidyverse/
d’autre part les ressources de l’UAR RIATE, sur les bases du traitement géomatique avec R : https://rcarto.github.io/geomatique_avec_r/ et https://rcarto.github.io/cartographie_avec_r/
Nous recommandons, par ailleurs cet ouvrage: https://pur-editions.fr/product/8090/r-pour-la-statistique-et-la-science-des-donnees (une commande collective est en cours pour un fournir un exemplaire aux étudiants qui suivent le stage, nous vous tiendrons informé.es)
Le Groupe ElementR, commun aux UMR Géographie-cités, UMR PRODIG et UAR RIATE organise la diffusion de modules d’initation et de formation à R, au tidyverse, à la data visualisation et la cartographie : https://elementr.gitpages.huma-num.fr/website/programme.html
Dates et lieu : Les cours auront lieu en salle 310 du bâtiment Olympe de Gouges à l’Université Paris Cité (MAJ Sept 2O25):
- Lundi 15 septembre 2025 : 9h-12 et 13-17h, ODG 310
- Jeudi 18 septembre 2025 ; 9h-12h, ODG 310
Matériel : Les étudiants sont invités à utiliser leur propre ordinateur, et à y installer les dernières versions de R et Rstudio AVANT la première séance. Nous serons en salle informatique et des postes de travail individuels seront également disponibles - https://larmarange.github.io/analyse-R/installation-de-R-et-RStudio.html
Prérequis : Notion de base en statistique univariée et, si possible bivariée.
Documents et syllabus du TD :
Syllabus et données : http://rlegoix.gitpages.huma-num.fr/cours_m2_traitementsstatscarto
L’ensemble des documents sont mis à dispostion sur un dépôt Git : https://gitlab.huma-num.fr/rlegoix/cours_m2_traitementsstatscarto
Partie 1. Introduction à R Introduction à la chaîne de traitement de l’information géographique avec R.
R: une plateforme statistique, un (des) langage(s) de programmation, un couteau suisse.
De la chaîne de traitement de l’information géographique et la production de documents
Un éconsystème, ou un environnement, qui évolue vite, en recourrant à des librairies (packages) pour accéder à des fonctions avancées ou plus simples d’utilisation.
Objectif: Découvrir l’environnement. Manipuler les principaux objects R.
Premiers pas
Exercice: Réaliser les exercices “Premiers pas” du tuto de Claude Grasland : https://claudegrasland.github.io/startR/01-PremierPas.html
Travail sur un tableau de données (dataframe)
Importer les données à partir d’une fichier texte (format CSV)
Données utilisées : Données Revenus, pauvreté et niveau de vie en 2021 (Iris) de la base Dispositif Fichier localisé social et fiscal (Filosofi) : https://www.insee.fr/fr/statistiques/8229323/ La création de ce fichier est documentée dans les annexes.
On peut importer directement le fichier, ou contrôler la structure des variables, comme sur la copie d’écran ci-dessous.
Notre objectif est de travailler avec les variables
Le tableau de données finales (dataframe) comportera cinq colonnes :
- identifiant géographique :
CODE_IRIS - code département :
DEP - revenus médians 2021 (Médiane du revenu déclaré par unité de
consommation (en euros)) :
DEC_MED21 - indice de Gini du revenu déclaré par unité de consommation 2021 :
DEC_GI21 - part des autres revenus (%) (essentiellement des revenus du
patrimoine) :
DEC_PAUT21
# Méthode simple
Revenus_IRIS <- read.csv("../public/data/Revenus_IRIS_PC.csv")
## Cette méthode nécessite de contrôler à postériori la structure des variables
# Méthode en utilisant l'interface RStudio qui permet 1. de contrôler la structure des variables que l'on importe ; 2. de copier / coller le code utilisé.
library(readr)
Revenus_IRIS_PC <- read_csv("../public/data/Revenus_IRIS_PC.csv",
col_types = cols(IRIS = col_character(),
DEC_MED21 = col_number(), DEC_GI21 = col_number()))## New names:
## • `` -> `...1`
## Warning: One or more parsing issues, call `problems()` on your data frame for details,
## e.g.:
## dat <- vroom(...)
## problems(dat)
Les dimensions du tableau
## [1] 2745 28
## [1] "spec_tbl_df" "tbl_df" "tbl" "data.frame"
#> [1] "data.frame"
# La fonction head() fournit les premières lignes`
# Visualiser les colonnes et variables disponibles
head(Revenus_IRIS_PC)## # A tibble: 6 × 28
## ...1 IRIS DEC_PIMP21 DEC_TP6021 DEC_INCERT21 DEC_Q121 DEC_MED21 DEC_Q321
## <dbl> <chr> <chr> <chr> <chr> <chr> <dbl> <chr>
## 1 1 751010101 ns ns so ns NA ns
## 2 2 751010102 ns ns so ns NA ns
## 3 3 751010103 ns ns so ns NA ns
## 4 4 751010104 ns ns so ns NA ns
## 5 5 751010105 nd nd so nd NA nd
## 6 6 751010199 nd nd so nd NA nd
## # ℹ 20 more variables: DEC_EQ21 <chr>, DEC_D121 <chr>, DEC_D221 <chr>,
## # DEC_D321 <chr>, DEC_D421 <chr>, DEC_D621 <chr>, DEC_D721 <chr>,
## # DEC_D821 <chr>, DEC_D921 <chr>, DEC_RD21 <chr>, DEC_S80S2021 <chr>,
## # DEC_GI21 <dbl>, DEC_PACT21 <chr>, DEC_PTSA21 <chr>, DEC_PCHO21 <chr>,
## # DEC_PBEN21 <chr>, DEC_PPEN21 <chr>, DEC_PAUT21 <chr>, DEC_NOTE21 <chr>,
## # DEP <dbl>
## spc_tbl_ [2,745 × 28] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
## $ ...1 : num [1:2745] 1 2 3 4 5 6 7 8 9 10 ...
## $ IRIS : chr [1:2745] "751010101" "751010102" "751010103" "751010104" ...
## $ DEC_PIMP21 : chr [1:2745] "ns" "ns" "ns" "ns" ...
## $ DEC_TP6021 : chr [1:2745] "ns" "ns" "ns" "ns" ...
## $ DEC_INCERT21: chr [1:2745] "so" "so" "so" "so" ...
## $ DEC_Q121 : chr [1:2745] "ns" "ns" "ns" "ns" ...
## $ DEC_MED21 : num [1:2745] NA NA NA NA NA ...
## $ DEC_Q321 : chr [1:2745] "ns" "ns" "ns" "ns" ...
## $ DEC_EQ21 : chr [1:2745] "ns" "ns" "ns" "ns" ...
## $ DEC_D121 : chr [1:2745] "ns" "ns" "ns" "ns" ...
## $ DEC_D221 : chr [1:2745] "ns" "ns" "ns" "ns" ...
## $ DEC_D321 : chr [1:2745] "ns" "ns" "ns" "ns" ...
## $ DEC_D421 : chr [1:2745] "ns" "ns" "ns" "ns" ...
## $ DEC_D621 : chr [1:2745] "ns" "ns" "ns" "ns" ...
## $ DEC_D721 : chr [1:2745] "ns" "ns" "ns" "ns" ...
## $ DEC_D821 : chr [1:2745] "ns" "ns" "ns" "ns" ...
## $ DEC_D921 : chr [1:2745] "ns" "ns" "ns" "ns" ...
## $ DEC_RD21 : chr [1:2745] "so" "so" "so" "so" ...
## $ DEC_S80S2021: chr [1:2745] "so" "so" "so" "so" ...
## $ DEC_GI21 : num [1:2745] NA NA NA NA NA NA 471 531 503 487 ...
## $ DEC_PACT21 : chr [1:2745] "ns" "ns" "ns" "ns" ...
## $ DEC_PTSA21 : chr [1:2745] "ns" "ns" "ns" "ns" ...
## $ DEC_PCHO21 : chr [1:2745] "ns" "ns" "ns" "ns" ...
## $ DEC_PBEN21 : chr [1:2745] "ns" "ns" "ns" "ns" ...
## $ DEC_PPEN21 : chr [1:2745] "ns" "ns" "ns" "ns" ...
## $ DEC_PAUT21 : chr [1:2745] "ns" "ns" "ns" "ns" ...
## $ DEC_NOTE21 : chr [1:2745] "so" "so" "so" "so" ...
## $ DEP : num [1:2745] 75 75 75 75 75 75 75 75 75 75 ...
## - attr(*, "spec")=
## .. cols(
## .. ...1 = col_double(),
## .. IRIS = col_character(),
## .. DEC_PIMP21 = col_character(),
## .. DEC_TP6021 = col_character(),
## .. DEC_INCERT21 = col_character(),
## .. DEC_Q121 = col_character(),
## .. DEC_MED21 = col_number(),
## .. DEC_Q321 = col_character(),
## .. DEC_EQ21 = col_character(),
## .. DEC_D121 = col_character(),
## .. DEC_D221 = col_character(),
## .. DEC_D321 = col_character(),
## .. DEC_D421 = col_character(),
## .. DEC_D621 = col_character(),
## .. DEC_D721 = col_character(),
## .. DEC_D821 = col_character(),
## .. DEC_D921 = col_character(),
## .. DEC_RD21 = col_character(),
## .. DEC_S80S2021 = col_character(),
## .. DEC_GI21 = col_number(),
## .. DEC_PACT21 = col_character(),
## .. DEC_PTSA21 = col_character(),
## .. DEC_PCHO21 = col_character(),
## .. DEC_PBEN21 = col_character(),
## .. DEC_PPEN21 = col_character(),
## .. DEC_PAUT21 = col_character(),
## .. DEC_NOTE21 = col_character(),
## .. DEP = col_double()
## .. )
## - attr(*, "problems")=<externalptr>
On va donc nettoyer tout ça pour réduire la taille, et manipuler des données complètes
# Sélectionner les colonnes qui nous intéressent (nettoyage des fichiers)
Revenus_IRIS_PC <- Revenus_IRIS_PC[,c("IRIS","DEP","DEC_MED21","DEC_GI21","DEC_PAUT21")]
# Nettoyer les fichiers. On a vu que des lignes comportaient des données numériques manquantes, codées NA. On va les supprimer. Il y a deux solutions
# On supprime les enregistrements qui contiennent des données manquantes
# Supprimer les lignes avec des valeurs NA
Revenus_IRIS_PC <- na.omit(Revenus_IRIS_PC)
# Il doit rester 2529 lignes
# On conserve les enregistrements qui sont complets
Revenus_IRIS_PC <- Revenus_IRIS_PC[complete.cases(Revenus_IRIS_PC), ]
# Il doit rester 2529 lignes (le monde est bien fait)
#
# Ooops, il semblerait que la variable `DEC_PAUT21` soit toujours une chaîne de caractère. On a besoin de la transformer en variable numérique
# Ce n'est pas très grave
# Essayer puis voir ce que ça donne.
Revenus_IRIS_PC$RevPatrimoine <- as.numeric(Revenus_IRIS_PC$DEC_PAUT21)## Warning: NAs introduced by coercion
# On a encore un souci car la décimale est codée avec une virgule.
# On va manipuler la chaîne de caractère pour mettre un point à la place
# On utilise la fonction `gsub` qui permet de remplacer des expressions régulières dans une chaîne de caractère
Revenus_IRIS_PC$RevPatrimoine <- gsub(",", ".", Revenus_IRIS_PC$DEC_PAUT21)
# On peut maintenant converir la variable dans un format numérique
Revenus_IRIS_PC$RevPatrimoine <- as.numeric(Revenus_IRIS_PC$RevPatrimoine)
# Et supprimer une variable devenue inutile
Revenus_IRIS_PC$DEC_PAUT21 <- NULLRésumé statistique du tableau
Cette étape est souvent indispensable, elle fournit une premier analyse univariée. La fonction summary() donne un aperçu général des variables
## IRIS DEP DEC_MED21 DEC_GI21
## Length:2529 Min. :75.00 Min. : 7330 Min. :202.0
## Class :character 1st Qu.:75.00 1st Qu.:18910 1st Qu.:360.0
## Mode :character Median :92.00 Median :27770 Median :390.0
## Mean :86.82 Mean :29052 Mean :402.4
## 3rd Qu.:93.00 3rd Qu.:37260 3rd Qu.:425.0
## Max. :94.00 Max. :77180 Max. :789.0
## RevPatrimoine
## Min. : 0.100
## 1st Qu.: 2.600
## Median : 4.600
## Mean : 6.662
## 3rd Qu.: 7.800
## Max. :62.700
Variables numériques (variables quantitatives)
Une variable numérique peut faire l’objet d’un ensemble de résumés statistiques à l’aide de fonctions élémentaires
- min() : minimum
- max() : maximum
- mean() : moyenne
- sd() : écart-type (en anglais : standard deviation, soit sd en abrégé)
- sum() : somme
Pour l’exercice on peut créer un vecteur X à partir
d’une variable du dataframe Revenus_IRIS_PC.
## [1] 7330
## [1] 77180
## [1] 29052
## [1] 11998.37
Pour calculer les quantiles on peut utiliser la fonction quantile() en paramétrant la valeur de fréquence cumulée ascendante
- quantile(X,0) : minimum
- quantile(X,0.10) : D1 (premier décile)
- quantile(X,0.25) : Q1 (premier quartile)
- quantile(X,0.5) : Q2 (médiane)
- quantile(X,0.75) : Q3 (troisième quartile)
- quantile(X,0.90) : D9 (dernier décile)
- quantile(X,1) : maximum
## 50%
## 27770
## 0% 25% 50% 75% 100%
## 7330 18910 27770 37260 77180
## 0% 10% 20% 30% 40% 50% 60% 70% 80% 90% 100%
## 7330 14468 17426 20540 24222 27770 31996 35262 39180 44394 77180
Il peut arriver qu’une fonction soit manquante dans R, comme par exemple le coefficient de variation. Dans ce cas, on peut faire le calcul par des lignes de code ou créer sa propre fonction avec l’instruction function(). La fonction qui est stockée en mémoire apparaît dans la fenêtre Environnement. Lorsqu’on a créé plusieurs fonctions, on peut en faire un programme R qu’on charge en mémoire au début de chaque session. A plus long terme, on peut en faire un package qu’on partagera avec les autres utilisateurs de R (ceux que nous allons bientôt utiliser)
A titre d’exemple, nous créons une fonction cv() qui calcule le rapport entre l’écart-type et la moyenne d’une distribution :
## [1] 0.4129963
## [1] 0.4129963
Rapport Univarié
On peut utiliser certains packages comme skimr, qui
produit un tableau prêt à imprimer
| Name | Revenus_IRIS_PC |
| Number of rows | 2529 |
| Number of columns | 5 |
| _______________________ | |
| Column type frequency: | |
| character | 1 |
| numeric | 4 |
| ________________________ | |
| Group variables | None |
Variable type: character
| skim_variable | n_missing | complete_rate | min | max | empty | n_unique | whitespace |
|---|---|---|---|---|---|---|---|
| IRIS | 0 | 1 | 9 | 9 | 0 | 2529 | 0 |
Variable type: numeric
| skim_variable | n_missing | complete_rate | mean | sd | p0 | p25 | p50 | p75 | p100 | hist |
|---|---|---|---|---|---|---|---|---|---|---|
| DEP | 0 | 1 | 86.82 | 8.54 | 75.0 | 75.0 | 92.0 | 93.0 | 94.0 | ▅▁▁▁▇ |
| DEC_MED21 | 0 | 1 | 29052.00 | 11998.37 | 7330.0 | 18910.0 | 27770.0 | 37260.0 | 77180.0 | ▇▇▅▁▁ |
| DEC_GI21 | 0 | 1 | 402.43 | 70.76 | 202.0 | 360.0 | 390.0 | 425.0 | 789.0 | ▁▇▂▁▁ |
| RevPatrimoine | 0 | 1 | 6.66 | 7.16 | 0.1 | 2.6 | 4.6 | 7.8 | 62.7 | ▇▁▁▁▁ |
Dénombrement
Une variable quantitative peut être discrétisée avec
cut(). Elle devient alors un facteur qu’on peut dénomber
avec table() puis visualiser avec plot() sous
la forme de diagramme en bâtons.
X<-cut(Revenus_IRIS_PC$DEC_MED21, c(0,10000,20000,30000,40000,50000,60000,70000, 80000,90000, 100000))
str(X)## Factor w/ 10 levels "(0,1e+04]","(1e+04,2e+04]",..: 4 5 4 4 5 6 5 5 5 4 ...
## X
## (0,1e+04] (1e+04,2e+04] (2e+04,3e+04] (3e+04,4e+04] (4e+04,5e+04]
## 8 710 679 674 325
## (5e+04,6e+04] (6e+04,7e+04] (7e+04,8e+04] (8e+04,9e+04] (9e+04,1e+05]
## 98 29 6 0 0
## Factor w/ 5 levels "(0,20]","(20,40]",..: 1 2 1 1 2 2 3 1 1 1 ...
## X
## (0,20] (20,40] (40,60] (60,80] (80,100]
## 2389 122 17 1 0
plot(X, main = "Fréquence simple des IRIS par % de patrimoine dans le revenu des ménages", xlab = "classes")Production d’un histogramme, dans le cas d’une variable continue
X<-Revenus_IRIS_PC$DEC_GI21
hist(X, main = "Histogramme de l'indice de gini (2021)", xlab = "classes")Variables qualitatives
Les variables qualitatives nominales ou factor sont des
objets composés d’une liste de numéros et d’une liste d’étiquettes.
On peut transformer une variable quantitative en facteur avec la
fonction cut()
A partir des revenus, nous allons créer 4 catégories de communes en fonction de la médiane, auxquels nous pouvons simplement donner les noms des quartiles :
Q1: Iris les plus pauvres “Quartiers plus pauvres”Q2: Inférieure à la médiane “Quartiers modestes”Q3: Supérieurs à la médiane “Quartiers aisés”Q4; 4e quartile, les plus riches médiane “Quartiers riches”
On peut écrire cette transformation des données de la manière suivante, en insérant manuellement les bornes, ce qui créé 4 intervalles :
Revenus_IRIS_PC$RevQuartiles <-cut(Revenus_IRIS_PC$DEC_MED21, breaks=c(7330, 18910.0, 27770.0, 37260.0, 77180.0))On peut ensuite recoder les classes avec levels()
levels(Revenus_IRIS_PC$RevQuartiles)<-c("Quartiers plus pauvres","Quartiers modestes","Quartiers aisés","Quartiers riches")Une autre possibilité consiste à utiliser une fonction ce qui créé 4
intervalles statistiques (fonction quantile) :
Revenus_IRIS_PC$RevQuartiles <- cut(Revenus_IRIS_PC$DEC_MED21, breaks=c(quantile(Revenus_IRIS_PC$DEC_MED21, probs = seq(0, 1, by=0.25))))
levels(Revenus_IRIS_PC$RevQuartiles)<-c("Quartiers plus pauvres","Quartiers modestes","Quartiers aisés","Quartiers riches")Option que l’on peut tester par exemple avec le patrimoine
Revenus_IRIS_PC$CatRevPatrimoine <- cut(Revenus_IRIS_PC$RevPatrimoine, breaks=c(quantile(Revenus_IRIS_PC$RevPatrimoine, probs = seq(0, 1, by=0.25))))
levels(Revenus_IRIS_PC$CatRevPatrimoine)<-c("Faible","Inf Mediane","Sup Mediane","Elevés")Dénombrement
La fonction table()permet de dénombrer une variable
qualitative
##
## Quartiers plus pauvres Quartiers modestes Quartiers aisés
## 633 632 631
## Quartiers riches
## 632
Pour comparer 2 variables, ces tables peuvent avoir plusieurs dimensions
##
## Faible Inf Mediane Sup Mediane Elevés
## Quartiers plus pauvres 494 111 23 2
## Quartiers modestes 144 328 137 23
## Quartiers aisés 13 172 310 136
## Quartiers riches 0 18 157 457
Des fonctions permettent de procéder à des calculs ou des
manipulations de ces tableaux. La fonction addmargins()
rajoute des sommes en ligne (et en colonne si la table est de dimension
2)
##
## Faible Inf Mediane Sup Mediane Elevés Sum
## Quartiers plus pauvres 494 111 23 2 630
## Quartiers modestes 144 328 137 23 632
## Quartiers aisés 13 172 310 136 631
## Quartiers riches 0 18 157 457 632
## Sum 651 629 627 618 2525
La mise en forme des tableaux par R n’est pas toujours satisfaisante.
Le package knitr et la fonction kablepermet
d’améliorer le rendu dans les documents produits1
On peut comparer la distribution de ces deux variables avec un
plot, qui peut être amélioré, et réaliser sur ce tableau un
test statistique (Chi-2)
x <- Revenus_IRIS_PC$RevQuartiles
y <- Revenus_IRIS_PC$CatRevPatrimoine
tab <- table(x, y)
# Version brute
plot(tab) # Version améliorée
plot(tab, main = "Distribution des revenus et du patrimoine par IRIS en 2022", xlab ="Revenus médians (quartiles)", ylab ="% de revenus du patrimoine", las = 1, cex = .5)##
## Pearson's Chi-squared test
##
## data: x and y
## X-squared = 2424.6, df = 9, p-value < 2.2e-16
Certaines fonctions permettent de produire des graphiques dont la
mise en forme est plus avancée. Le package vcdpar exemple
propose plusieurs types de graphiques de ce type
vcd::mosaic(~ RevQuartiles + CatRevPatrimoine, data = Revenus_IRIS_PC, shade = TRUE, direction = "v", rot_labels=c(45,90,0,0))La position des variables n’est pas lisible. On peut aisément contrôler la position, la taille, etc. avec par exemple les commandes suivantes :
## Warning: package 'vcd' was built under R version 4.3.3
## Loading required package: grid
mosaic(~ RevQuartiles + CatRevPatrimoine, data = Revenus_IRIS_PC, shade = TRUE,
labeling = labeling_border(rot_labels = c(90,0, 0, 0),
offset_label =c(2,5,0, 0),
varnames = c(FALSE, TRUE),
just_labels=c("center","right"),
tl_varnames = FALSE) ) Comparaison d’une variable quantitative et d’une variable qualitative
La comparaison d’une variable quantitative et d’une variable qualitative peut prendre la forme d’une comparaison de la distribution statistique (boxplot) et d’un test de Fischer. On applique cette analyse à l’indice de Gini en fonction des revenus du patrimoine classés par quartiles
x <- Revenus_IRIS_PC$CatRevPatrimoine # Variable qualitative
y <- Revenus_IRIS_PC$DEC_GI21 # Variable quantitative (indice de Gini)
plot(x,y,
col=c("blue","lightblue","pink", "red"),
xlab ="Indice de Gini",
ylab = "% des revenus du patrimoine",
horizontal=T)## Df Sum Sq Mean Sq F value Pr(>F)
## x 3 4701027 1567009 497 <2e-16 ***
## Residuals 2521 7949269 3153
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 4 observations deleted due to missingness
x <- as.factor(Revenus_IRIS_PC$DEP) # Variable qualitative
y <- Revenus_IRIS_PC$DEC_GI21 # Variable quantitative (indice de Gini)
plot(x,y,
col=c("blue","lightblue","pink", "red"),
xlab ="Indice de Gini",
ylab = "Départements",
horizontal=T)## Df Sum Sq Mean Sq F value Pr(>F)
## x 3 3566909 1188970 330.3 <2e-16 ***
## Residuals 2525 9089080 3600
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Comparaison de deux variables quantitatives
La comparaison de deux variables qualitatives se fait généralement en traçant un diagramme bivarié, en calculant le coefficient de corrélation (Test de Pearson), et en analysant éventuellement les résultats d’une régression linéaire. On peut faire ces analyses pour deux couples de variables, et analyser la corrélation de l’une avec l’autre.
La régression linéraire permet d’analyser l’hypothèse d’une dépendance entre une variable à expliquer et une variable explicative. La fonction `lm()ù ou lm est l’abbréviation de linear model permet d”effectuer la plupart des modèles de régression linéaire basés sur la méthode des moindres carrés ordinaire. Sa syntaxe est a priori très simple et renvoie les coefficients b et a du modèle de régression.
x <- Revenus_IRIS_PC$DEC_MED21 # Variable quantitative
y <- Revenus_IRIS_PC$RevPatrimoine # Variable quantitative
plot(x,y, xlab="revenus médians",ylab="Revenus du patrimoine")
cor.test(y,x)##
## Pearson's product-moment correlation
##
## data: y and x
## t = 56.425, df = 2527, p-value < 2.2e-16
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## 0.7288993 0.7634230
## sample estimates:
## cor
## 0.7466635
##
## Call:
## lm(formula = y ~ x)
##
## Coefficients:
## (Intercept) x
## -6.2732415 0.0004453
# Plot avec la régression
plot(x,y, xlab="revenus médians",ylab="Revenus du patrimoine")
abline(monmodel1, col="red",lwd=2)##
## Call:
## lm(formula = y ~ x)
##
## Residuals:
## Min 1Q Median 3Q Max
## -8.704 -2.563 -0.297 1.398 43.558
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -6.273e+00 2.480e-01 -25.29 <2e-16 ***
## x 4.453e-04 7.891e-06 56.42 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 4.76 on 2527 degrees of freedom
## Multiple R-squared: 0.5575, Adjusted R-squared: 0.5573
## F-statistic: 3184 on 1 and 2527 DF, p-value: < 2.2e-16
x <- Revenus_IRIS_PC$DEC_MED21 # Variable quantitative (revenus médians)
y <- Revenus_IRIS_PC$DEC_GI21 # Variable quantitative (indice de Gini)
plot(x,y, xlab="revenus médians",ylab="indice de Gini")##
## Pearson's product-moment correlation
##
## data: y and x
## t = 25.499, df = 2527, p-value < 2.2e-16
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## 0.4208254 0.4828459
## sample estimates:
## cor
## 0.4523825
##
## Call:
## lm(formula = y ~ x)
##
## Coefficients:
## (Intercept) x
## 3.249e+02 2.668e-03
# Plot avec la régression
plot(x,y, xlab="revenus médians",ylab="Revenus du patrimoine")
abline(monmodel2, col="blue",lwd=2)