Analyse des données de département avec R
Importation des données
Les données considérées dans cet exemple proviennent du Groupe d’Etude et de Réflexion Inter-régional (GERI). Elles décrivent quatre grands thèmes : la démographie, l’emploi, la fiscalité directe locale et la criminalité. Les indicateurs sont mesurés sur l’ensemble des départements français métropolitains et la Corse (regroupée) pendant l’année 1990. Ils sont, pour la plupart, des taux calculés relativement à la population
totale du département concerné. Voici la liste des variables:
• TXCR: taux de croissance de la population sur la période intercensitaire 1982-1990
• ETRA : part des étrangers dans la population totale
• URBR : taux d’urbanisation
• JEUN : part des 0-19 ans dans la population totale
• AGE: part des plus de 65 ans dans la population totale
• CHOM : taux de chômage
• Parts de chaque profession et catégorie socio-professionnelle (PCS) dans la population active occupée du département :
– AGRI : agriculteurs – ARTI : artisans
– CADR : cadres supérieurs – EMPL : employés
– OUVR : ouvriers
– PROF : professions intermédiaire
• FISC : produit, en francs constants 1990 et par habitant, des quatre taxes directes locales (professionnelle, habitation, foncier bâti, foncier non bâti)
• CRIM : taux de criminalité : nombre de délits par habitant
• FE90 : taux de fécondité (pour 1000), égal au nombre de naissances rapporté au nombre de femmes fécondes (15 à 49 ans) en moyenne triennale
La fonction read.csv permet d’importer les données dans R. Sous R Studio, on peut aussi utiliser l’outil
“Import Dataset” disponible dans le menu.
depart2 <- read.csv("http://pagesperso.univ-brest.fr/~ailliot/doc_cours/M1EURIA/regression/depart2.dat", sep="") Avant de réaliser des analyses statistiques avec R, il faut vérifier que les données ont été importées au bon
format.
• Le résultat de l’importation doit être un objet de type data.frame.
• Chaque ligne doit correspondre à un individu et chaque colonne à une variable.
• Il faut aussi que chaque variable ait le bon type (qualitatif/quantitatif).
Les différentes commandes ci-dessous peuvent être utilisées pour visualiser le contenu du jeu de données.
summary(depart2)
## DEP REG TXCR ETRA
## Ad : 2 IdF : 8 Min. :-5.730 Min. :0.00600
## SH : 2 MiP : 8 1st Qu.: 0.330 1st Qu.:0.02750
## 2S : 1 RhA : 8 Median : 2.740 Median :0.04600
## Ab : 1 Cen : 6 Mean : 3.758 Mean :0.05121
## Ag : 1 PAC : 6 3rd Qu.: 6.510 3rd Qu.:0.06550
## AH : 1 Aqu : 5 Max. :21.870 Max. :0.18900
## (Other):87 (Other):54
## URBR JEUN AGE CHOM
## Min. :0.0000 Min. :0.1860 Min. :0.0880 Min. :0.0630
## 1st Qu.:0.2660 1st Qu.:0.2380 1st Qu.:0.1345 1st Qu.:0.0935
## Median :0.3950 Median :0.2610 Median :0.1590 Median :0.1090
## Mean :0.4368 Mean :0.2588 Mean :0.1626 Mean :0.1108
## 3rd Qu.:0.5585 3rd Qu.:0.2785 3rd Qu.:0.1880 3rd Qu.:0.1205
## Max. :1.0010 Max. :0.3120 Max. :0.2540 Max. :0.1730
#### AGRI ARTI CADR EMPL
## Min. :0.00000 Min. :0.05100 Min. :0.05200 Min. :0.2120
## 1st Qu.:0.03300 1st Qu.:0.07000 1st Qu.:0.07050 1st Qu.:0.2390
## Median :0.06500 Median :0.08400 Median :0.08300 Median :0.2530
## Mean :0.06981 Mean :0.08594 Mean :0.09212 Mean :0.2560
## 3rd Qu.:0.09000 3rd Qu.:0.10000 3rd Qu.:0.09700 3rd Qu.:0.2665
## Max. :0.22200 Max. :0.13700 Max. :0.32100 Max. :0.3330
#### OUVR PROF FISC CRIM
## Min. :0.1340 Min. :0.1440 Min. :2217 Min. : 24.60
## 1st Qu.:0.2725 1st Qu.:0.1705 1st Qu.:2769 1st Qu.: 36.75
## Median :0.3110 Median :0.1840 Median :2978 Median : 46.20
## Mean :0.3092 Mean :0.1870 Mean :3110 Mean : 52.06
## 3rd Qu.:0.3560 3rd Qu.:0.2015 3rd Qu.:3354 3rd Qu.: 62.25
## Max. :0.4120 Max. :0.2500 Max. :5030 Max. :139.90
#### FE90
## Min. :39.50
## 1st Qu.:47.70
## Median :51.40
## Mean :50.70
## 3rd Qu.:53.75
## Max. :64.40
##
str(depart2)
## 'data.frame': 95 obs. of 17 variables:
## $ DEP : Factor w/ 93 levels "2S","Ab","Ad",..: 6 11 7 9 5 8 10 3 4 2 ...
## $ REG : Factor w/ 22 levels "Als","Aqu","Auv",..: 22 20 3 18 18 18 22 8 16 8 ...
## $ TXCR: num 12.19 0.89 -2.63 10 7.82 ...
## $ ETRA: num 0.095 0.035 0.031 0.046 0.037 0.091 0.039 0.056 0.055 0.057 ...
## $ URBR: num 0.339 0.358 0.464 0.19 0.294 0.945 0.281 0.324 0 0.424 ...
## $ JEUN: num 0.285 0.289 0.227 0.235 0.25 0.21 0.252 0.292 0.215 0.27 ...
## $ AGE : num 0.133 0.143 0.204 0.19 0.173 0.217 0.184 0.138 0.228 0.155 ...
## $ CHOM: num 0.07 0.133 0.135 0.123 0.089 0.119 0.105 0.144 0.12 0.113 ...
## $ AGRI: num 0.045 0.049 0.086 0.065 0.072 0.012 0.085 0.065 0.09 0.068 ...
## $ ARTI: num 0.084 0.07 0.095 0.127 0.117 0.124 0.106 0.069 0.103 0.067 ...
## $ CADR: num 0.088 0.071 0.07 0.09 0.078 0.127 0.073 0.065 0.073 0.067 ...
## $ EMPL: num 0.24 0.24 0.262 0.261 0.302 0.316 0.224 0.24 0.261 0.227 ...
## $ OUVR: num 0.347 0.4 0.311 0.256 0.23 0.227 0.329 0.386 0.298 0.401 ...
## $ PROF: num 0.195 0.171 0.176 0.2 0.201 0.194 0.184 0.176 0.175 0.17 ...
## $ FISC: num 2772 2854 3160 4033 3365 ...
## $ CRIM: num 38.7 52.2 39 57.7 49.2 ...
## $ FE90: num 52.3 56.9 42.7 52.3 53.5 50 48.4 55.6 44.1 51.9 ...
head(depart2)
## DEP REG TXCR ETRA URBR JEUN AGE CHOM AGRI ARTI CADR EMPL
## 1 Ai RhA 12.19 0.095 0.339 0.285 0.133 0.070 0.045 0.084 0.088 0.240
## 2 As Pic 0.89 0.035 0.358 0.289 0.143 0.133 0.049 0.070 0.071 0.240
## 3 Al Auv -2.63 0.031 0.464 0.227 0.204 0.135 0.086 0.095 0.070 0.262
## 4 AP PAC 10.00 0.046 0.190 0.235 0.190 0.123 0.065 0.127 0.090 0.261
## 5 AH PAC 7.82 0.037 0.294 0.250 0.173 0.089 0.072 0.117 0.078 0.302
## 6 AM PAC 10.56 0.091 0.945 0.210 0.217 0.119 0.012 0.124 0.127 0.316
## OUVR PROF FISC CRIM FE90
## 1 0.347 0.195 2772.3 38.7 52.3
## 2 0.400 0.171 2854.4 52.2 56.9
## 3 0.311 0.176 3159.6 39.0 42.7
## 4 0.256 0.200 4033.1 57.7 52.3
## 5 0.230 0.201 3364.9 49.2 53.5
## 6 0.227 0.194 4335.4 123.6 50.0
On voit en particulier que les deux premières colonnes sont des variables qualitatives (‘Factor’). Elles correspondent au nom des régions/départements et ne sont pas intéressantes pour la suite. On les enlève donc des données avec la commande ci-dessous.
z=depart2[,-(1:2)] #on enlève les deux première colonnes
Statistiques descriptives
Dans la suite nous allons nous intéresser particulièrement à la variable CRIM. On peut calculer différentes valeurs numériques et réaliser des graphiques pour résumer cette variable.
mean(z$CRIM)
## [1] 52.05684 sd(z$CRIM)
## [1] 21.09455 hist(z$CRIM)
Histogram of z$CRIM
z$CRIM
Frequency
20 40 60 80 100 120 140
0 5 10 15 20 25 30 35
On peut aussi visualiser la relation entre les différentes variables à l’aide de la fonction plot, mais les graphiques sont rapidement surchargés lorsque le nombre de variables augmente.
plot(z)
TXCR
0.00 0.20 0.06 0.06 0.22 0.14 20
−5
0.00
ETRA URBR
0.0
0.20
JEUN AGE
0.10
0.06
CHOM AGRI
0.00
0.06
ARTI CADR
0.05
0.22
EMPL OUVR
0.15
0.14
PROF FISC
2500
20 CRIM
−5 0.0 0.10 0.00 0.05 0.15 2500 40
40FE90
On peut alors plutôt représenter la matrice de corrélation qui est un résumé de la relationlinéaireentre les variables.
c=cor(z) #URBR est la variable la plus corrélée avec CRIM library(corrplot)
corrplot(c)
−1
−0.8
−0.6
−0.4
−0.2 0 0.2 0.4 0.6 0.8
TXCR ETRA URBR JEUN A GE CHOM A GRI AR TI CADR EMPL OUVR PR OF FISC CRIM FE90
1TXCR ETRA URBR JEUN AGE CHOM AGRI ARTI CADR EMPL OUVR PROF FISC CRIM FE90
On peut en particulier visualiser avec quelles variables la variable CRIM est corrélée/anticorrélée.
L’analyse en composantes principales utilise les éléments propres de la matrice de corrélation et trouve une base “optimale” pour représenter les données dans un espace de dimension 2.
library(FactoMineR) par(mfrow=c(1,2)) PCA(z)
−6 −2 2 4 6 8
−5 0 5 10
Individuals factor map (PCA)
Dim 1 (44.82%)
Dim 2 (22.22%)
2 1 3 4
5 6
7 8 9
10
12 11 13 14 15
16 17
18 19 20
22 21 23 24
25 26 27 28 29
30 31
32 33
34 35 36 37 38
39 40
41 42 43 44 45 46 48 47
50 51 49 52 53
55 54 56
57 58
60 59 61 62
64 63 65
66
67 68 69 70
71 72
73 74
75
76 77 78 79 80
82 81
83 84 85
86 87 88
89 90
91 92
93 94
95
−1.0 0.0 0.5 1.0
−1.0 0.0 0.5 1.0
Variables factor map (PCA)
Dim 1 (44.82%)
Dim 2 (22.22%)
TXCR URBR ETRA
JEUN AGE
CHOM AGRI
ARTI
EMPL CADR
OUVR
PROF FISC CRIM
FE90 TXCR URBR ETRA
JEUN AGE
CHOM AGRI
ARTI
EMPL CADR
OUVR
PROF FISC CRIM
FE90 TXCR URBR ETRA
JEUN AGE
CHOM AGRI
ARTI
EMPL CADR
OUVR
PROF FISC CRIM
FE90 TXCR URBR ETRA
JEUN AGE
CHOM AGRI
ARTI
EMPL CADR
OUVR
PROF FISC CRIM
FE90 TXCR URBR ETRA
JEUN AGE
CHOM AGRI
ARTI
EMPL CADR
OUVR
PROF FISC CRIM
FE90 TXCR URBR ETRA
JEUN AGE
CHOM AGRI
ARTI
EMPL CADR
OUVR
PROF FISC CRIM
FE90 TXCR URBR ETRA
JEUN AGE
CHOM AGRI
ARTI
EMPL CADR
OUVR
PROF FISC CRIM
FE90 TXCR URBR ETRA
JEUN AGE
CHOM AGRI
ARTI
EMPL CADR
OUVR
PROF FISC CRIM
FE90 TXCR URBR ETRA
JEUN AGE
CHOM AGRI
ARTI
EMPL CADR
OUVR
PROF FISC CRIM
FE90
## **Results for the Principal Component Analysis (PCA)**
## The analysis was performed on 95 individuals, described by 15 variables
## *The results are available in the following objects:
#### name description
## 1 "$eig" "eigenvalues"
## 2 "$var" "results for the variables"
## 3 "$var$coord" "coord. for the variables"
## 4 "$var$cor" "correlations variables - dimensions"
## 5 "$var$cos2" "cos2 for the variables"
## 6 "$var$contrib" "contributions of the variables"
## 7 "$ind" "results for the individuals"
## 8 "$ind$coord" "coord. for the individuals"
## 9 "$ind$cos2" "cos2 for the individuals"
## 10 "$ind$contrib" "contributions of the individuals"
## 11 "$call" "summary statistics"
## 12 "$call$centre" "mean of the variables"
## 13 "$call$ecart.type" "standard error of the variables"
## 14 "$call$row.w" "weights for the individuals"
## 15 "$call$col.w" "weights for the variables"
Pour les données considérées, le premier plan principal explique 67% de l’inertie totale du jeu de données. On voit ressortir 3 groupes de variables/départements.
• Les variables CRIM/FISC/CADR/URBR/ETRA/TXCR/EMPL qui sont fortement corrélées entre elles et prennent des grandes valeurs dans des départements fortement urbanisés tels que 92/93/94/95/75 (région parisienne) et 13/6/69 (Marseille/Nice/Lyon).
• Les variables ARTI/AGE/AGRI/CHOM qui prennent des grandes valeurs dans des départements ruraux (23/15/32/. . . ).
• Les variables FE90/JEUN/OUVR qui prennent des grandes valeurs dans des départements ouvriers tel que 27/62/60 (nord de la France).
Régression linéaire pour la variable CRIM
La fonction lm permet d’ajuster des modèles de régression pour expliquer la variable CRIM à partir des autres variables. Commençons par un modèle de régression linaire simple avec comme variable explicative la variable URBR qui est la plus corrélée avec CRIM.
fit=lm(CRIM~URBR,data=z) summary(fit)
#### Call:
## lm(formula = CRIM ~ URBR, data = z)
#### Residuals:
## Min 1Q Median 3Q Max
## -22.056 -10.554 -4.131 5.013 51.376
#### Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 23.83 3.28 7.265 1.13e-10 ***
## URBR 64.63 6.64 9.735 7.46e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#### Residual standard error: 14.93 on 93 degrees of freedom
## Multiple R-squared: 0.5047, Adjusted R-squared: 0.4994
## F-statistic: 94.76 on 1 and 93 DF, p-value: 7.455e-16 confint(fit)
## 2.5 % 97.5 %
## (Intercept) 17.31404 30.33892
## URBR 51.44819 77.81795
Pour analyser les résultats obtenus, on notera en particulier la valeur des coefficients R2 et R2 ajustés ainsi que les p-values des tests de significativité des différentes variables.
Considérons maintenent un modèle de régression linéaire multiple avec toutes les variables disponibles comme variables explicatives.
fit2=lm(CRIM~.,data=z) summary(fit2)
#### Call:
## lm(formula = CRIM ~ ., data = z)
#### Residuals:
## Min 1Q Median 3Q Max
## -28.9513 -5.1029 0.5126 3.7960 22.1232
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -1.609e+03 1.297e+03 -1.241 0.21833
## TXCR 7.493e-01 2.928e-01 2.559 0.01237 *
## ETRA 6.939e+01 5.290e+01 1.312 0.19338
## URBR 2.152e+01 9.488e+00 2.269 0.02598 *
## JEUN -2.076e+02 1.413e+02 -1.469 0.14575
## AGE -2.254e+01 1.089e+02 -0.207 0.83656
## CHOM 2.605e+02 4.819e+01 5.406 6.49e-07 ***
## AGRI 1.526e+03 1.297e+03 1.176 0.24294
## ARTI 1.839e+03 1.301e+03 1.414 0.16138
## CADR 1.783e+03 1.293e+03 1.379 0.17169
## EMPL 1.566e+03 1.285e+03 1.219 0.22656
## OUVR 1.597e+03 1.295e+03 1.233 0.22119
## PROF 1.514e+03 1.303e+03 1.162 0.24885
## FISC 2.603e-03 2.527e-03 1.030 0.30617
## FE90 1.167e+00 4.094e-01 2.849 0.00557 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#### Residual standard error: 8.522 on 80 degrees of freedom
## Multiple R-squared: 0.8611, Adjusted R-squared: 0.8368
## F-statistic: 35.43 on 14 and 80 DF, p-value: < 2.2e-16
On note que certaines variables semblent inutiles dans le modèle complet (p-value supérieure à 5%). Les méthodes de “sélection de modèle” permettent d’enlever ces variables inutiles, ce qui a pour avantage de rendre le modèle plus facile à interpréter et aussi de donner des meilleurs résultats en prédiction (les variables inutiles rajoutent des paramètres à estimer et donc de l’incertitude dans les prédictions).
Les commandes ci-dessous permettent de parcourir tous les modèles possibles et de trouver celui qui a le meilleur R2 ajusté.
library(leaps)
sel=regsubsets(CRIM~.,data=z,nvmax =14,method="exhaustive") plot(sel,scale="adjr2")
adjr2 (Intercept) TXCR ETRA URBR JEUN A GE CHOM A GRI AR TI CADR EMPL OUVR PR OF FISC FE90
0.67 0.5 0.74 0.79 0.8 0.82 0.83 0.84 0.84 0.84 0.84 0.84 0.84 0.84
Dans l’exemple considéré, les covariables sont fortement corrélées entre elles. Ceci peut conduire à des résultats surprenants. Par exemple, le meilleur modèle à une variable est le modèle avec URBR (variable la plus corrélée). Par contre, le meilleur modèle à 2 variables n’utilise pas la variable URBR mais les variables CHOM et CADR. On peut ensuite ajuster le modèle sélectionné à l’aide de la commande ci-dessous.
fit3=lm(CRIM~TXCR+ETRA+URBR+JEUN+CHOM+ARTI+CADR+OUVR+FE90,data=z) summary(fit3)
#### Call:
## lm(formula = CRIM ~ TXCR + ETRA + URBR + JEUN + CHOM + ARTI +
## CADR + OUVR + FE90, data = z)
#### Residuals:
## Min 1Q Median 3Q Max
## -28.7959 -4.7352 -0.5587 4.0895 22.4455
#### Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -71.0499 25.1422 -2.826 0.005875 **
## TXCR 0.8961 0.2514 3.564 0.000602 ***
## ETRA 69.3387 47.1875 1.469 0.145408
## URBR 27.0615 7.4860 3.615 0.000508 ***
## JEUN -217.6162 83.2604 -2.614 0.010593 *
## CHOM 265.7765 43.8725 6.058 3.64e-08 ***
## ARTI 293.2932 97.9599 2.994 0.003605 **
## OUVR 62.3556 30.8552 2.021 0.046436 *
## FE90 1.2668 0.3732 3.395 0.001046 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#### Residual standard error: 8.416 on 85 degrees of freedom
## Multiple R-squared: 0.8561, Adjusted R-squared: 0.8408
## F-statistic: 56.17 on 9 and 85 DF, p-value: < 2.2e-16
A noter que l’utilisation du critère R2 conduit toujours à sélectionner le modèle complet (car on projette sur un plus grand s.e.v. : la distance entre la variable à expliquer et le projeté orthogonal est donc plus petite).
library(leaps)
sel=regsubsets(CRIM~.,data=z,nvmax =14,method="exhaustive") plot(sel,scale="r2")