In [ ]:
# help()
# help(function)
# help(package='package-name)
In [ ]:
# install
# install.packages('package-name')
# already installed with conda
#install.packages("foreign")
# new installs
#install.packages("Rcmdr", dependencies = TRUE, repos="http://cran.rstudio.com/") # in conda?
#install.packages("nortest", repos="http://cran.rstudio.com/")
#install.packages("sas7bdat", repos="http://cran.rstudio.com/")
#install.packages("Hmisc", repos="http://cran.rstudio.com/")
#install.packages("pastecs", repos="http://cran.rstudio.com/")
# import
# library('package-name')
library(foreign)
library(nortest)
library(sas7bdat)
library(Hmisc)
library(pastecs)
In [ ]:
ls()
# rm(list=ls())
# setwd()
getwd()
In [ ]:
# import excel : via txt tab separated
#fichierTexte <- read.table("data/labo2/SR_Data.txt", header = TRUE)
# import DBF (DBase)
fichierDBF <- read.dbf("data/labo2/SR_Data.dbf")
# import SPSS
#fichierSPSS <- read.spss("data/labo2/Data_SPSS.sav", to.data.frame=TRUE)
# import SAS
#fichierSAS <- read.sas7bdat("data/labo2/tableau1.sas7bdat", debug=FALSE)
head(fichierDBF)
In [ ]:
# show variable names
names(fichierDBF)
# indexes start at 1
# delete variable
fichierDBF$Shape_Leng <- NULL
# rename variable
names(fichierDBF)[1] <- "POPTOT"
# create variable
fichierDBF$km <- fichierDBF$Shape_Area / 1000000
fichierDBF$HabKm2 <- fichierDBF$POPTOT / fichierDBF$km
head(fichierDBF)
In [ ]:
# new table from a subset
names(fichierDBF)
ZScores <-fichierDBF[,c(12:15)]
names(ZScores)
In [ ]:
#install.packages("moments", repos="http://cran.rstudio.com/")
library(moments)
In [ ]:
skewness(fichierDBF)
In [ ]:
kurtosis(fichierDBF)
In [ ]:
#lillie.test(Tableau1$HabKm2)
# sapply(fichierDBF[18:20],lillie.test)
sapply(fichierDBF[18],lillie.test)
In [ ]:
#ks.test(x, y) # two sample
#m <- mean(fichierDBF[18])
#s <- sd(fichierDBF[18])
#ks.test(fichierDBF[18], "pnorm", m, s)
In [ ]:
sapply(fichierDBF[18],shapiro.test) # sapply(fichierDBF[18:20],shapiro.test)
In [ ]:
fichierDBF$SqrtDens <- sqrt(fichierDBF$HabKm2)
fichierDBF$SqrtImg <- sqrt(fichierDBF$IMMREC_PCT)
In [ ]:
# log(0) = error
fichierDBF$LogDens <- log(fichierDBF$HabKm2)
fichierDBF$LogImg <- log(fichierDBF$IMMREC_PCT+1)
summary(fichierDBF)
In [ ]:
ZScores$INDICE_PAU <- scale(fichierDBF[1], center = TRUE, scale = TRUE)
ZScores$Dist_Min <- scale(fichierDBF[2], center = TRUE, scale = TRUE)
ZScores$N_1000 <- scale(fichierDBF[3], center = TRUE, scale = TRUE)
ZScores$Dist_Moy_3 <- scale(fichierDBF[4], center = TRUE, scale = TRUE)
#help(sapply)
sapply(ZScores,mean)
sapply(ZScores,sd)
In [ ]:
summary(fichierDBF)
In [ ]:
sapply(fichierDBF, mean)
sapply(fichierDBF, sd)
sapply(fichierDBF, min)
sapply(fichierDBF, max)
sapply(fichierDBF, median)
sapply(fichierDBF, range)
sapply(fichierDBF, quantile)
In [ ]:
# Hmisc.describe
describe(fichierDBF)
In [ ]:
# pastecs.stat.desc
stat.desc(fichierDBF, basic=TRUE, norm=TRUE)
In [ ]:
hist(fichierDBF$HabKm2, main="Histogramme", xlab="Habitants au km2", ylab="Effectif", breaks=10, col='lightblue')
In [ ]:
hist(fichierDBF$SqrtDens, main="Histogramme", xlab="Habitants au km2 (racine)", ylab="Effectif", breaks=10, col='gold')
In [ ]:
hist(fichierDBF$LogDens, main="Histogramme", xlab="Habitants au km2 log)", ylab="Effectif", breaks=10, col='coral')
In [ ]:
x <- fichierDBF$HabKm2
h<-hist(x, breaks=10, col="lightblue", xlab="Habitants au km2", ylab="Effectif",
main="Histogramme avec courbe normale")
xfit<-seq(min(x),max(x),length=40)
yfit<-dnorm(xfit,mean=mean(x),sd=sd(x))
yfit <- yfit*diff(h$mids[1:2])*length(x)
lines(xfit, yfit, col="blue", lwd=2)
In [ ]:
x <- fichierDBF$SqrtDens
h<-hist(x, breaks=10, col="red", xlab="Habitants au km2 (racine)", ylab = "Effectif",
main="Histogramme avec courbe normale")
xfit<-seq(min(x),max(x),length=40)
yfit<-dnorm(xfit,mean=mean(x),sd=sd(x))
yfit <- yfit*diff(h$mids[1:2])*length(x)
lines(xfit, yfit, col="blue", lwd=2)
In [ ]:
# install
#install.packages('doBy', repos="http://cran.rstudio.com/")
#install.packages('gmodels', repos="http://cran.rstudio.com/")
#install.packages('scatterplot3d', repos="http://cran.rstudio.com/")
# import
library(foreign)
library(nortest)
library(sas7bdat)
library(Hmisc)
library(pastecs)
library(ggplot2)
library(doBy)
library(gmodels)
library(scatterplot3d)
# data
Tableau1 <- read.sas7bdat("data/labo3/tableau1.sas7bdat", debug=FALSE)
names(Tableau1)
TableauKhi2 <- read.sas7bdat("data/labo3/khi2.sas7bdat", debug=FALSE)
names(TableauKhi2)
In [ ]:
hist(Tableau1$IMMREC_PCT, breaks=10, xlab="Immigrants récents (%)", ylab = "Effectif", main="Histogramme")
breaks = nombre de barres
In [ ]:
hist(Tableau1$IMMREC_PCT, breaks=20, xlab="Immigrants récents (%)", ylab = "Effectif", main="Histogramme")
density = pour rendu barres (ex.: hachures)
In [ ]:
hist(Tableau1$IMMREC_PCT, density=20, breaks=20, xlab="Immigrants récents (%)", ylab = "Effectif", main="Histogramme")
col = colours
In [ ]:
hist(Tableau1$IMMREC_PCT, breaks=20, col="red", xlab="Immigrants récents (%)", ylab = "Effectif", main="Histogramme")
hist(Tableau1$IMMREC_PCT, breaks=20, col="lightyellow", xlab="Immigrants récents (%)", ylab = "Effectif", main="Histogramme")
hist(Tableau1$IMMREC_PCT, breaks=20, col="lightsalmon", xlab="Immigrants récents (%)", ylab = "Effectif", main="Histogramme")
hist(Tableau1$IMMREC_PCT, breaks=20, col="lightgreen", xlab="Immigrants récents (%)", ylab = "Effectif", main="Histogramme")
In [ ]:
ylim = limites
In [ ]:
plot(
hist(Tableau1$IMMREC_PCT, breaks=20),
ylim=c(0, 80), col="lightgreen", xlab="Immigrants récents (%)", ylab = "Effectif", main="Histogramme"
)
prob : proportion vs effectif
In [ ]:
hist(Tableau1$IMMREC_PCT, col="lightgray", breaks=20, xlab="Immigrants récents (%)", ylab = "Proportion", main="Histogramme", prob=TRUE)
y = proportion
In [ ]:
m <- mean(Tableau1$IMMREC_PCT)
std <- sd(Tableau1$IMMREC_PCT)
hist(Tableau1$IMMREC_PCT, col="lightyellow", breaks=20, prob=TRUE, xlab="Immigrants récents (%)", ylab = "Proportion", main="Histogramme avec la courbe normale")
curve(dnorm(x, mean=m, sd=std), col="darkblue", lwd=2, add=TRUE)
y = effectif
In [ ]:
x <- Tableau1$IMMREC_PCT
h<-hist(x, breaks=20, col="lightyellow", xlab="Immigrants récents (%)", ylab = "Effectif", main="Histogramme avec la courbe normale")
xfit<-seq(min(x),max(x),length=40)
yfit<-dnorm(xfit,mean=mean(x),sd=sd(x))
yfit <- yfit*diff(h$mids[1:2])*length(x)
lines(xfit, yfit, col="darkblue", lwd=2)
In [ ]:
plot(Tableau1$IMMREC_PCT, Tableau1$FAIBREVPCT, xlab="Immigrants récents (%)", ylab = "Faible revenu (%)", main="Nuage de points")
In [ ]:
plot(Tableau1$IMMREC_PCT, Tableau1$FAIBREVPCT, xlab="Immigrants récents (%)", ylab = "Faible revenu (%)", main="Nuage de points avec droite de régression")
abline(lsfit(Tableau1$IMMREC_PCT, Tableau1$FAIBREVPCT))
In [ ]:
pairs(~MONOPCT+MENAGE1PCT+TX_CHOM+FAIBREVPCT,data=Tableau1,
main="Matrice de nuages de points")
In [ ]:
scatterplot3d(Tableau1$MONOPCT, Tableau1$TX_CHOM, Tableau1$FAIBREVPCT, main="Nuage de points 3D")
scatterplot3d(Tableau1$MONOPCT, Tableau1$TX_CHOM, Tableau1$FAIBREVPCT, main="Nuage de points 3D", xlab="Familles monoparentales (%)", ylab="Taux de chômage", zlab="Faible revenu (%)");
In [ ]:
rcorr(cbind(Tableau1$MONOPCT,Tableau1$MENAGE1PCT,Tableau1$TX_CHOM,Tableau1$FAIBREVPCT,Tableau1$Dist_Min,Tableau1$N_1000), type="pearson")
In [ ]:
rcorr(cbind(Tableau1$MONOPCT,Tableau1$MENAGE1PCT,Tableau1$TX_CHOM,Tableau1$FAIBREVPCT,Tableau1$Dist_Min,Tableau1$N_1000), type="spearman")
In [ ]:
reg <- lm(TX_CHOM ~ FAIBREVPCT, data = Tableau1)
summary(reg)
names(Tableau1)
In [ ]:
names(TableauKhi2)
In [ ]:
# sex
table(TableauKhi2$SEX)
TableauKhi2$SEX <- factor(TableauKhi2$SEX, levels = c(1,2), labels = c("Homme", "Femme"))
table(TableauKhi2$SEX)
# transport mode
table(TableauKhi2$Mode)
TableauKhi2$Mode <- factor(TableauKhi2$Mode, levels = c(0:4), labels = c("Auto (conducteur)", "Auto (passager)", "Transport en commun", "Tranport actif", "Autres"))
table(TableauKhi2$Mode)
# distance
table(TableauKhi2$DIST)
TableauKhi2$DIST <- factor(TableauKhi2$DIST, levels = c(1:7), labels = c("Moins de 5 km", "5 à 9,9 km","10 à 14,9 km", "15 à 19,9 km", "20 à 24,9 km", "25 à 29,9 km", "30 km et plus"))
table(TableauKhi2$DIST)
In [ ]:
CrossTable(TableauKhi2$SEX, TableauKhi2$Mode, chisq=TRUE, expected=TRUE, resid=TRUE, format="SPSS")
CrossTable(TableauKhi2$SEX, TableauKhi2$DIST, chisq=TRUE, expected=TRUE, resid=TRUE, format="SPSS")
CrossTable(TableauKhi2$Mode, TableauKhi2$DIST, chisq=TRUE, expected=TRUE, resid=TRUE, format="SPSS")
In [ ]:
# import
library(foreign)
library(nortest)
library(sas7bdat)
library(doBy)
# data
MTL <- read.sas7bdat("data/labo4/mtl_ttest.sas7bdat", debug=FALSE)
TOR <- read.sas7bdat("data/labo4/tor_ttest.sas7bdat", debug=FALSE)
VAN <- read.sas7bdat("data/labo4/van_ttest.sas7bdat", debug=FALSE)
TROISRMR <- read.sas7bdat("data/labo4/troisrmr_anova.sas7bdat", debug=FALSE)
names(MTL)
names(TOR)
names(VAN)
names(TROISRMR)
In [ ]:
# modalités (labels)
table(MTL$SEX)
table(TOR$SEX)
table(VAN$SEX)
MTL$SEX <- factor(MTL$SEX, levels = c(1,2), labels = c("Homme", "Femme"))
TOR$SEX <- factor(TOR$SEX, levels = c(1,2), labels = c("Homme", "Femme"))
VAN$SEX <- factor(VAN$SEX, levels = c(1,2), labels = c("Homme", "Femme"))
table(MTL$SEX)
table(TOR$SEX)
table(VAN$SEX)
TROISRMR$CMA <- factor(TROISRMR$CMA, levels = c(462,535,933), labels = c("Montréal", "Toronto", "Vancouver"))
table(TROISRMR$CMA)
In [ ]:
var.test(TOTINC ~ SEX, alternative='two.sided', conf.level=.95, data=MTL)
Interprétation
In [ ]:
t.test(TOTINC~SEX, alternative='two.sided', conf.level=.95, var.equal=FALSE, data=MTL)
Interprétation
In [ ]:
t.test(TOTINC~SEX, alternative='two.sided', conf.level=.95, var.equal=TRUE, data=MTL)
boxplot(TOTINC~SEX, data = MTL, col = "coral", main="Boites à moustache (RMR de Montréal)", xlab="Sexe", ylab="Revenu total")
boxplot(LogTotInc~SEX, data = MTL, col = "coral", main="Boites à moustache (RMR de Montréal)", xlab="Sexe", ylab="Revenu total (log)")
Interprétation
Moyenne par groupe
In [ ]:
# doBy
summaryBy(GROSRT ~ CMA, TROISRMR, FUN=c(mean), na.rm=TRUE)
In [ ]:
boxplot(GROSRT ~ CMA, data = TROISRMR, col = "lightyellow", main="Boites à moustache", xlab="Région métropolitaine", ylab="Loyer ($)") #Analyse de variance : test F
In [ ]:
anova.aov <- aov(GROSRT ~ CMA, data = TROISRMR)
summary(anova.aov)
Interprétation
Hypothèse H0 = "indépendance entre les deux variances (inter et intra)"
n = nombre d'observations
DL numérateur (VE, inter) de table de Fisher
Calcul F théorique
In [ ]:
f_theorique <- qf(0.99, 2, 8379)
f_theorique
# qt() pour table Student t pour coefficient de ...
# (voir autres cours)
Interprétation
In [ ]:
anova.r2 <- lm(GROSRT ~ CMA, data = TROISRMR)
summary(anova.r2)
Interprétation
In [ ]:
TukeyHSD(anova.aov)
In [ ]:
# install
#install.packages("MASS", repos="http://cran.rstudio.com/") ## Tests de normalité supp.
#install.packages("car", repos="http://cran.rstudio.com/") ## Companion to Applied Regression
In [4]:
# import
library(foreign)
library(MASS)
library(sas7bdat)
library(pastecs)
library(car)
# data
MTL <- read.sas7bdat("data/labo5/pauvretemtl.sas7bdat", debug=FALSE)
names(MTL)
Out[4]:
In [5]:
# stats univariees
summary(MTL)
Out[5]:
In [11]:
# regression lineaire multiple
ols <- lm(
FAIBREVPCT ~
SqrtChom +
MONOPCT +
menage1per +
SqrtImmig +
pasecol1524 +
tpspartiel,
data=MTL)
summary(ols)
Out[11]:
In [10]:
## coefficients standardisés
CoefStand <- lm(
scale(FAIBREVPCT) ~
scale(SqrtChom) +
scale(MONOPCT) +
scale(menage1per) +
scale(SqrtImmig) +
scale(pasecol1524) +
scale(tpspartiel),
data = MTL
)
summary(CoefStand)
Out[10]:
In [12]:
## multicolinéarité?
### Valeurs de VIF
vif(ols)
vif(ols) > 5 # problème de multicolinéarité (VIF > 5)?
Out[12]:
Out[12]:
In [13]:
## Graphiques et distance de cook
opar <- par(mfrow = c(2, 2), oma = c(0, 0, 1.1, 0))
plot(ols, las = 1)
par(opar)
In [14]:
## Histogramme sur les résidus et vérification de la normalité des résidus
m <- mean(residuals(ols))
std <- sd(residuals(ols))
hist(residuals(ols), col="lightyellow", breaks=20, prob=TRUE, xlab="Résidus OLS", ylab = "Proportion", main="Histogramme avec la courbe normale")
curve(dnorm(x, mean=m, sd=std), col="darkblue", lwd=2, add=TRUE)
stat.desc(residuals(ols), basic=TRUE, norm=TRUE)
Out[14]:
In [16]:
# Repérer les valeurs aberrantes : Distance de Cook > 4 / n ou 8 / n
nobs <- NROW(na.omit(residuals(ols))) # Nombre d'observations dans le jeu de données
cook <- cooks.distance(ols) # Distance de Cook
ypredit <- fitted.values(ols) # Y prédits par le modèle
res <- residuals(ols) # résidus (Y - Y prédits par le modèle)
res_std <- rstandard(ols) # résidus standardisés
a <- cbind(MTL, cook, ypredit, res, res_std)
a <- a[order(-cook), ]
a[cook > 4/nobs, ] # Observations dont la distance de Cook > 4 / n
a[cook > 8/nobs, ] # Observations dont la distance de Cook > 8 / n
Out[16]:
Out[16]:
In [17]:
# Tableau de données sans les valeurs aberrantes (Cook > 8 / n )
dataSansOutliers <- a[a$cook < 8/nobs, ]
dataSansOutliers$cook <- NULL
dataSansOutliers$ypredit <- NULL
dataSansOutliers$res <- NULL
dataSansOutliers$res_std <- NULL
head(dataSansOutliers)
Out[17]:
In [18]:
# Nouveau modèle de régression sans les valeurs aberrantes
ols2 <- lm(FAIBREVPCT ~ SqrtChom+MONOPCT+menage1per+SqrtImmig+pasecol1524+tpspartiel, data = dataSansOutliers)
summary(ols2)
opar <- par(mfrow = c(2, 2), oma = c(0, 0, 1.1, 0))
plot(ols, las = 1)
par(opar)
Out[18]:
In [19]:
# Comparaison des deux modèles : coefficients
summary(ols)
summary(ols2)
Out[19]:
Out[19]:
In [20]:
# Comparaison des deux modèles
vif(ols)
vif(ols2)
Out[20]:
Out[20]:
In [21]:
# Comparaison des deux histogrammes
m <- mean(residuals(ols))
std <- sd(residuals(ols))
hist(residuals(ols), col="lightyellow", breaks=20, prob=TRUE, xlab="Résidus OLS", ylab = "Proportion", main="Modèle de départ")
curve(dnorm(x, mean=m, sd=std), col="darkblue", lwd=2, add=TRUE)
stat.desc(residuals(ols), basic=TRUE, norm=TRUE)
m <- mean(residuals(ols2))
std <- sd(residuals(ols2))
hist(residuals(ols2), col="lightyellow", breaks=20, prob=TRUE, xlab="Résidus OLS", ylab = "Proportion", main="Modèle sans les outliers")
curve(dnorm(x, mean=m, sd=std), col="darkblue", lwd=2, add=TRUE)
stat.desc(residuals(ols2), basic=TRUE, norm=TRUE)
Out[21]:
Out[21]:
In [22]:
# Comparaison de la normalité
stat.desc(residuals(ols), basic=TRUE, norm=TRUE)
stat.desc(residuals(ols2), basic=TRUE, norm=TRUE)
Out[22]:
Out[22]:
.IVT = fichiers Beyond 20/20
Beyond = software, permet
Export vers Excel
In [23]:
# import
library(foreign)
library(MASS)
library(pastecs)
library(car)
library(gmodels)
library(sas7bdat)
# data
RMR <- read.sas7bdat("data/labo6/rmrmtl06.sas7bdat", debug=FALSE)
names(RMR)
Out[23]:
In [24]:
# stats univariees
summary(RMR)
Out[24]:
In [25]:
# variables muettes
# Zones = 1 alors Montréal
# Zones = 2 alors Laval
# Zones = 3 alors Couronne Nord
# Zones = 4 alors Couronne Sud
RMR$Montreal <- ifelse(RMR$Zones == 1, 1, 0)
RMR$Laval <- ifelse(RMR$Zones == 2, 1, 0)
RMR$CouronneNord <- ifelse(RMR$Zones == 3, 1, 0)
RMR$CouronneSud <- ifelse(RMR$Zones == 4, 1, 0)
In [26]:
## verification
CrossTable(RMR$Zones, RMR$Montreal)
CrossTable(RMR$Zones, RMR$Laval)
CrossTable(RMR$Zones, RMR$CouronneNord)
CrossTable(RMR$Zones, RMR$CouronneSud)
In [27]:
# variables d'interaction muettes
RMR$Pop65PCT_Dist <- RMR$Pop65PCT * RMR$DistCBD_KM
RMR$Menag1_Dist <- RMR$Menage1 * RMR$DistCBD_KM
In [ ]:
## modele 1 : sans variable muette ni d'interaction
Modele1 <- lm(
FRPCT_ApIm ~
SqrtTxChom +
MonoPct +
Menage1 +
MinorVisib +
EmplAtypiq +
AucuneDipl +
Pop65PCT,
data=RMR
)
### modele 1 without outliers
cook <- cooks.distance(Modele1) # Distance de Cook
DataSansOutliers <- cbind(RMR, cook) # Fusion des deux tableaux
DataSansOutliers <- DataSansOutliers[DataSansOutliers$cook < 8/nobs, ]
Modele1_Final <- lm(
FRPCT_ApIm ~
SqrtTxChom +
MonoPct +
Menage1 +
MinorVisib +
EmplAtypiq +
AucuneDipl +
Pop65PCT,
data=DataSansOutliers
)
summary(Modele1_Final)
# multicolinéarité?
vif(Modele1_Final)
vif(Modele1_Final) > 5
In [ ]:
## modele 2 : variable muette Ile de Montréal
Modele2 <- lm(
FRPCT_ApIm ~
SqrtTxChom +
MonoPct +
Menage1 +
MinorVisib +
EmplAtypiq +
AucuneDipl +
Pop65PCT +
Montreal,
data=RMR
)
### modele 2 without outliers
cook <- cooks.distance(Modele2) # Distance de Cook
DataSansOutliers <- cbind(RMR, cook) # Fusion des deux tableaux
DataSansOutliers <- DataSansOutliers[DataSansOutliers$cook < 8/nobs, ]
Modele2_Final <- lm(FRPCT_ApIm ~ SqrtTxChom+MonoPct+Menage1+MinorVisib+EmplAtypiq+AucuneDipl+Pop65PCT+Montreal, data = DataSansOutliers)
summary(Modele2_Final)
### multicolinéarité?
vif(Modele2_Final)
vif(Modele2_Final) > 5
In [ ]:
## modele 3 : variable muette Zones (sauf Montréal, en référence)
Modele3 <- lm(
FRPCT_ApIm ~
SqrtTxChom +
MonoPct +
Menage1 +
MinorVisib +
EmplAtypiq +
AucuneDipl +
Pop65PCT +
Laval +
CouronneNord +
CouronneSud,
data=RMR
)
### modele 3 without outliers
cook <- cooks.distance(Modele3) # Distance de Cook
DataSansOutliers <- cbind(RMR, cook) # Fusion des deux tableaux
DataSansOutliers <- DataSansOutliers[DataSansOutliers$cook < 8/nobs, ]
Modele3_Final <- lm(FRPCT_ApIm ~ SqrtTxChom+MonoPct+Menage1+MinorVisib+EmplAtypiq+AucuneDipl+Pop65PCT+Laval+CouronneNord+CouronneSud, data = DataSansOutliers)
summary(Modele3_Final)
### multicolinéarité?
vif(Modele3_Final)
vif(Modele3_Final) > 5
In [ ]:
## modele 4 : modele 3 + variable de distance + variable d'interaction
Modele4 <- lm(
FRPCT_ApIm ~
SqrtTxChom +
MonoPct +
Menage1 +
MinorVisib +
EmplAtypiq +
AucuneDipl +
Pop65PCT +
Laval +
CouronneNord +
CouronneSud +
DistCBD_KM +
Menag1_Dist,
data=RMR
)
### modele 4 without outliers
cook <- cooks.distance(Modele4) # Distance de Cook
DataSansOutliers <- cbind(RMR, cook) # Fusion des deux tableaux
DataSansOutliers <- DataSansOutliers[DataSansOutliers$cook < 8/nobs, ]
Modele4_Final <- lm(FRPCT_ApIm ~ SqrtTxChom+MonoPct+Menage1+MinorVisib+EmplAtypiq+AucuneDipl+Pop65PCT+Laval+CouronneNord+CouronneSud+DistCBD_KM+Menag1_Dist, data = DataSansOutliers)
summary(Modele4_Final)
### multicolinéarité?
vif(Modele4_Final)
vif(Modele4_Final) > 5