Vignette K-table analysis
[R et Rstudio] Trajectory plot après AFM
```{r}
library(ggplot2)
library(akima)
library(dplyr)
library(tidyr)
library(reshape2)
library(car)
library(ade4)
library(adegraphics)
afsp <- read.csv("~/afsp.csv")
afsp$wave <- as.factor(afsp$wave)
afsp$gndr <- as.factor(afsp$gndr)
afsp$i9r <- as.factor(afsp$i9r)
levels(afsp$gndr)[levels(afsp$gndr)=="1"] <- "Homme"
levels(afsp$gndr)[levels(afsp$gndr)=="2"] <- "Femme"
levels(afsp$i9r)[levels(afsp$i9r)=="0"] <- "Gauche"
levels(afsp$i9r)[levels(afsp$i9r)=="10"] <- "Droite"
afsp2 <- na.omit(afsp)
afsp2 <- filter(afsp2, wave=="1" | wave=="2" | wave=="4" | wave=="6" | wave=="7")
tab1 <- table(afsp2$i9r, afsp2$wave)
tab1.1 <- prop.table(tab1)
tab1.2 <- t(tab1.1)
tab1.3 <- prop.table(tab1,1)
tab2 <- addmargins(prop.table(tab1, 2),1)
tab2
dft2 <- as.data.frame.table(tab2)
d1 = as.data.frame(prop.table(table(afsp2$wave, afsp2$i9r),1)*100)
gg1 <- ggplot(d1, aes(x=Var1,y=Freq, fill=Var2))
gg1 + geom_bar(stat="identity") + xlab("vague d'enquête") + ylab("fréquence") + ggtitle("Evolution de l'autopositionnement")
fmg <- lm(pgx ~ gndr + diplo+ religion+ age2 + i9r * wave, afsp2, weights=zpw)
summary(fmg)
fmd <- lm(pdx ~ gndr + diplo + religion + age2 + i9r * wave, afsp2, weights=zpw)
summary(fmd)
fmfn <- lm(fn ~ gndr + diplo + religion + age2 + i9r * wave, afsp2, weights=zpw)
summary(fmfn)
fmx <- lm(pgx ~ fn*pdx* wave, afsp2, weights=zpw)
summary(fmx)
ak2 <- read.csv("~/ak2.csv")
ak2 <- na.omit(ak2)
aki.2 <- interp(ak2$pgx, ak2$pdx, ak2$fn,
xo=seq(min(ak2$pgx), max(ak2$pgx), length = 20),
yo=seq(min(ak2$pdx), max(ak2$pdx), length = 20), duplicate="median")
filled.contour(x = aki.2$x,
y = aki.2$y,
z = aki.2$z,
color.palette =
colorRampPalette(c("white", "red")),
xlab = "gauche",
ylab = "droite",
main = "Espace politique 2014",
key.title = title(main = "FN", cex.main = 1))
ak21 <- filter(ak2, wave==1)
ak22 <- filter(ak2, wave==2)
ak24 <- filter(ak2, wave==4)
ak26 <- filter(ak2, wave==6)
ak27 <- filter(ak2, wave==7)
akima.li <- interp(ak21$pgx, ak21$pdx, ak21$fn,
xo=seq(min(ak21$pgx), max(ak21$pgx), length = 100),
yo=seq(min(ak21$pdx), max(ak21$pdx), length = 100), duplicate="median")
filled.contour(x = akima.li$x,
y = akima.li$y,
z = akima.li$z,
color.palette =
colorRampPalette(c("white", "black")),
xlab = "gauche",
ylab = "droite",
main = "Espace politique 2014 - vague 1",
key.title = title(main = "FN", cex.main = 1))
akima.li <- interp(ak22$pgx, ak22$pdx, ak22$fn,
xo=seq(min(ak22$pgx), max(ak22$pgx), length = 100),
yo=seq(min(ak22$pdx), max(ak22$pdx), length = 100), duplicate="median")
filled.contour(x = akima.li$x,
y = akima.li$y,
z = akima.li$z,
color.palette =
colorRampPalette(c("white", "black")),
xlab = "gauche",
ylab = "droite",
main = "Espace politique 2014 - vague 2",
key.title = title(main = "FN", cex.main = 1))
akima.li <- interp(ak24$pgx, ak24$pdx, ak24$fn,
xo=seq(min(ak24$pgx), max(ak24$pgx), length = 100),
yo=seq(min(ak24$pdx), max(ak24$pdx), length = 100), duplicate="median")
filled.contour(x = akima.li$x,
y = akima.li$y,
z = akima.li$z,
color.palette =
colorRampPalette(c("white", "black")),
xlab = "gauche",
ylab = "droite",
main = "Espace politique 2014 - vague 4",
key.title = title(main = "FN", cex.main = 1))
akima.li <- interp(ak26$pgx, ak26$pdx, ak26$fn,
xo=seq(min(ak26$pgx), max(ak26$pgx), length = 100),
yo=seq(min(ak26$pdx), max(ak26$pdx), length = 100), duplicate="median")
filled.contour(x = akima.li$x,
y = akima.li$y,
z = akima.li$z,
color.palette =
colorRampPalette(c("white", "black")),
xlab = "gauche",
ylab = "droite",
main = "Espace politique 2014 - vague 6",
key.title = title(main = "FN", cex.main = 1))
akima.li <- interp(ak27$pgx, ak27$pdx, ak27$fn,
xo=seq(min(ak27$pgx), max(ak27$pgx), length = 100),
yo=seq(min(ak27$pdx), max(ak27$pdx), length = 100), duplicate="median")
filled.contour(x = akima.li$x,
y = akima.li$y,
z = akima.li$z,
color.palette =
colorRampPalette(c("white", "black")),
xlab = "gauche",
ylab = "droite",
main = "Espace politique 2014 - vague 7",
key.title = title(main = "FN", cex.main = 1))
akima.li <- interp(ak2$pgx, ak2$pdx, ak2$fn,
xo=seq(min(ak2$pgx), max(ak2$pgx), length = 100),
yo=seq(min(ak2$pdx), max(ak2$pdx), length = 100), duplicate="median")
filled.contour(x = akima.li$x,
y = akima.li$y,
z = akima.li$z,
color.palette =
colorRampPalette(c("white", "blue")),
xlab = "gauche",
ylab = "droite",
main = "Espace politique synthétique",
key.title = title(main = "FN", cex.main = 1))
ak3 <- read.csv("~/ak3.csv")
ak3 <- na.omit(ak3)
akima.li <- interp(ak3$ypgx, ak3$ypdx, ak3$yfnx,
xo=seq(min(ak3$ypgx), max(ak3$ypgx), length = 100),
yo=seq(min(ak3$ypdx), max(ak3$ypdx), length = 100), duplicate="median")
ak31 <- filter(ak3, wave==1)
ak32 <- filter(ak3, wave==2)
ak34 <- filter(ak3, wave==4)
ak36 <- filter(ak3, wave==6)
ak37 <- filter(ak3, wave==7)
akima.li <- interp(ak31$ypgx, ak31$ypdx, ak31$yfnx,
xo=seq(min(ak31$ypgx), max(ak31$ypgx), length = 100),
yo=seq(min(ak31$ypdx), max(ak31$ypdx), length = 100), duplicate="median")
filled.contour(x = akima.li$x,
y = akima.li$y,
z = akima.li$z,
color.palette =
colorRampPalette(c("white", "blue")),
xlab = "gauche",
ylab = "droite",
main = "Espace politique - vague 1",
key.title = title(main = "FN", cex.main = 1))
akima.li <- interp(ak32$ypgx, ak32$ypdx, ak32$yfnx,
xo=seq(min(ak32$ypgx), max(ak32$ypgx), length = 100),
yo=seq(min(ak32$ypdx), max(ak32$ypdx), length = 100), duplicate="median")
filled.contour(x = akima.li$x,
y = akima.li$y,
z = akima.li$z,
color.palette =
colorRampPalette(c("white", "blue")),
xlab = "gauche",
ylab = "droite",
main = "Espace politique - vague 2",
key.title = title(main = "FN", cex.main = 1))
akima.li <- interp(ak34$ypgx, ak34$ypdx, ak34$yfnx,
xo=seq(min(ak34$ypgx), max(ak34$ypgx), length = 100),
yo=seq(min(ak34$ypdx), max(ak34$ypdx), length = 100), duplicate="median")
filled.contour(x = akima.li$x,
y = akima.li$y,
z = akima.li$z,
color.palette =
colorRampPalette(c("white", "blue")),
xlab = "gauche",
ylab = "droite",
main = "Espace politique - vague 4",
key.title = title(main = "FN", cex.main = 1))
akima.li <- interp(ak36$ypgx, ak36$ypdx, ak36$yfnx,
xo=seq(min(ak36$ypgx), max(ak36$ypgx), length = 100),
yo=seq(min(ak36$ypdx), max(ak36$ypdx), length = 100), duplicate="median")
filled.contour(x = akima.li$x,
y = akima.li$y,
z = akima.li$z,
color.palette =
colorRampPalette(c("white", "blue")),
xlab = "gauche",
ylab = "droite",
main = "Espace politique - vague 6",
key.title = title(main = "FN", cex.main = 1))
akima.li <- interp(ak37$ypgx, ak37$ypdx, ak37$yfnx,
xo=seq(min(ak37$ypgx), max(ak37$ypgx), length = 100),
yo=seq(min(ak37$ypdx), max(ak37$ypdx), length = 100), duplicate="median")
filled.contour(x = akima.li$x,
y = akima.li$y,
z = akima.li$z,
color.palette =
colorRampPalette(c("white", "blue")),
xlab = "gauche",
ylab = "droite",
main = "Espace politique - vague 7",
key.title = title(main = "FN", cex.main = 1))
p <- ggplot(ak3, aes(ypgx, ypdx))
p + geom_point(aes(colour=yfnx,size=yfnx)) + scale_colour_gradient( low="white", high="darkblue")
p + geom_point(aes(colour=yfnx,size=yfnx)) + scale_colour_gradient( low="white", high="darkblue") + facet_wrap(~wave, ncol=4)
dat2 <- read.csv("~/Desktop/dat2.csv")
head(dat2)
colnames(dat2)
dat2 <- dat2[order(dat2$UID_DYNA, dat2$wave),]
s1 <- select(dat2, pgx, pdx)
s2 <- select(dat2, i9r)
s2$i9r <- as.factor(s2$i9r)
s.class(s1, s2$i9r, col = rainbow(11))
s1.1 <- select(dat2, ps, ump)
s.class(s1.1, s2$i9r, col = rainbow(11))
s1.2 <- select(dat2, ps, fn)
s.class(s1.2, s2$i9r, col = rainbow(11))
s1.3<- select(dat2, ump, fn)
s.class(s1.3, s2$i9r, col = rainbow(11))
d2w1 <- filter(dat2, wave==1)
d2w2 <- filter(dat2, wave==2)
d2w4 <- filter(dat2, wave==4)
d2w6 <- filter(dat2, wave==6)
d2w7 <- filter(dat2, wave==7)
d2w1.1 <- select(d2w1, lo:fn)
d2w2.1 <- select(d2w2, lo:fn)
d2w4.1 <- select(d2w4, lo:fn)
d2w6.1 <- select(d2w6, lo:fn)
d2w7.1 <- select(d2w7, lo:fn)
w1.dudic <- dudi.pca(d2w1.1, scannf= FALSE, center=TRUE)
w2.dudic <- dudi.pca(d2w2.1, scannf= FALSE, center=TRUE)
w4.dudic <- dudi.pca(d2w4.1, scannf= FALSE, center=TRUE)
w6.dudic <- dudi.pca(d2w6.1, scannf= FALSE, center=TRUE)
w7.dudic <- dudi.pca(d2w7.1, scannf= FALSE, center=TRUE)
kta2 <- ktab.list.dudi(list(w1.dudic, w2.dudic, w4.dudic, w6.dudic, w7.dudic),tabnames = c("1", "2", "4", "6", "7"))
atp2 <- pta(kta2, scannf=FALSE, nf=2)
summary(atp2)
plot(atp2)
fTli <- atp2$Tli
block <- rep(1:488, 5)
b2 <- as.factor(block)
s.class(fTli, b2)
afm <- mfa(kta2, scannf=FALSE, nf=2)
summary(afm)
plot(afm)
kplot(afm)
afm2 <- afm$lisup
s.class(afm2, b2)
s.traject(afm2, b2, plab.cex=0, ppoints.cex=0.2)
s.traject(afm2, b2, col=cm.colors(500), plab.cex=0, ppoints.cex=0.2)
s.traject(afm2, b2, col=heat.colors(500), plab.cex=0, ppoints.cex=0.2)
s.traject(afm2, b2, col=terrain.colors(500), plab.cex=0, ppoints.cex=0.2)
s.traject(afm2, b2, col=topo.colors(500), plab.cex=0, ppoints.cex=0.2)
gx <- cbind(afm2, dat2)
head(gx)
p <- ggplot(gx, aes(Fac1, Fac2))
p + geom_path(aes(colour=i9r))
p + geom_path(aes(colour=wave))
p + geom_path(aes(colour=wave)) + facet_wrap(~UID_DYNA)
p + geom_path(aes(colour=wave)) + facet_wrap(~i9r)
p + geom_path(aes(colour=wave)) + facet_wrap(~lo)
p + geom_path(aes(colour=wave)) + facet_wrap(~fn)
```
[R et R Studio] Analyse K-tableaux avec ADE 4
[Stata] Organisation des données au format long
use "/home/me/r12.dta" save "/home/me/e14.dta" clear use "/home/me/r11.dta" save "/home/me/p12.dta" clear use "/home/me/e14.dta" list idt egen idt2 = concat(codedep codecom elec) , punct(_) save "/home/me/e14.dta", replace clear use "/home/me/p12.dta" tab elec egen idt2 = concat(codedep codecom elec) , punct(_) save "/home/me/p12.dta", replace append using "/home/me/e14.dta" tab elec list idt gen gexp12 = gexp if elec == 2012 gen dexp12 = dexp if elec == 2012 gen fnexp12 = fnexp if elec == 2012 gen gins12 = gins if elec == 2012 gen dins12 = dins if elec == 2012 gen fnins12 = fnins if elec == 2012 gen gexp14 = gexp if elec == 2014 gen dexp14 = dexp if elec == 2014 gen fnexp14 = fnexp if elec == 2014 gen gins14 = gins if elec == 2014 gen dins14 = dins if elec == 2014 gen fnins14 = fnins if elec == 2014 gen tabs = (abstentions /inscrits) * 100 gen tabs12 = tabs if elec == 2012 gen tabs14 = tabs if elec == 2014 encode idt, gen (idtnum) xfill gexp12, i(idtnum) xfill dexp12, i(idtnum) xfill fnexp12, i(idtnum) xfill gins12, i(idtnum) xfill dins12, i(idtnum) xfill fnins12, i(idtnum) xfill gexp14, i(idtnum) xfill dexp14, i(idtnum) xfill fnexp14, i(idtnum) xfill gins14, i(idtnum) xfill dins14, i(idtnum) xfill fnins14, i(idtnum) xfill tabs12, i(idtnum) xfill tabs14, i(idtnum) save "/home/me/p12.dta", replace edit gen evo_gexp = gexp14 - gexp12 gen evo_dexp = dexp14 - dexp12 gen evo_fnexp = fnexp14 - fnexp12 gen evo_gins = gins14 - gins12 gen evo_dins = dins14 - dins12 gen evo_fnins = fnins14 - fnins12 gen evo_tabs = tabs14 - tabs12 gen evo_gexp2 = gexp12 - gexp14 gen evo_dexp2 = dexp12 - dexp14 gen evo_fnexp2 = fnexp12 - fnexp14 gen evo_gins2 = gins12 - gins14 gen evo_dins2 = dins12 - dins14 gen evo_fnins2 = fnins12 - fnins14 gen evo_tabs2 = tabs12 - tabs14 save "/home/me/p12.dta", replace list codedep list codedep codecom egen in1 = concat (codedep codecom ) if codecom >=100 egen in2 = concat (codedep codecom ) if codecom >=10 & codecom <100, punct(0) egen in3 = concat (codedep codecom ) if codecom <10, punct(00) list in1 in2 in3 gen insee = in1 if in1 != "" replace insee = in2 if in2 != "" replace insee = in2 if in3 != "" replace insee = in3 if in3 != "" list insee
[R Studio] : Ordinal regression with cumulative link single and mixed models
Loading Packages. Ordinal provides both clm and clmm functions and their extractors
library(ordinal) library(dplyr) library(tidyr) library(ggplot2)
Loading the dataset and identifying it as "data" for further command simplification
roma_ok <- read.csv("~/roma_ok.csv")
View(roma_ok)
data <- roma_ok
Fitting the first Cumulative Link Model with "age" and "ethno" as independant variables and country as a random effect variable First we need to explicitely define "roma" as a factor variable :
data$roma <- as.factor(data$roma)
We define a simple model first, with no random effect, using the clm function. Here country is defined as a factor independant variable among others
fm1 <- clm(roma ~ gender + ethno + contact + relig + country, data = data, Hess = TRUE, link="probit") summary(fm1)
To go further, we use a mixed model (i.e. hierarchichal or multilevel) The syntaxt sharply follows the popular precedent included in the lme4 package by Douglas Bates. This syntaxt is organised around the formula structure, separating the dependant variable with the "~" operator. Then the random component is included, here specifying random intercept for each country using the "(1|country)" operator.
fm2 <- clmm(roma ~ gender + ethno + contact + relig + (1 | country), data = data, Hess = TRUE, link="probit") summary(fm2) fixef(fm2) ranef(fm2)
"fixef" allows us to extract fixed effects, that is, effects that are common across countries. "raned" allows us to extract random effects, that is, effects that are country specific. Here we only get a random country intercept, as specified in the formula.
fm2 <- clmm(roma ~ gender + ethno + contact + relig + (1 + contact | country), data = data, weights = pond, Hess = TRUE, link="probit") summary(fm2) ranef(fm2)
We respecified the model adding the contact variable among both the fixed part and the random part of the formula. This gives us a general (fixed) contact effect, and a country specific (random) contact effect. The combined contact effect is the fixed + random contact effect.
coefs(fm2) fit2 <- fitted(fm2) coefs4 <- data.frame(coef(summary(fm2))) coefs4$p.z <- 2 * ( 1 - pnorm(abs(coefs4$t.value)))
Here we (1) display the model coefficients, (2) compute the fitted values according to the model, (3) extract the coefficients form the model, (4) compute the p-value for each coefficient that was just extracted.
odds <- as.data.frame(exp(coef(fm2))) odds
Then we take the exponential of each coefficient to display the odds ratio.
datafit <- cbind(data, fit2)
Finally we merge back the fitted values with the original dataset. Then we save the resulting datafile as both a .csv for ease of use with R and as .dta to reuse it with Stata.
write.csv(datafit, "romafit.csv")
library(foreign)
write.dta(datafit, "romafit.dta")
savehistory("~/rh.Rhistory")
We're done for now !
[Stata] Typologie et classification
Un exemple de technique de classification
factor p_cs2 p_cs3 p_cs4 p_cs5 p_cs6 [w=tot_inscrits] if session==1997 predict x_97 y_97 z_97 factor p_cs2 p_cs3 p_cs4 p_cs5 p_cs6 [w=tot_inscrits] if session==1998 predict x_98 y_98 z_98 factor p_cs2 p_cs3 p_cs4 p_cs5 p_cs6 [w=tot_inscrits] if session==1999 predict x_99 y_99 z_99 factor p_cs2 p_cs3 p_cs4 p_cs5 p_cs6 [w=tot_inscrits] if session==2000 predict x_00 y_00 z_00 factor p_cs2 p_cs3 p_cs4 p_cs5 p_cs6 [w=tot_inscrits] if session==2001 predict x_01 y_01 z_01 factor p_cs2 p_cs3 p_cs4 p_cs5 p_cs6 [w=tot_inscrits] if session==2002 predict x_02 y_02 z_02 factor p_cs2 p_cs3 p_cs4 p_cs5 p_cs6 [w=tot_inscrits] if session==2003 predict x_03 y_03 z_03 factor p_cs2 p_cs3 p_cs4 p_cs5 p_cs6 [w=tot_inscrits] if session==2004 predict x_04 y_04 z_04 factor p_cs2 p_cs3 p_cs4 p_cs5 p_cs6 [w=tot_inscrits] if session==2005 predict x_05 y_05 z_05 factor p_cs2 p_cs3 p_cs4 p_cs5 p_cs6 [w=tot_inscrits] if session==2006 predict x_06 y_06 z_06 factor p_cs2 p_cs3 p_cs4 p_cs5 p_cs6 [w=tot_inscrits] if session==2007 predict x_07 y_07 z_07 factor p_cs2 p_cs3 p_cs4 p_cs5 p_cs6 [w=tot_inscrits] if session==2008 predict x_08 y_08 z_08 factor p_cs2 p_cs3 p_cs4 p_cs5 p_cs6 [w=tot_inscrits] if session==2009 predict x_09 y_09 z_09 factor p_cs2 p_cs3 p_cs4 p_cs5 p_cs6 [w=tot_inscrits] if session==2010 predict x_10 y_10 z_10 factor p_cs2 p_cs3 p_cs4 p_cs5 p_cs6 [w=tot_inscrits] if session==2011 predict x_11 y_11 z_11 factor p_cs2 p_cs3 p_cs4 p_cs5 p_cs6 [w=tot_inscrits] if session==2012 predict x_12 y_12 z_12 factor p_cs2 p_cs3 p_cs4 p_cs5 p_cs6 [w=tot_inscrits] if session==2013 predict x_13 y_13 z_13 factor p_cs2 p_cs3 p_cs4 p_cs5 p_cs6 [w=tot_inscrits] if session==2014 predict x_14 y_14 z_14 factor p_cs2 p_cs3 p_cs4 p_cs5 p_cs6 [w=tot_inscrits] predict x y z
On calcule ensuite les k clusters pour les p années étudiées selon les axes x, y et z issues des analyses factorielles
cluster kmeans x_97 y_97 z_97 if session==1997, k(6) measure(L2) start(segments) name(_cl97) cluster kmeans x_98 y_98 z_98 if session==1998, k(6) measure(L2) start(segments) name(_cl98) cluster kmeans x_99 y_99 z_99 if session==1999, k(6) measure(L2) start(segments) name(_cl99) cluster kmeans x_00 y_00 z_00 if session==2000, k(6) measure(L2) start(segments) name(_cl00) cluster kmeans x_01 y_01 z_01 if session==2001, k(6) measure(L2) start(segments) name(_cl01) cluster kmeans x_02 y_02 z_02 if session==2002, k(6) measure(L2) start(segments) name(_cl02) cluster kmeans x_03 y_03 z_03 if session==2003, k(6) measure(L2) start(segments) name(_cl03) cluster kmeans x_04 y_04 z_04 if session==2004, k(6) measure(L2) start(segments) name(_cl04) cluster kmeans x_05 y_05 z_05 if session==2005, k(6) measure(L2) start(segments) name(_cl05) cluster kmeans x_06 y_06 z_06 if session==2006, k(6) measure(L2) start(segments) name(_cl06) cluster kmeans x_07 y_07 z_07 if session==2007, k(6) measure(L2) start(segments) name(_cl07) cluster kmeans x_08 y_08 z_08 if session==2008, k(6) measure(L2) start(segments) name(_cl08) cluster kmeans x_09 y_09 z_09 if session==2009, k(6) measure(L2) start(segments) name(_cl09) cluster kmeans x_10 y_10 z_10 if session==2010, k(6) measure(L2) start(segments) name(_cl10) cluster kmeans x_11 y_11 z_11 if session==2011, k(6) measure(L2) start(segments) name(_cl11) cluster kmeans x_12 y_12 z_12 if session==2012, k(6) measure(L2) start(segments) name(_cl12) cluster kmeans x_13 y_13 z_13 if session==2013, k(6) measure(L2) start(segments) name(_cl13) cluster kmeans x_14 y_14 z_14 if session==2014, k(6) measure(L2) start(segments) name(_cl14) cluster kmeans x y z , k(6) measure(L2) start(segments) name(_cl)
sc y_14 x_14 if _cl14==1, mc(blue) || sc y_14 x_14 if _cl14==2, mc(ltblue) || sc y_14 x_14 if _cl14==3, mc(lime) || sc y_14 x_14 if _cl14==4, mc(pink) ||sc y_14 x_14 if _cl14==5, mc(red) || sc y_14 x_14 if _cl14==6, mc(black) sc y_97 x_97 if _cl97==1, mc(blue) || sc y_97 x_97 if _cl97==2, mc(ltblue) || sc y_97 x_97 if _cl97==3, mc(lime) || sc y_97 x_97 if _cl97==4, mc(pink) ||sc y_97 x_97 if _cl97==5, mc(red) || sc y_97 x_97 if _cl97==6, mc(black) sc y_06 x_06 if _cl06==1, mc(blue) || sc y_06 x_06 if _cl06==2, mc(ltblue) || sc y_06 x_06 if _cl06==3, mc(lime) || sc y_06 x_06 if _cl06==4, mc(pink) ||sc y_06 x_06 if _cl06==5, mc(red) || sc y_06 x_06 if _cl06==6, mc(black) sc y_14 x_14 if _cl14==1, mc(blue) || sc y_14 x_14 if _cl14==2, mc(ltblue) || sc y_14 x_14 if _cl14==3, mc(lime) || sc y_14 x_14 if _cl14==4, mc(pink) ||sc y_14 x_14 if _cl14==5, mc(red) || sc y_14 x_14 if _cl14==6, mc(black) , by(cep2) sc y_06 x_06 if _cl06==1, mc(blue) || sc y_06 x_06 if _cl06==2, mc(ltblue) || sc y_06 x_06 if _cl06==3, mc(lime) || sc y_06 x_06 if _cl06==4, mc(pink) ||sc y_06 x_06 if _cl06==5, mc(red) || sc y_06 x_06 if _cl06==6, mc(black) , by(cep2)
sort session bysort session : egen tot_cep = total(cep2) twoway line tot_cep session
tab cep2 _cl97 tab cep2 _cl98 tab cep2 _cl99 tab cep2 _cl98 tab cep2 _cl00 tab cep2 _cl01 tab cep2 _cl02 tab cep2 _cl03 tab cep2 _cl04 tab cep2 _cl05 tab cep2 _cl06 tab cep2 _cl07 tab cep2 _cl08 tab cep2 _cl09 tab cep2 _cl10 tab cep2 _cl11 tab cep2 _cl12 tab cep2 _cl13 tab cep2 _cl14
tab cep2 _cl97 , row nof tab cep2 _cl98 , row nof tab cep2 _cl99 , row nof tab cep2 _cl98 , row nof tab cep2 _cl00 , row nof tab cep2 _cl01 , row nof tab cep2 _cl02 , row nof tab cep2 _cl03 , row nof tab cep2 _cl04 , row nof tab cep2 _cl05 , row nof tab cep2 _cl06 , row nof tab cep2 _cl07 , row nof tab cep2 _cl08 , row nof tab cep2 _cl09 , row nof tab cep2 _cl10 , row nof tab cep2 _cl11 , row nof tab cep2 _cl12 , row nof tab cep2 _cl13 , row nof tab cep2 _cl14 , row nof
Varia
Setup Linux Distribution R + Rstudio Julia LibreOffice Github VLC
Varia
** Append Fichiers * Une variable de temps * Une variable pour chaque type de résultats électoraux * Ex : une variable taux de participation commune **** Le reste de la structure DOIT être identique **** => Beaucoup de Data management append using "C:\Users\Antoine\Desktop\xp2007_2.dta" append using "C:\Users\Antoine\Desktop\xp2009.dta" append using "C:\Users\Antoine\Desktop\xp2010_1.dta" append using "C:\Users\Antoine\Desktop\xp2010_2.dta" * Variable temps tab time ** Effet précarité * Temps x Fixe xtmixed vote preca || time: predict fixed_time, fitted * Temps x Random xtmixed vote preca || time: preca predict random_time, fitted * Temps x Fixe x Ville x Fixe xtmixed vote preca || time: || code: predict fixed_time_fixed_com, fitted * Temps x Fixe x Ville x Random xtmixed vote preca || time: || code: preca predict fixed_time_random_com, fitted * Temps x Random x Ville x Random xtmixed vote preca || time: preca || code: preca predict random_time_random_com, fitted ** Effet % ETR xtmixed vote p_etr || time: predict f_t_etr, fitted xtmixed vote p_etr || time: p_etr predict r_t_etr, fitted xtmixed vote p_etr || time: || code: predict f_t_f_c_etr, fitted xtmixed vote p_etr || time: || code: p_etr predict f_t_r_c_etr, fitted xtmixed vote p_etr || time: p_etr || code: p_etr predict r_t_r_c_etr, fitted **** Utilisation des résultats sc r_t_r_c_etr p_etr [w=pop] if codedep=="93", msize(vtiny) ms(oh) mc(blue) by(time) /// || sc r_t_r_c_etr p_etr [w=pop] if codedep=="92", msize(vtiny) ms(oh) mc(red) by(time) /// || sc r_t_r_c_etr p_etr [w=pop] if codedep=="75", msize(vtiny) ms(oh) mc(black) by(time) *** Régressions indépendantes * Note : séparation par temps ET commune statsby xa=_b[_cons] xc=_b[p_etr] r2=e(r2), by(code time) saving(ols, replace) : regress vote p_etr ** Base de données use ols.dta, replace ** Graphiques généraux sc xc r2 if r2 !=. , by(time) sc xc r2 if r2 !=. & xc < 10, by(time) sc xc r2 if r2 !=. & xc < 10 & xc >-10, by(time) * Trajectoire des effets dans le temps sort time twoway connected xc r2 if r2 !=. & xc < 10 & xc >-10 & code=="75120", mlabel(time) twoway connected xc r2 if r2 !=. & xc < 10 & xc >-10 & code=="75116", mlabel(time) twoway connected xc r2 if r2 !=. & xc < 10 & xc >-10 & code=="75118", mlabel(time) twoway connected xc r2 if r2 !=. & xc < 10 & xc >-10 & code=="75113", mlabel(time) encode code, gen (coded) list code numlabel coded, add destring code, gen (id) twoway connected xc r2 if id<76000, mlabel(time) twoway connected xc r2 if id<76000, mlabel(time) by(code) twoway connected xc r2 if id<76000, by(code) graph save Graph "C:\Users\Antoine\Desktop\traj_etr.gph" ** Fichier origine statsby xa=_b[_cons] xb=_b[p_etr] xc=_b[p_ldip] r2=e(r2), by(code time) saving(ols, replace) : regress vote p_etr p_ldip ** OLS use ols.dta, replace sort time encode code, gen (coded) list code numlabel coded, add destring code, gen (id) recode id (75000/75999 = 75) (77000/77999 = 77) (78000 /78999 = 78) (91000/91999 = 91) (92000/92999 = 92) (93000/93999 = 93) (94000/94999 = 94) (95000/95999 = 95), gen (dep) tab dep sc xb xc [w=r2] if dep==92, msize(tiny) by( time) use C:\Users\Antoine\Desktop\xp2007_1.dta , replace statsby xa=_b[_cons] xb=_b[p_etr] xc=_b[p_ldip] r2=e(r2), by(code time) saving(ols, replace) : regress vote c.p_etr##c.p_ldip [w=pop] gen limit=0 replace limit = 1 if xb<10 & xb>-10 & xc<10 & xc>-10 sc xb xc [w=r2] if limit==1, msize(tiny) by( time) sc xb xc [w=r2] if limit==1, msize(tiny) by(dep) sc xb xc [w=r2] if limit==1 & dep==93, msize(tiny) by(time) sc xb xc [w=r2] if limit==1 & dep==93, msize(tiny) tab time recode time (2007.1 = 1) (2007.2 =2) (2009 =3) (2010.1 = 4 ) (2010.2 = 5), gen (elec) tab elec sc xb xc [w=r2] if limit==1 & dep==93 & elec==1, msize(tiny) mc(blue) sc xb xc [w=r2] if limit==1 & dep==93 & elec==1, msize(tiny) mc(blue) || sc xb xc [w=r2] if limit==1 & dep==93 & elec==3, msize(tiny) mc(red) || sc xb xc [w=r2] if limit==1 & dep==93 & elec==4, msize(tiny) mc(black) graph save Graph "C:\Users\Antoine\Desktop\SSD_time.gph" sc xb xc [w=r2] if limit==1 & dep==75 & elec==1, msize(tiny) mc(blue) || sc xb xc [w=r2] if limit==1 & dep==75 & elec==3, msize(tiny) mc(red) || sc xb xc [w=r2] if limit==1 & dep==75 & elec==4, msize(tiny) mc(black) graph save Graph "C:\Users\Antoine\Desktop\Paris_temps.gph" sc xb xc [w=r2] if limit==1 & dep==92 & elec==1, msize(tiny) mc(blue) || sc xb xc [w=r2] if limit==1 & dep==92 & elec==3, msize(tiny) mc(red) || sc xb xc [w=r2] if limit==1 & dep==92 & elec==4, msize(tiny) mc(black) graph save Graph "C:\Users\Antoine\Desktop\HDS_temps.gph" graph combine "C:\Users\Antoine\Desktop\SSD_time.gph" "C:\Users\Antoine\Desktop\Paris_temps.gph" "C:\Users\Antoine\Desktop\HDS_temps.gph", ycommon xcommon **** xtmixed vote p_ldip || time: predict f_t_ldip, fitted xtmixed vote p_ldip || time: p_ldip predict r_t_ldip, fitted xtmixed vote p_ldip || time: || code: predict f_t_f_c_ldip, fitted xtmixed vote p_ldip || time: || code: p_ldip predict f_t_r_c_ldip, fitted xtmixed vote p_ldip || time: p_ldip || code: p_ldip predict r_t_r_c_ldip, fitted
Batch linear regressions
use "C:\Users\Antoine\Desktop\DATASET\FR\Cartelec\geocode.dta", clear statsby xa=_b[_cons] xc=_b[p_etr], by(code) saving(ols, replace) : regress to09 p_etr if numpoll>=5 & reg==11 use ols.dta, replace outsheet using "C:\Users\Antoine\Desktop\data.csv", comma replace Import - Jonction QGIS
Stata - Calcul en masse de régressions indépendantes
## Cet exemple est inspiré du tutorial suivant : http://data.princeton.edu/pop510/lang2.html ##
# On utilise la commande statsby
# Avec celle ci, on estime xa, xb, xc, valeurs de la constante et des coefficients pour les deux régresseurs
# On calcule un xa xb xc pour chaque commune (variable code)
# A condition que la commune comporte au moins 10 bureaux de vote
# On sauvegarde le résultat dans un dataset nommé OLS
statsby xa=_b[_cons] xb=_b[p_cs6] xc=_b[p_etr], by(code) saving(ols, replace) : regress to09 c.p_cs6##c.p_etr if numpoll>=10
(running regress on estimation sample)
command: regress to09 c.p_cs6##c.p_etr if numpoll>=10
sa: _b[_cons]
sb: _b[p_cs6]
sc: _b[p_etr]
by: code
Statsby groups
1 ---+--- 2 ---+--- 3 ---+--- 4 ---+--- 5
xxxxxxxxxxx.xxxxxxxxxxxxxxxxxxxxxxxxx.xx..xx..xx.x 50
xxxxxxxxxxxxxxxxxxxxxxx.xxxxxxxxxxxx.xxxxx........ 100
.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 150
.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx...xx... 200
............x...x.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 250
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 300
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 350
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 400
xx..xx..x...x..xxxxxx.x.x..xx....x.x..xx...xxx.xxx 450
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 500
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 550
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 600
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 650
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 700
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 750
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 800
xxxx..xxx...x..xxxxxxx.xxxxxxxxxxxxxxxxxxxxxxxxxxx 850
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 900
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 950
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 1000
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx........xx.. 1050
.x......x.x.xxx.x..x...x.xx.x..x.xxxx.xx.xxx...x.. 1100
.....x.......x.xx.x.xxxx.xx.xx.xx..x.x.x.x.xxx..x. 1150
........x.xxx.............................xx...... 1200
.x.xxxx........xxx.xxxxxxxxxxxxxx.xxxxxxxxxxxxxxxx 1250
xxxxxxxxxxxxxxxxxxxxxxxxxxxxx.xxxxxxxxxxxxxxxxxxxx 1300
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 1350
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 1400
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.xxxxxxxxxxxxxxxxxx 1450
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 1500
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 1550
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 1600
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 1650
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.xxx 1700
xxxxxxxxxxxxxxxxx.xx..x....xxx..xxxx...x.......... 1750
.......xxx...x...x..x............................. 1800
...x......x.x.................xxx..xxxx..x.xxx.... 1850
.........x..xxx..x..xxxxx..xx..........x.......... 1900
..........x...x.....x........x...................x 1950
..........x....................................... 2000
............xx
# on ouvre le dataset OLS
use ols
# On peut alors lister les valeurs
list xa xb xc in 1/100 if sa !=. , noo clean
xa xb xc
49.96838 -.4279612 .1522969
52.78135 -.6799241 -1.413004
50.77018 -.4634046 .0496405
55.41978 -.7300375 -1.330037
49.40392 -.5293525 -.6993962
52.53788 -.6603755 -1.505755
50.75808 -.2102391 -1.051468
39.68076 .6149334 -.44797
56.33086 -.8241126 -1.974604
29.4404 .5362971 2.167218
49.42233 -.572734 .1117042
57.91374 -.9895416 -.6107507
32.80398 .066948 1.594798
-7.311819 2.692374 4.367924
43.48525 -.3300791 .0880475
39.08242 -.2814568 -.86502
39.26466 -.3470989 .0405313
# On peut les représenter graphiquement
## Pour aller plus loin ##
# On charge le fichier des données d'origine
use "C:\Users\Antoine\Desktop\DATASET\FR\Cartelec\geocode.dta", clear
# Puis on calcule l'ensemble des estimations de regression dans un dataset spécifique (hop)
statsby xa=_b[_cons] xb=_b[p_cs6] , by(code) saving(hop,replace) : regress to09 p_cs6 if numpoll>=10 & codereg==11
# On va chercher un index des communes pour les labels
use "C:\Users\Antoine\Desktop\DATASET\FR\Cartelec\index.dta"
# Fusion des estimations avec l'index des communes
merge m:1 code using "C:\Users\Antoine\Desktop\hop.dta"
# On ne conserve que les interventions fusionnées
keep if _merge==3
# On les classe
sort xb
# On regarde le classement
list ncom xb
# Diagramme des intercepts et des slopes des différents modèles selon la commune
sc xa xb, mlabel(code) mlabsize(tiny) msize(tiny)
Identifier une pente spécifique dans une régression multiniveau
## On peut chercher à identifier des pentes spécifiques # Pour cela, on utilise la superposition des graphiques sc v1 v2 if dep=="93", mc(black) msize(tiny)|| sc v1 v2 if code=="93005", mc(blue)# En bleu, la zone sélectionnée
19/09/214 - Régression logistique multiniveaux
# On utilise d'abord une variable indépendante quantitative (résultats plus simples à présenter graphiquement)
recode agea (999=.), gen (age)
(26 differences between agea and age)
# Logistique simple
logit relig age
Iteration 0: log likelihood = -14191.584
Iteration 1: log likelihood = -13809.088
Iteration 2: log likelihood = -13808.602
Iteration 3: log likelihood = -13808.602
Logistic regression Number of obs = 20686
LR chi2(1) = 765.96
Prob > chi2 = 0.0000
Log likelihood = -13808.602 Pseudo R2 = 0.0270
------------------------------------------------------------------------------
relig | Coef. Std. Err. z P>|z| [95% Conf. Interval]
-------------+----------------------------------------------------------------
age | .0211436 .0007796 27.12 0.000 .0196156 .0226717
_cons | -.7841393 .0400099 -19.60 0.000 -.8625572 -.7057215
------------------------------------------------------------------------------
predict mu1
(option pr assumed; Pr(relig))
(26 missing values generated)
# Logistique multiniveaux à effets fixes
xtmelogit relig age || pays:
Refining starting values:
Iteration 0: log likelihood = -13314.375 (not concave)
Iteration 1: log likelihood = -13311.48
Iteration 2: log likelihood = -13311.316
Performing gradient-based optimization:
Iteration 0: log likelihood = -13311.316
Iteration 1: log likelihood = -13311.221
Iteration 2: log likelihood = -13311.22
Mixed-effects logistic regression Number of obs = 20686
Group variable: pays Number of groups = 10
Obs per group: min = 1623
avg = 2068.6
max = 2944
Integration points = 7 Wald chi2(1) = 712.44
Log likelihood = -13311.22 Prob > chi2 = 0.0000
------------------------------------------------------------------------------
relig | Coef. Std. Err. z P>|z| [95% Conf. Interval]
-------------+----------------------------------------------------------------
age | .0215006 .0008055 26.69 0.000 .0199218 .0230794
_cons | -.787238 .1655119 -4.76 0.000 -1.111635 -.4628407
------------------------------------------------------------------------------
------------------------------------------------------------------------------
Random-effects Parameters | Estimate Std. Err. [95% Conf. Interval]
-----------------------------+------------------------------------------------
pays: Identity |
sd(_cons) | .5067557 .1145899 .3253277 .7893621
------------------------------------------------------------------------------
LR test vs. logistic regression: chibar2(01) = 994.76 Prob>=chibar2 = 0.0000
predict mu2, mu
(26 missing values generated)
# Logistique multiniveaux à effets aléatoires.
xtmelogit relig age || pays: age
Refining starting values:
Iteration 0: log likelihood = -13321.571 (not concave)
Iteration 1: log likelihood = -13304.507 (not concave)
Iteration 2: log likelihood = -13296.668
Performing gradient-based optimization:
Iteration 0: log likelihood = -13296.668 (not concave)
Iteration 1: log likelihood = -13292.28 (not concave)
Iteration 2: log likelihood = -13288.334 (not concave)
Iteration 3: log likelihood = -13277.951
Iteration 4: log likelihood = -13276.179
Iteration 5: log likelihood = -13275.77
Iteration 6: log likelihood = -13275.49
Iteration 7: log likelihood = -13275.488
Mixed-effects logistic regression Number of obs = 20686
Group variable: pays Number of groups = 10
Obs per group: min = 1623
avg = 2068.6
max = 2944
Integration points = 7 Wald chi2(1) = 79.10
Log likelihood = -13275.488 Prob > chi2 = 0.0000
------------------------------------------------------------------------------
relig | Coef. Std. Err. z P>|z| [95% Conf. Interval]
-------------+----------------------------------------------------------------
age | .0227661 .0025598 8.89 0.000 .0177489 .0277833
_cons | -.8480708 .1650972 -5.14 0.000 -1.171655 -.5244863
------------------------------------------------------------------------------
------------------------------------------------------------------------------
Random-effects Parameters | Estimate Std. Err. [95% Conf. Interval]
-----------------------------+------------------------------------------------
pays: Independent |
sd(age) | .0076514 .0018989 .0047043 .0124448
sd(_cons) | .5045974 .1199723 .3166392 .8041283
------------------------------------------------------------------------------
LR test vs. logistic regression: chi2(2) = 1066.23 Prob > chi2 = 0.0000
Note: LR test is conservative and provided only for reference.
predict mu3, mu
(26 missing values generated)
17/09/2014 - Syntaxe propre pour le multiniveau
** Base multiniveau ** ** EFFET CSP * Effet fixe - niveau région xtmixed to09 p_cs6 || reg : predict cs6_f_reg_to9, fitted * Effet aléatoire - niveau région xtmixed to09 p_cs6 || reg : p_cs6 predict cs6_r_reg_to9, fitted * Effet fixe - niveau département xtmixed to09 p_cs6 || dep : predict cs6_f_dep_to9, fitted * Effet aléatoire - niveau département xtmixed to09 p_cs6 || dep : p_cs6 predict cs6_r_dep_to9, fitted * Effet fixe - niveau commune en IDF xtmixed to09 p_cs6 if reg==11 || code : predict cs6_f_com_idf_to9, fitted * Effet aléatoire - niveau commune en IDF xtmixed to09 p_cs6 if reg==11 || code : p_cs6 predict cs6_r_com_idf_to9, fitted * Effet fixe - niveau commune en SSD xtmixed to09 p_cs6 if dep=="93" || code : predict cs6_f_com_ssd_to9, fitted * Effet aléatoire - niveau commune en SSD xtmixed to09 p_cs6 if dep=="93" || code : p_cs6 predict cs6_r_com_ssd_to9, fitted * Modèle complet non pertinent ** Graphiques ** CS6 * Reg sc cs6_f_reg_to9 p_cs6, msize(tiny) graph save Graph "C:\Users\Antoine\Desktop\GRAPH\TO9\fixe_cs6_reg.gph" sc cs6_r_reg_to9 p_cs6, msize(tiny) graph save Graph "C:\Users\Antoine\Desktop\GRAPH\TO9\rand_cs6_reg.gph" * Dep sc cs6_f_dep_to9 p_cs6, msize(tiny) graph save Graph "C:\Users\Antoine\Desktop\GRAPH\TO9\fixe_cs6_dep.gph" sc cs6_r_dep_to9 p_cs6, msize(tiny) graph save Graph "C:\Users\Antoine\Desktop\GRAPH\TO9\rand_cs6_dep.gph" * Com IDF sc cs6_f_com_idf_to9 p_cs6, msize(tiny) graph save Graph "C:\Users\Antoine\Desktop\GRAPH\TO9\fixe_cs6_com_idf.gph" sc cs6_r_com_idf_to9 p_cs6, msize(tiny) graph save Graph "C:\Users\Antoine\Desktop\GRAPH\TO9\rand_cs6_com_idf.gph" * Com SSD sc cs6_f_com_ssd_to9 p_cs6, msize(tiny) graph save Graph "C:\Users\Antoine\Desktop\GRAPH\TO9\fixe_cs6_com_ssd.gph" sc cs6_r_com_ssd_to9 p_cs6, msize(tiny) graph save Graph "C:\Users\Antoine\Desktop\GRAPH\TO9\rand_cs6_com_ssd.gph" **** Combinaison * Reg sc cs6_f_reg_to9 p_cs6, msize(tiny) name(f1, replace) title(fixe par région) sc cs6_r_reg_to9 p_cs6, msize(tiny) name(r1, replace) title(aléatoire par région) * Dep sc cs6_f_dep_to9 p_cs6, msize(tiny) name(f2, replace) title(fixe par département) sc cs6_r_dep_to9 p_cs6, msize(tiny) name(r2, replace) title(aléatoire par département) * Com IDF sc cs6_f_com_idf_to9 p_cs6, msize(tiny) name(f3, replace) title(fixe par commune (IDF)) sc cs6_r_com_idf_to9 p_cs6, msize(tiny) name(r3, replace) title(aléatoire par commune (IDF) ) * Com SSD sc cs6_f_com_ssd_to9 p_cs6, msize(tiny) name(f4, replace) title(fixe par commune (SSD)) sc cs6_r_com_ssd_to9 p_cs6, msize(tiny) name(r4, replace) title(aléatoire par commune (SSD) ) * Par niveau graph combine (f1 r1 f2 r2 f3 r3 f4 r4), xcommon ycommon title(Effet du % d'ouvriers par effets) * Par effets graph combine (f1 f2 f3 f4 r1 r2 r3 r4) , xcommon ycommon title(Effet du % d'ouvriers par niveau) *** Etrangers *** gen p_etr = p_pop_etr * Effet fixe - niveau région xtmixed to09 p_etr || reg : predict etr_f_reg_to9, fitted * Effet aléatoire - niveau région xtmixed to09 p_etr || reg : p_etr predict etr_r_reg_to9, fitted * Effet fixe - niveau département xtmixed to09 p_etr || dep : predict etr_f_dep_to9, fitted * Effet aléatoire - niveau département xtmixed to09 p_etr || dep : p_etr predict etr_r_dep_to9, fitted * Effet fixe - niveau commune en IDF xtmixed to09 p_etr if reg==11 || code : predict etr_f_com_idf_to9, fitted * Effet aléatoire - niveau commune en IDF xtmixed to09 p_etr if reg==11 || code : p_etr predict etr_r_com_idf_to9, fitted * Effet fixe - niveau commune en SSD xtmixed to09 p_etr if dep=="93" || code : predict etr_f_com_ssd_to9, fitted * Effet aléatoire - niveau commune en SSD xtmixed to09 p_etr if dep=="93" || code : p_etr predict etr_r_com_ssd_to9, fitted * Modèle complet non pertinent ** Graphiques ** etr * Reg sc etr_f_reg_to9 p_etr, msize(tiny) graph save Graph "C:\Users\Antoine\Desktop\GRAPH\TO9\fixe_etr_reg.gph" sc etr_r_reg_to9 p_etr, msize(tiny) graph save Graph "C:\Users\Antoine\Desktop\GRAPH\TO9\rand_etr_reg.gph" * Dep sc etr_f_dep_to9 p_etr, msize(tiny) graph save Graph "C:\Users\Antoine\Desktop\GRAPH\TO9\fixe_etr_dep.gph" sc etr_r_dep_to9 p_etr, msize(tiny) graph save Graph "C:\Users\Antoine\Desktop\GRAPH\TO9\rand_etr_dep.gph" * Com IDF sc etr_f_com_idf_to9 p_etr, msize(tiny) graph save Graph "C:\Users\Antoine\Desktop\GRAPH\TO9\fixe_etr_com_idf.gph" sc etr_r_com_idf_to9 p_etr, msize(tiny) graph save Graph "C:\Users\Antoine\Desktop\GRAPH\TO9\rand_etr_com_idf.gph" * Com SSD sc etr_f_com_ssd_to9 p_etr, msize(tiny) graph save Graph "C:\Users\Antoine\Desktop\GRAPH\TO9\fixe_etr_com_ssd.gph" sc etr_r_com_ssd_to9 p_etr, msize(tiny) graph save Graph "C:\Users\Antoine\Desktop\GRAPH\TO9\rand_etr_com_ssd.gph" **** Combinaison * Reg sc etr_f_reg_to9 p_etr, msize(tiny) name(f1, replace) title(fixe par région) sc etr_r_reg_to9 p_etr, msize(tiny) name(r1, replace) title(aléatoire par région) * Dep sc etr_f_dep_to9 p_etr, msize(tiny) name(f2, replace) title(fixe par département) sc etr_r_dep_to9 p_etr, msize(tiny) name(r2, replace) title(aléatoire par département) * Com IDF sc etr_f_com_idf_to9 p_etr, msize(tiny) name(f3, replace) title(fixe par commune (IDF)) sc etr_r_com_idf_to9 p_etr, msize(tiny) name(r3, replace) title(aléatoire par commune (IDF) ) * Com SSD sc etr_f_com_ssd_to9 p_etr, msize(tiny) name(f4, replace) title(fixe par commune (SSD)) sc etr_r_com_ssd_to9 p_etr, msize(tiny) name(r4, replace) title(aléatoire par commune (SSD) ) * Par effets graph combine (f1 r1 f2 r2 f3 r3 f4 r4), xcommon ycommon title(Effet du % d'étrangers par effets) * Par niveau graph combine (f1 f2 f3 f4 r1 r2 r3 r4) , xcommon ycommon title(Effet du % d'étrangers par niveau) *** Diplôme *** gen p_ldip = p_ndipl0 + p_cep + p_bepc * Effet fixe - niveau région xtmixed to09 p_ldip || reg : predict ldip_f_reg_to9, fitted * Effet aléatoire - niveau région xtmixed to09 p_ldip || reg : p_ldip predict ldip_r_reg_to9, fitted * Effet fixe - niveau département xtmixed to09 p_ldip || dep : predict ldip_f_dep_to9, fitted * Effet aléatoire - niveau département xtmixed to09 p_ldip || dep : p_ldip predict ldip_r_dep_to9, fitted * Effet fixe - niveau commune en IDF xtmixed to09 p_ldip if reg==11 || code : predict ldip_f_com_idf_to9, fitted * Effet aléatoire - niveau commune en IDF xtmixed to09 p_ldip if reg==11 || code : p_ldip predict ldip_r_com_idf_to9, fitted * Effet fixe - niveau commune en SSD xtmixed to09 p_ldip if dep=="93" || code : predict ldip_f_com_ssd_to9, fitted * Effet aléatoire - niveau commune en SSD xtmixed to09 p_ldip if dep=="93" || code : p_ldip predict ldip_r_com_ssd_to9, fitted * Modèle complet non pertinent ** Graphiques ** ldip * Reg sc ldip_f_reg_to9 p_ldip, msize(tiny) graph save Graph "C:\Users\Antoine\Desktop\GRAPH\TO9\fixe_ldip_reg.gph" sc ldip_r_reg_to9 p_ldip, msize(tiny) graph save Graph "C:\Users\Antoine\Desktop\GRAPH\TO9\rand_ldip_reg.gph" * Dep sc ldip_f_dep_to9 p_ldip, msize(tiny) graph save Graph "C:\Users\Antoine\Desktop\GRAPH\TO9\fixe_ldip_dep.gph" sc ldip_r_dep_to9 p_ldip, msize(tiny) graph save Graph "C:\Users\Antoine\Desktop\GRAPH\TO9\rand_ldip_dep.gph" * Com IDF sc ldip_f_com_idf_to9 p_ldip, msize(tiny) graph save Graph "C:\Users\Antoine\Desktop\GRAPH\TO9\fixe_ldip_com_idf.gph" sc ldip_r_com_idf_to9 p_ldip, msize(tiny) graph save Graph "C:\Users\Antoine\Desktop\GRAPH\TO9\rand_ldip_com_idf.gph" * Com SSD sc ldip_f_com_ssd_to9 p_ldip, msize(tiny) graph save Graph "C:\Users\Antoine\Desktop\GRAPH\TO9\fixe_ldip_com_ssd.gph" sc ldip_r_com_ssd_to9 p_ldip, msize(tiny) graph save Graph "C:\Users\Antoine\Desktop\GRAPH\TO9\rand_ldip_com_ssd.gph" **** Combinaison * Reg sc ldip_f_reg_to9 p_ldip, msize(tiny) name(f1, replace) title(fixe par région) sc ldip_r_reg_to9 p_ldip, msize(tiny) name(r1, replace) title(aléatoire par région) * Dep sc ldip_f_dep_to9 p_ldip, msize(tiny) name(f2, replace) title(fixe par département) sc ldip_r_dep_to9 p_ldip, msize(tiny) name(r2, replace) title(aléatoire par département) * Com IDF sc ldip_f_com_idf_to9 p_ldip, msize(tiny) name(f3, replace) title(fixe par commune (IDF)) sc ldip_r_com_idf_to9 p_ldip, msize(tiny) name(r3, replace) title(aléatoire par commune (IDF) ) * Com SSD sc ldip_f_com_ssd_to9 p_ldip, msize(tiny) name(f4, replace) title(fixe par commune (SSD)) sc ldip_r_com_ssd_to9 p_ldip, msize(tiny) name(r4, replace) title(aléatoire par commune (SSD) ) *** Cumul des effets * Par effets graph combine (f1 r1 f2 r2 f3 r3 f4 r4), xcommon ycommon title(Effet du % de bas niveau de diplôme par effets) * Par niveau graph combine (f1 f2 f3 f4 r1 r2 r3 r4) , xcommon ycommon title(Effet du % de bas niveau de diplôme par niveau) ##################################### 2007 #################################### ** Base multiniveau ** ** EFFET CSP * Effet fixe - niveau région xtmixed to07t1 p_cs6 || reg : predict cs6_f_reg_to7, fitted * Effet aléatoire - niveau région xtmixed to07t1 p_cs6 || reg : p_cs6 predict cs6_r_reg_to7, fitted * Effet fixe - niveau département xtmixed to07t1 p_cs6 || dep : predict cs6_f_dep_to7, fitted * Effet aléatoire - niveau département xtmixed to07t1 p_cs6 || dep : p_cs6 predict cs6_r_dep_to7, fitted * Effet fixe - niveau commune en IDF xtmixed to07t1 p_cs6 if reg==11 || code : predict cs6_f_com_idf_to7, fitted * Effet aléatoire - niveau commune en IDF xtmixed to07t1 p_cs6 if reg==11 || code : p_cs6 predict cs6_r_com_idf_to7, fitted * Effet fixe - niveau commune en SSD xtmixed to07t1 p_cs6 if dep=="93" || code : predict cs6_f_com_ssd_to7, fitted * Effet aléatoire - niveau commune en SSD xtmixed to07t1 p_cs6 if dep=="93" || code : p_cs6 predict cs6_r_com_ssd_to7, fitted * Modèle complet non pertinent ** Graphiques ** CS6 * Reg sc cs6_f_reg_to7 p_cs6, msize(tiny) graph save Graph "C:\Users\Antoine\Desktop\GRAPH\to7\fixe_cs6_reg.gph" sc cs6_r_reg_to7 p_cs6, msize(tiny) graph save Graph "C:\Users\Antoine\Desktop\GRAPH\to7\rand_cs6_reg.gph" * Dep sc cs6_f_dep_to7 p_cs6, msize(tiny) graph save Graph "C:\Users\Antoine\Desktop\GRAPH\to7\fixe_cs6_dep.gph" sc cs6_r_dep_to7 p_cs6, msize(tiny) graph save Graph "C:\Users\Antoine\Desktop\GRAPH\to7\rand_cs6_dep.gph" * Com IDF sc cs6_f_com_idf_to7 p_cs6, msize(tiny) graph save Graph "C:\Users\Antoine\Desktop\GRAPH\to7\fixe_cs6_com_idf.gph" sc cs6_r_com_idf_to7 p_cs6, msize(tiny) graph save Graph "C:\Users\Antoine\Desktop\GRAPH\to7\rand_cs6_com_idf.gph" * Com SSD sc cs6_f_com_ssd_to7 p_cs6, msize(tiny) graph save Graph "C:\Users\Antoine\Desktop\GRAPH\to7\fixe_cs6_com_ssd.gph" sc cs6_r_com_ssd_to7 p_cs6, msize(tiny) graph save Graph "C:\Users\Antoine\Desktop\GRAPH\to7\rand_cs6_com_ssd.gph" **** Combinaison * Reg sc cs6_f_reg_to7 p_cs6, msize(tiny) name(f1, replace) title(fixe par région) sc cs6_r_reg_to7 p_cs6, msize(tiny) name(r1, replace) title(aléatoire par région) * Dep sc cs6_f_dep_to7 p_cs6, msize(tiny) name(f2, replace) title(fixe par département) sc cs6_r_dep_to7 p_cs6, msize(tiny) name(r2, replace) title(aléatoire par département) * Com IDF sc cs6_f_com_idf_to7 p_cs6, msize(tiny) name(f3, replace) title(fixe par commune (IDF)) sc cs6_r_com_idf_to7 p_cs6, msize(tiny) name(r3, replace) title(aléatoire par commune (IDF) ) * Com SSD sc cs6_f_com_ssd_to7 p_cs6, msize(tiny) name(f4, replace) title(fixe par commune (SSD)) sc cs6_r_com_ssd_to7 p_cs6, msize(tiny) name(r4, replace) title(aléatoire par commune (SSD) ) * Par niveau graph combine (f1 r1 f2 r2 f3 r3 f4 r4), xcommon ycommon title(Effet du % d'ouvriers par effets) * Par effets graph combine (f1 f2 f3 f4 r1 r2 r3 r4) , xcommon ycommon title(Effet du % d'ouvriers par niveau) *** Etrangers *** * Effet fixe - niveau région xtmixed to07t1 p_etr || reg : predict etr_f_reg_to7, fitted * Effet aléatoire - niveau région xtmixed to07t1 p_etr || reg : p_etr predict etr_r_reg_to7, fitted * Effet fixe - niveau département xtmixed to07t1 p_etr || dep : predict etr_f_dep_to7, fitted * Effet aléatoire - niveau département xtmixed to07t1 p_etr || dep : p_etr predict etr_r_dep_to7, fitted * Effet fixe - niveau commune en IDF xtmixed to07t1 p_etr if reg==11 || code : predict etr_f_com_idf_to7, fitted * Effet aléatoire - niveau commune en IDF xtmixed to07t1 p_etr if reg==11 || code : p_etr predict etr_r_com_idf_to7, fitted * Effet fixe - niveau commune en SSD xtmixed to07t1 p_etr if dep=="93" || code : predict etr_f_com_ssd_to7, fitted * Effet aléatoire - niveau commune en SSD xtmixed to07t1 p_etr if dep=="93" || code : p_etr predict etr_r_com_ssd_to7, fitted * Modèle complet non pertinent ** Graphiques ** etr * Reg sc etr_f_reg_to7 p_etr, msize(tiny) graph save Graph "C:\Users\Antoine\Desktop\GRAPH\to7\fixe_etr_reg.gph" sc etr_r_reg_to7 p_etr, msize(tiny) graph save Graph "C:\Users\Antoine\Desktop\GRAPH\to7\rand_etr_reg.gph" * Dep sc etr_f_dep_to7 p_etr, msize(tiny) graph save Graph "C:\Users\Antoine\Desktop\GRAPH\to7\fixe_etr_dep.gph" sc etr_r_dep_to7 p_etr, msize(tiny) graph save Graph "C:\Users\Antoine\Desktop\GRAPH\to7\rand_etr_dep.gph" * Com IDF sc etr_f_com_idf_to7 p_etr, msize(tiny) graph save Graph "C:\Users\Antoine\Desktop\GRAPH\to7\fixe_etr_com_idf.gph" sc etr_r_com_idf_to7 p_etr, msize(tiny) graph save Graph "C:\Users\Antoine\Desktop\GRAPH\to7\rand_etr_com_idf.gph" * Com SSD sc etr_f_com_ssd_to7 p_etr, msize(tiny) graph save Graph "C:\Users\Antoine\Desktop\GRAPH\to7\fixe_etr_com_ssd.gph" sc etr_r_com_ssd_to7 p_etr, msize(tiny) graph save Graph "C:\Users\Antoine\Desktop\GRAPH\to7\rand_etr_com_ssd.gph" **** Combinaison * Reg sc etr_f_reg_to7 p_etr, msize(tiny) name(f1, replace) title(fixe par région) sc etr_r_reg_to7 p_etr, msize(tiny) name(r1, replace) title(aléatoire par région) * Dep sc etr_f_dep_to7 p_etr, msize(tiny) name(f2, replace) title(fixe par département) sc etr_r_dep_to7 p_etr, msize(tiny) name(r2, replace) title(aléatoire par département) * Com IDF sc etr_f_com_idf_to7 p_etr, msize(tiny) name(f3, replace) title(fixe par commune (IDF)) sc etr_r_com_idf_to7 p_etr, msize(tiny) name(r3, replace) title(aléatoire par commune (IDF) ) * Com SSD sc etr_f_com_ssd_to7 p_etr, msize(tiny) name(f4, replace) title(fixe par commune (SSD)) sc etr_r_com_ssd_to7 p_etr, msize(tiny) name(r4, replace) title(aléatoire par commune (SSD) ) * Par effets graph combine (f1 r1 f2 r2 f3 r3 f4 r4), xcommon ycommon title(Effet du % d'étrangers par effets) * Par niveau graph combine (f1 f2 f3 f4 r1 r2 r3 r4) , xcommon ycommon title(Effet du % d'étrangers par niveau) *** Diplôme *** * Effet fixe - niveau région xtmixed to07t1 p_ldip || reg : predict ldip_f_reg_to7, fitted * Effet aléatoire - niveau région xtmixed to07t1 p_ldip || reg : p_ldip predict ldip_r_reg_to7, fitted * Effet fixe - niveau département xtmixed to07t1 p_ldip || dep : predict ldip_f_dep_to7, fitted * Effet aléatoire - niveau département xtmixed to07t1 p_ldip || dep : p_ldip predict ldip_r_dep_to7, fitted * Effet fixe - niveau commune en IDF xtmixed to07t1 p_ldip if reg==11 || code : predict ldip_f_com_idf_to7, fitted * Effet aléatoire - niveau commune en IDF xtmixed to07t1 p_ldip if reg==11 || code : p_ldip predict ldip_r_com_idf_to7, fitted * Effet fixe - niveau commune en SSD xtmixed to07t1 p_ldip if dep=="93" || code : predict ldip_f_com_ssd_to7, fitted * Effet aléatoire - niveau commune en SSD xtmixed to07t1 p_ldip if dep=="93" || code : p_ldip predict ldip_r_com_ssd_to7, fitted * Modèle complet non pertinent ** Graphiques ** ldip * Reg sc ldip_f_reg_to7 p_ldip, msize(tiny) graph save Graph "C:\Users\Antoine\Desktop\GRAPH\to7\fixe_ldip_reg.gph" sc ldip_r_reg_to7 p_ldip, msize(tiny) graph save Graph "C:\Users\Antoine\Desktop\GRAPH\to7\rand_ldip_reg.gph" * Dep sc ldip_f_dep_to7 p_ldip, msize(tiny) graph save Graph "C:\Users\Antoine\Desktop\GRAPH\to7\fixe_ldip_dep.gph" sc ldip_r_dep_to7 p_ldip, msize(tiny) graph save Graph "C:\Users\Antoine\Desktop\GRAPH\to7\rand_ldip_dep.gph" * Com IDF sc ldip_f_com_idf_to7 p_ldip, msize(tiny) graph save Graph "C:\Users\Antoine\Desktop\GRAPH\to7\fixe_ldip_com_idf.gph" sc ldip_r_com_idf_to7 p_ldip, msize(tiny) graph save Graph "C:\Users\Antoine\Desktop\GRAPH\to7\rand_ldip_com_idf.gph" * Com SSD sc ldip_f_com_ssd_to7 p_ldip, msize(tiny) graph save Graph "C:\Users\Antoine\Desktop\GRAPH\to7\fixe_ldip_com_ssd.gph" sc ldip_r_com_ssd_to7 p_ldip, msize(tiny) graph save Graph "C:\Users\Antoine\Desktop\GRAPH\to7\rand_ldip_com_ssd.gph" **** Combinaison * Reg sc ldip_f_reg_to7 p_ldip, msize(tiny) name(f1, replace) title(fixe par région) sc ldip_r_reg_to7 p_ldip, msize(tiny) name(r1, replace) title(aléatoire par région) * Dep sc ldip_f_dep_to7 p_ldip, msize(tiny) name(f2, replace) title(fixe par département) sc ldip_r_dep_to7 p_ldip, msize(tiny) name(r2, replace) title(aléatoire par département) * Com IDF sc ldip_f_com_idf_to7 p_ldip, msize(tiny) name(f3, replace) title(fixe par commune (IDF)) sc ldip_r_com_idf_to7 p_ldip, msize(tiny) name(r3, replace) title(aléatoire par commune (IDF) ) * Com SSD sc ldip_f_com_ssd_to7 p_ldip, msize(tiny) name(f4, replace) title(fixe par commune (SSD)) sc ldip_r_com_ssd_to7 p_ldip, msize(tiny) name(r4, replace) title(aléatoire par commune (SSD) ) *** Cumul des effets * Par effets graph combine (f1 r1 f2 r2 f3 r3 f4 r4), xcommon ycommon title(Effet du % de bas niveau de diplôme par effets) * Par niveau graph combine (f1 f2 f3 f4 r1 r2 r3 r4) , xcommon ycommon title(Effet du % de bas niveau de diplôme par niveau) ##################################### 2010 #################################### ** Base multiniveau ** ** EFFET CSP * Effet fixe - niveau région xtmixed to10t1 p_cs6 || reg : predict cs6_f_reg_to10, fitted * Effet aléatoire - niveau région xtmixed to10t1 p_cs6 || reg : p_cs6 predict cs6_r_reg_to10, fitted * Effet fixe - niveau département xtmixed to10t1 p_cs6 || dep : predict cs6_f_dep_to10, fitted * Effet aléatoire - niveau département xtmixed to10t1 p_cs6 || dep : p_cs6 predict cs6_r_dep_to10, fitted * Effet fixe - niveau commune en IDF xtmixed to10t1 p_cs6 if reg==11 || code : predict cs6_f_com_idf_to10, fitted * Effet aléatoire - niveau commune en IDF xtmixed to10t1 p_cs6 if reg==11 || code : p_cs6 predict cs6_r_com_idf_to10, fitted * Effet fixe - niveau commune en SSD xtmixed to10t1 p_cs6 if dep=="93" || code : predict cs6_f_com_ssd_to10, fitted * Effet aléatoire - niveau commune en SSD xtmixed to10t1 p_cs6 if dep=="93" || code : p_cs6 predict cs6_r_com_ssd_to10, fitted * Modèle complet non pertinent ** Graphiques ** CS6 * Reg sc cs6_f_reg_to10 p_cs6, msize(tiny) graph save Graph "C:\Users\Antoine\Desktop\GRAPH\to10\fixe_cs6_reg.gph" sc cs6_r_reg_to10 p_cs6, msize(tiny) graph save Graph "C:\Users\Antoine\Desktop\GRAPH\to10\rand_cs6_reg.gph" * Dep sc cs6_f_dep_to10 p_cs6, msize(tiny) graph save Graph "C:\Users\Antoine\Desktop\GRAPH\to10\fixe_cs6_dep.gph" sc cs6_r_dep_to10 p_cs6, msize(tiny) graph save Graph "C:\Users\Antoine\Desktop\GRAPH\to10\rand_cs6_dep.gph" * Com IDF sc cs6_f_com_idf_to10 p_cs6, msize(tiny) graph save Graph "C:\Users\Antoine\Desktop\GRAPH\to10\fixe_cs6_com_idf.gph" sc cs6_r_com_idf_to10 p_cs6, msize(tiny) graph save Graph "C:\Users\Antoine\Desktop\GRAPH\to10\rand_cs6_com_idf.gph" * Com SSD sc cs6_f_com_ssd_to10 p_cs6, msize(tiny) graph save Graph "C:\Users\Antoine\Desktop\GRAPH\to10\fixe_cs6_com_ssd.gph" sc cs6_r_com_ssd_to10 p_cs6, msize(tiny) graph save Graph "C:\Users\Antoine\Desktop\GRAPH\to10\rand_cs6_com_ssd.gph" **** Combinaison * Reg sc cs6_f_reg_to10 p_cs6, msize(tiny) name(f1, replace) title(fixe par région) sc cs6_r_reg_to10 p_cs6, msize(tiny) name(r1, replace) title(aléatoire par région) * Dep sc cs6_f_dep_to10 p_cs6, msize(tiny) name(f2, replace) title(fixe par département) sc cs6_r_dep_to10 p_cs6, msize(tiny) name(r2, replace) title(aléatoire par département) * Com IDF sc cs6_f_com_idf_to10 p_cs6, msize(tiny) name(f3, replace) title(fixe par commune (IDF)) sc cs6_r_com_idf_to10 p_cs6, msize(tiny) name(r3, replace) title(aléatoire par commune (IDF) ) * Com SSD sc cs6_f_com_ssd_to10 p_cs6, msize(tiny) name(f4, replace) title(fixe par commune (SSD)) sc cs6_r_com_ssd_to10 p_cs6, msize(tiny) name(r4, replace) title(aléatoire par commune (SSD) ) * Par niveau graph combine (f1 r1 f2 r2 f3 r3 f4 r4), xcommon ycommon title(Effet du % d'ouvriers par effets) * Par effets graph combine (f1 f2 f3 f4 r1 r2 r3 r4) , xcommon ycommon title(Effet du % d'ouvriers par niveau) *** Etrangers *** * Effet fixe - niveau région xtmixed to10t1 p_etr || reg : predict etr_f_reg_to10, fitted * Effet aléatoire - niveau région xtmixed to10t1 p_etr || reg : p_etr predict etr_r_reg_to10, fitted * Effet fixe - niveau département xtmixed to10t1 p_etr || dep : predict etr_f_dep_to10, fitted * Effet aléatoire - niveau département xtmixed to10t1 p_etr || dep : p_etr predict etr_r_dep_to10, fitted * Effet fixe - niveau commune en IDF xtmixed to10t1 p_etr if reg==11 || code : predict etr_f_com_idf_to10, fitted * Effet aléatoire - niveau commune en IDF xtmixed to10t1 p_etr if reg==11 || code : p_etr predict etr_r_com_idf_to10, fitted * Effet fixe - niveau commune en SSD xtmixed to10t1 p_etr if dep=="93" || code : predict etr_f_com_ssd_to10, fitted * Effet aléatoire - niveau commune en SSD xtmixed to10t1 p_etr if dep=="93" || code : p_etr predict etr_r_com_ssd_to10, fitted * Modèle complet non pertinent ** Graphiques ** etr * Reg sc etr_f_reg_to10 p_etr, msize(tiny) graph save Graph "C:\Users\Antoine\Desktop\GRAPH\to10\fixe_etr_reg.gph" sc etr_r_reg_to10 p_etr, msize(tiny) graph save Graph "C:\Users\Antoine\Desktop\GRAPH\to10\rand_etr_reg.gph" * Dep sc etr_f_dep_to10 p_etr, msize(tiny) graph save Graph "C:\Users\Antoine\Desktop\GRAPH\to10\fixe_etr_dep.gph" sc etr_r_dep_to10 p_etr, msize(tiny) graph save Graph "C:\Users\Antoine\Desktop\GRAPH\to10\rand_etr_dep.gph" * Com IDF sc etr_f_com_idf_to10 p_etr, msize(tiny) graph save Graph "C:\Users\Antoine\Desktop\GRAPH\to10\fixe_etr_com_idf.gph" sc etr_r_com_idf_to10 p_etr, msize(tiny) graph save Graph "C:\Users\Antoine\Desktop\GRAPH\to10\rand_etr_com_idf.gph" * Com SSD sc etr_f_com_ssd_to10 p_etr, msize(tiny) graph save Graph "C:\Users\Antoine\Desktop\GRAPH\to10\fixe_etr_com_ssd.gph" sc etr_r_com_ssd_to10 p_etr, msize(tiny) graph save Graph "C:\Users\Antoine\Desktop\GRAPH\to10\rand_etr_com_ssd.gph" **** Combinaison * Reg sc etr_f_reg_to10 p_etr, msize(tiny) name(f1, replace) title(fixe par région) sc etr_r_reg_to10 p_etr, msize(tiny) name(r1, replace) title(aléatoire par région) * Dep sc etr_f_dep_to10 p_etr, msize(tiny) name(f2, replace) title(fixe par département) sc etr_r_dep_to10 p_etr, msize(tiny) name(r2, replace) title(aléatoire par département) * Com IDF sc etr_f_com_idf_to10 p_etr, msize(tiny) name(f3, replace) title(fixe par commune (IDF)) sc etr_r_com_idf_to10 p_etr, msize(tiny) name(r3, replace) title(aléatoire par commune (IDF) ) * Com SSD sc etr_f_com_ssd_to10 p_etr, msize(tiny) name(f4, replace) title(fixe par commune (SSD)) sc etr_r_com_ssd_to10 p_etr, msize(tiny) name(r4, replace) title(aléatoire par commune (SSD) ) * Par effets graph combine (f1 r1 f2 r2 f3 r3 f4 r4), xcommon ycommon title(Effet du % d'étrangers par effets) * Par niveau graph combine (f1 f2 f3 f4 r1 r2 r3 r4) , xcommon ycommon title(Effet du % d'étrangers par niveau) *** Diplôme *** * Effet fixe - niveau région xtmixed to10t1 p_ldip || reg : predict ldip_f_reg_to10, fitted * Effet aléatoire - niveau région xtmixed to10t1 p_ldip || reg : p_ldip predict ldip_r_reg_to10, fitted * Effet fixe - niveau département xtmixed to10t1 p_ldip || dep : predict ldip_f_dep_to10, fitted * Effet aléatoire - niveau département xtmixed to10t1 p_ldip || dep : p_ldip predict ldip_r_dep_to10, fitted * Effet fixe - niveau commune en IDF xtmixed to10t1 p_ldip if reg==11 || code : predict ldip_f_com_idf_to10, fitted * Effet aléatoire - niveau commune en IDF xtmixed to10t1 p_ldip if reg==11 || code : p_ldip predict ldip_r_com_idf_to10, fitted * Effet fixe - niveau commune en SSD xtmixed to10t1 p_ldip if dep=="93" || code : predict ldip_f_com_ssd_to10, fitted * Effet aléatoire - niveau commune en SSD xtmixed to10t1 p_ldip if dep=="93" || code : p_ldip predict ldip_r_com_ssd_to10, fitted * Modèle complet non pertinent ** Graphiques ** ldip * Reg sc ldip_f_reg_to10 p_ldip, msize(tiny) graph save Graph "C:\Users\Antoine\Desktop\GRAPH\to10\fixe_ldip_reg.gph" sc ldip_r_reg_to10 p_ldip, msize(tiny) graph save Graph "C:\Users\Antoine\Desktop\GRAPH\to10\rand_ldip_reg.gph" * Dep sc ldip_f_dep_to10 p_ldip, msize(tiny) graph save Graph "C:\Users\Antoine\Desktop\GRAPH\to10\fixe_ldip_dep.gph" sc ldip_r_dep_to10 p_ldip, msize(tiny) graph save Graph "C:\Users\Antoine\Desktop\GRAPH\to10\rand_ldip_dep.gph" * Com IDF sc ldip_f_com_idf_to10 p_ldip, msize(tiny) graph save Graph "C:\Users\Antoine\Desktop\GRAPH\to10\fixe_ldip_com_idf.gph" sc ldip_r_com_idf_to10 p_ldip, msize(tiny) graph save Graph "C:\Users\Antoine\Desktop\GRAPH\to10\rand_ldip_com_idf.gph" * Com SSD sc ldip_f_com_ssd_to10 p_ldip, msize(tiny) graph save Graph "C:\Users\Antoine\Desktop\GRAPH\to10\fixe_ldip_com_ssd.gph" sc ldip_r_com_ssd_to10 p_ldip, msize(tiny) graph save Graph "C:\Users\Antoine\Desktop\GRAPH\to10\rand_ldip_com_ssd.gph" **** Combinaison * Reg sc ldip_f_reg_to10 p_ldip, msize(tiny) name(f1, replace) title(fixe par région) sc ldip_r_reg_to10 p_ldip, msize(tiny) name(r1, replace) title(aléatoire par région) * Dep sc ldip_f_dep_to10 p_ldip, msize(tiny) name(f2, replace) title(fixe par département) sc ldip_r_dep_to10 p_ldip, msize(tiny) name(r2, replace) title(aléatoire par département) * Com IDF sc ldip_f_com_idf_to10 p_ldip, msize(tiny) name(f3, replace) title(fixe par commune (IDF)) sc ldip_r_com_idf_to10 p_ldip, msize(tiny) name(r3, replace) title(aléatoire par commune (IDF) ) * Com SSD sc ldip_f_com_ssd_to10 p_ldip, msize(tiny) name(f4, replace) title(fixe par commune (SSD)) sc ldip_r_com_ssd_to10 p_ldip, msize(tiny) name(r4, replace) title(aléatoire par commune (SSD) ) *** Cumul des effets * Par effets graph combine (f1 r1 f2 r2 f3 r3 f4 r4), xcommon ycommon title(Effet du % de bas niveau de diplôme par effets) * Par niveau graph combine (f1 f2 f3 f4 r1 r2 r3 r4) , xcommon ycommon title(Effet du % de bas niveau de diplôme par niveau) ######################################### Evolution dans le temps ########################################### sc cs6_r_com_idf_to7 p_cs6 ,msize(tiny) name(x, replace) title(2007) sc cs6_r_com_idf_to9 p_cs6 ,msize(tiny) name(y, replace) title(2009) sc cs6_r_com_idf_to10 p_cs6 ,msize(tiny) name(z, replace) title(2010) graph combine (x y z) , xcommon ycommon row(1) title(Effet du % d'ouvriers au cours du temps.) sc ldip_r_com_idf_to7 p_ldip ,msize(tiny) name(x, replace) title(2007) sc ldip_r_com_idf_to9 p_ldip ,msize(tiny) name(y, replace) title(2009) sc ldip_r_com_idf_to10 p_ldip ,msize(tiny) name(z, replace) title(2010) graph combine (x y z) , xcommon ycommon row(1) title(Effet du % de faiblement diplômés au cours du temps.) sc etr_r_com_idf_to7 p_etr ,msize(tiny) name(x, replace) title(2007) sc etr_r_com_idf_to9 p_etr ,msize(tiny) name(y, replace) title(2009) sc etr_r_com_idf_to10 p_etr ,msize(tiny) name(z, replace) title(2010) graph combine (x y z) , xcommon ycommon row(1) title(Effet du % d'étrangers au cours du temps.)
** Base multiniveau ** * Effet fixe - niveau région xtmixed to09 p_cs6 || reg : predict cs6_f_reg_to9, fitted * Effet aléatoire - niveau région xtmixed to09 p_cs6 || reg : p_cs6 predict cs6_r_reg_to9, fitted * Effet fixe - niveau département xtmixed to09 p_cs6 || dep : predict cs6_f_dep_to9, fitted * Effet aléatoire - niveau département xtmixed to09 p_cs6 || dep : p_cs6 predict cs6_r_dep_to9, fitted * Effet fixe - niveau commune en IDF xtmixed to09 p_cs6 if reg==11 || code : predict cs6_f_com_idf_to9, fitted * Effet aléatoire - niveau commune en IDF xtmixed to09 p_cs6 if reg==11 || code : p_cs6 predict cs6_r_com_idf_to9, fitted * Effet fixe - niveau commune en SSD xtmixed to09 p_cs6 if dep=="93" || code : predict cs6_f_com_ssd_to9, fitted * Effet aléatoire - niveau commune en SSD xtmixed to09 p_cs6 if dep=="93" || code : p_cs6 predict cs6_r_com_ssd_to9, fitted * Modèle complet non pertinent ** Graphiques ** CS6 * Reg sc cs6_f_reg_to9 p_cs6, msize(tiny) graph save Graph "C:\Users\Antoine\Desktop\GRAPH\TO9\fixe_cs6_reg.gph" sc cs6_r_reg_to9 p_cs6, msize(tiny) graph save Graph "C:\Users\Antoine\Desktop\GRAPH\TO9\rand_cs6_reg.gph" * Dep sc cs6_f_dep_to9 p_cs6, msize(tiny) graph save Graph "C:\Users\Antoine\Desktop\GRAPH\TO9\fixe_cs6_dep.gph" sc cs6_r_dep_to9 p_cs6, msize(tiny) graph save Graph "C:\Users\Antoine\Desktop\GRAPH\TO9\rand_cs6_dep.gph" * Com IDF sc cs6_f_com_idf_to9 p_cs6, msize(tiny) graph save Graph "C:\Users\Antoine\Desktop\GRAPH\TO9\fixe_cs6_com_idf.gph" sc cs6_r_com_idf_to9 p_cs6, msize(tiny) graph save Graph "C:\Users\Antoine\Desktop\GRAPH\TO9\rand_cs6_com_idf.gph" * Com SSD sc cs6_f_com_ssd_to9 p_cs6, msize(tiny) graph save Graph "C:\Users\Antoine\Desktop\GRAPH\TO9\fixe_cs6_com_ssd.gph" sc cs6_r_com_ssd_to9 p_cs6, msize(tiny) graph save Graph "C:\Users\Antoine\Desktop\GRAPH\TO9\rand_cs6_com_ssd.gph" **** Combinaison * Reg sc cs6_f_reg_to9 p_cs6, msize(tiny) name(f1, replace) title(fixe par région) sc cs6_r_reg_to9 p_cs6, msize(tiny) name(r1, replace) title(aléatoire par région) * Dep sc cs6_f_dep_to9 p_cs6, msize(tiny) name(f2, replace) title(fixe par département) sc cs6_r_dep_to9 p_cs6, msize(tiny) name(r2, replace) title(aléatoire par département) * Com IDF sc cs6_f_com_idf_to9 p_cs6, msize(tiny) name(f3, replace) title(fixe par commune (IDF)) sc cs6_r_com_idf_to9 p_cs6, msize(tiny) name(r3, replace) title(aléatoire par commune (IDF) ) * Com SSD sc cs6_f_com_ssd_to9 p_cs6, msize(tiny) name(f4, replace) title(fixe par commune (SSD)) sc cs6_r_com_ssd_to9 p_cs6, msize(tiny) name(r4, replace) title(aléatoire par commune (SSD) ) * Par niveau graph combine (f1 r1 f2 r2 f3 r3 f4 r4), xcommon ycommon title(Effet du % d'ouvriers par effets) * Par effets graph combine (f1 f2 f3 f4 r1 r2 r3 r4) , xcommon ycommon title(Effet du % d'ouvriers par niveau)![]()
16/09/2014 - Le multiniveaux : approche intuitive et modélisation complexe
# Unité d'analyse : Bureaux de vote. # Données France entière # Cartelec * Linéaire simple xtmixed to09 p_cs6 predict xp1 sc xp1 p_cs6* Linéaire simple : département xtmixed to09 p_cs6 || codereg : predict xp2, fitted sc xp2 p_cs6
* Multiniveaux : région et CSP xtmixed to09 p_cs6 || codereg : p_cs6 predict xp3, fitted sc xp3 p_cs6
* Multiniveaux : département xtmixed to09 p_cs6 || codedep : predict xp4, fitted sc xp4 p_cs6
* Multiniveaux : département et CSP xtmixed to09 p_cs6 || codedep : p_cs6 predict xp5, fitted sc xp5 p_cs6
* Multiniveaux : région et département xtmixed to09 p_cs6 || codereg : || codedep : predict xp6, fitted sc xp6 p_cs6
* Multiniveaux : région (CSP) et département xtmixed to09 p_cs6 || codereg : p_cs6 || codedep : predict xp7, fitted
* Multiniveaux : région (CSP) et département (CSP) sc xp7 p_cs6
xtmixed to09 p_cs6 || codereg : p_cs6 || codedep : p_cs6 predict xp8, fitted sc xp8 p_cs6
* Multiniveaux : région (CSP) et département (CSP) et ville (CSP) xtmixed to09 p_cs6 || codereg: p_cs6 || codedep: p_cs6 || code: p_cs6 predict xp10, fitted sc xp10 p_cs6
## Combinaison des facteurs - Analyse mutlivariée xtmixed to09 c.p_cs6##c.p_pop_etr || codereg : p_cs6 p_pop_etr || codedep : p_cs6 p_pop_etr Performing EM optimization: Performing gradient-based optimization: Iteration 0: log likelihood = -153765.97 Iteration 1: log likelihood = -153765.97 Computing standard errors: Mixed-effects ML regression Number of obs = 46552 ----------------------------------------------------------- | No. of Observations per Group Group Variable | Groups Minimum Average Maximum ----------------+------------------------------------------ codereg | 23 1 2024.0 5212 codedep | 99 1 470.2 1799 ----------------------------------------------------------- Wald chi2(3) = 81.69 Log likelihood = -153765.97 Prob > chi2 = 0.0000 ------------------------------------------------------------------------------------- to09 | Coef. Std. Err. z P>|z| [95% Conf. Interval] --------------------+---------------------------------------------------------------- p_cs6 | -.1437075 .0252556 -5.69 0.000 -.1932075 -.0942076 p_pop_etr | -.4484845 .0806867 -5.56 0.000 -.6066275 -.2903414 | c.p_cs6#c.p_pop_etr | -.0015336 .0007074 -2.17 0.030 -.0029201 -.000147 | _cons | 48.62806 .5233202 92.92 0.000 47.60238 49.65375 ------------------------------------------------------------------------------------- ------------------------------------------------------------------------------ Random-effects Parameters | Estimate Std. Err. [95% Conf. Interval] -----------------------------+------------------------------------------------ codereg: Independent | sd(p_cs6) | .1004194 .0190052 .069298 .1455171 sd(p_pop~tr) | .3090872 .0684859 .2002056 .477184 sd(_cons) | 2.047456 .4591439 1.319265 3.177586 -----------------------------+------------------------------------------------ codedep: Independent | sd(p_cs6) | .1123182 .010403 .0936723 .1346756 sd(p_pop~tr) | .3558943 .0332028 .2964211 .4273002 sd(_cons) | 2.338768 .2262164 1.934885 2.826958 -----------------------------+------------------------------------------------ sd(Residual) | 6.511199 .021412 6.469367 6.553301 ------------------------------------------------------------------------------ LR test vs. linear regression: chi2(6) = 12676.89 Prob > chi2 = 0.0000 Note: LR test is conservative and provided only for reference. predict final, fitted
16/09/2014 - Faire varier les niveaux d'analyse avec xtmixed
*** Multiniveau fixe et random selon facteurs *** ** TO 09 ** xtmixed to09 preca || codereg: predict to9f, fitted xtmixed to09 preca || codereg: preca predict to9r, fitted xtmixed to09 p_cs6 || codereg: predict to9f_cs6, fitted xtmixed to09 p_cs6 || codereg: p_cs6 predict to9r_cs6, fitted xtmixed to09 p_pop_etr || codereg: predict to9f_etr, fitted xtmixed to09 p_pop_etr || codereg: p_pop_etr predict to9r_etr, fitted xtmixed to09 p_ndipl0 || codereg: predict to9f_ndip, fitted xtmixed to09 p_ndipl0 || codereg: p_ndipl0 predict to9r_ndip, fitted xtmixed to09 p_lochlm || codereg: predict to9f_hlm, fitted xtmixed to09 p_lochlm || codereg: p_lochlm predict to9r_hlm, fitted ** Graphiques ** sc to9f preca, msize(small) sc to9r preca, msize(small) sc to9f_cs6 p_cs6, msize(small) sc to9r_cs6 p_cs6, msize(small) sc to9f_etr p_pop_etr , msize(small) sc to9r_etr p_pop_etr , msize(small) sc to9f_ndip p_ndipl0 , msize(small) sc to9r_ndip p_ndipl0 , msize(small) sc to9f_hlm p_lochlm , msize(small) sc to9r_hlm p_lochlm , msize(small) ** Combinaison ** graph combine "C:\Users\Antoine\Desktop\DATASET\FR\Cartelec\MULTINIV\TO09\fcs6.gph" "C:\Users\Antoine\Desktop\DATASET\FR\Cartelec\MULTINIV\TO09\fetr.gph" "C:\Users\Antoine\Desktop\DATASET\FR\Cartelec\MULTINIV\TO09\fhlm.gph" "C:\Users\Antoine\Desktop\DATASET\FR\Cartelec\MULTINIV\TO09\fndip.gph", ycommon xcommon graph combine "C:\Users\Antoine\Desktop\DATASET\FR\Cartelec\MULTINIV\TO09\rcs6.gph" "C:\Users\Antoine\Desktop\DATASET\FR\Cartelec\MULTINIV\TO09\retr.gph" "C:\Users\Antoine\Desktop\DATASET\FR\Cartelec\MULTINIV\TO09\rhlm.gph" "C:\Users\Antoine\Desktop\DATASET\FR\Cartelec\MULTINIV\TO09\rndip.gph", ycommon xcommon # Effets fixes et aléatoires en France - Niveau département** IDF ** sc to9f preca if codereg == 11, msize(small) sc to9r preca if codereg == 11, msize(small) sc to9f_cs6 p_cs6 if codereg == 11, msize(small) sc to9r_cs6 p_cs6 if codereg == 11, msize(small) sc to9f_etr p_pop_etr if codereg == 11 , msize(small) sc to9r_etr p_pop_etr if codereg == 11 , msize(small) sc to9f_ndip p_ndipl0 if codereg == 11 , msize(small) sc to9r_ndip p_ndipl0 if codereg == 11 , msize(small) sc to9f_hlm p_lochlm if codereg == 11 , msize(small) sc to9r_hlm p_lochlm if codereg == 11 , msize(small) ** Régression IDF : Unité département ** xtmixed to09 preca || codedep: predict dto9f, fitted xtmixed to09 preca || codedep: preca predict dto9r, fitted xtmixed to09 p_cs6 || codedep: predict dto9f_cs6, fitted xtmixed to09 p_cs6 || codedep: p_cs6 predict dto9r_cs6, fitted xtmixed to09 p_pop_etr || codedep: predict dto9f_etr, fitted xtmixed to09 p_pop_etr || codedep: p_pop_etr predict dto9r_etr, fitted xtmixed to09 p_ndipl0 || codedep: predict dto9f_ndip, fitted xtmixed to09 p_ndipl0 || codedep: p_ndipl0 predict dto9r_ndip, fitted xtmixed to09 p_lochlm || codedep: predict dto9f_hlm, fitted xtmixed to09 p_lochlm || codedep: p_lochlm predict dto9r_hlm, fitted ** Graphiques unité département || contexte = IDF ** sc dto9f preca if codereg == 11, msize(small) sc dto9r preca if codereg == 11, msize(small) sc dto9f_cs6 p_cs6 if codereg == 11, msize(small) sc dto9r_cs6 p_cs6 if codereg == 11, msize(small) sc dto9f_etr p_pop_etr if codereg == 11 , msize(small) sc dto9r_etr p_pop_etr if codereg == 11 , msize(small) sc dto9f_ndip p_ndipl0 if codereg == 11 , msize(small) sc dto9r_ndip p_ndipl0 if codereg == 11 , msize(small) sc dto9f_hlm p_lochlm if codereg == 11 , msize(small) sc dto9r_hlm p_lochlm if codereg == 11 , msize(small) ** Graphique ** graph combine "C:\Users\Antoine\Desktop\DATASET\FR\Cartelec\MULTINIV\TO09\dfcs6.gph" "C:\Users\Antoine\Desktop\DATASET\FR\Cartelec\MULTINIV\TO09\dfetr.gph" "C:\Users\Antoine\Desktop\DATASET\FR\Cartelec\MULTINIV\TO09\dfhlm.gph" "C:\Users\Antoine\Desktop\DATASET\FR\Cartelec\MULTINIV\TO09\dfndip.gph" "C:\Users\Antoine\Desktop\DATASET\FR\Cartelec\MULTINIV\TO09\drcs6.gph" "C:\Users\Antoine\Desktop\DATASET\FR\Cartelec\MULTINIV\TO09\dretr.gph" "C:\Users\Antoine\Desktop\DATASET\FR\Cartelec\MULTINIV\TO09\drhlm.gph""C:\Users\Antoine\Desktop\DATASET\FR\Cartelec\MULTINIV\TO09\drndip.gph" , ycommon xcommon # Effets fixes et aléatoires en Ile de France - Niveau département
![]()
16/09/2014 - Régressions multiniveaux et écologiques
# Régression multiniveaux
# On trouve beaucoup de choses peu explicites et trop compliquées pour l'utilisation des modèles linéaires multiniveaux sous Stata
# Ici un exemple simple
# Une DV, une IV et 2 niveaux
# On prédit le taux de participation en fonction de la part des minorités ethniques, dans chaque région du Royaume Uni
# Turn 10 <- minority (region)
# Effet fixe (toutes les droites de régressions sont parallèles mais la constante varie
# Hypothèse implicite : effet ethnicité sur le vote constant dans toutes les régions.
xtmixed Turn10 minority || reg:
Performing gradient-based optimization:
Iteration 0: log likelihood = -1734.7254
Iteration 1: log likelihood = -1734.7254
Computing standard errors:
Mixed-effects ML regression Number of obs = 572
Group variable: reg Number of groups = 10
Obs per group: min = 28
avg = 57.2
max = 87
Wald chi2(1) = 62.51
Log likelihood = -1734.7254 Prob > chi2 = 0.0000
------------------------------------------------------------------------------
Turn10 | Coef. Std. Err. z P>|z| [95% Conf. Interval]
-------------+----------------------------------------------------------------
minority | -.1819814 .0230165 -7.91 0.000 -.2270929 -.13687
_cons | 66.4992 .8216178 80.94 0.000 64.88886 68.10954
------------------------------------------------------------------------------
------------------------------------------------------------------------------
Random-effects Parameters | Estimate Std. Err. [95% Conf. Interval]
-----------------------------+------------------------------------------------
reg: Identity |
sd(_cons) | 2.448575 .6003537 1.514299 3.959271
-----------------------------+------------------------------------------------
sd(Residual) | 4.905379 .1463629 4.626739 5.200799
------------------------------------------------------------------------------
LR test vs. linear regression: chibar2(01) = 84.77 Prob >= chibar2 = 0.0000
# On prédit les scores dans chaquel selon le % de minorités et la région
predict p, fitted
# Graphique
twoway line p minority, connect(ascending)
## Effets aléatoires
# On fait varier la constante, mais aussi la pente de chaque droite
# Hypothèse : l'effet de l'ethnicité sur le vote n'est PAS le même dans toutes les régions
xtmixed Turn10 minority || reg: minority , mle cov(unstructured)
# Nb : on indique après || que minority peut varier par région.
# Résultats
Performing EM optimization:
Performing gradient-based optimization:
Iteration 0: log likelihood = -1732.4864
Iteration 1: log likelihood = -1732.4864
Computing standard errors:
Mixed-effects ML regression Number of obs = 572
Group variable: reg Number of groups = 10
Obs per group: min = 28
avg = 57.2
max = 87
Wald chi2(1) = 19.10
Log likelihood = -1732.4864 Prob > chi2 = 0.0000
------------------------------------------------------------------------------
Turn10 | Coef. Std. Err. z P>|z| [95% Conf. Interval]
-------------+----------------------------------------------------------------
minority | -.2117185 .0484391 -4.37 0.000 -.3066575 -.1167796
_cons | 66.53254 .7951699 83.67 0.000 64.97403 68.09104
------------------------------------------------------------------------------
------------------------------------------------------------------------------
Random-effects Parameters | Estimate Std. Err. [95% Conf. Interval]
-----------------------------+------------------------------------------------
reg: Unstructured |
sd(minority) | .1053446 .0503945 .0412493 .2690344
sd(_cons) | 2.355273 .6069453 1.421313 3.902948
corr(minority,_cons) | -.0671606 .5684415 -.8294699 .7825483
-----------------------------+------------------------------------------------
sd(Residual) | 4.851571 .1460745 4.573554 5.146488
------------------------------------------------------------------------------
LR test vs. linear regression: chi2(3) = 89.24 Prob > chi2 = 0.0000
Note: LR test is conservative and provided only for reference.
# Graphique :
twoway line m minority, connect(ascending)
# On peut comparer les scores prédits par région
mean m p , over(reg)
Mean estimation Number of obs = 573
_subpop_1: reg = 1. East Midlands
_subpop_2: reg = 2. East of England
_subpop_3: reg = 3. London
_subpop_4: reg = 4. North East
_subpop_5: reg = 5. North West
_subpop_6: reg = 7. South East
_subpop_7: reg = 8. South West
_subpop_8: reg = 9. Wales
_subpop_9: reg = 10. West Midlands
_subpop_10: reg = 11. Yorkshire and The Humber
--------------------------------------------------------------
Over | Mean Std. Err. [95% Conf. Interval]
-------------+------------------------------------------------
m |
_subpop_1 | 66.05814 .3189383 65.43171 66.68457
_subpop_2 | 67.31629 .0978942 67.12402 67.50857
_subpop_3 | 64.58616 .2577564 64.0799 65.09243
_subpop_4 | 61.91952 .1184591 61.68685 62.15219
_subpop_5 | 62.64286 .2574374 62.13722 63.1485
_subpop_6 | 67.94802 .0909599 67.76936 68.12667
_subpop_7 | 68.52627 .0822443 68.36473 68.68781
_subpop_8 | 64.97668 .0861006 64.80757 65.1458
_subpop_9 | 64.20154 .4233557 63.37002 65.03306
_subpop_10 | 63.40059 .0778068 63.24777 63.55341
-------------+------------------------------------------------
p |
_subpop_1 | 66.07222 .2922972 65.49812 66.64633
_subpop_2 | 67.31565 .1238212 67.07245 67.55885
_subpop_3 | 64.5402 .3273598 63.89723 65.18318
_subpop_4 | 61.89642 .0847722 61.72992 62.06292
_subpop_5 | 62.66781 .1397813 62.39326 62.94236
_subpop_6 | 67.96505 .0633998 67.84053 68.08958
_subpop_7 | 68.54139 .0599742 68.42359 68.65919
_subpop_8 | 64.97384 .066721 64.8428 65.10489
_subpop_9 | 64.23475 .3323162 63.58204 64.88745
_subpop_10 | 63.36292 .218928 62.93292 63.79292
--------------------------------------------------------------
# Et graphiquement les prédictions par individus (ici individus = ville)
## Résultats d'un modèle plus complexe associant effet classe et effet "race"
*******************************
Régression écologique (EiPack)
ACORN * Turn 10
> ei.reg(formula, auk)
Call: ei.reg(formula = formula, data = auk)
Estimated internal cells:
Turn10 cto10
ACORN_1p 0.754 0.246
ACORN_2p 0.688 0.312
ACORN_3p 0.692 0.308
ACORN_4p 0.603 0.397
ACORN_5p 0.465 0.535
cacorn 0.270 0.730
> ei.reg.bayes(formula, auk, sample = 1000, weights = auk$pop)
Formula: formula
Total sims: 1000
Estimated internal cells: (averaged across simulations)
Turn10 cto10
ACORN_1p 0.754 0.246
ACORN_2p 0.688 0.311
ACORN_3p 0.694 0.306
ACORN_4p 0.601 0.399
ACORN_5p 0.464 0.535
cacorn 0.238 0.754
> summary(acornbay) (bayesian regression)
Formula: formula
Total sims: 1000
Estimated internal cells: (across simulations)
Mean Std. Dev. 2.5% 97.5%
ACORN_1p.Turn10 0.75367 0.00666 0.74104 0.76680
ACORN_2p.Turn10 0.68884 0.00733 0.67558 0.70204
ACORN_3p.Turn10 0.69399 0.01132 0.67181 0.71520
ACORN_4p.Turn10 0.60139 0.01279 0.57674 0.62646
ACORN_5p.Turn10 0.46427 0.01021 0.44403 0.48442
cacorn.Turn10 0.23903 0.07614 0.10194 0.39719
ACORN_1p.cto10 0.24657 0.00687 0.23257 0.26019
ACORN_2p.cto10 0.31190 0.00710 0.29789 0.32574
ACORN_3p.cto10 0.30563 0.01146 0.28273 0.32845
ACORN_4p.cto10 0.39833 0.01296 0.37357 0.42397
ACORN_5p.cto10 0.53594 0.01040 0.51628 0.55523
cacorn.cto10 0.75883 0.07591 0.61230 0.90920
> summary(acornreg) (ecological model)
Call: ei.reg(formula = formula, data = auk)
Estimated internal cells:
Estimate Std. Error t-stat
ACORN_1p.Turn10 7.54e-01 6.99e-03 1.08e+02
ACORN_2p.Turn10 6.88e-01 7.06e-03 9.74e+01
ACORN_3p.Turn10 6.92e-01 1.15e-02 6.03e+01
ACORN_4p.Turn10 6.03e-01 1.30e-02 4.65e+01
ACORN_5p.Turn10 4.65e-01 1.02e-02 4.55e+01
cacorn.Turn10 2.70e-01 7.44e-02 3.63e+00
ACORN_1p.cto10 2.46e-01 6.99e-03 3.51e+01
ACORN_2p.cto10 3.12e-01 7.06e-03 4.43e+01
ACORN_3p.cto10 3.08e-01 1.15e-02 2.68e+01
ACORN_4p.cto10 3.97e-01 1.30e-02 3.06e+01
ACORN_5p.cto10 5.35e-01 1.02e-02 5.23e+01
cacorn.cto10 7.30e-01 7.44e-02 9.82e+00
Race * Turn 10
formula <- cbind(Turn10, cto10) ~ cbind(white, mixed, asian, black, chinese, crace)
Call: ei.reg(formula = formula, data = auk)
Estimated internal cells:
Turn10 cto10
white 0.672 0.328
mixed -1.023 2.023
asian 0.611 0.389
black 0.647 0.353
chinese 1.374 -0.374
crace -1359.466 1360.466
ei.reg.bayes(formula, auk, sample = 1000, weights = auk$pop)
Formula: formula
Total sims: 1000
Estimated internal cells: (averaged across simulations)
Turn10 cto10
white 0.672 0.328
mixed -1.102 2.110
asian 0.614 0.385
black 0.660 0.339
chinese 1.387 -0.391
crace -1506.428 1544.131
Warning message:
> summary(racebay)
Formula: formula
Total sims: 1000
Estimated internal cells: (across simulations)
Mean Std. Dev. 2.5% 97.5%
white.Turn10 6.72e-01 4.13e-03 6.64e-01 6.80e-01
mixed.Turn10 -1.16e+00 5.32e-01 -2.24e+00 -1.21e-01
asian.Turn10 6.16e-01 4.28e-02 5.31e-01 7.04e-01
black.Turn10 6.68e-01 9.24e-02 4.93e-01 8.54e-01
chinese.Turn10 1.42e+00 4.14e-01 6.49e-01 2.23e+00
crace.Turn10 -1.64e+03 3.41e+03 -7.85e+03 5.29e+03
white.cto10 3.28e-01 4.23e-03 3.20e-01 3.37e-01
mixed.cto10 2.08e+00 5.24e-01 1.06e+00 3.11e+00
asian.cto10 3.86e-01 4.03e-02 3.10e-01 4.60e-01
black.cto10 3.45e-01 9.15e-02 1.62e-01 5.20e-01
chinese.cto10 -3.97e-01 4.16e-01 -1.27e+00 4.18e-01
crace.cto10 1.77e+03 3.48e+03 -5.16e+03 8.62e+03
> summary(racereg)
Call: ei.reg(formula = formula, data = auk)
Estimated internal cells:
Estimate Std. Error t-stat
white.Turn10 6.72e-01 4.13e-03 1.62e+02
mixed.Turn10 -1.02e+00 5.19e-01 -1.97e+00
asian.Turn10 6.11e-01 3.80e-02 1.61e+01
black.Turn10 6.47e-01 8.76e-02 7.39e+00
chinese.Turn10 1.37e+00 3.97e-01 3.46e+00
crace.Turn10 -1.36e+03 3.52e+03 -3.86e-01
white.cto10 3.28e-01 4.13e-03 7.94e+01
mixed.cto10 2.02e+00 5.19e-01 3.90e+00
asian.cto10 3.89e-01 3.80e-02 1.02e+01
black.cto10 3.53e-01 8.76e-02 4.03e+00
chinese.cto10 -3.74e-01 3.97e-01 -9.40e-01
crace.cto10 1.36e+03 3.52e+03 3.86e-01
15/09/2014 - R - PCA et sélections de variables
# Import
`g2010` <- read.csv("C:/Users/Antoine/Desktop/g2010.csv")
View(`g2010`)
a <- g2010
# Sélection 1
a1 <- data.frame (a$uk1, a$uk2, a$wmid1, a$wmid2, a$ACORN_1p,a$ACORN_2p, a$ACORN_3p,a$ACORN_4p,a$ACORN_5p, a$Turn10 , a$Turn05)
a1 <- subset(a1)
# Visualisation
library(car)
scatter3d (a.Turn05 ~ a.uk1 + a.uk2, fill=FALSE, data = a1)
scatter3d (a.Turn05 ~ a.uk1 + a.uk2, fill=FALSE, data = a1, fit = "smooth")
scatter3d (a.Turn10 ~ a.uk1 + a.uk2, fill=FALSE, data = a1)
scatter3d (a.Turn10 ~ a.uk1 + a.uk2, fill=FALSE, data = a1, fit = "smooth")
# PCA
library(FactoMineR)
# PCA 1
res.pca = PCA(a1 [, 5:9], scale.unit=TRUE, ncp=2, graph = T, )
# PCA en sélection de variables
res.pca = PCA(a1 [,c('a.uk1', 'a.uk2')], scale.unit=TRUE, ncp=2, graph = T, )
res.pca = PCA(a1 [,c('a.uk1', 'a.uk2', 'a.Turn10', 'a.Turn05')], scale.unit=TRUE, ncp=2, graph = T, )
**** Régression écologique ****
library(car)
library(rgl)
library(FactoMineR)
library(eiPack)
eiuk <- read.csv("C:/Users/Antoine/Desktop/eiuk.csv")
View(eiuk)
auk <- subset(eiuk / 100)
View(auk)
formula <- cbind(Turn10, r10) ~ cbind(ACORN_1p, ACORN_2p, ACORN_3p, ACORN_4p ,ACORN_5p , rac)
ei.reg(formula, auk)
ei.reg.bayes(formula, auk, sample = 1000)
* Taux de participation 2010
Formula: formula
Total sims: 1000
Estimated internal cells: (averaged across simulations)
Turn10 r10
ACORN_1p 0.752 0.249
ACORN_2p 0.690 0.310
ACORN_3p 0.694 0.306
ACORN_4p 0.603 0.397
ACORN_5p 0.468 0.532
rac 0.245 0.754
formula <- cbind(Turn05, r05) ~ cbind(ACORN_1p, ACORN_2p, ACORN_3p, ACORN_4p ,ACORN_5p , rac)
ei.reg(formula, auk)
ei.reg.bayes(formula, auk, sample = 1000)
* Taux de participation 2005
Formula: formula
Total sims: 1000
Estimated internal cells: (averaged across simulations)
Turn05 r05
ACORN_1p 0.729 0.272
ACORN_2p 0.608 0.392
ACORN_3p 0.647 0.352
ACORN_4p 0.580 0.421
ACORN_5p 0.413 0.588
rac 0.339 0.658
14/09/2014 - Stata - Surface 3D
ssc install surface surface x y z![]()
![]()
13/09/2014 - R - Analyse en Composantes Principales et composants multiples
# Librairies
library(foreign)
library(car)
library(FactoMineR)
# Données
setwd("C:/Users/Antoine/Desktop/GLM")
read.dta("London.dta")
a <- read.dta("London.dta")
# Préparation
colnames(a)
b <- subset(a, select = scwhite : scnorel)
View(b)
# Vision de la structure des données
head(b)
scwhite scmixed scasian scblack scarab scchristian scbuddhist schindu scjewish scmuslism scsikh scortherel
1 0.8450512 0.03686007 0.08737201 0.007508533 0.004095563 0.4348123 0.0143344710 0.02730375 0.031399317 0.012286689 0.0000000000 0.002047782
2 0.8871866 0.03760446 0.06615599 0.002785515 0.002089137 0.4519499 0.0090529248 0.01462396 0.015320335 0.003481894 0.0006963788 0.004178273
3 0.7838039 0.04086181 0.12481426 0.033432391 0.009658246 0.4420505 0.0148588410 0.02154532 0.023774145 0.040861811 0.0052005942 0.004457652
4 0.5137056 0.05989848 0.27817258 0.101522841 0.025380710 0.4142132 0.0111675123 0.01015228 0.040609136 0.277157366 0.0040609138 0.005076142
5 0.3270699 0.03405755 0.50557840 0.103934236 0.005284791 0.3628890 0.0005871991 0.08631826 0.001761597 0.359365821 0.0540223122 0.004110394
6 0.3156003 0.06326384 0.32135156 0.279654920 0.008626888 0.4248742 0.0100647015 0.07979871 0.002875629 0.281092733 0.0107836090 0.005751258
scnorel
1 0.38703072
2 0.40389973
3 0.34621099
4 0.17766498
5 0.07985907
6 0.11646298
# On a donc 5 variables ethnoraciales et 7 variables religieuses
# PCA
# (1) - Complete
res.pca = PCA(b, scale.unit=TRUE, ncp=2, graph=T)
# (2) - Ethnoraciale
res.pca = PCA(b [, 1:5], scale.unit=TRUE, ncp=2, graph=T)
# (3) - Religieuse
res.pca = PCA(b [, 6:13], scale.unit=TRUE, ncp=2, graph=T)
*********** ACM *************
# un peu plus complexe
# On charge les données (ici ESS 06)
mca <- read.csv("C:/Users/Antoine/Desktop/z.csv")
View(mca)
# subset des variables quali
y <- subset(mca, select=relig:isco)
# Package factominer
library(FactoMineR)
# On calcule la MCA et on affiche le résultat
res.mca = MCA(y)
# Nuage des modalités
plot.MCA(res.mca, invisible=c("ind"))
# Nuage des individus
plot.MCA(res.mca, invisible=c("var"))
# Description de l'objet res.mca qui comporte les observations'.
dimdesc(res.mca)
$`Dim 1`
$`Dim 1`$quali
R2 p.value
relig 0.1477974 3.234830e-62
place 0.1867143 1.475891e-86
agecod 0.2972783 2.915272e-151
educ 0.6738623 0.000000e+00
isco 0.5336211 2.279910e-315
$`Dim 1`$category
Estimate p.value
educ_ISCED_1 0.79898706 3.033907e-165
60 + 0.34089402 5.613033e-123
relig_1 0.39258189 4.375377e-55
isco_ 0.54501390 3.457060e-45
place_right 0.04957057 3.476814e-26
educ_ISCED_2 0.54845805 7.314586e-24
isco_isco 6 0.43233996 1.845979e-17
isco_isco 9 0.13910416 2.136589e-12
isco_isco 5 0.06238605 2.066460e-10
place_no position 0.27219872 3.929707e-09
isco_isco 8 0.16252261 2.626940e-08
isco_isco 7 0.08568467 5.482288e-06
place_ 0.21460621 4.967497e-05
educ_ISCED_3 0.20688403 7.106992e-05
isco_isco 4 0.03352941 5.002258e-04
30 ans 0.03556252 6.494250e-03
relig_2 0.35979957 1.685920e-02
isco_ISCO_0 0.36843767 4.172058e-02
relig_8 -0.39138200 2.122142e-02
place_middle -0.03472478 3.072448e-07
isco_Isco 1 -0.40084143 3.056626e-07
relig_7 -1.28250703 1.514569e-07
educ_ISCED_6 -0.33061303 2.636474e-12
isco_isco 3 -0.34841965 4.651986e-17
educ_ISCED_5 -0.40358507 2.228562e-52
relig_not applicable -0.05983141 3.000802e-53
place_left -0.50165072 1.220193e-84
31-59 ans -0.37645653 2.335446e-137
educ_ISCED_7 -0.78652214 6.557118e-141
isco_isco 2 -1.07975734 9.804249e-180
$`Dim 2`
$`Dim 2`$quali
R2 p.value
relig 0.3490128 1.976311e-175
place 0.1724979 3.323616e-79
agecod 0.5048274 1.254202e-300
educ 0.2211847 8.511466e-102
isco 0.3464963 9.307336e-173
$`Dim 2`$category
Estimate p.value
30 ans 0.7094686130 3.234572e-227
isco_ 1.0227577100 1.155994e-105
relig_6 0.8333789711 1.893839e-69
educ_ISCED_2 0.6842635511 9.430431e-44
place_no position 0.5803817582 6.257363e-25
isco_isco 5 0.3301989929 1.018228e-18
educ_ISCED_4 0.3453101677 2.718263e-15
place_middle 0.0493062425 3.948002e-13
place_left 0.0005942511 1.703523e-09
educ_ISCED_6 0.4653060475 1.386060e-08
isco_isco 9 0.1983245718 8.049695e-04
relig_4 0.1514733736 1.471339e-03
relig_8 0.2555874233 1.585779e-02
isco_isco 4 -0.0139118234 4.638215e-02
educ_ -1.2942278737 1.158378e-02
isco_ISCO_0 -0.6097541249 2.873501e-03
educ_ISCED_5 -0.0013857724 4.523140e-05
isco_isco 3 -0.0519726556 7.450352e-08
isco_Isco 1 -0.2636926314 1.793918e-12
isco_isco 2 -0.2091473670 2.677382e-17
isco_isco 6 -0.4560763827 1.067283e-17
educ_ISCED_1 -0.1005760443 7.527801e-20
educ_ISCED_7 -0.2493515778 4.878393e-27
relig_not applicable -0.0879825344 2.184593e-46
place_right -0.3956007624 2.308164e-63
60 + -0.5449588410 6.648289e-120
relig_1 -0.6079144791 4.010577e-125
$`Dim 3`
$`Dim 3`$quali
R2 p.value
relig 0.14808414 2.342592e-62
place 0.09463125 3.951876e-41
agecod 0.25373360 1.312935e-125
educ 0.50532806 4.460362e-294
isco 0.52634249 8.223933e-309
$`Dim 3`$category
Estimate p.value
isco_ 0.845021121 1.022943e-109
isco_isco 2 0.423212742 8.639191e-59
30 ans 0.342796514 3.554754e-56
educ_ISCED_7 0.251418655 4.456451e-55
educ_ISCED_2 0.285084068 1.363417e-47
place_right 0.348293770 2.436721e-28
60 + 0.049975451 9.731477e-28
relig_not applicable 0.141513711 3.322187e-16
relig_2 0.918551857 1.036483e-15
relig_1 0.353916445 4.594062e-14
place_middle 0.014503160 6.269936e-12
educ_ISCED_6 0.066244342 1.983850e-09
isco_Isco 1 0.163534003 3.294091e-08
relig_8 1.160250755 9.495687e-06
isco_ISCO_0 0.765678154 1.248955e-04
relig_5 0.709344207 3.055964e-03
educ_ 0.989724795 2.159342e-02
isco_isco 4 -0.003961151 3.377792e-02
educ_ISCED_4 -0.348336340 1.075454e-02
educ_ISCED_5 -0.189137097 4.168408e-03
relig_3 -0.665959172 1.048801e-03
relig_4 -0.175493414 1.034719e-03
educ_ISCED_1 -0.186849258 1.987251e-04
isco_isco 8 -0.502533303 7.120165e-17
place_ -0.534117074 2.657748e-17
isco_isco 9 -0.457061513 2.687251e-24
relig_ -2.688319333 6.070477e-27
isco_isco 7 -0.569080095 4.406062e-27
isco_isco 5 -0.417458540 3.286359e-30
31-59 ans -0.392771965 5.226798e-111
educ_ISCED_3 -0.868149165 1.495484e-197
# Structure de res.mca
str(res.mca)
List of 5
$ eig :'data.frame': 32 obs. of 3 variables:
..$ eigenvalue : num [1:32] 0.368 0.319 0.306 0.258 0.251 ...
..$ percentage of variance : num [1:32] 5.75 4.98 4.78 4.03 3.92 ...
..$ cumulative percentage of variance: num [1:32] 5.75 10.73 15.5 19.54 23.46 ...
$ call:List of 9
..$ X :'data.frame': 1968 obs. of 5 variables:
.. ..$ relig : Factor w/ 10 levels "relig_","relig_1",..: 10 2 10 10 1 7 2 2 10 10 ...
.. ..$ place : Factor w/ 5 levels "place_","place_left",..: 3 5 5 5 1 3 3 5 2 3 ...
.. ..$ agecod: Factor w/ 3 levels "30 ans","31-59 ans",..: 2 3 3 3 2 2 3 2 2 2 ...
.. ..$ educ : Factor w/ 8 levels "educ_","educ_ISCED_1",..: 4 4 4 6 4 5 4 8 7 8 ...
.. ..$ isco : Factor w/ 11 levels "isco_","isco_Isco 1",..: 7 6 4 5 6 8 4 3 2 4 ...
..$ marge.col: Named num [1:37] 0.000407 0.078963 0.004167 0.000407 0.001931 ...
.. ..- attr(*, "names")= chr [1:37] "relig_" "relig_1" "relig_2" "relig_3" ...
..$ marge.row: Named num [1:1968] 0.000508 0.000508 0.000508 0.000508 0.000508 ...
.. ..- attr(*, "names")= chr [1:1968] "1" "2" "3" "4" ...
..$ ncp : num 5
..$ row.w : num [1:1968] 1 1 1 1 1 1 1 1 1 1 ...
..$ call : language MCA(y)
..$ Xtot :'data.frame': 1968 obs. of 37 variables:
.. ..$ relig_ : num [1:1968] 0 0 0 0 1 0 0 0 0 0 ...
.. ..$ relig_1 : num [1:1968] 0 1 0 0 0 0 1 1 0 0 ...
.. ..$ relig_2 : num [1:1968] 0 0 0 0 0 0 0 0 0 0 ...
.. ..$ relig_3 : num [1:1968] 0 0 0 0 0 0 0 0 0 0 ...
.. ..$ relig_4 : num [1:1968] 0 0 0 0 0 0 0 0 0 0 ...
.. ..$ relig_5 : num [1:1968] 0 0 0 0 0 0 0 0 0 0 ...
.. ..$ relig_6 : num [1:1968] 0 0 0 0 0 1 0 0 0 0 ...
.. ..$ relig_7 : num [1:1968] 0 0 0 0 0 0 0 0 0 0 ...
.. ..$ relig_8 : num [1:1968] 0 0 0 0 0 0 0 0 0 0 ...
.. ..$ relig_not applicable: num [1:1968] 1 0 1 1 0 0 0 0 1 1 ...
.. ..$ place_ : num [1:1968] 0 0 0 0 1 0 0 0 0 0 ...
.. ..$ place_left : num [1:1968] 0 0 0 0 0 0 0 0 1 0 ...
.. ..$ place_middle : num [1:1968] 1 0 0 0 0 1 1 0 0 1 ...
.. ..$ place_no position : num [1:1968] 0 0 0 0 0 0 0 0 0 0 ...
.. ..$ place_right : num [1:1968] 0 1 1 1 0 0 0 1 0 0 ...
.. ..$ 30 ans : num [1:1968] 0 0 0 0 0 0 0 0 0 0 ...
.. ..$ 31-59 ans : num [1:1968] 1 0 0 0 1 1 0 1 1 1 ...
.. ..$ 60 + : num [1:1968] 0 1 1 1 0 0 1 0 0 0 ...
.. ..$ educ_ : num [1:1968] 0 0 0 0 0 0 0 0 0 0 ...
.. ..$ educ_ISCED_1 : num [1:1968] 0 0 0 0 0 0 0 0 0 0 ...
.. ..$ educ_ISCED_2 : num [1:1968] 0 0 0 0 0 0 0 0 0 0 ...
.. ..$ educ_ISCED_3 : num [1:1968] 1 1 1 0 1 0 1 0 0 0 ...
.. ..$ educ_ISCED_4 : num [1:1968] 0 0 0 0 0 1 0 0 0 0 ...
.. ..$ educ_ISCED_5 : num [1:1968] 0 0 0 1 0 0 0 0 0 0 ...
.. ..$ educ_ISCED_6 : num [1:1968] 0 0 0 0 0 0 0 0 1 0 ...
.. ..$ educ_ISCED_7 : num [1:1968] 0 0 0 0 0 0 0 1 0 1 ...
.. ..$ isco_ : num [1:1968] 0 0 0 0 0 0 0 0 0 0 ...
.. ..$ isco_Isco 1 : num [1:1968] 0 0 0 0 0 0 0 0 1 0 ...
.. ..$ isco_isco 2 : num [1:1968] 0 0 0 0 0 0 0 1 0 0 ...
.. ..$ isco_isco 3 : num [1:1968] 0 0 1 0 0 0 1 0 0 1 ...
.. ..$ isco_isco 4 : num [1:1968] 0 0 0 1 0 0 0 0 0 0 ...
.. ..$ isco_isco 5 : num [1:1968] 0 1 0 0 1 0 0 0 0 0 ...
.. ..$ isco_isco 6 : num [1:1968] 1 0 0 0 0 0 0 0 0 0 ...
.. ..$ isco_isco 7 : num [1:1968] 0 0 0 0 0 1 0 0 0 0 ...
.. ..$ isco_isco 8 : num [1:1968] 0 0 0 0 0 0 0 0 0 0 ...
.. ..$ isco_isco 9 : num [1:1968] 0 0 0 0 0 0 0 0 0 0 ...
.. ..$ isco_ISCO_0 : num [1:1968] 0 0 0 0 0 0 0 0 0 0 ...
..$ N : num 9840
..$ quali : int [1:5] 1 2 3 4 5
$ ind :List of 3
..$ coord : num [1:1968, 1:5] 0.1432 0.6239 0.1546 0.0303 0.4125 ...
.. ..- attr(*, "dimnames")=List of 2
.. .. ..$ : chr [1:1968] "1" "2" "3" "4" ...
.. .. ..$ : chr [1:5] "Dim 1" "Dim 2" "Dim 3" "Dim 4" ...
..$ contrib: num [1:1968, 1:5] 0.002833 0.053767 0.0033 0.000127 0.023506 ...
.. ..- attr(*, "dimnames")=List of 2
.. .. ..$ : chr [1:1968] "1" "2" "3" "4" ...
.. .. ..$ : chr [1:5] "Dim 1" "Dim 2" "Dim 3" "Dim 4" ...
..$ cos2 : num [1:1968, 1:5] 0.003198 0.143658 0.010627 0.000194 0.001564 ...
.. ..- attr(*, "dimnames")=List of 2
.. .. ..$ : chr [1:1968] "1" "2" "3" "4" ...
.. .. ..$ : chr [1:5] "Dim 1" "Dim 2" "Dim 3" "Dim 4" ...
$ var :List of 5
..$ coord : num [1:37, 1:5] 0.693 0.423 0.369 -0.276 0.416 ...
.. ..- attr(*, "dimnames")=List of 2
.. .. ..$ : chr [1:37] "relig_" "relig_1" "relig_2" "relig_3" ...
.. .. ..$ : chr [1:5] "Dim 1" "Dim 2" "Dim 3" "Dim 4" ...
..$ contrib: num [1:37, 1:5] 0.05307 3.84683 0.15446 0.00843 0.09065 ...
.. ..- attr(*, "dimnames")=List of 2
.. .. ..$ : chr [1:37] "relig_" "relig_1" "relig_2" "relig_3" ...
.. .. ..$ : chr [1:5] "Dim 1" "Dim 2" "Dim 3" "Dim 4" ...
..$ cos2 : num [1:37, 1:5] 0.000978 0.116913 0.002901 0.000155 0.001684 ...
.. ..- attr(*, "dimnames")=List of 2
.. .. ..$ : chr [1:37] "relig_" "relig_1" "relig_2" "relig_3" ...
.. .. ..$ : chr [1:5] "Dim 1" "Dim 2" "Dim 3" "Dim 4" ...
..$ v.test : num [1:37, 1:5] 1.387 15.165 2.389 -0.553 1.82 ...
.. ..- attr(*, "dimnames")=List of 2
.. .. ..$ : chr [1:37] "relig_" "relig_1" "relig_2" "relig_3" ...
.. .. ..$ : chr [1:5] "Dim 1" "Dim 2" "Dim 3" "Dim 4" ...
..$ eta2 :'data.frame': 5 obs. of 5 variables:
.. ..$ Dim 1: num [1:5] 0.148 0.187 0.297 0.674 0.534
.. ..$ Dim 2: num [1:5] 0.349 0.172 0.505 0.221 0.346
.. ..$ Dim 3: num [1:5] 0.1481 0.0946 0.2537 0.5053 0.5263
.. ..$ Dim 4: num [1:5] 0.09207 0.18077 0.00605 0.45806 0.55332
.. ..$ Dim 5: num [1:5] 0.43171 0.3896 0.00779 0.20417 0.22232
$ svd :List of 3
..$ vs: num [1:37] 0.607 0.565 0.553 0.508 0.501 ...
..$ U : num [1:1968, 1:5] 0.236 1.029 0.255 0.05 0.68 ...
..$ V : num [1:37, 1:5] 1.143 0.698 0.609 -0.455 0.685 ...
- attr(*, "class")= chr [1:2] "MCA" "list"
# Affichage des ellipses
# Assez complexe
# La doc est dispo ici : http://www.inside-r.org/packages/cran/FactoMineR/docs/plotellipses
plotellipses(res.mca, keepvar="all", label="none", cex=0.1, magnify=12, level=0.90, means=TRUE)
# nuage des moyennes des modalités
plotellipses(res.mca, keepvar="all", label="none", cex=0.1, magnify=12, level=0.90, means=FALSE)
# nuage des moyennes des scores individuels (équivalent Stata)
13/09/2014 - Stata : Analyse des correspondances multiples
# On réalise une analyse des caractéristiques sociales et observant les différences entre inscrits et votants.
mca gndr agecod relig natio placepol qualidemo orig, supp( inscrit vote)
Multiple/Joint correspondence analysis Number of obs = 703
Total inertia = .0399373
Method: Burt/adjusted inertias Number of axes = 2
| principal cumul
Dimension | inertia percent percent
------------+----------------------------------
dim 1 | .0195246 48.89 48.89
dim 2 | .0049006 12.27 61.16
dim 3 | .0023274 5.83 66.99
dim 4 | .0009998 2.50 69.49
dim 5 | .0002597 0.65 70.14
dim 6 | .0001287 0.32 70.46
dim 7 | .0000278 0.07 70.53
dim 8 | 8.33e-07 0.00 70.53
------------+----------------------------------
Total | .0399373 100.00
| overall | dimension_1 | dimension_2
Categories | mass quality %inert | coord sqcorr contrib | coord sqcorr contrib
-------------+---------------------------+---------------------------+---------------------------
gndr | | |
1 Homme | 0.055 0.590 0.024 | 0.262 0.077 0.004 | 1.347 0.513 0.100
2 Femme | 0.088 0.590 0.015 | -0.165 0.077 0.002 | -0.850 0.513 0.063
-------------+---------------------------+---------------------------+---------------------------
agecod | | |
1 18 à 19 ~s | 0.014 0.180 0.016 | 0.581 0.145 0.005 | -0.573 0.035 0.005
2 De 20 à ~s | 0.036 0.670 0.035 | -0.849 0.362 0.026 | -1.561 0.308 0.087
3 De 25 à ~s | 0.023 0.609 0.013 | -0.691 0.405 0.011 | -0.978 0.204 0.022
4 De 30 à ~s | 0.025 0.258 0.012 | -0.001 0.000 0.000 | 0.980 0.258 0.024
5 De 35 à ~s | 0.045 0.745 0.034 | 0.836 0.448 0.032 | 1.360 0.298 0.083
-------------+---------------------------+---------------------------+---------------------------
relig | | |
1 Chrétien~s | 0.036 0.537 0.070 | 1.457 0.533 0.076 | -0.268 0.005 0.003
2 Musulman~s | 0.082 0.732 0.095 | -1.313 0.731 0.142 | 0.088 0.001 0.001
3 Sans rel~n | 0.025 0.642 0.095 | 2.228 0.642 0.124 | 0.094 0.000 0.000
-------------+---------------------------+---------------------------+---------------------------
natio | | |
1 FR | 0.091 0.662 0.051 | 0.805 0.565 0.059 | -0.667 0.097 0.040
2 Double n~é | 0.028 0.709 0.087 | -2.075 0.692 0.122 | -0.643 0.017 0.012
3 ETR | 0.024 0.547 0.067 | -0.599 0.062 0.008 | 3.345 0.485 0.264
-------------+---------------------------+---------------------------+---------------------------
placepol | | |
1 gauche | 0.060 0.363 0.022 | -0.416 0.232 0.010 | 0.626 0.131 0.024
2 Nini-NSP | 0.062 0.307 0.013 | 0.044 0.005 0.000 | -0.717 0.302 0.032
3 Centre e~e | 0.020 0.551 0.022 | 1.101 0.539 0.025 | 0.335 0.012 0.002
-------------+---------------------------+---------------------------+---------------------------
qualidemo | | |
1 très bien | 0.010 0.726 0.040 | -0.776 0.073 0.006 | 4.624 0.653 0.213
2 assez bien | 0.051 0.080 0.005 | -0.037 0.007 0.000 | -0.240 0.073 0.003
3 pas très~n | 0.056 0.352 0.008 | 0.195 0.129 0.002 | -0.510 0.222 0.014
4 pas bien~t | 0.026 0.009 0.019 | -0.047 0.001 0.000 | -0.206 0.007 0.001
-------------+---------------------------+---------------------------+---------------------------
orig | | |
1 Afrique | 0.078 0.740 0.103 | -1.411 0.740 0.155 | 0.076 0.001 0.000
2 Europe e~e | 0.026 0.448 0.058 | 1.408 0.437 0.052 | -0.460 0.012 0.006
3 Sans ori~e | 0.039 0.698 0.098 | 1.894 0.696 0.139 | 0.155 0.001 0.001
-------------+---------------------------+---------------------------+---------------------------
inscrit | | |
0 | 0.363 0.260 1.369 | -0.307 0.012 | 2.759 0.247
1 | 0.637 0.135 1.497 | 0.175 0.006 | -1.570 0.129
-------------+---------------------------+---------------------------+---------------------------
vote | | |
0 | 0.458 0.041 1.400 | -0.405 0.026 | 0.610 0.015
1 | 0.542 0.033 1.466 | 0.342 0.021 | -0.516 0.012
-------------------------------------------------------------------------------------------------
supplementary variables: inscrit vote
# Affichage du nuage des modalités
mcaplot, overlay msize(small) mlabsize(tiny)
# Prédiction des valeurs individuelles sur les axes
predict a1 a2
# Graphique du nuage des individus
sc a2 a1
# Ellipses
scc install ellip
ellip a2 a1, plot (sc a2 a1 if pos ==0, mc(green) || sc a2 a1 if pos ==1, mc(blue) || sc a2 a1 if pos ==2, mc(red) || sc a2 a1 if pos ==3, mc(black)) by(pos)
/!\ Attention : il s'agit des ellipses de concentration des individus selon leur modalité de réponse, pas des ellipses des modalités elle même. /!\
# Après avoir utilisé la commande MCA on peut également extraire les valeurs spécifiques des valeurs stockées par le logiciel
. matrix list e(cGS)
e(cGS)[27,9]
overall: overall: overall: dim1: dim1: dim1: dim2: dim2: dim2:
mass quality %inert coord sqcorr contrib coord sqcorr contrib
gndr:1_Homme .05527332 .59023718 .02397446 .26151917 .07708627 .00378027 1.3467989 .51315092 .10025846
gndr:2_Femme .08758382 .59023718 .01513005 -.16504226 .07708627 .00238569 -.84995197 .51315092 .06327216
agecod:1_18_à_19_~s .01422475 .18010898 .01620979 .58089705 .14476677 .00480002 -.57289723 .03534221 .00466872
agecod:2_De_20_à_~s .03576509 .67012089 .03475999 -.84891031 .36249875 .02577407 -1.5609267 .30762214 .08714136
agecod:3_De_25_à_~s .02255639 .60899568 .01298532 -.69059246 .40500835 .01075755 -.97826522 .20398733 .02158653
agecod:4_De_30_à_~s .02519813 .25790749 .0115049 -.00109392 1.281e-06 3.015e-08 .97960663 .25790621 .02418086
agecod:5_De_35_à_~s .04511278 .74515414 .03441592 .83575149 .44760787 .0315104 1.3600997 .29754628 .08345283
relig:1_Chrétien~s .03576509 .53711431 .0696483 1.4565331 .53258966 .07587523 -.26796721 .00452465 .00256816
relig:2_Musulman~s .08209713 .73211309 .09460095 -1.3128807 .73128431 .1415072 .08822008 .00082878 .00063894
relig:3_Sans_rel~n .02499492 .64204711 .09452413 2.2280811 .64176242 .12408342 .09366924 .00028469 .0002193
natio:1_FR .0908352 .66188002 .05099405 .80528172 .56472053 .05890469 -.66671287 .09715949 .04037679
natio:2_Double_n~é .0284495 .70878508 .08650278 -2.0747486 .69211587 .12246321 -.64268587 .01666921 .01175093
natio:3_ETR .02357244 .54738379 .0666753 -.59910448 .0620366 .00846077 3.3447989 .48534719 .26372096
placepol:1_gauche .06035359 .36299895 .02205421 -.41600626 .23153382 .01044486 .62569559 .13146513 .02362813
placepol:2_Nini-NSP .06218248 .30682972 .01296205 .04389427 .0045187 .00011981 -.71662736 .30231102 .03193411
placepol:3_Centre_e~e .02032107 .5510876 .02236793 1.1012221 .53860941 .02464316 .33456382 .01247819 .0022746
qualidemo:1_très_bien .00995733 .72598439 .04002527 -.77632487 .07329911 .00600108 4.6239298 .65268528 .21289486
qualidemo:2_assez_bien .05080268 .07960154 .00491998 -.0366809 .00679214 .00006835 -.23971519 .0728094 .00291929
qualidemo:3_pas_très~n .05567974 .35152203 .00799885 .19481353 .12915503 .00211317 -.51022742 .222367 .01449522
qualidemo:4_pas_bien~t .02641739 .00858563 .01948305 -.04745203 .00149261 .00005948 -.2064727 .00709302 .0011262
orig:1_Afrique .07803292 .74014622 .10275284 -1.4114209 .73960581 .15545008 .07615246 .00054041 .00045253
orig:2_Europe_e~e .02601097 .4482195 .0577713 1.4082581 .43652809 .05158472 -.46001791 .01169141 .00550435
orig:3_Sans_ori~e .03881325 .69750484 .09773862 1.893867 .69633138 .13921273 .15518192 .00117346 .00093468
inscrit:0 .36273115 .25964636 1.3691966 -.30738323 .01223722 . 2.7587473 .24740915 .
inscrit:1 .63726885 .13518076 1.4969087 .17496144 .00637111 . -1.5702691 .12880965 .
vote:0 .45803698 .04118021 1.3996126 -.404963 .02623775 . .60999778 .01494246 .
vote:1 .54196302 .03321604 1.466491 .34225219 .02116342 . -.51553618 .01205262 .
# Notes que les modalités des variables supplémentaires ne contribuent pas aux dimensions
************* Autre Exemple *******************
# MCA
mca relig agecod educ isco place, supp(pays)
# Prédiction
predict a1 a2
# Ellipses larges : c = 10
ellip a2 a1, plot (sc a2 a1, msize(vtiny)) by (educ) overlay c(10)
ellip a2 a1, plot (sc a2 a1, msize(vtiny)) by (place) overlay c(10)
ellip a2 a1, plot (sc a2 a1, msize(vtiny)) by (pays) overlay c(10)
# Ellipses serrées : c = 1
ellip a2 a1, plot (sc a2 a1, msize(vtiny)) by (educ) overlay c(1)
ellip a2 a1, plot (sc a2 a1, msize(vtiny)) by (place) overlay c(1)
ellip a2 a1, plot (sc a2 a1, msize(vtiny)) by (pays) overlay c(1)
12/09/2014 - Stata : Boucles simples
# boucle pour l'analyse de la composition en IRIS des communes.
# Typologie Edmond Préteceille
foreach x of varlist ( tMAC-tSCS) {
gen sc_`x' = (`x' / totIRIS )* 100
}
09/09/2014 - Stata et R : visualisation des données réelles et des predictions
# Régression sous Stata et visualisation 3D des données et du modèle avec R
*** Analyse de régression ***
# Dans cette première étape on produit les scores théoriques du taux de participation aux européennes de 2009
use C:\Users\Antoine\Desktop\DATASET\FR\Cartelec\idf.dta
regress to09 c.preca##c.p_pop_etr [w= pop]
# Description des indicateurs
sum preca p_pop_etr, d
cd "C:\Users\Antoine\Desktop"
# Production des estimations
margins, at (preca = (9 (2) 45) p_pop_etr = (0 (2) 55))
# Sauvegarde (en .dta et en .csv)
_marg_save, saving (c.dta)
use c.dta, replace
outsheet using "C:\Users\Antoine\Desktop\c.csv", comma replace
*** Visualisation sous R ***
# Import des données
c <- read.csv("C:/Users/Antoine/Desktop/c.csv")
View(c)
# Sélection des variables
x <- c$preca
y <- c$etr
z <- c$to09
# Chargement des modules
library(akima)
library(rgl)
# Interpolation
akima <- interp(x=x, y=y, z=z, xo = seq (min(x), max(x), length = 40), yo = seq (min(y), max(y), length = 40))
# Présentation graphique
persp(x=akima$x, y=akima$y, z= akima$z, xlab="Précarité", ylab="% français immigés", zlab="% participation 2009", ticktype="detailed", theta=230, phi=10, col="red", shade=0.5)
# Alternative
library(lattice)
wireframe(akima$z)
Extension : on réplique ici la projection pour le taux de participation en 2007
z <- c$to07t1
akima <- interp(x=x, y=y, z=z, xo = seq (min(x), max(x), length = 40), yo = seq (min(y), max(y), length = 40))
persp(x=akima$x, y=akima$y, z= akima$z, xlab="Précarité", ylab="% français immigés", zlab="% participation 2009", ticktype="detailed", theta=230, phi=10, col="red", shade=0.5)
*** NB ***
# On peut utiliser akima, persp et rgl pour la visualisation des estimations et des données originales.
# Dans le premier cas on obtient un plan (une valeur prédite et des dimensions linéaires)
# Dans le second une surface plus complexe qu''on peut choisir de lisser (avec mspline par exemple)
# Résultats avec lattice
# Résultats avec persp
# Données rélles
# Modèle
## Scatter 3D : visualiser des données et leur modélisation ##
# Import des données
c <- read.csv("C:/Users/Antoine/Desktop/c.csv")
# Graphique simple (linear fit)
scatter3d (to09 ~ preca + etr, fill=FALSE, data = c)
# Linear fit avec options de visualisation des points et de l''écart au modèle
scatter3d (x=c$preca, y=c$to09, z=c$etr, fill=FALSE, fit="linear", point.col="black", neg.res.col="green", pos.res.col="blue")
# Quadratic fit
scatter3d (x=c$preca, y=c$to09, z=c$etr, fill=FALSE, fit="quadratic", point.col="black", neg.res.col="green", pos.res.col="blue")
# Additive model
scatter3d (x=c$preca, y=c$to09, z=c$etr, fill=FALSE, fit="additive", point.col="black", neg.res.col="green", pos.res.col="blue")
# Smoothed grid
scatter3d (x=c$preca, y=c$to09, z=c$etr, fill=FALSE, fit="smooth", point.col="black", neg.res.col="green", pos.res.col="blue")
# La suite plus tard
07/08/2014 - R - Retour sur les modules Akima et Persp
# Le module akima est très utile pour créer des analyses de surfaces
# Il permet de calculer, à partir de données en coordonnées x,y,z une matrice des coordonnées à représenter en une surface 3D
# Cette fonction n'est pas encore disponible sous stata
# Mais Bipolate va l'intégrer à cours terme en reprenant le code initial du module Akima
# La documentation n'est pas simple, voici l'exemple de base commenté.
# On importe un data.frame avec 3 variables x,y,z. Les trois variables doivent porter sur le même nombre d'individus.
# /!\ Pas de valeurs manquantes /!\
library(akima)
library(rgl)
data(akima)
# Ca se complique
akima.li <- interp(akima$x, akima$y, akima$z,
xo=seq(min(akima$x), max(akima$x), length = 100),
yo=seq(min(akima$y), max(akima$y), length = 100))
# Ici on fait plusieurs choses en une seule commande :
# - On indique les variables du fichiers akima : x, y et z
# - On indique que la dimension xo varie du min(x) au max(x) avec 100 points entre les deux
# - On indique que la dimension yo varie du min(y) au max(y) avec 100 points entre les deux
## On peut faire varier le nombre de points, plus on en ajoute, plus le résultat est fin mais aussi complexe.
# Encore moins intuitif
# On dispose maintenant de la liste akima.li
# Cette liste comporte les valeurs x et y, ainsi que la matrice des valeurs de Z.
# On a donc deux vecteurs (les dimensions x et y) et une matrice (les valeurs de Z selon x et y)
# On afficher la surface sous RGL
rgl.surface(akima.li$x,akima.li$y,akima.li$z,color="green",alpha=c(0.5))
# on indique bien x , y et z, tirés de la liste akima.li
## Options
# Dans la procédure d'interpolation, on peut choisir une méthode non linéaire.
# Et d'accepter ou non le recyclage des valeurs manquantes dans la matrice des Z
akima.li <- interp(akima$x, akima$y, akima$z,
xo=seq(min(akima$x), max(akima$x), length = 100),
yo=seq(min(akima$y), max(akima$y), length = 100),
linear=FALSE, interp=TRUE)
# NB : par défaut, linear=TRUE et interp est impossible sous cette condition.
Avec l'interpolation non linéaire
### Mise en Forme du graphique de surface ###
# Rgl est très intuitif et rapide à manipuler
# Mais il est difficile à légender et à exporter
# Une solution de rechange est persp()
# Perps() prend les valeurs des axes x et y de la liste akima.li et utilise la matrice des valeurs z pour tracer la surface 3D
# Ici un exemple complet avec des données réelles :
# Import des données
bk <- read.csv("C:/Users/Antoine/Desktop/site/bk.csv")
# Visualisation du data.frame
View(bk)
# Visualisation des points en 3D
rgl.spheres(bk$etr, bk$to09, bk$cs6, 0.5)
# Interpolation avec Akima
a <- interp(x = bk$etr, y = bk$cs6, z = bk$to09, xo =seq(min(bk$etr), max(bk$etr), length = 100), yo=seq(min (bk$cs6), max(bk$cs6), length = 100), extrap=TRUE, linear=FALSE)
# Graphique de surface
rgl.surface(a$x, a$y, a$z)
# On va réduire progressivement la grille pour simplifier et lisser les résultats :
a <- interp(x = bk$etr, y = bk$cs6, z = bk$to09, xo =seq(min(bk$etr), max(bk$etr), length = 40), yo=seq(min (bk$cs6), max(bk$cs6), length = 40))
rgl.surface(a$x, a$y, a$z)
a <- interp(x = bk$etr, y = bk$cs6, z = bk$to09, xo =seq(min(bk$etr), max(bk$etr), length = 20), yo=seq(min (bk$cs6), max(bk$cs6), length = 20))
rgl.surface(a$x, a$y, a$z)
a <- interp(x = bk$etr, y = bk$cs6, z = bk$to09, xo =seq(min(bk$etr), max(bk$etr), length = 10), yo=seq(min (bk$cs6), max(bk$cs6), length = 10))
rgl.surface(a$x, a$y, a$z)
# Rotation 3D
persp(x=x, y=y, z=z, xlab="% d'étrangers", ylab="% d'ouvriers", zlab="Taux de participation en 2009", ticktype="detailed", theta=135)
persp(x=x, y=y, z=z, xlab="% d'étrangers", ylab="% d'ouvriers", zlab="Taux de participation en 2009", ticktype="detailed", theta=135, phi=30)
# Colorisation et ombre
persp(x=x, y=y, z=z, xlab="% d'étrangers", ylab="% d'ouvriers", zlab="Taux de participation en 2009", ticktype="detailed", theta=135, phi=20, col="lightblue")
persp(x=x, y=y, z=z, xlab="% d'étrangers", ylab="% d'ouvriers", zlab="Taux de participation en 2009", ticktype="detailed", theta=135, phi=20, col="lightblue", shade=0.75)
###########
A suivre : bipolate sous Stata dès que le module est diffusé sous SSC
Stata et R - Margins et analyse de régression
On suppose avoir déja réalisé une régression linéaire avec 3 variables indépendantes quantitatives. Margins et marg_save nous donnent alors une table de ce type. On lit les valeurs théoriques pour chaque combinaison des valeurs des régresseurs. +-----------------------------+ | m09_05 etr cs6 ndip | |-----------------------------| | 53.90072 0 0 5 | | 48.69122 0 0 10 | | 43.48172 0 0 15 | | 38.27222 0 0 20 | | 33.06273 0 0 25 | |-----------------------------| | 27.85323 0 0 30 | | 22.64373 0 0 35 | | 17.43423 0 0 40 | | 12.22473 0 0 45 | | 51.98055 0 5 5 | |-----------------------------| | 47.25717 0 5 10 | | 42.53379 0 5 15 | | 37.81041 0 5 20 | | 33.08703 0 5 25 | | 28.36365 0 5 30 | |-----------------------------| | 23.64027 0 5 35 | | 18.91689 0 5 40 | | 14.19351 0 5 45 | | 50.06038 0 10 5 | | 45.82312 0 10 10 | |-----------------------------| On peut alors donner une représenation graphique des effets propres d'une variable, en laissant les autres facteurs varier. twoway kdensity m07_05 if cs6==0 || kdensity m07_05 if cs6==5 || kdensity m07_05 if cs6==10 || kdensity m07_05 if cs6==15 || kdensity m07_05 if cs6==20 || kdensity m07_05 if cs6==25 || kdensity m07_05 if cs6==30 || kdensity m07_05 if cs6==35 || kdensity m07_05 if cs6==40 Ici l'effet propre du taux de population ouvrière dans le quartier, en faisant varier la part d'étrangers et de non diplômés.On peut ensuite aller plus loin avec R On sauvegarde le fichier des probabilités théoriques Puis on le charge # Librairies utiles library(sm) library(rpanel) # Ouverture des données t <- read.csv("C:/Users/Antoine/Desktop/site/t.csv") # Data frame avec les valeurs fixées pour un régresseur parmi les trois. # Ici on fait varier le taux de population ouvrière de 10 à 30 puis 50 % du quartier. # On va projeter un effet propre du revenu à ces différents seuils. sub10 <- subset(t, X_at3==10) sub30 <- subset(t, X_at3==30) sub50 <- subset(t, X_at3==50) # On en produit 3 Data frame d10 <- data.frame(sub10$X_at1, sub10$X_margin, sub10$X_at2) d30 <- data.frame(sub30$X_at1, sub30$X_margin, sub30$X_at2) d50 <- data.frame(sub50$X_at1, sub50$X_margin, sub50$X_at2) # On produit les graphiques associés sm.density(d50) sm.density(d10) sm.density(d30) # Résultats de 10 à 50 % de population ouvrière
![]()
![]()
![]()
Coloration syntaxique en HTML pour R
Un outil bien pratique disponible ici : http://www.inside-r.org/pretty-r
Geoda et QGIS : Calculer des indices Bivariate Lisa et exporter les résultats
# Geoda et QGIS sont des logiciels de géographie complémentaires. # QGIS permet de gérer très facilement la création de cartes vectorielles ou raster mais dispose de peu d'options statistiques. # Geoda à l'inverse est particulièrement efficace pour calculer des indices de Moran ou de Geary mais ne permet pas d'export satisfaisant des résultats. # Etape 1 : Geoda On calcule d'abord l'indice local de Moran, ou Moran bivarié à partir d'un shapefile lié aux données agrégées. Geoda produit une carte choroplèthe des résultats Avec un clic droit on peut ensuite "sauvegarder les résultats" du calcul. Ceux ci sont intégrés dans le fichier de données (dbf) associé au shapefile. On créé 3 nouvelles variables : - Une contenant les valeurs de l'indice LISA ou Bi-LISA - Une contenant les clusters issus du calcul de l'incide - Une contenant les seuils de significativité des clusters # Etape 2 : QGIS Le nouveau shapefile associé aux indices calculé sous Geoda est ouvert via Qgis. On peut alors représenter les valeurs de l'indice LISA lui même (ce qui est impossible sous Geoda) Mais également retrouver les valeurs des clusters et les indices de significativité # Etape 3 : Export depuis QGIS On ouvre un compositeur d'impression pour exporter la carte comme tout autre module choroplèthe. ***** NB : ces opérations sont possibles mais plus complexes sous R et feront l'objet d'un prochain post *****
Cluster Map LISA sous GeodaSauvegarde des variables dans le shapefile
Projection des clusters sous QGIS
Cartographie de l'indice LISA
Export et réinterpréation sous Stata
Clusters et indice LISA
Vérification de la construction des clusters
Régression avec cluster en prédicteur du taux de participation en 2009
Régression incluant les valeurs des indicateurs initiaux
Participation théorique par cluster
Isoplèthe du taux de participation selon les effets propres des indicateurs initiaux
![]()
Syntaxe Stata à partir des données calculsées sous Geoda : destring x_popn100, replace force sc lisa_p2n187 lisa_i2n187 [w= x_popn100], ms(oh)msize(tiny) destring lisa_cl2n180, replace force sc lisa_cl2n180 lisa_i2n187 [w= x_popn100], ms(oh)msize(tiny) sc lisa_i2n187 x_p_cs3n2415 [w= x_popn100], ms(oh)msize(tiny) graph save Graph "C:\Users\Antoine\Desktop\site\cs3.gph" sc lisa_i2n187 x_p_pop_etn2415 [w= x_popn100], ms(oh)msize(tiny) graph save Graph "C:\Users\Antoine\Desktop\site\etr.gph" graph combine "C:\Users\Antoine\Desktop\site\etr.gph" "C:\Users\Antoine\Desktop\site\cs3.gph", xcommon ycommon sc lisa_i2n187 x_p_pop_etn2415 [w= x_popn100], ms(oh)msize(tiny) by( lisa_cl2n180) regress x_to09n2415 i.lisa_cl2n180 [w= x_popn100] regress x_to09n2415 i.lisa_cl2n180##c.x_p_cs3n2415##c.x_p_pop_etn2415 [w= x_popn100] sum x_p_cs3n2415 x_p_pop_etn2415 , d margins, at (lisa_cl2n180 = (0 1 2 3 4 5) x_p_cs3n2415 = (0 (5) 60) x_p_pop_etn2415 = (0 (5) 45)) ls _marg_save, saving(forContour.dta, replace) use forContour.dta, clear graph dot _margin, over( _at1) twoway contour _margin _at2 _at3, ccuts(10 20 30 40 50 60 70 80 90)
R : Convertir des fichier.dbf en fichier.csv
# Les analyses cartographiques demandent d'utiliser des fichiers shapefile.
# Les données associées aux shapefiles créés par certains logiciels comme GEODA se trouvent stockés dans un fichier dbf.
# Si on veut retrouver l'indice de moran calculé par GEODA pour une post analyse, il faut convertir le dbf créé en .csv.
# On peut ensuite le traiter avec STATA, excel ou R.
# On ouvre R en chargeant foreign.
library (foreign)
df <- read.dbf ("map.dbf")
colnames (df)
write.csv (df, "map.csv")
# Et voila on dispose d'un fichier .csv parfaitement utilisable.
# Attention le format SHP tronque les noms de variables ...
# C'est souvent assez pénible, en importation comme en exportation.
# Importation sous Stata du .csv
insheet using "C:\Users\Antoine\Documents\dfd.csv", comma
R : Mapping de surface 3D
# C'est une opération complexe qui demande de bien maitriser la structure des données
# Il y a de nombreux tutoriels mais ils sont difficile à saisir pour les débutants
# On considère qu'on part d'un dataframe (d) constitué de coordonnées X Y Z
# Il va falloir projeter Z dans une matrice XY pour en afficher la surface 3D interpolée
# On utilise la librairie Akima
library(akima)
# On spécifie x, y et Z à partir du data.frame
View(d)
x <- d$x
y <- d$y
z <- d$yes
# On calcule l'interpolation
m1 <- interp(x=x, y=y, z=z, xo=seq(min(x), max(x), length = 40),yo=seq(min(y), max(y), length = 40))
# On enregistre le résultat (une liste) en .csv pour obtenir un data.frame
write.csv(m1, file="m1.csv")
`m1` <- read.csv("~/m1.csv", sep=";", na.strings="")
# Premier graphique : Lattice
library(lattice)
# Conversion du data.frame (m1) en matrice (matrix)
matrix <- data.matrix(m1)
# graphique wireframe
wireframe(matrix)
wireframe(matrix, shade=TRUE)
# On peut aussi utiliser RGL
library(rgl)
# Magnification de Z
z1 <- 2*matrix
# X et Y sont le nombre de lignes et de colonnes de la matrice
x1 <- 10 * (1:nrow(z))
y1 <- 10 * (1:ncol(z))
# graphique
rgl.surface(x1,y1, z1)
# Nouvelle magnification
z1 <- matrix *10
# On peut changer l'apparence du résultat
rgl.surface(x1,y1, z1, color="red", back="lines")
savehistory("C:/Users/Antoine/Desktop/mapping3d.Rhistory")
*********************
2e Exemple
*********************
library(rgl)
library(akima)
# Chargement de données
TCExy <- read.csv("C:/Users/Antoine/Desktop/DATASET/FR/TCExy.csv")
View(TCExy)
# Dataframe simple
d <-TCExy
# spécification des variables
x <- d$x
y <- d$y
z <- (d$oui / d$votants)*100
# Interpolation des valeurs avec pas de grille variable
m1 <- interp(x=x, y=y, z=z, xo=seq(min(x), max(x), length = 20),yo=seq(min(y), max(y), length = 20), duplicate="strip")
m1 <- interp(x=x, y=y, z=z, xo=seq(min(x), max(x), length = 100),yo=seq(min(y), max(y), length = 100), duplicate="strip")
m1 <- interp(x=x, y=y, z=z, xo=seq(min(x), max(x), length = 1000),yo=seq(min(y), max(y), length = 1000), duplicate="strip")
# sauvegarde du fichier
write.csv(m1, file="m1.csv")
# Importation en data.frame
`m1` <- read.csv("~/m1.csv", sep=",", na.strings="")
# On supprime les variables inutiles
m1$X <- NULL
m1$x <- NULL
m1$y <- NULL
# on transforme le DF en matrice
matrix <- data.matrix(m1)
# Mesure de Z
z1 <- 2*matrix
# Mesure de x et y
x1 <- 10 * (1:nrow(z1))
y1 <- 10 * (1:ncol(z1))
# graphique
rgl.surface(x1,y1, z1)
# Matrice nouvelle (Z/2)
z1 <- matrix
rgl.surface(x1,y1, z1)
# On inverse les axes X et Y en x2 et y2
x2 <- 1000-x1
y2 <- 1000-y1
# Essai des valeurs des axes
rgl.surface(x2,y1, z1)
rgl.surface(x2,y2, z1)
rgl.surface(x1,y2, z1)
# Changement de Z
z1 <- matrix*10
z1 <- matrix/2
# Graphiques
rgl.surface(x1,y2, z1)
# Colorisation
rgl.surface(x1,y2, z1, color="blue")
rgl.surface(x1,y2, z1, color="green")
rgl.surface(x1,y2, z1, color="lightskyblue")
R : Librairie Foreign et importation de fichiers
# On peut toujours exporter les fichiers Stata ou SPSS en CSV puis les ouvrir avec R
# C'est la méthode que je recommande car le format CSV est le plus fiable et pratique sur le long terme
# Ceci étant, il est parfois complexe et lourd à utiliser pour générer de très gros fichiers.
# On charge d'abord la librairie foreign
library(foreign)
# Ensuite on utilise read.dta de la même façon que read.csv pour les fichiers ordinaires.
d <- read.dta("C:/Users/Antoine/Desktop/INSEE DETAIL ENQUETES/RP19682008_individus_dbase/simple.dta")
# de la même façon pour les fichiers SPSS on utilise
d <- read.spss
# Pour les fichiers SAS
d <- read.xport
# Attention, par défaut, l'objet créé est un data frame !
Stata : Fusion des fichiers découpés sous R
# Conversion des .csv en .dta insheet using "C:\Users\Antoine\Desktop\INSEE DETAIL ENQUETES\RP19682008_individus_dbase\68.csv", comma save "C:\Users\Antoine\Desktop\INSEE DETAIL ENQUETES\RP19682008_individus_dbase\68.dta" clear all insheet using "C:\Users\Antoine\Desktop\INSEE DETAIL ENQUETES\RP19682008_individus_dbase\75.csv", comma save "C:\Users\Antoine\Desktop\INSEE DETAIL ENQUETES\RP19682008_individus_dbase\75.dta" clear all insheet using "C:\Users\Antoine\Desktop\INSEE DETAIL ENQUETES\RP19682008_individus_dbase\82.csv", comma save "C:\Users\Antoine\Desktop\INSEE DETAIL ENQUETES\RP19682008_individus_dbase\82.dta" clear all insheet using "C:\Users\Antoine\Desktop\INSEE DETAIL ENQUETES\RP19682008_individus_dbase\90.csv", comma save "C:\Users\Antoine\Desktop\INSEE DETAIL ENQUETES\RP19682008_individus_dbase\90.dta" clear all insheet using "C:\Users\Antoine\Desktop\INSEE DETAIL ENQUETES\RP19682008_individus_dbase\99.csv", comma save "C:\Users\Antoine\Desktop\INSEE DETAIL ENQUETES\RP19682008_individus_dbase\99.dta" clear all insheet using "C:\Users\Antoine\Desktop\INSEE DETAIL ENQUETES\RP19682008_individus_dbase\08.csv", comma save "C:\Users\Antoine\Desktop\INSEE DETAIL ENQUETES\RP19682008_individus_dbase\08.dta" clear all # utilisation du fichier source use "C:\Users\Antoine\Desktop\INSEE DETAIL ENQUETES\RP19682008_individus_dbase\68.dta", clear # Append fusionne les fichiers en ajoutant les observations des différentes variables append using "C:\Users\Antoine\Desktop\INSEE DETAIL ENQUETES\RP19682008_individus_dbase\75.dta" append using "C:\Users\Antoine\Desktop\INSEE DETAIL ENQUETES\RP19682008_individus_dbase\82.dta" append using "C:\Users\Antoine\Desktop\INSEE DETAIL ENQUETES\RP19682008_individus_dbase\90.dta" append using "C:\Users\Antoine\Desktop\INSEE DETAIL ENQUETES\RP19682008_individus_dbase\99.dta" append using "C:\Users\Antoine\Desktop\INSEE DETAIL ENQUETES\RP19682008_individus_dbase\08.dta" # vérification tab natio # Sauvegarde save "C:\Users\Antoine\Desktop\INSEE DETAIL ENQUETES\RP19682008_individus_dbase\full.dta"
R : Convertir un fichier .DBF en .csv - 29/07/2014
# on utilise la librairie "foreign" pour importer le fichier au format base de données # Ici le fichier des échantillons détaillés issus des recencements INSEE de 1968 à 2008. d<-read.dbf(file="rp19682008.dbf") # on obtient un dataframe nommé d, ici il contient environ 31 millions de lignes. # on vérifie l'intégrité du dataframe head(d) tail(d) colnames(d) # Ceci vérifie les premières et dernières lignes d'une part, le nom de colonnes d'autre part. # on peut alors enregistrer le csv write.csv(d, file ="test.csv") # Celui-ci pesera environ 2 Go # Hélas sa création dépasse les capacités mémoires de mon PC (16Go) # On découpe alors le fichier par vagues de recensement Warning messages: 1: In as.list.data.frame(X) : Reached total allocation of 16325Mb: see help(memory.size) 2: In as.list.data.frame(X) : Reached total allocation of 16325Mb: see help(memory.size) c68 <- subset(d, an_recens==1968) c75 <- subset(d, an_recens==1975) c82 <- subset(d, an_recens==1982) c90 <- subset(d, an_recens==1990) c99 <- subset(d, an_recens==1999) c08 <- subset(d, an_recens==2008 # On peut sauvegarder chacun des datasets write.csv(c68, file ="68.csv") write.csv(c75, file ="75.csv") write.csv(c82, file ="82.csv") write.csv(c90, file ="90.csv") write.csv(c99, file ="99.csv") write.csv(c08, file ="08.csv")
R / Contour3D : Cartes et visualisations 3D - 14/07/2014
# Installation des packages
install.packages("misc3d")
install.packages("tkrplot")
# Chargement des librairies
library(misc3d)
library(rgl)
library(ggplot2)
library(MASS)
# Démo fournie avec le paquet
with(quakes, {
d <- kde3d(long, lat, -depth, n = 40)
contour3d(d$d, exp(-12), d$x/22, d$y/28, d$z/640,
color = "green", color2 = "gray", scale=FALSE,
engine = "standard")
})
# Chargement des données
TCExy <- read.csv("C:/Users/Antoine/Desktop/DATASET/FR/TCExy.csv")
# visualisation préalable
View(TCExy)
# création d'un data.frame plus simple à manipuler
df1 <- TCExy
# création de la variable % de "oui" en 2005
df1$yes = df1$oui/df1$votants
# On réduit les coordonnées en x et y pour les manipuler et on transforme la variable
# d'intéret en coordonnée Z
df1$x <- df1$x/1000
df1$y <- df1$y/1000
df1$z <- df1$yes
# Calcul des densités 3D pour le graphique (Kernel Density 3D)
d <-kde3d(df1$x, df1$y, df1$z, n=40)
# Premier graphique avec choix du moteur RGL
contour3d(d$d, 0.1, d$x/7, d$y/20, d$z, color="red", color2="gray", scale=FALSE,engine="rgl")
# Changement des paramètres, puis on va tatonner pour améliorer la visualisation
contour3d(d$d, 0.2, d$x/7, d$y/20, d$z, color="red", color2="gray", scale=FALSE,engine="rgl")
# On magnifie l'axe des Z pour donner de la profondeur 3D au graphique
contour3d(d$d, 0.2, d$x, d$y, d$z, color="red", color2="gray", scale=FALSE,engine="rgl")
contour3d(d$d, 0.2, d$x, d$y, d$z*100, color="red", color2="gray", scale=FALSE,engine="rgl")
contour3d(d$d, 0.2, d$x, d$y, d$z*1000, color="red", color2="gray", scale=FALSE,engine="rgl")
contour3d(d$d, 0.2, d$x, d$y, d$z*100000, color="red", color2="gray", scale=FALSE,engine="rgl")
# On augmente le facteur d'échelle (f) de 0.2 à 50 pour calibrer le recyclage de l'axe Z
contour3d(d$d, 0.2, d$x, d$y, d$z*10000, color="red", color2="gray", scale=FALSE,engine="rgl")
contour3d(d$d, 0.3, d$x, d$y, d$z*10000, color="red", color2="gray", scale=FALSE,engine="rgl")
contour3d(d$d, 0.5, d$x, d$y, d$z*10000, color="red", color2="gray", scale=FALSE,engine="rgl")
contour3d(d$d, 1, d$x, d$y, d$z*10000, color="red", color2="gray", scale=FALSE,engine="rgl")
contour3d(d$d, 2, d$x, d$y, d$z*10000, color="red", color2="gray", scale=FALSE,engine="rgl")
contour3d(d$d, 3, d$x, d$y, d$z*10000, color="red", color2="gray", scale=FALSE,engine="rgl")
contour3d(d$d, 4, d$x, d$y, d$z*10000, color="red", color2="gray", scale=FALSE,engine="rgl")
contour3d(d$d, 5, d$x, d$y, d$z*10000, color="red", color2="gray", scale=FALSE,engine="rgl")
contour3d(d$d, 5, d$x, d$y, d$z*10000, color="blue", color2="gray", scale=FALSE,engine="rgl")
contour3d(d$d, 8, d$x, d$y, d$z*10000, color="blue", color2="gray", scale=FALSE,engine="rgl")
contour3d(d$d, 10, d$x, d$y, d$z*10000, color="blue", color2="gray", scale=FALSE,engine="rgl")
contour3d(d$d, 20, d$x, d$y, d$z*10000, color="blue", color2="gray", scale=FALSE,engine="rgl")
contour3d(d$d, 30, d$x, d$y, d$z*10000, color="blue", color2="gray", scale=FALSE,engine="rgl")
contour3d(d$d, 40, d$x, d$y, d$z*10000, color="blue", color2="gray", scale=FALSE,engine="rgl")
contour3d(d$d, 50, d$x, d$y, d$z*10000, color="blue", color2="gray", scale=FALSE,engine="rgl")
# Changement des couleurs
contour3d(d$d, 35, d$x, d$y, d$z*10000, color="green", color2="gray", scale=FALSE,engine="rgl")
# Fixation du facteur d'échelle (scale=TRUE)
contour3d(d$d, 35, d$x, d$y, d$z*10000, color="green", color2="gray", scale=TRUE,engine="rgl")
contour3d(d$d, 40, d$x, d$y, d$z*10000, color="green", color2="gray", scale=TRUE,engine="rgl")
# Sauvegarde
savehistory("C:/Users/Antoine/Desktop/c3d.Rhistory")
---------------------------------------------------------------------------------------------
# Package SM
install.packages("sm")
install.packages("rpanel")
library(rpanel)
library(sm)
# Usage rapide :
sm.density(df)
sm.density(df, panel=TRUE)
# On peut tout adapter avec SM option et notamment pondérer les résultats
Stata : Dictionnary File for Spanish Census MicroData - 11/07/2014
dictionary using test.dat {
_column(1) CPRO %2f
_column(3) CMUN %3f
_column(6) IDHUECO %10s
_column(16) NORDEN %4f
_column(20) FACTOR %14f
_column(34) MNAC %2f
_column(36) ANAC %4f
_column(40) EDAD %3f
_column(43) SEXO %1f
_column(44) NACI %3f
_column(47) CPAISN %3f
_column(50) CPRON %2f
_column(52) CMUNN %3f
_column(55) ANORES %4f
_column(59) ANOM %4f
_column(63) ANOC %4f
_column(67) ANOE %4f
_column(71) CLPAIS %3f
_column(74) CLPRO %2f
_column(76) CLMUNP %3f
_column(79) CPAISUNANO %3f
_column(82) CPROUNANO %2f
_column(84) CMUNANO %3f
_column(87) CPAISDANO %3f
_column(90) CPRODANO %2f
_column(92) CMUNDANO %3f
_column(95) SEG_VIV %1f
_column(96) SEG_PAIS %3f
_column(99) SEG_PROV %2f
_column(101) SEG_MUN %3f
_column(104) SEG_NOCHES %3f
_column(107) SEG_DISP 1%f
_column(108) ECIVIL %1f
_column(109) ESCOLAR %1f
_column(110) ESREAL %2f
_column(112) TESTUD %1f
_column(113) TAREA1 %1f
_column(114) TAREA2 %1f
_column(115) TAREA3 %1f
_column(116) TAREA4 %1f
_column(117) HIJOS %1f
_column(118) NHIJOS %2f
_column(120) RELA %1f
_column(121) JORNADA %1f
_column(122) CNO %2f
_column(124) CNAE %2f
_column(126) SITU %1f
_column(127) ESCUR1 %2f
_column(129) ESCUR2 %2f
_column(131) ESCUR3 %3f
_column(133) LTRABA %1f
_column(134) PAISTRABA %3f
_column(137) PROTRABA %2f
_column(139) MUNTRABA %3f
_column(142) CODTRABA %5f
_column(147) NVIAJE %1f
_column(148) MDESP1 %1f
_column(149) MDESP2 %1f
_column(150) TDESP %1f
_column(151) TENEN %1f
_column(152) CALE %1f
_column(153) ASEO %1f
_column(154) BADUCH %1f
_column(155) INTERNET %1f
_column(156) AGUACOR %1f
_column(157) SUT %3f
_column(160) NHAB %2f
_column(162) PLANTAS %2f
_column(164) PLANTAB %1f
_column(165) TIPOEDIF %1f
_column(166) ANOCONS %2f
_column(168) ESTADO %1f
_column(169) ASCENSOR %1f
_column(170) ACCESIB %1f
_column(171) GARAJE %1f
_column(172) PLAZAS %1f
_column(173) GAS %1f
_column(174) TELEF %1f
_column(175) ACAL %1f
_column(176) RESID %1f
_column(177) FAMILIA %1f
_column(178) PAD_NORDEN %2f
_column(180) MAD_NORDEN %2f
_column(182) CON_NORDEN %2f
_column(184) OPA_NORDEN %2f
_column(186) TIPOPER %1f
_column(187) NUCLEO %2f
_column(189) NMIEM %2f
_column(191) NFAM %1f
_column(192) NNUC %1f
_column(193) NGENER %2f
_column(195) ESTHOG %2f
_column(197) TIPOHOG %2f
_column(199) NOCU %2f
_column(201) NPARAIN %2f
_column(203) NPFAM %2f
_column(205) NPNUC %2f
_column(207) HM5 %2f
_column(209) H0515 %2f
_column(211) H1624 %2f
_column(213) H2534 %2f
_column(215) H3564 %2f
_column(217) H6584 %2f
_column(219) H85M %2f
_column(221) HESPHOG %2f
_column(223) MESPHOG %2f
_column(225) HEXTHOG %2f
_column(227) MEXTHOG %2f
_column(229) COMBINAC %1f
_column(230) EDADPAD %2f
_column(232) PAISNACPAD %3f
_column(235) NACIPAD %1f
_column(236) ECIVPAD %1f
_column(237) ESTUPAD %1f
_column(238) SITUPAD %1f
_column(239) SITPPAD %1f
_column(240) EDADMAD %2f
_column(242) PAISNACMAD %3f
_column(245) NACIMAD %1f
_column(246) ECIVMAD %1f
_column(247) ESTUMAD %1f
_column(248) SITUMAD %1f
_column(249) SITPMAD %1f
_column(250) EDADCON %2f
_column(252) NACCON %1f
_column(253) NACICON %1f
_column(254) ECIVCON %1f
_column(255) ESTUCON %1f
_column(256) SITUCON %1f
_column(257) SITPCON %1f
_column(258) TIPONUC %1f
_column(259) TAMNUC %2f
_column(261) NHIJO %2f
_column(263) NHIJOC %2f
_column(265) FAMNUM %2f
_column(267) TIPOPARECIV %2f
_column(269) TIPOPARSEX %2f
_column(271) DIFEDAD %2f
}
Stata : Batch rename - 10/07/2014
rename v1-vx act(###), add
R : Interpolation et projection géographique - 08/07/2014
# Tutoriel basé sur l'excellente page web d'Adam Dennett
http://rpubs.com/adam_dennett/10873
# Chargement des packages
library(ggplot2)
library(gstat)
library(sp)
library(maptools)
# Chargement des données avec coordonnées XY
TCExy <- read.csv("C:/Users/Antoine/Desktop/DATASET/FR/TCExy.csv")
View(TCExy)
# Codage en données spatialisées
coordinates(TCExy) = ~x+y
# Visualisation du codage
plot(TCExy)
# Définition des variables des axes X/Y de la grille de projection des valeurs
x.range <- as.integer(range(TCExy@coords[, 1]))
y.range <- as.integer(range(TCExy@coords[, 2]))
# Définition des bornes min/max du cadrage
plot(TCExy)
locator(4)
# Indication du range selon les valeurs produites par le locator
# A renseigner à la main
x.range <- as.integer(c(-673.5673, 11894.2330))
y.range <- as.integer(c(16000,28000))
# Expansion de la grille jusqu'aux bornes qu'on vient de définir
grd <- expand.grid(x = seq(from = x.range[1], to = x.range[2], by = 200), y = seq(from = y.range[1], to = y.range[2], by = 200))
# renseigne le système de coordonnées de la grille
coordinates(grd) <- ~x + y
gridded(grd) <- TRUE
# Vérification
plot(grd, cex = 1.5)
# Projection des points de la couche du dataset
points(TCExy, pch = 1, col = "red", cex = 1)
# On indique la variable à projeter, ici le vote oui au TCE
idw <- idw(formula = oui ~ 1, locations = TCExy, newdata = grd)
# formattage
idw.output = as.data.frame(idw)
# nommage des variables
names(idw.output)[1:3] <- c("long", "lat", "var1.pred")
# visualisation graphique
plot <- ggplot(data = idw.output, aes(x = long, y = lat))
# couche graphique
layer1 <- c(geom_tile(data = idw.output, aes(fill = var1.pred)))
# représentation des deux couches
plot + layer1 + scale_fill_gradient(low = "#FEEBE2", high = "#7A0177")
savehistory("C:/Users/Antoine/Desktop/DATASET/code R/cartographic interpolation.Rhistory")
R : Syntaxe article votpauvr - 07/07/2014
m07 <- ggplot(data, aes(x=margin, y=to07T1)) + geom_point(shape=1) + geom_smooth(method=lm) + facet_wrap(~nom) + xlab("Indicateur de précarité") + ylab ("Taux de participation en 2007")
m09 <- ggplot(data, aes(x=margin, y=to09)) + geom_point(shape=1) + geom_smooth(method=lm) + facet_wrap(~nom) + xlab("Indicateur de précarité") + ylab ("Taux de participation en 2009")
m10 <- ggplot(data, aes(x=margin, y=to10T1)) + geom_point(shape=1) + geom_smooth(method=lm) + facet_wrap(~nom) + xlab("Indicateur de précarité") + ylab ("Taux de participation en 2010")
+ theme_bw(base_size=16)
`d2` <- read.csv("C:/Users/Antoine/Desktop/d2.csv")
View(`d2`)
colnames(d2)
library(ggplot2)
fn7 <- ggplot(d2, aes(x=margin, y=fn1_7)) + geom_point(shape=1) + geom_smooth(method=lm) + facet_wrap(~nom) + xlab("Indicateur de précarité") + ylab ("Score total du FN en 2007") + theme_bw(base_size=16)
d7 <- ggplot(d2, aes(x=margin, y=fn1_7)) + geom_point(shape=1) + geom_smooth(method=lm) + facet_wrap(~nom) + xlab("Indicateur de précarité") + ylab ("Score total de la droite en 2007") + theme_bw(base_size=16)
g7 <- ggplot(d2, aes(x=margin, y=g1_7)) + geom_point(shape=1) + geom_smooth(method=lm) + facet_wrap(~nom) + xlab("Indicateur de précarité") + ylab ("Score total de la gauche en 2007") + theme_bw(base_size=16)
g9 <- ggplot(d2, aes(x=margin, y=g9)) + geom_point(shape=1) + geom_smooth(method=lm) + facet_wrap(~nom) + xlab("Indicateur de précarité") + ylab ("Score total de la gauche en 2009") + theme_bw(base_size=16)
d9 <- ggplot(d2, aes(x=margin, y=d9)) + geom_point(shape=1) + geom_smooth(method=lm) + facet_wrap(~nom) + xlab("Indicateur de précarité") + ylab ("Score total de la droite en 2009") + theme_bw(base_size=16)
fn9 <- ggplot(d2, aes(x=margin, y=fn9)) + geom_point(shape=1) + geom_smooth(method=lm) + facet_wrap(~nom) + xlab("Indicateur de précarité") + ylab ("Score total du FN* en 2009") + theme_bw(base_size=16)
g10 <- ggplot(d2, aes(x=margin, y=g10)) + geom_point(shape=1) + geom_smooth(method=lm) + facet_wrap(~nom) + xlab("Indicateur de précarité") + ylab ("Score total de la gauche en 2010") + theme_bw(base_size=16)
d10 <- ggplot(d2, aes(x=margin, y=d10)) + geom_point(shape=1) + geom_smooth(method=lm) + facet_wrap(~nom) + xlab("Indicateur de précarité") + ylab ("Score total de la droite en 2010") + theme_bw(base_size=16)
fn10 <- ggplot(d2, aes(x=margin, y=fn10)) + geom_point(shape=1) + geom_smooth(method=lm) + facet_wrap(~nom) + xlab("Indicateur de précarité") + ylab ("Score total du FN en 2010") + theme_bw(base_size=16)
g7_full <- ggplot(d2, aes(x=margin, y=g1_7)) + geom_point(shape=1) + geom_smooth(method=lm) + xlab("Indicateur de précarité") + ylab ("Score total de la gauche en 2007") + theme_bw(base_size=16)
d7_full <- ggplot(d2, aes(x=margin, y=fn1_7)) + geom_point(shape=1) + geom_smooth(method=lm) + xlab("Indicateur de précarité") + ylab ("Score total du FN en 2007") + theme_bw(base_size=16)
fn7_full <- ggplot(d2, aes(x=margin, y=fn1_7)) + geom_point(shape=1) + geom_smooth(method=lm) + xlab("Indicateur de précarité") + ylab ("Score total du FN en 2007") + theme_bw(base_size=16)
g9_full <- ggplot(d2, aes(x=margin, y=g9)) + geom_point(shape=1) + geom_smooth(method=lm) + xlab("Indicateur de précarité") + ylab ("Score total de la gauche en 2009") + theme_bw(base_size=16)
d9_full <- ggplot(d2, aes(x=margin, y=d9)) + geom_point(shape=1) + geom_smooth(method=lm) + xlab("Indicateur de précarité") + ylab ("Score total de la droite en 2009") + theme_bw(base_size=16)
fn9_full <- ggplot(d2, aes(x=margin, y=fn9)) + geom_point(shape=1) + geom_smooth(method=lm) + xlab("Indicateur de précarité") + ylab ("Score total du FN* en 2009") + theme_bw(base_size=16)
g10_full <- ggplot(d2, aes(x=margin, y=g10)) + geom_point(shape=1) + geom_smooth(method=lm) + xlab("Indicateur de précarité") + ylab ("Score total de la gauche en 2010") + theme_bw(base_size=16)
d10_full <- ggplot(d2, aes(x=margin, y=d10)) + geom_point(shape=1) + geom_smooth(method=lm) + xlab("Indicateur de précarité") + ylab ("Score total de la droite en 2010") + theme_bw(base_size=16)
fn10_full <- ggplot(d2, aes(x=margin, y=fn10)) + geom_point(shape=1) + geom_smooth(method=lm) + xlab("Indicateur de précarité") + ylab ("Score total du FN en 2010") + theme_bw(base_size=16)
library(gridExtra)
grid.arrange(fn7_full, fn9_full, fn10_full, ncol=3)
grid.arrange(d7_full, d9_full, d10_full, ncol=3)
grid.arrange(g7_full, g9_full, g10_full, ncol=3)
grid.arrange(g7, g9, g10, ncol=3)
d7 <- ggplot(d2, aes(x=margin, y=d1_7)) + geom_point(shape=1) + geom_smooth(method=lm) + facet_wrap(~nom, ncol=6) + xlab("Indicateur de précarité") + ylab ("Score total de la droite en 2007") + theme_bw(base_size=16)
d9 <- ggplot(d2, aes(x=margin, y=d9)) + geom_point(shape=1) + geom_smooth(method=lm) + facet_wrap(~nom, ncol=6) + xlab("Indicateur de précarité") + ylab ("Score total de la droite en 2009") + theme_bw(base_size=16)
d10 <- ggplot(d2, aes(x=margin, y=d10)) + geom_point(shape=1) + geom_smooth(method=lm) + facet_wrap(~nom, ncol=6) + xlab("Indicateur de précarité") + ylab ("Score total de la droite en 2010") + theme_bw(base_size=16)
g7 <- ggplot(d2, aes(x=margin, y=g1_7)) + geom_point(shape=1) + geom_smooth(method=lm) + facet_wrap(~nom, ncol=6) + xlab("Indicateur de précarité") + ylab ("Score total de la gauche en 2007") + theme_bw(base_size=16)
g9 <- ggplot(d2, aes(x=margin, y=g9)) + geom_point(shape=1) + geom_smooth(method=lm) + facet_wrap(~nom, ncol=6) + xlab("Indicateur de précarité") + ylab ("Score total de la gauche en 2009") + theme_bw(base_size=16)
g10 <- ggplot(d2, aes(x=margin, y=g10)) + geom_point(shape=1) + geom_smooth(method=lm) + facet_wrap(~nom,ncol=6) + xlab("Indicateur de précarité") + ylab ("Score total de la gauche en 2010") + theme_bw(base_size=16)
fn7 <- ggplot(d2, aes(x=margin, y=fn1_7)) + geom_point(shape=1) + geom_smooth(method=lm) + facet_wrap(~nom, ncol=6) + xlab("Indicateur de précarité") + ylab ("Score total du FN en 2007") + theme_bw(base_size=16)
fn9 <- ggplot(d2, aes(x=margin, y=fn9)) + geom_point(shape=1) + geom_smooth(method=lm) + facet_wrap(~nom,ncol=6) + xlab("Indicateur de précarité") + ylab ("Score total du FN* en 2009") + theme_bw(base_size=16)
fn10 <- ggplot(d2, aes(x=margin, y=fn10)) + geom_point(shape=1) + geom_smooth(method=lm) + facet_wrap(~nom,ncol=6) + xlab("Indicateur de précarité") + ylab ("Score total du FN en 2010") + theme_bw(base_size=16)
grid.arrange(g7,g9,g10)
grid.arrange(d7,d9,d10)
grid.arrange(fn7,fn9,fn10)
savehistory("~/vpauvre_hist.Rhistory")
R / Lattice : Graphique wireframe - 07/07/2014
R : Les fonctions Melt et Cast - 07/07/2014
R : Themes GGplot - 07/07/2014
ggplot(data, aes(x=margin, y=to10T1)) + geom_point(shape=1) + geom_smooth(method=lm) + facet_wrap(~nom) + xlab("Indicateur de précarité") + ylab ("Taux de participation en 2010") + theme_bw(base_size=16)
Facetting sous R, suite - 07/07/2014
Syntaxe votpauvre
ggplot(data, aes(x=margin, y=to07T1)) + geom_point(shape=1) + geom_smooth(method=lm) + facet_wrap(~codedep)
ggplot(data, aes(x=margin, y=to07T1)) + geom_point(shape=1) + geom_smooth(method=lm) + facet_wrap(~code) + xlab("précarité")
ggplot(data, aes(x=margin, y=to07T1)) + geom_point(shape=1) + geom_smooth(method=lm) + facet_wrap(~code) + xlab("Indicateur de précarité") + ylab ("Taux de participation en 2007")
ggplot(data, aes(x=margin, y=to09)) + geom_point(shape=1) + geom_smooth(method=lm) + facet_wrap(~code) + xlab("Indicateur de précarité") + ylab ("Taux de participation en 2009")
ggplot(data, aes(x=margin, y=to10T1)) + geom_point(shape=1) + geom_smooth(method=lm) + facet_wrap(~code) + xlab("Indicateur de précarité") + ylab ("Taux de participation en 2010")
m07 <- ggplot(data, aes(x=margin, y=to07T1)) + geom_point(shape=1) + geom_smooth(method=lm) + facet_wrap(~code) + xlab("Indicateur de précarité") + ylab ("Taux de participation en 2007")
m09 <- ggplot(data, aes(x=margin, y=to09)) + geom_point(shape=1) + geom_smooth(method=lm) + facet_wrap(~code) + xlab("Indicateur de précarité") + ylab ("Taux de participation en 2009")
m10 <- ggplot(data, aes(x=margin, y=to10T1)) + geom_point(shape=1) + geom_smooth(method=lm) + facet_wrap(~code) + xlab("Indicateur de précarité") + ylab ("Taux de participation en 2010")
Module rCarto : réaliser directement des cartes choroplèthes sans fusion - 06/07/2014
# Module
library(rCarto)
# Fichier de travail
setwd("C:/Users/Antoine/Desktop/essai")
# Base de données
celec <- read.csv("C:/Users/Antoine/Desktop/essai/celec.csv")
# Shapefile
shape <- readShapeSpatial("C:/Users/Antoine/Desktop/Cartelec/fond0710.shp")
# Nom de colonnes
colnames(celec)
# Variable à cartographier
celec$to07 <- celec$vot07t1/celec$ins07t1
# Carte avec arrondissement à 1 décimale
mapChoropleth(shpFile="c:/Users/Antoine/Desktop/Cartelec/fond0710.shp", shpId="BUREAU", df=celec, dfId="bvcom", var="to07", style="quantile", nclass=10, lgdRnd=1, palCol="Greens", title="Taux de participation en 2007", legend="turnout 2009", author = "quantiles", source="Antoine JARDIN")
# Idem avec 2 décimales
mapChoropleth(shpFile="c:/Users/Antoine/Desktop/Cartelec/fond0710.shp", shpId="BUREAU", df=celec, dfId="bvcom", var="to07", style="quantile", nclass=10, lgdRnd=2, palCol="Greens", title="Taux de participation en 2007", legend="turnout 2009", author = "quantiles", source="Antoine JARDIN")
# Idem avec une autre gamme de couleurs
mapChoropleth(shpFile="c:/Users/Antoine/Desktop/Cartelec/fond0710.shp", shpId="BUREAU", df=celec, dfId="bvcom", var="to07", style="quantile", nclass=10, lgdRnd=2, palCol="Greens", title="Taux de participation en 2007", legend="turnout 2009", author = "quantiles", source="Antoine JARDIN")
Avant le Module rCarto - 04/07/14
setwd("C:/Users/Antoine/Desktop/essai")
# Charge la base de données cartelec
celec <- read.csv("C:/Users/Antoine/Desktop/essai/celec.csv")
View(celec)
# Charge la librairie rCarto
library(rCarto)
# Charge le SHP Cartelec
shape <- readShapeSpatial("C:/Users/Antoine/Desktop/Cartelec/fond0710.shp")
# Fusion des fichiers dans shape@data (fond de carte avec données du dataset)
shape@data <- data.frame(shape@data, celec [match(shape@data[,"BUREAU"], celec[,"bvcom"]),])
colnames(celec)
# Construction de l'indicateur % d'ouvriers
celec$ouvrier <- celec$cs6/celec$totcs
# Nouvelle fusion
shape@data <- data.frame(shape@data, celec [match(shape@data[,"BUREAU"], celec[,"bvcom"]),])
# Indication de la variable à catégoriser
shape@data$var <- shape@data$ouvrier
# transformation en vecteur numérique
var <- as.vector(na.omit(shape@data$ouvrier))
# Nombre de classes (10)
nbclass <- 10
# type de classe (déciles)
distr <- classIntervals(var,nbclass, style="quantile")$brks
# Gamme de couleurs
colours <- brewer.pal(nbclass, "PuOr")
# Création de la couche des couleurs
colMap <- colours[(findInterval(shape$var,distr,all.inside=TRUE))]
# Cartographie
plot(shape, col=colMap,border="black", lwd=1)
plot(shape, col=colMap,border="black", lwd=0.1)
plot(shape, col=colMap,border="black", lwd=0.001)
Arrange multiple plots with gridExtra
Graphiques
to12 <- ggplot(data, aes(x=ql_cs3_10, y=to12_1, size=pop)) + geom_point(shape=1) + geom_smooth(method=lm) + labs(title="Taux de participation en 2012 selon le \n quotient de localisation des CPIS. INSEE 2010") + xlab("QL des CPIS") + ylab("Taux de participation 2012 Tour 1")
to09 <- ggplot(data, aes(x=ql_cs3_10, y=to09, size=pop)) + geom_point(shape=1) + geom_smooth(method=lm) + labs(title="Taux de participation en 2012 selon le \n quotient de localisation des CPIS. INSEE 2010") + xlab("QL des CPIS") + ylab("Taux de participation 2012 Tour 1")
to07 <- ggplot(data, aes(x=ql_cs3_10, y=to07_1, size=pop)) + geom_point(shape=1) + geom_smooth(method=lm) + labs(title="Taux de participation en 2012 selon le \n quotient de localisation des CPIS. INSEE 2010") + xlab("QL des CPIS") + ylab("Taux de participation 2012 Tour 1")
to09 <- ggplot(data, aes(x=ql_cs3_10, y=to09, size=pop)) + geom_point(shape=1) + geom_smooth(method=lm) + labs(title="Taux de participation en 2009 selon le \n quotient de localisation des CPIS. INSEE 2010") + xlab("QL des CPIS") + ylab("Taux de participation Européennes 2009")
to07 <- ggplot(data, aes(x=ql_cs3_10, y=to07_1, size=pop)) + geom_point(shape=1) + geom_smooth(method=lm) + labs(title="Taux de participation en 2007 selon le \n quotient de localisation des CPIS. INSEE 2010") + xlab("QL des CPIS") + ylab("Taux de participation 2007 Tour 1")
to04 <- ggplot(data, aes(x=ql_cs3_10, y=to04_1e, size=pop)) + geom_point(shape=1) + geom_smooth(method=lm) + labs(title="Taux de participation en 2004 selon le \n quotient de localisation des CPIS. INSEE 2010") + xlab("QL des CPIS") + ylab("Taux de participation Européennes 2004")
to02 <- ggplot(data, aes(x=ql_cs3_10, y=to02_1, size=pop)) + geom_point(shape=1) + geom_smooth(method=lm) + labs(title="Taux de participation en 2002 selon le \n quotient de localisation des CPIS. INSEE 2010") + xlab("QL des CPIS") + ylab("Taux de participation 2002 Tour 1")
library(gridExtra)
grid.arrange(to02, to04, to07, to09, to12)
grid.arrange(to02, to04, to07, to09, to12, ncol=5)
to02 <- to02 + theme(legend.position="none")
to04 <- to04 + theme(legend.position="none")
to07 <- to07 + theme(legend.position="none")
to09 <- to09 + theme(legend.position="none")
to12 <- to12 + theme(legend.position="none")
to02 <- to02 + ylim(0,100)
to04 <- to04 + ylim(0,100)
to07 <- to07 + ylim(0,100)
to09 <- to09 + ylim(0,100)
to12 <- to12 + ylim(0,100)
grid.arrange(to02, to04, to07, to09, to12, ncol=5)
Facetting, scatterplot et droite des moindres carrés sous R - 02/07/2014
# Obtenir la liste des variables du dataset colnames(data) # Il vaut mieux utiliser ggplot que qplot ggplot(dataset, aes(x=var_x, y=var_y, size=weight)) + geom_point(shape=1) = Hollow circle + geom_smooth(method=lm) = regression line + facets_wrap(~reg) = facetting par région # ncol=4 : spécifie le nombre de colonnes dans le graphique facetté ggplot(data, aes(x=i3, y=p12_exd)) + geom_point(shape=1) + geom_smooth(method=lm) ggplot(data, aes(x=i3, y=p12_exd)) + geom_point(shape=1) + geom_smooth(method=lm) + facet_wrap(~reg) ggplot(data, aes(x=p12_exd, y=p12_g)) + geom_point(shape=1) + geom_smooth(method=lm) + facet_wrap(~reg) ggplot(data, aes(x=p12_exd, y=p12_g, size=pop)) + geom_point(shape=1) + geom_smooth(method=lm) + facet_wrap(~reg) ggplot(data, aes(x=p12_exd, y=p12_g, size=pop)) + geom_point(shape=1) + geom_smooth(method=lm) + facet_wrap(~reg, ncol=4)
Cartographie sous R - premier essai - 02/07/2014
# Installation des packages
install.packages("RColorBrewer")
install.packages("classInt")
library(RColorBrewer)
# Lancement des packages manquants
library(maptools)
library(classInt)
# Importation des données CSV à projeter (dans le dossier de travail)
data <- read.csv("C:/Users/Antoine/Desktop/essai/data.csv")
View(data)
# Importation du shapefile (dans le dossier de travail)
fdc <- readShapeSpatial("FR_PLM.shp")
# Fusion des fichiers (by.x variable dans la carto, by.y variable dans le dataset)
fdc@data <- merge(fdc@data, data, by.x="ID_GEOFLA", by.y="id_geofla")
# Distribution en quartiles
distr <- classIntervals(fdc$fn14_1,4,style="quantile")$brks
# Idem en déciles
distr <- classIntervals(fdc$fn14_1,10,style="quantile")$brks
# Choix d'une palette de couleur, ici de "Purple" à "Or"
colours <- brewer.pal(4,"PuOr")
# Afficher les codes hexa des couleurs
colours
# Afficher le mapping des couleurs
colmap <- colours[(findInterval(fdc$fn14_1, distr, all.inside=TRUE))]
# Affichage de la carte elle même
plot(fdc, col=colmap)
# On peut ensuite l'exporter en SVG ou en PNG
Configuration Latex pour fichier de thèse et bibliographie - 02/07/2014
Latex est un éditeur de texte un peu difficile d'accès mais très puissant. Il permet les mises en formes complexes mais aussi de gagner du temps dans la gestion des bibliographiques, des figures et des tableaux. Des modules existent pour exporter les tableaux en latex depuis Stata ou R (notamment outreg2 sous stata). Mais pour gagner du temps des précautions s'imposent.
D'abord latex est de plus en plus fragmenté, on trouve surtout trois versions :
1 - PDFLatex, version ancienne mais populaire, qui marche bien en général, mais ne gère pas les fichiers encodés en UTF-8, ce qui est la majorité du texte aujourd'hui produit.
2 - XeTex, qui est une version qui vise à corriger ce problème
3 - Lualatex, qui ajoute des fonctions et vise à reprendre les avancées de XeTex.
Le mieux est aujourd'hui d'utiliser LuaLaTex, c'est le futur de latex.
Précautions d'emploi :
Il faut toujours enregistrer les fichiers de bibliographie (.bib) et de texte (.tex) au format UTF-8. Prenez l'éditeur de votre choix, j'aime bien sublime text à titre personnel, il donne la coloration syntaxique pour ces deux formats de fichier. Vous devez ensuite installer texlive 2014, la distribution la plus complète. Attention l'installation est très longue, la distribution pèse plusieurs gigaoctets. Enfin installez l'éditeur de votre choix, a titre personnel je préfère Texstudio qui est un fork de Texmaker, très répandu aussi. Il vous faut configurer texstudio en indiquant que vous utilisez biber pour la gestion de la bibliographie, biblatex pour appeler biber, et lualatex pour compiler. Vous aurez ainsi une distribution latex globale qui fonctionne parfaitement en UTF-8, plus de problèmes de caractères. Cerise sur le gateau, lualatex permet d'utiliser polyglossia pour la gestion des différentes langues, en UTF-8, et fontspec pour la gestion des polices installées sur votre ordinateur. Efficace et puissant. Un exemple rapide :
% !TEX encoding = UTF-8 Unicode
% !TEX TS-program = LuaLaTeX
\documentclass[12pt,a4paper,final]{book}
\usepackage{fontspec}
\usepackage{polyglossia}
\setmainlanguage{french}
\setmainfont{Garamond}
\setmonofont{Consolas}
\usepackage{csquotes}
\usepackage{fancyhdr}
\usepackage{tabularx}
\usepackage{array}
\usepackage{ragged2e}
\usepackage[backend=biber]{biblatex}
\usepackage[left=2.50cm, right=2.50cm, top=3.00cm, bottom=4.00cm]{geometry}
\addbibresource{biblio.bib}
\renewcommand{\baselinestretch}{1.5}
\author{Antoine JARDIN}
\title{Titre thèse}
\fancyfoot{}
\fancyhead[RO,LE]{\thepage}
\fancyhead[LO]{\leftmark}
\fancyhead[RE]{\rightmark}
\setlength{\headheight}{30pt}
\begin{document}
\maketitle
\pagestyle{fancy}
\justifying
[...] Contenu [...]
\nocite{*}
\part{Bibliographie}
\printbibliography
\end{document}
Scatter plot avec facetting et ajustement linéaire sous R - 29/06/2014
# chargement des données
idf_plg <- read.csv("~/DATAR/idf_plg.csv")
# On regarde le data.frame
View(idf_plg)
# Stockage avec un nom plus court
idf <- idf_plg
# Installation du package gridExtra pour combiner les graphiques
install.packages("gridExtra")
library(gridExtra)
# grid.arrange indique les graphiques déja calculés sous ggplot à afficher
grid.arrange(e12g, e12d, e12fn)
# On peut choisir le nombre de colonnes ou de lignes
grid.arrange(e12g, e12d, e12fn, ncol=3)
grid.arrange(e12g, e12d, e12fn, ncol=1)
# Par défaut ggplot2 affiche un ajustement lowess.
# On peut vouloir un affichage lfit
# Pour cela, il faut indiquer qu'on veut un ajustement linéaire avec l'outil "formula"
e12g <- qplot (ql_cs6_10, p12_g, data=idf, geom=c("point","smooth", method="lm", formula = p12g~ql_cs6_10), facets_wrap=dep~., size=pop)
# Ceci ne fonctionne pas, il ne faut pas renseigner le nom des variables mais la formule générique
# formula = y ~ x
# exemple
e12g <- qplot (ql_cs6_10, p12_g, data=idf, geom=c("point","smooth"), method="lm", formula = y~x, facets_wrap=dep~., size=pop)
# on réaffiche les graphiques
grid.arrange(e12g, e12d, e12fn, ncol=1)
Tableau de régression en Latex
Latex permet d'afficher de façon sobre et claire les tableaux de régressions. On peut exporter du code latex depuis Stata (outred, estat) ou R. Mais il est aussi facile de créer des tableaux directement dans le code Latex de son texte. Voici un exemple
\begin{center}
\begin{tabular}{l R{3cm}R {3cm}R{3cm}R{3cm}R {3cm}}
\hline \noalign{\smallskip}
Régression linéaire par commune\\
Pondération pour la taille \\
démographique des municipalités.\\
& Participation en 2012 & Participation en 2009 & Croissance de la participation entre 2009 et 2012\\
\noalign{\smallskip}\hline \noalign{\smallskip}
QL CPIS & 1.095*** & 4.304*** & -3.210***\\
Distance & 0.582*** & 0.031 & 0.551***\\
Int (classe * distance) & 0.139 & 0.199 & -0.060\\
QL Immigrés FR & -2.618*** & -3.842*** & 1.224***\\
Int (classe * immigration) & -0.013 & -0.473** & 0.461**\\
Int (distance * immigration) & -0.933*** & -1.336*** & 0.403***\\
Triple interaction & -0.177 & -0.500*** & 0.322**\\
\_cons & 79.606*** & 41.536*** & 38.070***\\
R2 & 0.71 & 0.90 & 0.82\\
N & 1,281 & 1,281 & 1,281 \\
\noalign{\smallskip}\hline\end{tabular}\\
\smallskip
\begin{footnotesize}
\ * $p<0$.05; ** $p<0$.01; *** $p<0$.001
\end{footnotesize}\\
\smallskip
\end{center}
Introduction à GGplot2 avec Qplot sous R
# Chargement de la librairie
library(ggplot2)
data(diamonds)
class(diamonds)
# Chargement du data.frame
diamonds <- diamonds[sample(nrow(diamonds), 500),]
# Scatter plot : x = carat, y = price
qplot(carat, price, data = diamonds)
# Scatter plot en rouge avec transparence
qplot(carat, price, data = diamonds, colour = I("red"), size = I(2), shape = I(15), alpha = I(1/5))
# Scatter plot avec lowess smoothing
qplot(carat, price, data = diamonds, colour = I("red"), size = I(2), shape = I(15), alpha = I(1/5), geom = c("point","smooth"))
# Voir le data.frame
View(diamonds)
# Afficher des points de couleur différente selon la couleur des diamants
qplot(carat, price, data = diamonds, colour = color)
# Histogrammes selon le nombre de carats, des barres de couleurs différentes selon la couleur des diamants
qplot(carat, data=diamonds, geom="histogram", fill=color)
# Changer le nombre de barres de l'histogramme
qplot(carat, data=diamonds, geom="histogram", fill=color, binwidth= 1)
qplot(carat, data=diamonds, geom="histogram", fill=color, binwidth= 1/20)
qplot(carat, data=diamonds, geom="histogram", fill=color, binwidth= 1/10)
# Afficher les courbes de kernel density (epanechnikov). alpha=I change la transparence
qplot(carat, data=diamonds, geom="density", fill=color, alpha=I(0.1))
qplot(carat, data=diamonds, geom="density", fill=color, alpha=I(0.5))
# Scatter plot avec des symboles différents selon le type de coupe des diamants
qplot(carat, price, data=diamonds, shape=cut)
# Idem en faisant en plus varier la couleur des points en fonction de celle des diamants
qplot(carat, price, data=diamonds, shape=cut, colour=color)
# facetting vertical selon la variable "color"
qplot(carat,data=diamonds, facets= color ~ ., geom="histogram")
# facetting horizontal selon la variable "color"
qplot(carat,data=diamonds, facets= .~color, geom="histogram")
# facetting combiné selon les variables cuts (en x) et color (en y)
qplot(carat,data=diamonds, facets= cut ~ color, geom="histogram")
# facetting du nuage de points carat x price par cut et color.
qplot(carat,price,data=diamonds, facets= cut ~ color, geom="point")
Régressions écologiques avec R
Dans cet exemple ou utilise le module eiPack de R, qui comporte plusieurs outils d'analyse et de diagnostics pour la recherche sur données agrégées. Ces méthodes découlent des recherches théoriques de Gary King et Ari Rosen, elles reprennent les commandes de l'ancien pack ei. Dans le même temps elles s'appuient aussi sur certains outils inclus dans le package Zelig
# On va chercher le répertoire de travail
getwd()
[1] "C:/Users/Antoine/Documents"
# Import des données dans le data frame (ici les données du recensement britannique par LSOA sur Birmingham)
data.frame <- read.csv ("C:/Users/Antoine/Documents/birmi.csv", header=TRUE)
# Vérificationd de l'import
View (data.frame)
# Création de la formule pour la régression écologique : matrice RxC avec Religion et position sociale
formula <- cbind(christian, buddhist, hindu, jewish, muslim, sikh, other_rel, no_rel, comprel) ~ cbind(sec1, sec2, sec3, sec4, sec5, sec6, sec7, sec8, compsec)
# Vérification des objets
ls()
[1] "data.frame" "formula"
# Installation de eiPack
library(eiPack)
Le chargement a nécessité le package : MASS
Le chargement a nécessité le package : coda
Le chargement a nécessité le package : lattice
Le chargement a nécessité le package : msm
# Formule de la régression mobilisant la formule et le data.frame que l'on vient d'inclure
ei.reg(formula, data.frame)
# Résultats
Call: ei.reg(formula = formula, data = data.frame)
Estimated internal cells:
christian buddhist hindu jewish muslim sikh other_rel no_rel comprel
sec1 0.27871 0.03914 0.20195 0.02028 -0.14870 0.14479 0.00780 0.40492 0.05111
sec2 0.90043 0.00347 -0.14035 -0.00632 -0.57100 -0.15897 0.00134 0.81636 0.15505
sec3 1.01758 -0.00582 0.02249 -0.02035 0.65209 0.07743 0.02560 -0.77208 0.00306
sec4 -0.70835 -0.06020 0.35202 0.01503 2.15456 1.04223 0.03051 -1.70164 -0.12416
sec5 1.22808 0.02500 -0.26733 0.00439 0.02015 -0.94491 -0.10143 1.00558 0.03046
sec6 0.79894 -0.01081 -0.03786 0.01132 -0.45057 -0.40386 -0.04331 1.07665 0.05949
sec7 1.16245 0.01924 0.17454 -0.00194 -1.65713 0.81825 0.09895 0.23776 0.14787
sec8 -1.02085 0.00690 -0.06113 -0.01350 2.61948 -0.17834 -0.00736 -0.41753 0.07233
compsec 0.27878 0.02137 0.07938 0.02126 0.09941 0.05450 0.01077 0.37192 0.06261
Message d'avis :
In all(G) :
conversion automatique d'un argument de type 'double' en booléen (logical)
# Régression bayésienne (même variables)
ei.reg.bayes(formula, data.frame, sample = 1000, weights = data.frame$age001)
Formula: formula
Total sims: 1000
Estimated internal cells: (averaged across simulations)
christian buddhist hindu jewish muslim sikh other_rel no_rel comprel
sec1 0.255868 0.040967 0.208855 0.020665 -0.142041 0.148839 0.007307 0.419616 0.048502
sec2 0.894671 0.000915 -0.149674 -0.006494 -0.551448 -0.175201 0.000543 0.827026 0.157262
sec3 0.969418 -0.004445 0.036324 -0.018917 0.663135 0.114941 0.026523 -0.797324 0.000239
sec4 -0.551790 -0.062043 0.344129 0.014549 2.068667 1.022573 0.032510 -1.741573 -0.124125
sec5 1.184238 0.032015 -0.260722 0.002590 -0.002812 -0.969065 -0.100070 1.074476 0.034159
sec6 0.831795 -0.012814 -0.033545 0.011969 -0.500312 -0.374619 -0.041749 1.046044 0.065288
sec7 1.161579 0.017783 0.156365 -0.002039 -1.576593 0.770128 0.094455 0.263097 0.137832
sec8 -1.032322 0.005403 -0.054116 -0.012027 2.602139 -0.166241 -0.007031 -0.411866 0.074677
compsec 0.246179 0.025886 0.081481 0.018585 0.121226 0.060252 0.011960 0.370246 0.062713
Message d'avis :
In all(G) :
conversion automatique d'un argument de type 'double' en booléen (logical)
# Fonction MD.bayes pour prédire les fréquences
ei.MD.bayes(formula, data = data.frame, sample = 1000, total = data.frame$age001)
Formula: formula
Total sims: 2000
Burnin discarded: 1000
Sims saved: 1000
Mean Alpha: (averaged over simulations)
christian buddhist hindu jewish muslim sikh other_rel no_rel comprel
sec1 57.47 0.45 0.60 0.38 0.76 0.60 0.45 28.29 3.78
sec2 2.66 0.19 0.24 0.18 0.45 0.23 0.18 1.42 0.27
sec3 3.52 0.20 0.24 0.18 0.59 0.27 0.21 1.26 0.30
sec4 20.12 0.32 0.41 0.28 2.48 0.42 0.33 1.61 10.45
sec5 50.89 0.43 0.46 0.38 0.87 0.52 0.48 13.31 29.48
sec6 1.43 0.17 0.21 0.16 0.47 0.22 0.18 0.62 0.22
sec7 1.60 0.18 0.23 0.17 0.56 0.24 0.18 0.71 0.25
sec8 0.81 0.17 0.21 0.15 0.83 0.23 0.17 0.41 0.25
compsec 1.42 0.18 0.23 0.16 0.79 0.24 0.18 0.51 0.27
Mean Cell.counts: (averaged over simulations)
christian buddhist hindu jewish muslim sikh other_rel no_rel comprel
sec1 50325 317 507 232 637 504 304 24864 3294
sec2 89224 918 3967 425 18412 6138 958 46577 4406
sec3 69847 772 2664 344 15105 3722 879 24667 3816
sec4 41886 415 805 268 6033 866 463 3575 20668
sec5 34624 245 282 177 580 325 278 9053 20013
sec6 70767 771 2806 362 37151 5872 882 31972 4173
sec7 55344 734 3177 362 30185 4842 839 24624 4242
sec8 31593 712 3493 350 76774 4933 972 15437 4617
compsec 50119 901 5249 846 45608 5529 1017 25538 5870
# Stockage du résultat dans l'objet o1 pour calculs ultérieurs ou graphiques
o1 <- ei.MD.bayes(formula, data = data.frame, sample = 1000, total = data.frame$age001)
# Calcul sous excel
# % en ligne
christian buddhist hindu jewish muslim sikh other_rel no_rel comprel Total
sec1 62.14 0.39 0.63 0.29 0.79 0.62 0.38 30.70 4.07 100
sec2 52.17 0.54 2.32 0.25 10.77 3.59 0.56 27.23 2.58 100
sec3 57.34 0.63 2.19 0.28 12.40 3.06 0.72 20.25 3.13 100
sec4 55.86 0.55 1.07 0.36 8.05 1.15 0.62 4.77 27.57 100
sec5 52.80 0.37 0.43 0.27 0.88 0.50 0.42 13.81 30.52 100
sec6 45.73 0.50 1.81 0.23 24.01 3.79 0.57 20.66 2.70 100
sec7 44.51 0.59 2.55 0.29 24.27 3.89 0.67 19.80 3.41 100
sec8 22.75 0.51 2.52 0.25 55.28 3.55 0.70 11.12 3.32 100
compsec 35.63 0.64 3.73 0.60 32.42 3.93 0.72 18.15 4.17 100
Total 46.01 0.54 2.14 0.31 21.48 3.05 0.61 19.23 6.63 100
# % en colonne
christian buddhist hindu jewish muslim sikh other_rel no_rel comprel Total
sec1 10.19 5.48 2.21 6.89 0.28 1.54 4.61 12.05 4.63 7.55
sec2 18.07 15.87 17.29 12.63 7.99 18.75 14.53 22.58 6.20 15.94
sec3 14.15 13.34 11.61 10.22 6.55 11.37 13.33 11.96 5.37 11.35
sec4 8.48 7.17 3.51 7.96 2.62 2.65 7.02 1.73 29.07 6.99
sec5 7.01 4.24 1.23 5.26 0.25 0.99 4.22 4.39 28.15 6.11
sec6 14.33 13.33 12.23 10.75 16.12 17.94 13.38 15.50 5.87 14.42
sec7 11.21 12.69 13.84 10.75 13.10 14.79 12.73 11.94 5.97 11.59
sec8 6.40 12.31 15.22 10.40 33.31 15.07 14.75 7.48 6.49 12.94
compsec 10.15 15.57 22.87 25.13 19.79 16.89 15.43 12.38 8.26 13.11
Total 100 100 100 100 100 100 100 100 100 100
Créer un Ramdisk (sous Windows)
La pluspart des personnes pensent que lorsque leur ordinateur est lent, il faut en changer. La pluspart des utilisateurs pensent aussi que le plus important est d'avoir un CPU plus rapide. Pourtant c'est souvent l'accès aux données qui est le goulot d'étranglement pour l'utilisation des logiciels. Pour remédier à ce problème, la nouvelle tendance dans l'industrie est de préconiser l'utilisation des SSD. Mais les SSD coutent chers, et ils sont fragiles à l'usur de leur mémoire. Pour des performances encore plus importantes, une autre option existe : le ramdisk. Toutes vos données seront en RAM pendant le chargement et le traitement des données, les usages sont virtuellement immédiats. Il vous suffit ensuite d'enregistrer sur le disque dur lui même le résultat des analyses, car le ramdisk est effacé en cas de plantage/reboot/extinction de la machine.
Pour installer un ramdisk sous windows il vous faut installer imdisk. Puis le configurer via le panneau de configuration en attribuant une taille à votre ramdisk. L'intéret est d'avoir 16/32 Go de ram pour avoir des ramdisks de plusieurs Go sans soucis. Copiez ensuite vos fichiers dans le ramdisk et lancez votre logiciel. Vous pouvez maintenant ouvrir et travailler sur les fichiers situés sur le ramdisk. N'oubliez pas de sauvegarder vos résultats et les modifications sur le disque dur lui même.
-
Avantages de la procédure :
Simple
Performances Maximales
Peu couteuse
-
Inconvénients :
Attention à la perte des données en cas de pépin
Il est possible de l'automatiser mais ca demande un peu de travail
Utiliser Archlinux
La distribution ArchLinux est l'une des plus intéressantes disponibles. Elle vise au minimalisme et à la simplicité architecturale. Voici quelques unes de ses caractéristiques
- Installation Minimale par défaut
- Packages très récents
- Rolling Release : mise à jour en continue sans avoir besoin de procéder à une réinstallation
- Politique directive : Rejet des drivers jugés mauvais
Arch est un bon moyen pour se familariser à Linux, depuis 2008 elle m'a donné la possibilité de progresser rapidement. En échange, elle demande de vouloir apprendre et mettre les mains dans les rouages de l'OS. Archlinux est une distribution qui suit les grandes tendances des principales opérateurs des systèmes linux. On peut citer l'utilisation de Systemd (système d'init et de contrôle des processus développé par Red Hat et expérimenté d'abord sous Fedora). Archlinux est conforme au standard Linux Standard Base. On pourrait presque regretter ce choix, tant certaines options semblent compliquées et discutables. De façon générale, si vous souhaiter utiliser une distribution Linux ordinaire, c'est sans doute le meilleure compromis entre simplicité, efficacité et compatibilité avec les logiciels. Certains problèmes peuvent surgir quand on cherche à installer des logiciels qui dépendent de transitions sous jacentes. J'ai notamment eu le problème en voulant installer QGIS 2.2 alors que python 3 n'est pas compatible avec python 2. Ceux qui souhaitent utiliser les processus de build de Mozilla comme Firefox OS pourront rencontrer des difficultés similaires.
Peut-on alors reprocher quelque chose à Archlinux ?
Malheureusement oui, la distribution parfaite n'existe pas. A mes yeux, le premier problème est la fragmentation entre les dépots officiels et les dépots AUR qui fragilisent la structure des sytèmes installés. Archlinux est un système communautaire et il est difficile à l'équipe centrale de maintenir des dépots aussi vastes que ceux de Debian par exemple. On peut aussi penser qu'Archlinux introduit trop de changement de logiciels, plutôt que de se focaliser sur les meilleurs versions des différents logiciels. Nombreux sont ceux qui introduisent des régressions ou des bugs qui peuvent être problématiques. Archlinux pourrait investiguer les options alternatives sous linux, je pense notamment à un système d'init comme OpenRC ou à l'utilisation d'autres libc comme Musl. Enfin, les systèmes BSD proposent de prolonger quelque peu la logique d'Archlinux. Ils mettent en oeuvre des noyaux et des outils systèmes différents. Mais les logiciels qui fonctionnent sous linux, lorsqu'ils sont bien codés, fonctionnent la pluspart du temps sous BSD. On distingue 3 principales branches de BSD. La plus intéressante est pour moi OpenBSD qui cherche à maintenir un système complet avec des exigences de clarté et de qualité très importantes. Un des enjeux pour OpenBSD sera de négocier le passage la GPLv3 de GCC, privant ainsi l'OS d'un compilateur polyvalent pour construire le système de base. FreeBSD adopte une stratégie différente, en optant pour LLVM/Clang, compilateur développé à l'Université de Chicago et utilisé abondamment par Apple pour Mac OS X. LLVM est sous licence BSD, mais son développement n'est pas très ouvert. Son adoption par les distributions linux est attendus, mais le noyau Linux ne peut pas encore être compilé avec LLVM. A terme, la question se posera pour OpenBSD qui devra se demander (1) si toutes les architectures actuelles peuvent encore être supportées (2) si l'intégration de Clang est préférable aux anciennes versions de GCC. On voit donc que beaucoup d'évolution du monde linux peuvent paver la voix à des évolutions plus profondes. La remise en cause des blocks fondamentaux du système GNU, sous l'évolution de la licence GPLv3, pourrait paradoxalement mener à un regain d'intéret pour la license BSD. Dans le même temps, on peut espérer que les nouveaux efforts déployés apporteront des améliorations significatives aux briques fondamentales du système qui doivent être redessinnées.
Les élections européennes de 2014 replacées dans une perspective de long terme - 17/06/2014
Les dernières élections européennes ont été marquées par la poussée électorale du Front National. Cette évolution des résultats s’inscrits dans la lignée des scores réalisés par l’extrême droite lors de l’élection présidentielle de 2012. Le FN avait alors retrouvé son niveau maximum historique (en voix comme en pourcentage des suffrages exprimés). Pour mieux comprendre et percevoir l’évolution électorale des deux dernières années, les résultats des dernières européennes doivent être replacés dans une séquence plus longue qui s’étend du 21 avril 2002 à nos jours. Les résultats sont souvent discutés à partir des scores en pourcentage des suffrages exprimés. Cela permet de mesurer le poids relatif des différentes forces politiques. Mais cette méthode comporte aussi des risques. Elle peut introduire des erreurs d’interprétation en masquant les évolutions du taux de participation électorale. Pour bien saisir les tendances à l’œuvre, il est nécessaire de prendre en compte l’évolution des scores en pourcentage du nombre d’électeurs inscrits. Dans le même temps, il faut garder à l’esprit qu’entre 2002 et 2014, ce sont plus de 5.3 millions d’électeurs qui ont rejoint le corps électoral. Le renouvellement générationnel a profondément modifié la structure sociale du corps électoral. Les nouveaux inscrits de 2014 n’étaient âgés que de 6 ans le 21 avril 2002.
Ce qui marque aujourd’hui les esprits, c’est de voir l’extrême droite dans son ensemble (représentée par le Front National et quelques candidats extérieurs) recueillir près de 25 % des suffrages exprimés. Cette performance n’avait jamais été réalisée au cours des 20 dernières années, que cela soit à l’occasion d’une élection européenne ou d’une élection présidentielle. Ce chiffre nous amène à penser que l’extrême droite a réalisé une percée électorale importante ces dernières années. Elle s’inscrit en nette progression depuis l’élection européenne de 2009 en quadruplant son score. Dans le même temps, la gauche et la droite réalisent des contreperformances alors même que le PS et l’UMP sont respectivement fragilisés par la concurrence du Front de Gauche et d’Europe Ecologie d’une part, par celle du Modem et de l’UDI de l’autre. Le total des voix de gauche ne dépasse pas les 35 % des exprimés lors des dernières européennes, alors celui de la droite stagne autour des 36%. On observe depuis le premier tour de la présidentielle 2007 une tendance au déclin structurel du score de la droite, couplé à une progression de plus en plus nette du Front National. Cette évolution correspond à l’arrivée de Marine Le Pen à la tête du principal parti d’extrême droite, engageant une stratégie d’ancrage électoral rapide alors que la droite parlementaire perdait toutes les élections entre 2007 et 2012 dans un contexte de défiance croissante à l’égard de Nicolas Sarkozy. La gauche arrivée au pouvoir lors des dernières élections présidentielles fait face à un décrochage rapide et significatif de son électorat. Dans son ensemble, elle perd près de 10 points en part des suffrages exprimés, que l’on rapporte son score aux européennes de 2009 où à la présidentielle de 2012. Cette défiance frappe la gauche socialiste, comme l’illustre la chute de la confiance envers au président de la République François Hollande, mais également les autres composantes de la gauche qui ne parviennent pas à tirer de bénéfices du rejet de l’exécutif. Nous savons depuis 2002 que les électeurs de gauche sont particulièrement mobiles au sein de leur camp politique. Nombreux sont ceux qui considèrent qu’il est possible de voter pour différents partis de gauche. Cette fluidité électorale interne à la gauche ne s’est pas traduite par un transfert des soutiens du parti socialiste vers les autres partis de gauche.
En observant les évolutions des scores en pourcentage des inscrits, il devient possible d’identifier les dynamiques de mobilisation et de démobilisation spécifiques des différents électorats. La participation évolue d’une élection à l’autre. Elle atteint régulièrement ses maxima lors des élections présidentielles et ses minimas lors des élections européennes. Mais ces variations ne sont pas identiques chez tous les électeurs. Ainsi, entre 2012 et 2014, la gauche recule de plus de 20 points en pourcentage des inscrits. Dans le même temps, la droite recule de 15 points. L’extrême droite, elle, résiste beaucoup mieux au recul de la participation, ne perdant que 3.5 points de pourcentage. Avec 10.13 % des inscrits, le Front National et ses alliés obtiennent un score plus important lors des européennes de 2014 que lors du premier tour de l’élection présidentielle de 2007, et se rapproche de ses maximas (13.28 % des inscrits en 2002, 13.9% des inscrits en 2012). Que l’on raisonne à type d’élection constante (en comparant entre eux les trois derniers scrutins européens) ou en prenant en compte les variations entre l’élection présidentielle et l’élection européenne qui lui succède, la progression du Front National est manifeste. Comme l’indiquait l’élection présidentielle de 2012 l’extrême droite a retrouvé l’ensemble de son potentiel électoral. Cette évolution apparait d’autant plus nette que l’on assiste à un double mouvement d’affaiblissement de la gauche et de la droite. Les partis de droite subissent un repli constant depuis l’arrivée au pouvoir de Nicolas Sarkozy en 2007. Ils ne parviennent pas à tirer bénéfice de l’opposition à François Hollande et semblent toujours subir les conséquences de la défiance dont a fait l’objet l’ancien président de la République jusqu’à sa défaite au second tour de l’élection présidentielle de 2012. Dans le même temps, la gauche est la force politique qui subit la plus forte perte de soutien de mobilisation électorale au cours des deux dernières années. Ce repli l’amène à ses scores les plus faibles. Alors que la gauche avait pu améliorer son score (en pourcentage des exprimés) suite à ses deux défaites présidentielles de 2002 et 2007 lors des européennes de 2004 et 2009, elle fait l’objet d’un rejet manifeste à l’occasion du scrutin de 2014.
Les évolutions à venir soulèvent plusieurs questions qui restent ouvertes à ce jour. La gauche est-elle en mesure de remobiliser, ne serait-ce que partiellement, les électeurs qui ont permis à François Hollande d’être élu président de la République ? La droite peut-elle tirer les bénéfices de son positionnement dans l’opposition face à un pouvoir exécutif contesté ? Le Front National est-il parvenu à mobiliser la totalité de son électorat et dispose-t-il d’une marge de progression supplémentaire qui l’amènera au-delà de ses meilleures performances passées dans les années à venir ? Dans un contexte de crise économique profonde, faisant progresser le chômage et la précarité depuis maintenant plus de 6 années, la défiance politique atteint des niveaux sans précédents. Ces éléments, couplés à redéfinition de la stratégie du Front National pourrait modifier la structure du système partisan français. Cependant, les résultats des élections européennes révèlent que cela n’est pas encore le cas.
Comment le FN tente de gagner sur tous les tableaux - 12/06/2014
L'avocat du Front National, qui était aussi son candidat lors des dernières municipales à Paris, a affirmé aujourd'hui que le journal hebdomadaire de Jean Marie Le Pen ne serait plus diffusé sur le site du parti pour des raisons juridiques. On notera en revanche que M. Wallerand de St Just avait pour collistier Pierre Panet, militant d'extrême droite proche de Dieudonné après avoir été candidat sur les listes antisionistes de 2009 et intervenant au théatre de la Main d'Or. M. de St Just ajoute par ailleurs, quoiqu'implicitement, qu'il soutient le contenu des propos de Jean Marie Le Pen. Il déclare notamment au site atlantico " Ce qu'il y a de difficile et de douloureux dans cette affaire, c'est que la présidence du parti a été obligée de prendre cette décision, alors que la phrase incriminée est tout à fait anodine. Mais nous sommes obligés de prendre en considération le poids des censeurs de la liberté d'expression qui évoluent dans notre société. Cela ne veut pas dire pour autant que l'on se plie devant eux, mais nous respectons simplement le besoin de prudence". L'avocat du FN poursuit Je suis sidéré de voir qu'on ait pu faire de cette phrase un tel scandale avant de souligner la proximité politique fondamentale entre Marine et Jean Marie Le Pen : "Il ne s'agit pas d'un décrochage idéologique mais plutôt sur la façon d'exprimer ses idées et ses réactions sur tel ou tel fait d'actualité". A la fin de l'interview, on peut également lire que la liberté d'expression n'existe absolument pas en France aujourd'hui, slogan devenu un leitmotiv du Front National, qui tranche singulièrement avec la volonté affirmée par la direction du FN de porter devant les tribunaux toutes personnes qualifiant le FN de parti d'extrême droite (ce qui, pour l'occasion, ne relève pas de l'opinion mais d'une analyse scientifique rigoureuse et documentée). Ainsi le FN bénéficie :
- - D'une visibilité médiatique importante
- - D'un récit soutenant la stratégie de communication de Marine Le Pen
- - D'une occasion de solidifier les différentes composantes de son électorat en s'adressant aussi aux partisans de la ligne la plus dure
Les réactions à l'affaire Jean Marie Le Pen - 11/06/2014
Nombreux sont ceux qui appellent Marine Le Pen à condamner son père et président d'honneur du front national. Si la présidente du parti cherche à se distancier des déclarations de son père, celle qui est adhérente depuis 1986 n'avait pas réagit de cette façon lors des propos sur "le détail de l'histoire" ni concernant la sordide formule "Durafour Crématoire". Ce n'est donc pas d'une dédiabolisation éventuelle qu'il s'agit (d'autant plus que le mot est piégé, le FN n'ayant jamais été diabolisé). C'est de l'hypothèse d'une évolution personnelle de Marine Le Pen. Les précédents existent, on pense notamment à la trajectoire d'un Gianfranco Fini, ancien dirigeant du MSI italien ayant depuis rompus dans les paroles et dans les actes avec l'extrême droite. Cette trajectoire est possible, elle est respectable et il faut la souhaiter. Mais ca ne semble pas être celle de Mme Le Pen. La présidente du FN s'est d'ailleurs toujours défendu de suivre l'exemple de Fini.
En 2011, dans le quotidien italien "Corriere della Serra", elle affirmait « Je suis l’héritière de mon père, mais moi, je ne fais plus peur » avant d'avancer « Avec mon père, nous sommes d’accord sur les grands sujets : la défense de la nation et de la liberté, le rôle de la France dans le monde. Mais nos personnalités sont différentes : c’est un homme qui a 40 ans de plus que moi, il a connu la guerre, pas moi. Plus que son héritière, je me sens l’héritière d’une lutte pour la défense de la France. Je fais vivre l’idée de l’identité nationale que d’autres essaient juste d’exploiter, Sarkozy en tête. Le fait que mon père ait été vu comme l’ennemi public numéro un m’a forgé le caractère. J’ai envers le FN la même attitude qu’envers mon pays : je prends tout, même ce que je ne partage pas. C’est pourquoi je ne romprai jamais avec le passé. Fini aurait mieux fait d’exprimer sa désapprobation à l’égard du fascisme sans en arriver à le condamner – c’est trop facile. A en juger par la peur qui s’insinue chez nos adversaires, l’hypothèse que j’arrive au second tour se fait plus crédible. J’espère l’emporter au congrès du FN à Tours. J’incarne la sensibilité sociale, Gollnisch la tradition du parti, avec ses mouvements anachroniques et provocateurs. Je veux rompre avec les égarés de l’extrême droite. Je propose aux Français le rétablissement de la loi républicaine dans les rues illégalement occupées par les prières islamiques, la défense de la laïcité et la préférence nationale, la sortie de l’Europe et de l’euro, l’arrêt de l’immigration et un protectionnisme raisonnable. Le dernier livre que j’ai lu est la biographie de Churchill, un grand homme. »
Marine Le Pen considère donc que c'est un mauvais timing et que l'extrême droite avance mieux masquée. En ce sens, elle est dans la droite ligne de la stratégie développée depuis le congrès de 2011, prendre le pouvoir d'abord. En ce sens, les appels à la condamnation de Jean Marie Le Pen servent les intérets de Marine Le Pen. Ils lui permettent de se démarquer, sans avoir à rompre. Si elle s'engage ne serait-ce qu'a minima contre le président d'honneur du FN, celui ci aura tout le loisir d'alimenter un roman people. Ainsi le FN joue sur plusieurs tableaux : stratégie de congrès pour Jean Marie Le Pen, stratégie électorale pour Marine Le Pen, stratégie de présence médiatique pour l'ensemble du parti.
Quelques remarques supplémentaires sur la situation au Front National - 09/06/2014
- - Marion Maréchal Le Pen n'a pas pris position
- - Marine Le Pen ne considère par les propos sur la "présence urticante des Roms" ni sur "Monseigneur Ebola" comme étant des fautes politiques
- - Jean Marie Le Pen compte bien continuer à peser sur la ligne du FN et l'évolution de la structure du parti
- - Il a notamment récemment regretté la défaite de Bruno Gollnish au congrès de 2011
- - La situation doit être analysée en prenant en compte la totalité de l'extrême droite et pas seulement la direction du FN
- - Dans les structures militantes et parmi les cadres, nombreux sont les personnes qui pourraient venir en soutien à Jean Marie Le Pen
- - La dichotomie entre structure militante et base électorale du FN pourrait se renforcer
- - Il faudra voir si ces propos sont effectivement de nature à faire baisser le score du FN, du point de vue de la sociologie électorale, rien n'est moins sur
Divisions au coeur de l'extrême droite - 09/06/2014
Pour la première fois, Marine le Pen et son entourage semblent engager une confrontation directe avec Jean Marie le Pen. En répondant aux accusations de sa fille, le président d'honneur et membre fondateur du Front National montre qu'une partie du Front National tient à conserver tous les marqueurs de sa ligne idéologique. Cette recherche d'affichage a aussi une histoire, celle du congrès de Marignane pendant lequel Jean Marie Le Pen a été dangereusement marginalisé en interne du Front National par les membres de la mouvance Nationaliste Révolutionnaire alliée à Bruno Mégret.
On assiste à une bataille idéologique au sein de l'extrême droite entre un groupe proche de Marine Le Pen qui cherche à obtenir des résultats électoraux rapides et un groupe autour de Jean Marie Le Pen qui cherche surtout à déstabiliser idéologiquement la société française. C'est ce que l'on a appelé pendant de longues années "la lepénisation des esprits". Cette bataille est aussi une bataille d'héritage. Elle ouvre une période de confrontation dans l'extrême droite française. Cette confrontation existait déja, suite au congrès de 2011, à la mise à l'écart d'Alain Soral en 2009, des dirigeants des groupes Oeuvre Française et Jeunesses Nationalistes Révolutionnaires (aujourd'hui dissous) ensuite. Pourtant, cette bataille pourrait paradoxalement renforcer une extrême droite qui affiche de plus en plus de pluralisme.
De la même façon que la mouvance identitaire à fait croitre son champ d'influence en prenant des positions régionalistes, les coupures internes permettent aux dirigeants du FN de se partager le marché idéologique tout en s'attachant les services de tout le nuancier de l'extrême droite. Jean Marie Le Pen a toujours souhaité que le Front National soit le parti boussole, le parti commun de toute l'extrême droite. Marine Le Pen poursuit cette stratégie, par d'autres moyens.
La stratégie de Marine Le Pen à l'épreuve - 09/06/2014
Marine Le Pen fait tout son possible pour que le Front National accède au pouvoir. Cette stratégie se décline à toutes les échelles : locales, européennes, mais aussi nationales. Pour satisfaire cet objectif, elle est prête à mettre en sourdine les éléments qui affilient indiscutablement le Front National à l'extrême droite et ce depuis la création du parti en 1972. Marine Le Pen veut conquérir le pouvoir d'abord pour appliquer les thèses du Front National ensuite. Une des principales barrières qui limitent aujourd'hui le périmètre d'influence du FN est la question de l'antisémitisme.
Lorsque Jean Marie Le Pen suggère qu'Ebola mette un terme à l'immigration, la direction du parti ne juge pas utile de réagir. Car les propos les plus violents et déshumanisants à l'égard des immigrés, et singulièrement des immigrés d'Afrique et d'Europe de l'est (rappelons nous des propos du même Jean Marie Le Pen dénonçant "la présence urticante" des Roms) ne privent pas le FN de la conquète de l'électorat populaire de droite. En revanche, la question de l'antisémitisme agit encore comme un marqueur idéologique puissant de l'idéologie du parti, associée au discours négationniste et aux attitudes de collaboration durant la seconde guerre mondiale.
Le Front National, par la voix de sa présidente, ne considère les fautes politiques que lorsqu'elles gènent sa stratégie. Ce n'est pas parce que les propos de Jean Marie Le Pen sont manifestement racistes qu'ils gènent Marine Le Pen. C'est parce que l'antisémitisme gène la stratégie d'accès au pouvoir du principal partie d'extrême droite. Le choix des mots, comme le choix des réactions, montre la direction actulle du FN voit les fautes qui risquent de l'handicapper en rappelant à chacun la nature de ses idées. En revanche, les contradictions de l'attitude de Marine Le Pen montre bien qu'au delà de la hiérarchie entre les groupes humains, c'est la hiérarchie des formes de racisme qui s'établit. Déja révoltante, cette hiérarchie n'est pas celle d'une théorisation raciale, mais de l'opportunisme politique d'une extrême droite qui cherche à s'ancrer le plus profondément possible dans la société française en minimisant les évolutions de son discours au strict nécessaire.Maximiser les gains politiques et électoraux, au prix d'un camouflage superficiel, une approche aussi dangereuse qu'efficace que nous révèle une fois de plus la séquence politique des dernières semaines.
Regards sur la droite - 06/05/2014
« Les quartiers populaires portent un réel intérêt à la vie politique, même si celui-ci ne se transcrit pas toujours dans des pratiques institutionnelles telles que le vote. »
LienLes quartiers se sont peu mobilisés, à l’occasion du scrutin municipal. Faut-il en conclure que les électeurs qui y vivent ne s’intéressent plus à la politique ?
Non. Dans ces quartiers, même ceux qui ne participent pas au vote s’intéressent à la vie politique. Ils ont d’ailleurs été très sensibles au discours des élus et des responsables politiques sur la situation des banlieues. Ce qui était vrai, lors du précédent quinquennat, le reste aujourd’hui. Les personnes qui vi- vent en banlieue ont un regard critique sur ce qui se fait. Ceci est notamment perceptible chez les migrants et leurs descendants. On remarque aussi que ces personnes s’intéressent aux enjeux politiques de leur pays d’origine, concernant l’entrée de la Turquie dans l’Europe, l’intervention française au Mali ou encore les révolutions arabes. Les quartiers populaires portent donc un réel intérêt à la vie politique, même si celui-ci ne se transcrit pas toujours dans des pratiques institutionnelles telles que le vote. Cela peut apparaitre comme un paradoxe.
L’une des surprises de ces élections a été le basculement à droite d’un nombre significatif de communes populaires. Comment interprétez- vous ce phénomène ?
Ce basculement est dû, pour l’essentiel, à une baisse de la participation électorale dans les quartiers qui avaient majoritairement soutenu la gauche, en 2012. Avec, en contrepartie, une forte mobilisation de l’électorat de droite. En cela, les municipales de 2014 sont différentes de celles de 2008. À l’époque, les électeurs de gauche étaient restés mobilisés, dans une logique défensive face à Nicolas Sarkozy après la défaite de 2007. A l’inverse de l’électorat de droite était démobilisé. Cette fois-ci, c’est l’inverse. Deux ans après la victoire de François Hollande à la présidentielle, l’électorat de gauche marqué par un sentiment de défiance vis-à-vis du pouvoir et des partis de gouvernement, a décidé de se tenir éloigné des urnes. Dans le même temps, la droite s’est mobilisée autour de ses thématiques traditionnelles, du registre économique aux questions religieuses. De ce point de vue, le Mariage pour tous a pu avoir un effet au sein de l’électorat de la droite, mais celui-ci reste marginal et ne se traduit pas par un basculement des électeurs de la gauche vers la droite.
Y a-t-il lieu d’évoquer un décrochage des catégories populaires vis-à-vis du politique ?
Je ne le crois pas. J’évoquerai plutôt un sentiment de défiance, ancré dans les milieux populaires, à l’égard des partis situés à gauche de l’échiquier politique auquel ils s’identifient le plus souvent. Cette défiance s’est renforcée depuis deux ans. L’absence d’une alternative crédible à la politique menée par la droite pèse aujourd’hui dans les esprits. De ce point de vue, le vote à gauche ne contribue pas à faire évoluer la situation sociale dans le pays. Ceci étant dit il ne faut pas surestimer la participation politique dans les milieux populaires au cours des vingt ou trente dernières années. Ainsi les descendants de l’immigration âgés de moins de 40 ans portent un intérêt à la politique souvent supérieur à celui de leurs homologues générationnels. Il est donc difficile d’évoquer un décrochage car cette idée enjolive la situation des années 80 et 90.
D’aucuns évoquent l’éloignement des catégories moyennes et populaires des villes centres pour justifier leur décrochage et l’adhésion aux thèses frontistes. Partagez-vous cette analyse ?
Il est très difficile de séparer l’effet de la distance géographique de la composition sociologique des communes. Est-ce que c’est l’éloignement de Paris en lui-même, où la nature sociologique des zones périurbaines qui influence le vote ? Les populations qui vivent en milieu périurbain ne vo- tent pas majoritairement pour le Front national, même si l’adhésion y est plus élevée qu’ailleurs. La montée en puissance de ce parti est transversale. Là où vivent des groupes sociaux moins protégés du FN par des loyautés anciennes, l’adhésion est plus forte. Mais, il nous faut rester vigilant. Dire que les ouvriers votent majoritairement FN et que les catégories moyennes n’adhè- rent que très modérément aux idées qu’il véhicule est très réducteur. La réalité est plus complexe.
Les populations issues de l’immigration ont visiblement évolué dans leurs choix électoraux. Cela ne signifie-t-il pas, au fond, que l’électorat musulman est politiquement moins homogène que dans le passé ?
Il ne l’a jamais été. Cela relève plus des représentations que d’une réalité sociologique observée. Il a été assez peu représenté pendant longtemps, puisque les primo-arrivants n’étaient pas dotés de la nationalité française et qu’ils n’avaient donc pas accès au droit de vote. D’autres n’étaient tout simplement pas inscrits sur les listes électorales. Depuis, nombreux sont ceux qui ont accès aux urnes. Mais il faut rester prudent. Les électeurs qui se revendiquent musulmans sont majoritairement ancrés à gauche. Le sont-ils en raison de leur appartenance religieuse, parce qu’ils sont migrants ou que leur pays d’origine appartenait à l’empire colonial français ? Comment distinguer l’effet de la religion de celui de l’origine migratoire ? Comment, à l’intérieur de l’électorat musulman, les mécanismes de fragmentation peuvent-ils intervenir ? Selon qu’elles sont d’origine pakistanaise, malienne ou marocaine, ces personnes n’auront pas nécessairement les mêmes grilles de lecture ni les mêmes attentes à l’égard de la société française. Comment, enfin, les différences de classe sociale modifient-elles le rapport à la religion, à la politique et à l’articulation des deux ? Certaines personnes conti- nuent de subir une relégation alimentée par les discriminations, quand d’autres parviennent à connaitre une ascension sociale. Une diversification sociologique des descendants de l’immigration qui se traduit par des comportements politiques différents, liés au positionnement social des uns et des autres.
Est-il possible d’établir une rationalisation du vote au sein des catégories que vous décrivez ?
Les descendants de l’immigration sont, majoritairement plus ancrés à gauche que leurs homologues générationnels, parce qu’ils ont la mémoire de la trajectoire migratoire de leurs ainés. Et ce, quelles que soient leur appartenance sociale. Même ceux qui ont une des attitudes conservatrice se déclarent rarement proche de la droite. Pourtant en Allemagne, les chrétiens-démocrates n’ont pas hésité à intégrer une dimension religieuse islamique dans leur discours et leur programme pour attirer ces électeurs De même aux Etats-Unis, les Républicains ont beaucoup parlé d’avortement et de religion pour tenter de capter l’électorat hispanique, proche du parti démocrate. En France, Nicolas Sarkozy n’a pas agi autrement, en tentant de se rapprocher de l’UOIF. Il n’y a donc pas de règle absolue en matière de vote des populations immigrées, en dépit d’un penchant régulier pour la gauche Il n’y a rien de systématique dans leurs choix électoraux, les déçus se réfugiant, le plus souvent, dans l’abstention.
Ces trajectoires dispersantes des descendants de l’immigration montrent clairement que les populations issues des quartiers populaires ont changé, du fait d’une immigration qui est de moins en moins postcoloniale et de plus en plus mondialisée. D’autre part, à mesure que ces personnes changent de quartiers, occupent d’autres emplois, accèdent à des catégories sociales différentes, leurs opinions politiques tendent à se banaliser, à suivre celles du reste de la population.
Dès lors qu’on évoque l’islam et la politique, il est difficile d’échapper au discours sur la radicalisation…
Oui, mais on a tendance à oublier l’autre partie du spectre, qui s’éloigne d’une conception traditionnelle et conservatrice, en dépit d’un héritage culturel, religieux et familial. La vraie question qui se pose est celle-ci : dans quelle mesure la France est-elle une société intégrée qui fait fi de toute opposition entre populations immigrée et française ? Dès lors que des individus s’emploient à « découper » le monde social entre des gens qui leur ressemblent et des personnes différentes, des frontières se font jour qui peuvent servir de support à des logiques de repli comme d’hostilité. Surtout, quand elles sont liées à des facteurs eth- niques, migratoires et religieux. Dans ce cas, les frontières deviennent moins poreuses et les logiques de confrontation plus violentes.
La géographie du vote FN a-t-elle évolué, depuis 1995 ?
Il y a bien un changement qui s’est opéré. Parfois même de façon spectaculaire, comme en Seine-Saint-Denis. En 1995, les villes les plus riches ne votaient pas pour le FN. En 2012, c’est l’inverse qui s’est produit. Tant et si bien que ce sont souvent les communes les plus pauvres qui votent aujourd’hui le moins en faveur du Front National. La corrélation s’est inversée au fil du temps. L’un des facteurs explicatifs, c’est la part des descendants de l’immigration dans l’électorat. Les milieux populaires, en lien avec l’immigration, n’adhèrent pas au FN, contrairement aux catégories les plus modestes qui n’en sont pas issues. Ceci vaut surtout pour ceux qui votaient à droite auparavant. Ce ne sont donc pas les électeurs de gauche qui ont basculé en faveur du parti frontiste, mais les électeurs de droite. Il y a même une division entre les classes supérieures restées fidèles à l’UMP et les catégories populaires qui optent pour le FN, dans une proportion de plus en plus importante. Cette concurrence s’opère à droite, et non à gauche.
Dans le Nord-Pas-de-Calais comme en Seine-et-Marne, en revanche, rien n’a changé. En 1995 comme en 2012, les villes les plus riches sont celles qui votent le moins pour le FN. N’assiste-t-on pas à une restructuration de la droite, sur fond d’émiettement et de divisions entre plusieurs sensibilités ?
L’émiettement de la droite est une réalité. La stratégie Buisson s’est révélée peu payante. On a surtout vu l’essoufflement de la stratégie de Jean-Marie Le Pen au sein du Front national. Après 2011, ce parti qu’on pensait proche de la disparition a retrouvé son électorat qui n’a jamais changé d’attitudes politiques depuis 2002. Il y a donc une réelle concurrence entre l’UMP et le FN pour savoir qui, des deux blocs, sera en tête, en 2017. Cette confrontation sera violente et il n’est pas certain du tout que l’UMP en sortira vainqueur. Il y a un affrontement important, au sein même de ce parti, pour déterminer la stratégie à adopter par rapport au FN et dans le parti principal de l’extrême droite pour se positionner face à la droite parlementaire. Une par- tie du FN accepte les transfuges et les alliances quand d’autres militants entendent maintenir une séparation plus stricte. Pour sa part, et c’est peut être là le plus important, Marine Le Pen était prête à mettre en sourdine certains éléments idéologiques pour gagner les élections. Non parce qu’elle n’y croit plus, mais parce qu’elle est convaincue qu’il est contreproductif de s’appuyer sur l’ancienne stratégie du FN pour accéder au pouvoir. La mise en œuvre du programme politique viendra après. Ceci explique le discours en apparence mesuré de nombreux candidats frontistes à l’occasion de la campagne municipale.
Cet émiettement produira une reconfiguration de la droite, parce qu’il ne saurait y avoir cinq ou six blocs électoraux en compétition dans un système majoritaire comme celui de la 5e République. La question est de savoir qui arrivera en tête des différents scrutins, pour organiser cette restructuration de la droite, autour d’un ou de plusieurs partis.
Justement, comment cette situation peut-elle évoluer dans les années qui viennent ?
L’UMP a pour ambition de rester le bloc princi- pal, en confinant le FN dans un rôle de radicalité marginale le tenant éloigné du pouvoir. On voit pourtant que tel n’est pas le cas. Les logiques d’émiettement du front républicain, observées depuis les cantonales de 2011, ouvrent de réelles perspectives au FN en fragilisant l’UMP. Le risque est de voir Marine Le Pen attirer à elle des composantes croissantes de l’électorat de droite. Son objectif est de consolider ses sou- tiens électoraux, de contrôler des bastions pour pouvoir compter ensuite sur un noyau dur. Ce qui aide le FN, c’est qu’il n’assume pas le pouvoir et qu’il n’apparait pas comme respon- sable de la situation économique et sociale Ajoutons que le FN propose un discours très co- hérent idéologiquement, finement articulé qui séduit certaines composantes de l’électorat de droite en quête de certitudes.
Le discours du FN a lui-même évolué, empruntant certaines de ses thématiques à la gauche, de la préservation des services publics à la défense de la laïcité. Cette posture est-elle synonyme d’évolution idéologique ? Ne relève-t-elle pas plutôt d’une tentative de manipulation ?
Je ne crois pas du tout dans un changement de posture, mais à une évolution de la communication propre au FN. Idéologiquement, ce discours n’emprunte rien de spécifique à la gauche, mais à l’histoire de l’extrême droite française. Il était déjà très présent dans les années 1920-1930, par exemple chez Victor Barthélémy, transfuge du Parti communiste et membre-fondateur du FN, en 1972, qui avait porté des éléments d’analyse des conflits sociaux au sein de l’extrême droite. Il y a eu aussi l’émergence de la mouvance Nationaliste Révolutionnaire autour de François Duprat, dans les années 1970-1980. Ce qui signifie, en clair, que le FN n’est pas en rupture avec son histoire, mais qu’il revient à ses fondations, avec un discours (implicitement) racialiste et nationaliste.
L’avenir n’est donc pas à une compétition électorale avec la gauche, mais avec une droite plutôt libérale qui mobilise les classes supérieures et diplômées à laquelle fera face une droite nationaliste, ancrée dans les milieux populaires et aux prises avec l’immigration. La colonne vertébrale du FN reste la préférence nationale qui se décline, implicitement ou explicitement, en termes ethno- raciaux. Ceci est perceptible, en particulier, dans le discours sur les Roms. Le FN évolue donc dans sa stratégie, mais pas dans son idéologie. Les militants de gauche ignorent tout ou partie de cette histoire et il manque, à mon sens, un travail sur l’évolution idéologique qui s’est opérée à l’extrême droite, avec la régénérescence de cette mouvance Nationaliste Révolutionnaire parfaitement visible au sein du FN et dans les groupes satellites, tel Égalité et réconciliation d’Alain Soral.
Le FN n’est-il pas tenté à l’idée de gérer au mieux les villes qu’il a conquises, afin de se donner une image de probité et de bonne conduite ?
Il a choisi quelques têtes d’affiches dont il pense qu’elles seront capables de gérer les communes qu’ils administrent, sans pour autant nuire à l’image et à la stratégie politique du parti. Le FN compte à sa tête un petit groupe très soudés de dirigeants soucieux de créer une vitrine servant à organiser la conquête du pouvoir à l’échelle nationale.
Quels sont les grands enjeux qui se présentent à nous ?
L’essentiel est de comprendre comment la société française va être transformée par l’histoire migratoire. Il ne s’agit pas tant d’identifier les migrants d’aujourd’hui que de connaître la trajectoire des descendants de l’immigration, d’une immigration qui a déjà eu lieu. Cette évolution changera les rapports à la politique dans l’ensemble de la société française, en modifiant la structure des familles, le rapport au racisme et aux discriminations, avec une évolution très profonde qui se matérialisera de manière lente et inégale dans les quartiers.
Ce mouvement est perceptible en Seine-Saint-Denis. Il s’agit là d’un signe annonciateur de ce qui pourrait se produire dans le reste du pays. On pourrait assister à une montée en puissance de l’extrême droite et de l’hostilité envers les migrants. Les tendances de fond indiquent cepen- dant qu’on se dirige vers une société qui se métisse et qui s’hybride, de manière assez profonde et rapide.
Propos recueillis par B.T.
23 04 2014 - RFI
Le mariage pour tous a-t-il pesé sur les élections municipales ?
http://www.rfi.fr/emission/20140423-le-mariage-tous-il-pese-dernieres-elections-municipales/17 04 2014 - Le Monde
« La banlieue apparaît plus à droite qu'on avait pu l'imaginer »
http://www.lemonde.fr/societe/article/2014/04/17/la-banlieue-apparait-plus-a-droite-qu-on-avait-pu-l-imaginer_4402851_3224.htmlQuelques jours après les élections municipales, quelles sont les grandes tendances du vote en banlieue ?
La première évidence, c'est une très forte montée de l'abstention par rapport à l'élection présidentielle de 2012. On voit ainsi se développer un comportement récurent, celui du vote intermittent : les personnes votent une fois de temps en temps, le plus souvent à l'élection présidentielle, mais s'abstiennent lors des autres scrutins. On avait déjà noté ce déclin très fort de la participation lors des municipales et des régionales entre 2007 et 2012. Avant de constater à nouveau une remontée très forte lors de la présidentielle. La configuration politique est un peu différente aujourd'hui. En 2008, on avait assisté à un vote de sanction contre la droite qui avait entraîné des victoires de la gauche dans de nombreuses villes de banlieue. Cette fois-ci, le mouvement d'abstention marque une vraie déception, une défiance à l'égard de la gauche au pouvoir. Le contraste est saisissant par rapport à 2008, où le nombre de villes à gauche était pratiquement sans précédent. La banlieue apparaît plus à droite qu'on avait pu l'imaginer. Pourtant, la gauche réitère et dépasse parfois ses scores de 2008 dans plusieurs communes (Sevran, Bagnolet, Saint Denis). A contrario elle chute dans des villes acquises à la droite (Le Raincy, Coubron, Gournay sur Marne ou encore Epinay sur Seine).
On a beaucoup parlé d'un basculement à droite dans les quartiers populaires.
Cette impression s'explique par ce repli de la participation. Comme on a beaucoup moins d'électeurs, le résultat peut être différent sans que le positionnement politique des électeurs n'ait changé. On a ainsi vu des villes basculer à droite à cause d'un différentiel de participation : des personnes qui étaient venues voter pour la présidentielle, ne sont plus venues cette fois-ci, et les électeurs qui ont voté à droite en 2012, sont restés mobilisés. D'autre part, on a trop tendance à assimiler le vote des cités au vote des descendants de l’immigration, et ce faisant, on confond des catégories de personnes très différentes. Même s'il y a une mémoire de cette immigration qui vote traditionnellement à gauche, il peut y avoir, pour ceux qui ont une ascension sociale, une évolution du vote vers le centre ou la droite. Mais cela reste minoritaire.
Ce défaut de mobilisation vis-vis du PS a-t-il entraîné un report sur la gauche du PS ?
A la marge car il y a eu peu de listes à la gauche du PS. Mais quand il y avait cette alternative à gauche, en concurrence avec PS, ces candidats ont souvent fait de très bons scores. Il est frappant de voir, que la défiance à l'égard du PS est manifeste, transversale, dans les banlieues comme ailleurs. On la constate dans les quartiers aisés à Grenoble où on vote écologiste, comme dans les villes rouges où on continue à voter communiste. Ainsi, dans des villes telles Saint-Denis où on attendait un basculement du PCF vers le PS, le PCF résiste. Le mouvement est le même à Montreuil. Mais ce ne sont pas les habitants des cités qui vont élire un communiste contre un socialiste. Il faut y voir plutôt la permanence d'une fidélité électorale plus ancienne.
Un autre phénomène a été souligné ces derniers jours, celui du vote FN dans les cités.
Cette idée de la percée et de l'ancrage du Front national dans les cités se discute. On a eu un passage un peu en trompe l’œil entre 2007 et 2010, période durant laquelle on a eu l'impression que le FN allait disparaître à cause des recompositions internes du parti et de l'OPA de Nicolas Sarkozy sur son électorat. En réalité, le FN est revenu à des résultats comparables à ceux de 1995. En revanche, la géographie du vote FN a changé : il y avait en 1995 un certain nombre de villes de banlieues où le FN était très fortement implanté- je pense notamment à la Seine-Saint-Denis - où il est aujourd'hui très faible. Cette décrue manifeste est, je crois, un indicateur avancé de ce qui se passe dans l'ensemble des banlieues. En seine saint denis, le FN a même reflué même dans les zones pavillonnaires. Phénomène qui ne se vérifie cependant pas en Seine-et-Marne.
Comment expliquer alors ses scores dans la 7e circonscription de Marseille, celle des quartiers Nord ?
Les quartiers où est élu Stéphane Ravier sont ceux où on votait déjà beaucoup Front national. En 1995, le FN y atteint 25%. En nombre de voix, la performance de Stéphane Ravier ne marque pas une évolution particulièrement nette mais la gauche s'y effondre beaucoup plus. Ce qu'on peut observer, c'est que la défiance à l'égard du PS a été d'autant plus forte qu'il y avait une opposition interne dans des primaires très âpres. Le fait que Samia Ghali, l'élue des quartiers Nord, ait été battue, a accentué l'effet de démobilisation des électeurs de gauche. Il faut ajouter à cela le fait que Marseille est une ville où la montée du chômage est forte et où, dans un contexte d'austérité, les électeurs ne voient pas de perspective d'amélioration de la situation.
Autre territoire symbole, la Seine-Saint-Denis. La droite semble s'y être installée.
En 2001, la droite était déjà implantée dans le 93. Son apparition lors du dernier scrutin n’est pas une nouveauté. Ce qui est marquant en revanche, c’est que la droite revient autour de candidatures locales, souvent centrées autour de l’UDI, et souvent avec des discours apparaissant plus ouverts de ceux de la droite au niveau national, notamment sur les questions d’immigration et d’emploi. S'il y avait eu un PCF fort, il aurait pu reconquérir des mairies. Mais comme il est affaibli, là où le PS avait pris le pouvoir ces dernières années, c'est la droite qui l'emporte. Ainsi le Parti Socialiste subit un revers lors de ces élections, en banlieue comme dans le reste du pays, mais sur le long terme sa progression dans le département ne semble pas menacée. En Seine Saint Denis, on vote toujours très nettement à gauche lors des élections présidentielles, celles qui mobilisent le plus.
Il semblerait qu'il y ait eu, à droite, une tendance à mettre en avant la question du mariage pour tous pour tenter de gagner l'électorat de culture musulmane. Est-ce aussi votre constat ?
La droite a tenté d'utiliser les facteurs religieux en mettant en avant des enjeux familiaux et sexuels. Mais au regard de l'abstention, on s'aperçoit qu'elle n'est pas parvenue à mobiliser sur l’opposition au mariage pour tous. La question posée en filigrane est celle de l’électorat musulman. Or il n'existe pas d'électorat musulman unifié : ce dernier est divisé en fonction des situations sociales, locales, de rapport à l’origine migratoire... En revanche, ce qui est certain, c’est que dans l’électorat populaire, les questions de liberté sexuelle sont rarement celles qui attirent vers la gauche. Elles ont même pu participer de la démobilisation. Ce qui revient souvent dans les enquêtes sur les banlieues, c’est la question de l’honneur et de la dignité. Et cela passe autant par les questions économiques et sociales, la question de la représentation ou des discours politiques portés sur ces populations ou ces quartiers. Au final, comprendre le régime du vote en banlieue est complexe. Est-on est plutôt dans une tendance qui voit les électeurs déconnecter le vote présidentiel des autres scrutins ou celle d'un rattrapage lent qui fait que les gens qui ont voté une première fois en 2012 vont voter de plus en plus souvent ? C’est une question clé car on sait que les habitants qui passent par la banlieue, même lorsqu’ils déménagent ensuite ailleurs, vont représenter une part de l’électorat de plus en plus importante.
Propos recueillis par Elise Vincent et Sylvia Zappi
Le Monde - 17/02/2014
Aux municipales, le difficile combat de la diversité
http://www.lemonde.fr/municipales/article/2014/02/17/aux-municipales-le-difficile-combat-de-la-diversite_4367846_1828682.htmlIPSOS - 27/01/2014
Défiance, Racisme, Rejet du système : regards croisés sur les Français face au monde extérieur
http://www.ipsos.fr/ipsos-public-affairs/actualites/2014-01-27-defiance-racisme-rejet-systeme-regards-croises-sur-francais-face-au-monde-exterieurMi-janvier, Ipsos a rendu public les résultats de la vague 2 de l’enquête Nouvelles Fractures, réalisée en partenariat avec Steria pour Le Monde, France Inter, le Cevipof et la Fondation Jean-Jaurès. Cette enquête confirme la très forte défiance des Français à l’égard du monde extérieur et d’autrui. Elle montre même une progression par rapport à l’année dernière de la défiance à l’égard du fonctionnement de la vie politique en France.
Vincent Dusseaux : Le profond repli de l’opinion publique française mis en évidence par l’enquête Fractures Françaises se manifeste de plusieurs manières : un mécontentement à l’égard du système démocratique tel qu’il fonctionne actuellement, une défiance à l’égard des élites politiques et des médias, le sentiment qu’il y a « trop d’étrangers en France », « qu’on ne se sent plus chez soi comme avant » et une forte crispation autour de l’Islam. Avec cette enquête, nous avions mesuré un niveau de défiance totalement inédit.
Aujourd’hui, le clivage « ouvert/fermé », dont la meilleure illustration est sans doute l’attitude à l’égard de l’immigration, est le premier point clivant de la société française. Il l’est davantage que d’autres thèmes plus traditionnels comme la politique économique par exemple.
Pour schématiser, nous avons d’un côté ceux qui voient dans l’immigration une opportunité pour la France et une source d’enrichissement culturel. De l’autre, ceux qui la considèrent comme une menace pour la société française. De façon concomitante, on observe dans nos enquêtes une forte demande d’autorité face à ce que beaucoup perçoivent comme un déclin de la société française, un déclin qui est tout à la fois économique, culturel et identitaire.
Antoine Jardin : La défiance des français est profonde. Elle se décline dans de multiples dimensions. Elle est particulièrement forte à l'égard de la mondialisation perçue comme une menace, notamment dans ses effets économiques et vis-à-vis des migrants qui l'incarnent partiellement. Le rapport à l'immigration est marqué par la convergence de deux dynamiques. L’une relevant de l'hostilité aux individus sur la base de leur nationalité étrangère, de leur trajectoire migratoire, de leur couleur de peau ou de la langue qu'ils parlent.
Il existe d’autre part un effet dérivé, associé aux difficultés économiques, qui contribue au renforcement d'un nationalisme économique, particulièrement en matière de protection sociale. La confluence de la xénophobie, de l'ethnocentrisme et du « welfare chauvinism » donne une tonalité particulière à l'évolution des attitudes qui s'expriment toujours par un rejet.
Matthieu Tardis : Association de défense des réfugiés, France Terre d’Asile observe une détérioration de l’image du réfugié en France d’autant plus inquiétante que notre pays possède une longue tradition d’accueil des populations persécutées. Sans idéaliser le passé, dans la mesure où la méfiance, voire l’hostilité, à l’égard des étrangers est un phénomène récurrent de l’histoire, on peut s’étonner de constater l’absence de lien qui est effectué entre la situation sécuritaire dans le monde, telle que nous la voyons tous les jours à la télévision, et les personnes qui cherchent refuge dans notre pays.
La question des réfugiés Syriens, plus grande catastrophe humanitaire depuis le Rwanda selon le Haut-Commissaire des Nations unies pour les réfugiés (UNHCR), illustre bien ce phénomène. En effet, la volonté de la France d’accueillir 500 réfugiés syriens est-elle à la mesure de l’enjeu des 2 millions de personnes qui ont fui la Syrie depuis le début du conflit ? Il convient par ailleurs de s’interroger sur l’existence de fractures au sein de la société française sur les questions migratoires, entre, d’un côté, une partie de la population qui vit dans les grandes villes mondialisée et qui profite de manière croissante de la mobilité internationale et, d’un autre côté, ceux qui sont laissés à l’écart de ces mouvements. Ces fractures semblent plus profondes que les frontières qui nous séparent du reste du monde.
Observe-t-on une progression du racisme
au sein de l’opinion française ?
V. D. : Il est difficile de répondre à cette question tant la notion de racisme est polysémique. Lorsqu’on pose très directement la question à un échantillon de Français, un peu moins de trois personnes sur dix nous disent être « plutôt » ou « un peu racistes ». C’est beaucoup certes, mais c’est moins qu’il y a une dizaine d’années. En 2000, ce niveau atteignait plus de 40% dans le baromètre annuel de la CNCDH.
La question qui se pose aujourd’hui est d’évaluer l’impact sur l’opinion publique de notre pays des insultes proférées récemment à l’encontre de la Ministre de la Justice. Les risques sont multiples : banalisation des propos racistes, renforcement des clivages, etc. A cet égard, la prochaine vague de l’enquête Nouvelles Fractures devrait apporter des éléments de réponse.
M. T. : Il est difficile de l’affirmer à partir du poste d’observation occupé par France terre d’asile. Les scores du Front national aux élections municipales et européennes seront un indicateur de cette montée du racisme et de l’intolérance de l’opinion française.
A. J. : L'évolution du racisme en France est difficile a mesurer. En effet, on dispose de peu d'indicateurs mesurant spécifiquement cette attitude. Les meilleures données proviennent probablement de la CNCDH qui produit une enquête annuelle sur l'évolution du racisme et de la xénophobie. Celle-ci indique deux phénomènes qui peuvent paraître à première vue contradictoires.
On assiste d'une part à une baisse tendancielle sur le long terme des attitudes ethnocentristes. Ce mouvement est la double conséquence du renouvellement des générations et de la hausse du niveau d'éducation. Dans un deuxième temps, on note, depuis le début de la crise économique et la fin du mandat de Nicolas Sarkozy, une hausse conjoncturelle des attitudes d'hostilités à l'égard de certains groupes. Cela est évalué par le fait d'affirmer que certaines personnes forment "un groupe a part dans la société".
De plus, la polarisation politique autour des questions de genre et de permissivité sexuelle a influencé les attitudes ethno-autoritaires dont elles sont également une composante, au même titre que le racisme ou la xénophobie. Enfin, dans ce contexte global, plusieurs mouvements sociaux structurés autour des groupes les plus militants ont renforcé la visibilité de ces attitudes en renforçant la fréquence de leur expression dans la société française.
N’y a-t-il pas un paradoxe entre la volonté d’intégration des
migrants et la méfiance des Français à leur égard ?
V. D. : Les Français s’interrogent surtout sur la capacité de la société française à accueillir ces populations. Ils sont sans doute davantage favorables à une politique d’assimilation, c'est-à-dire par la pleine adhésion des immigrés aux normes de la société d’accueil. De ce point de vue, la question de l’Islam est particulièrement révélatrice. Même si il est en baisse dans la deuxième vague de l’enquête Fractures Françaises, le sentiment que l’Islam n’est pas compatible avec les valeurs de la société française est toujours majoritaire (à 63%, -11).
A. J. : De nombreux migrants arrivent en France en quête d'une vie meilleure pour eux même et pour leurs enfants. Ils témoignent d'une forte volonté de participer à la vie sociale ordinaire. Pouvoir se sentir « installé » est l'une des demandes les plus importantes. Cette volonté se traduit notamment par le désir de participation politique, la confiance en l'apport des institutions telles que l'école, et la croyance en la portée de la promesse républicaine. En outre, dans la population française, le poids démographique des descendants est plus important que celui des migrants eux-mêmes. C'est un cas particulier en Europe, qui influence les perceptions et traduit l'histoire coloniale et migratoire du pays. On observe, depuis longtemps, une défiance importante à l'égard de l'immigration. Si malgré tout cet enjeu est loin d'être une priorité des Français, il s'agit de l'une des thématiques les plus polarisantes politiquement. Il faut donc être prudent et distinguer les attitudes en fonction des proximités politiques. La volonté d'intégration des migrants peut aussi être perçue comme une menace par ceux qui dans la société française ne souhaitent pas que l'on évolue vers davantage d'égalité en matière de protection sociale, d'accès à l'emploi ou de droits civiques. C'est d'ailleurs le projet fondamental du Front National que d'établir la préférence nationale, c'est à dire l'inégalité des droits sur la base de la nationalité des individus.
M. T. : La grande majorité des migrants en France poursuivent les mêmes objectifs que n’importe qui : améliorer leur condition de vie et vivre en bonne entente avec leur environnement. S’il y a un paradoxe, il réside avant tout entre cette volonté d’intégration et l’inflation législative dans le domaine de l’immigration depuis 10 ans qui a multiplié les obstacles et les contraintes administratives à toutes les étapes du parcours des primo-arrivants en France. Ils adressent un signal fort de dissuasion. Ils créent surtout un sentiment d’arbitraire parfaitement illustré dans l’enquête sur les citoyens immigrés publiée en 2012. À cet égard, le très sérieux rapport du député Matthias Fekl relatifs au traitement des demandes de titre de séjour souligne les besoins de transparence, d’uniformité et de modernisation du traitement des étrangers en préfectures. Les propositions de ce rapport permettraient d’améliorer de manière concrète la vie des étrangers et de renforcer leur sentiment d’appartenance à la France.
Quant à la méfiance des Français, il est toujours intéressant d’observer sa relativité lorsqu’ils sont confrontés à l’étranger dans leur vie quotidienne. La frénésie autour de l’affaire Léonarda en octobre 2013 est un exemple des malentendus, des approximations et des fantasmes véhiculés par les questions migratoires en France. Dans ce contexte, la question de la responsabilité du personnel politique et des médias dans l’instrumentalisation des questions migratoires en France, et donc dans la croissance du sentiment de méfiance envers les migrants, est à soulever de toute urgence.
Retrouve-t-on ces tendances à l’échelle de l’Europe?
V. D. : L’immigration n’est pas une préoccupation majeure dans les pays européens. C’est surtout les thèmes économiques (chômage, pouvoir d’achat…) qui inquiètent aujourd’hui sur le Vieux Continent. Toutefois, certains pays se démarquent. A commencer par la Grande-Bretagne. Comme le montrent les résultats d’un sondage que nous avons mené en octobre dans plus de 20 pays. Près d’un britannique sur trois se déclare préoccupé par l’immigration, contre 17% en moyenne dans les pays européens interrogés dans l’enquête. En France, 30% des personnes interrogées indiquent que l’immigration fait partie de leurs craintes pour l’avenir. C’est un niveau élevé mais qui doit être relativisé dans la mesure où cette crainte a été très fortement réactivée par l’affaire Léonarda qui précédait le terrain de cette enquête. Sur le long terme, la préoccupation pour l’immigration en France se place plutôt dans la moyenne européenne.
A. J. : En Europe, les configurations varient selon l'histoire nationale spécifique des pays, notamment en matière de passé colonial. On observe ainsi des formes d'hostilité spécifiques, selon les contextes nationaux. Les antagonismes, discriminations et représentations péjoratives ciblent particulièrement les descendants de cette histoire. Ainsi, selon les pays, ce sont des groupes différents qui font l'objet de tensions spécifiques. Ce n'est qu'à un certain niveau de généralité que l'on trouve les trames globales à l'œuvre derrière les spécificités nationales. Ainsi, malgré les particularités des configurations spécifiques à chaque pays, l'Europe partage les mêmes défis issus de son histoire, de la désindustrialisation, de la fragilisation de ses régimes de protection sociale, et d'une mise à l'épreuve de ses valeurs d'égalités et de démocratie sous l'effet d'une poussée transnationale des partis d'extrême droite.
M. T. : Les contextes migratoires européens sont extrêmement variés. Les liens historiques et coloniaux, l’ancienneté et l’origine des flux migratoires sont autant de facteurs qui distinguent les pays européens les uns des autres. Les situations économiques et démographies sont également à prendre en considération. Enfin, chaque Etat est traversé par des questions identitaires différentes avec notamment des tentations autonomistes chez plusieurs de nos voisins. Il en résulte que la perception de l’étranger et de l’immigration diverge. Toutefois, les partenaires associatifs européens de France Terre d’Asile sont unanimes : il est aujourd’hui de plus en plus difficile de défendre les droits des étrangers en Europe.
Le Journal des Banlieues - 27/07/2013
« On cherche à faire éclater la notion de diversité »
http://www.presseetcite.info/journal-officiel-des-banlieues/societe/cherche-faire-eclater-la-notion-de-diversiteLa première chose qui frappe, c’est le décalage entre le vote, plutôt à gauche dans ces quartiers, et certaines valeurs, que l’on juge traditionnellement de droite. Comment l’expliquer ?
On s’attendait à ce décalage. Il y a un attachement envers la gauche et en faveur d’une redistribution économique, sociale. Mais sur les questions culturelles, notamment sexuelles, il y a un comportement parfois plus conservateur : une certaine hostilité sur l’homosexualité, une vision plus traditionnelle des rôles hommes - femmes. Mais ce clivage n’est pas nouveau : on l’observait déjà il y a longtemps dans l’électorat ouvrier de la banlieue rouge traditionnel. Inversement, dans la droite modérée, on remarque qu’il y a une certaine ouverture. Ce n’est donc pas une anomalie. Mais, par exemple, tous les musulmans ne sont pas conservateurs. On peut distinguer environ 20% de conservateurs, 50% de libéraux modérés, et le reste fluctuant en fonction des thématiques. La question est : qu’est-ce qui est décisif dans le choix électoral ? Si le sujet prioritaire reste l’économie, ce sont les questions culturelles, liées à l’immigration, au racisme qui dominent comme marqueurs pour influencer un vote plutôt vers la droite ou la gauche.La religion ou à la sexualité, l’autorité sont aussi des marqueurs.
En ce qui concerne le comportement l’électorat ouvrier, ce dernier a-t-il vraiment changé ?
Il y a toujours eu un vote conservateur dans le monde ouvrier. Il existe encore dans ces quartiers, mais avec moins de poids. Ce qui le divise, c’est le rapport aux discriminations, réelles ou ressenties. Avoir le sentiment d’être discriminé oriente le vote à gauche. Avec parfois un tropisme par rapport à l’expérience migratoire. La mémoire de l’immigration pèse sur le vote des générations suivantes. Mais cet effet diminue progressivement avec le temps.
Ce qui est nouveau, dans cette étude, c’est que vous y faites une approche par quartiers : on ne s’intéresse pas aux individus comme s’ils n’avaient aucun enracinement dans leur environnement.
Oui. Etre jeune marginalisé et diplômé ne donne pas la même vision de la société selon que vous êtes à Clichy-sous-bois ou à Ivry. Avant, être ouvrier dans une ville catholique de droite ou dans une cité ouvrière du Nord n’était déjà pas la même chose : les discussions avec la famille, les voisins, les collègues, les amis, importent dans votre perception de la société, et votre vote en découle. L’environnement joue un rôle énorme. La région d’origine de l’immigration pèse-t-elle dans les comportements, politiques notamment ? Ces comportements sont-ils les mêmes chez tous les immigrés, selon leur lieu d’origine et d’habitation ? Les personnes dites « de la diversité » n’habitant pas, en majorité, dans des quartiers dégradés, c’est seulement vrai pour les migrants ou leurs descendants (ndlr : de la « première génération »). On cherche à faire éclater la notion de diversité, qui amalgame des notions différentes liées à l’immigration, la couleur de peau, la religion, notamment. Cela plaide pour des statistiques non traditionnelles, publiques, expérimentales. On a maintenant besoin d’études qui croisent une approche par groupes et par territoires.
Et donc des statistiques « ethniques » aussi ?
Je ne parlerai pas de « statistiques ethniques ». Il est très difficile de mesurer l’ethnicité. Aux Etats-Unis, ces études disent que l’ethnicité n’existe pas, les catégorisations sont très floues. Dans ces études, les « Irlandais » sont une ethnie... En Grande-Bretagne, on regroupe des variables aussi différentes que la couleur de peau (« black »…), la région d’origine (« caribbean »…), la nation d’origine (Pakistan…). On mélange donc des choses qu’en théorie on essaie pourtant de différencier pour mieux les étudier ! Des statistiques sur les Noirs en France n’ont pas de sens. On étudie la couleur ? On assigne les gens à une catégorie ? Regardons ce qui se passe aux Etats-Unis : on peut choisir, quand on répond à ces statistiques, de cocher les cases « Blanc » ou « Noir », ou plusieurs cases à la fois. Mais on remarque que les gens ne cochent pas Blanc + Noir. Or il y a quand même beaucoup de métisses. Mais ils se considèrent comme Noirs. On ne mesure donc que la représentation. La perception, le sentiment. Pas la réalité d’une diversité.
Il semble que le regard de la société française sur elle-même change, s’ethnicise…
En France, on a longtemps pensé que seules les inégalités de classes sociales existaient. Les migrants et leurs descendants ont été perçus comme n’entrant pas dans ces catégories sociales. On passe à une grille de lecture plus « ethnique ». On dit : « il est immigré » ou « étranger », et moins « ouvrier ». On peut être les deux ! Aux Etats-Unis, depuis trente ans, il y a un gros débat sur le poids des facteurs culturels par opposition aux facteurs structurels dans les comportements électoraux. Mais les deux se mélangent.
La population que vous étudiez est-elle finalement si différente du reste de la population française ?
Il y a des différences. Plus de jeunes, plus d’étrangers… Il y a aussi une expérience particulière de vie du fait de l’enclavement du quartier. Mais la population n’y a pas de comportement politique différent : elle a un désir d’appartenir à la société française. 65% des sondés disent qu’il faut traiter tous les Français de la même façon, et non de manière préférentielle. Il y a des demandes d’égalité, même si on sait qu’il n’y a pas forcément de possibilité d’y accéder immédiatement. Mais par exemple, en matière d’école, on voudrait quand même pouvoir accéder à d’autres établissements… C’est-à-dire, pouvoir être différencié !
Propos recueillis par Erwan Ruty
Le Bondy Blog - 18/04/2014
« La participation pourrait être plus forte en banlieue »
http://www.bondyblog.fr/201204181411/%C2%AB-la-participation-pourrait-etre-plus-forte-en-banlieue-%C2%BB/#.U1U1YFdtWHQD’après votre enquête, 80% des jeunes des quartiers marginalisés auraient l’intention de voter à l’élection présidentielle. Le niveau potentiel de participation dans les banlieues serait donc très élevé… Est-ce crédible ?
Antoine Jardin : Chez les personnes bien inscrites sur les listes électorales, le souhait d’aller participer aux élections atteint même 96%. Ces chiffres ne sont pas improbables. En 2007, il y a eu 82% de participation à Clichy-sous-Bois ou à Bondy. La participation pourrait être plus forte en banlieue que dans les autres secteurs de l’électorat. L’élection présidentielle est une élection particulière. Lors des élections intermédiaires, la démobilisation est plus forte en banlieue que dans le reste du territoire. Pour cette présidentielle, les chiffres montrent que la tendance pourrait s’inverser. Cela ne traduit pas forcément une espérance. Beaucoup de gens votent sans avoir confiance dans leurs responsables politique. Seuls 42% des répondants estiment que la démocratie fonctionnent « très bien » ou « assez bien ». Mais leur défiance politique ne les conduit pas forcément à s’abstenir.
Leyla Arslan : Oui, malgré le manque de confiance dans les dirigeants, les habitants des quartiers populaires souhaitent souvent faire la preuve de leur engagement civique. Il s’agit ainsi de montrer qu’on est quelqu’un d’impliqué, faisant usage de ses droits. Pour ce qui est des jeunes issus de l’immigration, il y a aussi la volonté de voter pour leurs parents.
Le fort taux de participation en 2007 était-il lié au rejet de Nicolas Sarkozy ?
Antoine Jardin : Il y a certainement un phénomène d’opposition à Nicolas Sarkozy. Pour autant, cela ne suffit pas à tout expliquer. Il y a eu une mobilisation plus forte dans les milieux populaires pour Ségolène Royal en 2007 que pour Lionel Jospin en 2002. Mais, il y avait peut-être aussi un effet 21 avril. Par ailleurs, il y a une vraie politisation des habitants des quartiers populaires et pas seulement une politisation en creux, uniquement par opposition à Nicolas Sarkozy.
Si le taux de participation promet d’être élevé, le problème des non-inscrits subsiste…
Antoine Jardin : Effectivement, 25% des enquêtés ne sont pas inscrits sur les listes électorales, soit 4 fois plus que le niveau moyen national observé. C’est un problème qui est connu depuis longtemps et c’est une barrière assez énorme dans la participation. Il y a eu un certain rattrapage avec les élections de 2007. Ce mouvement s’est poursuivi dans certaines banlieues entre 2007 et 2010. Mais, ça ne suffit pas pour l’instant. Il y a un effet particulier du quartier qui éloigne de la participation. Cela est aussi en partie lié à la sociologie des quartiers : pauvreté, faible niveau d’éducation…
Les banlieues votent-elles systématiquement à gauche ?
Antoine Jardin : Lorsqu’on regarde les résultats des élections, on peut avoir le sentiment que les habitants des banlieues votent mécaniquement plus à gauche que le reste de la population. Mais il faut contrôler l’ensemble des caractéristiques sociologiques et politiques de la population. Et là, on peut voir qu’il n’y a pas forcément un vote spécifique des banlieues. Par ailleurs, les banlieues sont toujours encastrées dans un environnement géographique particulier. La banlieue de Strasbourg et de Rennes n’est pas la même que celle de Seine-Saint-Denis. Il faut toujours tenir compte du contexte. D’une manière plus subtile, on peut noter un mélange entre une hostilité personnelle à Nicolas Sarkozy et une défiance à l’égard des partis politiques institutionnels, notamment le PS et le PC. Cela se traduit parfois, notamment comme lors des régionales de 2010, par une proximité plus forte avec des partis moins institutionnels comme le MoDem ou Europe-Ecologie.
D’après votre rapport, les habitants des quartiers ont une grande foi en l’école, mais font le constat d’une forte persistance des inégalités face au système éducatif. Comment expliquez-vous ce paradoxe ?
Leyla Arslan : 80% des habitants sondés ont une grande confiance dans l’école. Elle apparaît toujours aujourd’hui comme la seule institution qui peut permettre l’ascension sociale. Du moins, dans le discours théorique. Beaucoup de parents, y compris ceux qui n’ont pas beaucoup de bagage scolaire, estiment que faire des études longues reste la seule manière d’échapper au chômage. Ce point de vue est souvent partagé par les jeunes eux-mêmes. A Clichy-sous-Bois, même les jeunes qui ont eu des parcours compliqués, qui ont été orientés dans le professionnel et ont vécu ça comme une relégation, ont souvent une posture assez légitimiste vis à vis de l’école. Dans le même temps, ils ont aussi un discours très dur, parlant même parfois de racisme institutionnel. Pour autant, l’école reste, pour eux, le seul moyen de s’en sortir.
Antoine Jardin : On valorise aussi l’école telle qu’on la perçoit existant ailleurs. Celle qui permet d’accéder aux grandes écoles notamment. Celle qui ne catalyse pas les problèmes scolaires existant dans les banlieues. On valorise l’école dans l’absolu, mais pas telle qu’elle existe localement et que l’on a expérimentée. «On ne veut pas de quotas, on n’est pas des animaux !»
Autre paradoxe, la majorité des habitants des quartiers indiquent avoir déjà été discriminés mais sont hostiles à une politique de « discrimination positive ». Quelle lecture en faites-vous ?
Antoine Jardin : Seuls 36% des enquêtés soutiennent une politique de « discrimination positive ». Les personnes ayant eu le sentiment d’être discriminées souhaite davantage d’égalité de traitement que des mesures de « réparation » ou de correction des effets des discrimination. Ils sont hostiles au modèle américain fondé sur l’ethnicité, et plébiscitent, au contraire, un rétablissement du modèle républicain.
Leyla Arslan : Les propos des habitants sur l’école, sur l’emploi ou sur le transport, témoignent d’un sentiment d’exclusion. Il y a l’idée que les habitants des quartiers ne sont pas au cœur du regard politique, mais à côté. Les déséquilibres en terme de service public et de politique publique sont perçus comme une forme de discrimination. Pour autant, le discours des habitants des quartiers populaires reste extrêmement républicain. Les notions de « discrimination positive » et de « diversité » sont très majoritairement rejetées. A Clichy-sous-Bois, les jeunes me disaient : « On ne veut pas de quotas, on n’est pas des animaux! » Ils refusent d’être assimilés par les autorités publiques à une catégorie essentialiste du type « ethnique » ou « religieuse ». Dans l’échantillon d’étudiants que j’ai interrogé, certains ont fait Sciences-Po et sont passés par une « convention d’éducation prioritaire », qui est une forme de discrimination positive. Paradoxalement, même eux sont hostiles aux quotas. Ils y consentent, mais uniquement sur critères sociaux.
Il y a aussi une demande d’autorité ?
Antoine Jardin : 65 % des répondants pensent que les personnes condamnées à faire de la prison ne devraient jamais sortir avant la fin de leur peine. A contrario, seulement 25% d’entre-eux sont favorables au rétablissement de la peine de mort. Ce n’est pas une demande de politique autoritariste de contrôle social, mais une demande d’ordre dans l’espace public : une demande de service public, y compris à travers la présence de la police. La question de la police comme celle de l’école est en tension, entre une valorisation de principe et des relations pratiques plus compliquées et plus aléatoires.
Leyla Arslan : Dans le cas de Clichy-sous-Bois, l’arrivée du commissariat a été perçue de manière très positive. Pour les habitants, Clichy-sous-Bois était enfin considérée comme une vraie ville.
Propos recueillis par Alexandre Devecchio
Stata - Utiliser la commande Outreg - 01/03/2014
* Installer outreg ssc install outreg * Spécification : * Régression linéaire : coef, R2, N, étoiles (***) * Régression logistique : Odds ratios, R2, N, étoiles (***) // Régression linéaire regres blablabla outreg using nom_du_fichier , stats(b ) summstat(r2 \ N) starlevels(5 1 .1) starloc(1) // fusion des modèles dans une table regres blablabla (modèle 2 ) outreg using nom_du_fichier , stats(b ) summstat(r2 \ N) starlevels(5 1 .1) starloc(1) merge * Exporte en Word / excel dans un fichier créé dans le répertoire de travail. // Régression logistique logistic blablabla outreg using nom_fichier , stats(e_b ) summstat(r2_p \ N) starlevels(5 1 .1) starloc(1)
Stata - Syntaxte pour les graphiques de corrélation incluant une pondération - 01/02/2014
* Graphique classique sc c2 p12_sarkozy * Affichage des points par des cercles proportionnels à la population sc c2 p12_sarkozy [w=pop], ms(oh) msize(tiny) * Affichage du nom de toutes les villes (variable des labels = "ville") sc c2 p12_sarkozy [w=pop], ms(oh) msize(tiny) || sc c2 p12_sarkozy [w=pop], msize(zero) mlabel (ville) mlabsize(tiny) * Affichage du nom des villes selon une condition (on affiche tous les points mais les noms seulement des villes de + de 30 000 habs) sc c2 p12_sarkozy [w=pop], ms(oh) msize(tiny) || sc c2 p12_sarkozy [w=pop] if pop >30000 , msize(zero) mlabel (ville) mlabsize(tiny) * Une autre sc c2 p12_sarkozy [w=pop], ms(oh) msize(tiny) || sc c2 p12_sarkozy [w=pop] if pop > 100000, msize(zero) mlabel (ville) mlabsize(tiny) * Combinaison de conditions sc c2 p12_sarkozy [w=pop], ms(oh) msize(tiny) || sc c2 p12_sarkozy [w=pop] if pop >30000 & p12_fn>15 , msize(zero) mlabel (ville) mlabsize(tiny) * Look sc c2 p12_sarkozy [w=pop], ms(oh) msize(tiny) mc(blue) || sc c2 p12_sarkozy [w=pop] if pop >30000 & p12_fn>15 , msize(zero) mlabel (ville) mlabsize(tiny) mlabc (red) * Avec droite de régression sc c2 p12_sarkozy [w=pop], ms(oh) msize(tiny) mc(blue) || sc c2 p12_sarkozy [w=pop] if pop >30000 & p12_fn>15 , msize(zero) mlabel (ville) mlabsize(tiny) mlabc (red) || lfitci c2 p12_sarkozy [w=pop], fc(none)
Stata - Regression ESS fichier cumulé - 15/01/2014
use C:\Users\Antoine\Desktop\ESS\ESS_1-5.dta tab cntry keep if inlist(cntry,"FR","GB","SP") tab cntry clear all use C:\Users\Antoine\Desktop\ESS\ESS_1-5.dta keep if inlist(cntry,"FR","GB","ES") tab cntry save "C:\Users\Antoine\Desktop\ESS\ESS_1-5_uk_fr_sp.dta" tab cntry encode cntry, gen (pays) tab pays numlabel _all, add lookfor educ tab eisced essround tab eisced lookfor eduyrs tab eduyrs recode eduyrs (77 88 99 =.) , gen (eduy) tab eduy xtile educ = eduy, nq(4) tab educ save "C:\Users\Antoine\Desktop\ESS\ESS_1-5_uk_fr_sp.dta", replace lookfor age tab agea recode agea (999=.), gen (age) tab age recode age (14/17 = .) (18/24 = 1 "18-24" ) (25/39 =2 "25-39" ) (39/54=3 "39-54") (55/130=5 "55 et plus"), gen (agecod) tab agecod save "C:\Users\Antoine\Desktop\ESS\ESS_1-5_uk_fr_sp.dta", replace lookfor inscrit lookfor regis lookfor vote tab vote recode vote (1=1 "yes") (2=2 "no") (3=3 "not eligible") (7 8 9=.), gen (vote3) recode vote (1=1 "yes") (2=0 "no") (3 7 8 9=.), gen (vote2) tab vote2 save "C:\Users\Antoine\Desktop\ESS\ESS_1-5_uk_fr_sp.dta", replace lookfor citiz tab ctzcntr recode ctzcntr (1=1) (2=0) (7 8 =.), gen(citiz) tab citiz lookfor cntry lookfor born tab1 brncntr facntr mocntr recode brncntr facntr mocntr (1=1) (2=0) ( 7 8 9 =.), gen (bornego bornf bornm) tab1 bornego bornf bornm gen orig = . replace orig = 1 if bornego==0 replace orig = 2 if bornf==0 | bornm ==0 replace orig = 3 if bornf==0 & bornm ==0 replace orig = 4 if bornf==1 & bornm ==1 tab orig drop orig gen orig =. replace orig = 4 if bornf==1 & bornm ==1 replace orig = 3 if bornf==0 | bornm ==0 replace orig = 2 if bornf==0 & bornm ==0 replace orig = 1 if bornego==0 tab orig recode orig (1=1 "immigré") (2=2 "2 parents immigrés") (3=3 "1 parent immigré") (4=4 "sans origine"), gen (origine) tab origine lookfor relig tab1 rlgblg rlgdnm rlgdgr recode rlgdnm (1 2 3 4 5 = 1 "religion majo") (6 7 8 = 2 "autres relig") (66 = 3 "ss relig") (77 99=.), gen (regli) ren regli relig tab relig tab relig rlgdgr recode rlgdgr (77 88 =.), gen (intrelig) tab intrelig lookfor job tab ipjbini recode ipjbini ( 1 2 = 1 "not important") (3 = 2 "neither") (4 = 3 "important") (5=4 "very important") (6/9=.) , gen (stablejob) tab essround stablejob tab essround stablejob, row nof tab gndr recode gndr ( 1=1 "male") (2=2 "female") (9=.), gen (sex) save "C:\Users\Antoine\Desktop\ESS\ESS_1-5_uk_fr_sp.dta", replace tab marital tab maritalb lookfor income tab hinctnt lookfor class lookfor job lookfor work lookfor isco tab iscoco tab pays iscoco if iscoco==. tab iscoco if pays==1 tab iscoco if pays==2 tab iscoco if pays==3 tab essround tab iscoco recode iscoco (100 = 11 "army") (1000/1999=1 "Level 1")(2000/2999 =2 "Level 2") (3000/3999 = 3 "Level 3") (4000/4999 = 4 "Level 4") (5000/5999 = 5 "Level 5") (6000/6999 = 6 "Level 6") (7000/7999 = 7 "Level 7") (8000/8999 =8 "Level 8") (9000/9999=9 "Level 9") (66666 = 10 "Not in a paid job") (77777/99999=.), gen(class) tab class tab iscoco save "C:\Users\Antoine\Desktop\ESS\ESS_1-5_uk_fr_sp.dta", replace tab class numlabel class, add tab class recode class ( 1 2 = 1 "Professionals") ( 3 = 2 "Associate professionals") (4 5 6 7 8 11 = 3 "Qualified working class") (9 = 4 "Not qualified working class") (10=5 "Not in paid job"), gen (pcs) tab pcs order pays educ agecod vote2 citiz origine relig intrelig sex pcs order pays educ agecod vote2 citiz origine relig intrelig sex pcs, after( class) logistic vote2 i.sex i.agecod i.educ i.pcs i.origine i.relig i.pays i.essround tab essround gen wave= essround logistic vote2 i.sex i.agecod i.educ i.pcs i.origine i.relig i.pays i.essround i.wave logistic vote2 i.sex i.agecod i.educ i.pcs i.origine i.relig i.pays i.wave lookfor weight gen w = dweight * pweight list w gen wok = w * 10000 list wok help recast recast int wok gen wok2 = wok recast int wok2 , force list wok2 list wok wok2 logistic vote2 i.sex i.agecod i.educ i.pcs i.origine i.relig i.pays i.wave logistic vote2 i.sex i.agecod i.educ i.pcs i.origine i.relig i.pays i.wave if citiz==1 logistic vote2 i.sex i.agecod i.educ i.pcs i.origine i.relig i.wave if citiz==1 & pays==1 logistic vote2 i.sex i.agecod i.educ i.pcs i.origine i.relig i.wave if citiz==1 & pays==2 logistic vote2 i.sex i.agecod i.educ i.pcs i.origine i.relig i.wave if citiz==1 & pays==3 tab pays tab wave pays keep if wave >=3 logistic vote2 i.sex i.agecod i.educ i.pcs i.origine i.relig i.wave if citiz==1 & pays==1 logistic vote2 i.sex i.agecod i.educ i.pcs i.origine i.relig i.wave if citiz==1 & pays==2 logistic vote2 i.sex i.agecod i.educ i.pcs i.origine i.relig i.wave if citiz==1 & pays==3 save "C:\Users\Antoine\Desktop\ESS\ESS_1-5_uk_fr_sp_w3.dta" logistic vote2 i.sex i.agecod i.educ i.pcs i.origine i.relig i.wave if citiz==1 & pays==1 logistic vote2 i.sex i.agecod i.educ i.pcs i.origine i.relig i.wave if citiz==1 & pays==2 logistic vote2 i.sex i.agecod i.educ i.pcs i.origine i.relig i.wave if citiz==1 & pays==3 tab pays logistic vote2 i.sex i.agecod i.educ i.pcs i.origine i.relig i.wave if citiz==1 & pays==1 cd "C:\Users\Antoine\Desktop\esscumulative1_5" logistic vote2 i.sex i.agecod i.educ i.pcs i.origine i.relig i.wave if citiz==1 & pays==1 outreg using reg, stats(e_b ) summstat(r2_p \ N) starlevels(5 1 .1) starloc(1) logistic vote2 i.sex i.agecod i.educ i.pcs i.origine i.relig i.wave if citiz==1 & pays==2 outreg using reg, stats(e_b ) summstat(r2_p \ N) starlevels(5 1 .1) starloc(1) merge logistic vote2 i.sex i.agecod i.educ i.pcs i.origine i.relig i.wave if citiz==1 & pays==3 outreg using reg, stats(e_b ) summstat(r2_p \ N) starlevels(5 1 .1) starloc(1) merge tab agecod tab educ sum educ, d sum eduy, d logistic vote2 i.sex i.agecod i.educ i.pcs i.origine i.relig i.wave if citiz==1 & pays==1 logistic vote2 i.sex i.agecod i.educ i.pcs i.origine i.relig i.wave if citiz==1 & pays==2 logistic vote2 i.sex i.agecod i.educ i.pcs i.origine i.relig i.wave if citiz==1 & pays==3 logistic vote2 i.sex i.agecod i.educ i.pcs i.origine i.relig i.wave if citiz==1 & pays==1 margins , atmeans margins pcs , atmeans marginsplot logistic vote2 i.sex i.agecod i.educ i.pcs i.origine i.relig i.wave if citiz==1 & pays==1 margins educ , atmeans marginsplot margins pcs educ , atmeans marginsplot marginsplot, recast (line) margins pcs educ marginsplot, recast (line) logistic vote2 i.sex i.agecod i.educ i.pcs i.origine i.relig i.wave if citiz==1 & pays==1 margins educ , at (pcs = (1 2 3 4 5)) marginsplot, recast (line) margins relig , at (pcs = (1 2 3 4 5)) marginsplot, recast (line) margins origine , at (pcs = (1 2 3 4 5)) marginsplot, recast (line) help marginsplot marginsplot, recast (line) recastci(rarea) logistic vote2 i.sex i.age i.educ i.pcs i.origine i.relig i.wave if citiz==1 & pays==1 logistic vote2 i.sex age i.educ i.pcs i.origine i.relig i.wave if citiz==1 & pays==1 logistic vote2 i.sex age i.educ i.pcs i.origine i.relig i.wave if citiz==1 & pays==1 margins relig , at (age= (20 (5) 80)) marginsplot, recast (line) recastci(rarea) margins relig , at (age= (20 (5) 80)) logistic vote2 i.sex i.age i.educ i.pcs i.origine i.relig i.wave if citiz==1 & pays==1 logistic vote2 i.sex i.agecod i.educ i.pcs i.origine i.relig i.wave if citiz==1 & pays==1 predict vote_es logistic vote2 i.sex i.agecod i.educ i.pcs i.origine i.relig i.wave if citiz==1 & pays==2 predict vote_fr logistic vote2 i.sex i.agecod i.educ i.pcs i.origine i.relig i.wave if citiz==1 & pays==3 predict vote_uk sc vote_es age twoway lpolyci vote_es age twoway lpolyci vote_es age || lpolyci vote_fr age ||lpolyci vote_uk age
Stata - Utiliser la commande Margins - 15/02/2014
** Note : il faut utiliser Stata 12 minimum pour avoir marginsplot, twoway contour et _marg_save ** Probabilités théoriques ** * Régression avec des interations (logisitique, linéaire, peu importe) regress evo_to0912 c.c2##c.d2##c.i2 [w=pop] if reg==11 * Margins calcule les "predictive margins" pour chaque variable explicative * On peut aussi calculer les effets marginaux [avec margins, dydx (var1) at ( var2 = ( ...) var3 = (...)) margins, at (d2 = (-2 (1) 2) i2 = (-2 (1) 2) c2 =( -2 (1) 2 )) * Sauvegarder les valeurs de la commande margins dans un fichier "forContour.dta") _marg_save, saving(forContour.dta, replace) * Utiliser ce fichier use forContour.dta, clear * Liste les valeurs des effets spécifiques de chacun des prédicteurs selon la valeurs des 3 variables indépendantes ( _at1 _at2 _at3) list _margin _at1 _at2 _at3 * Graphique des effets pour chaque valeur des variables prédictives _at1 et _at3 (en 10 niveaux de nuance ici) twoway contour _margin _at1 _at3, level(10) * Cette commande permet de voir l'hétérogénéité des effets des variables indépendantes sur la variable dépendante, tout en tenant compte de l'ensemble des intéractions à deux variables et à 3 variables. ** Effets Marginaux ** margins, dydx (c2) at ( d2 = (-2 (1) 2) i2 = (-2 (1) 2)) * Sauvegarder les valeurs de la commande margins dans un fichier "forContour.dta") _marg_save, saving(forContour.dta, replace) * Utiliser ce fichier use forContour.dta, clear twoway contour _margin _at2 _at3, level(100) * (ici _at1 est la valeur dont on regarde les effets marginaux. * _margin ne correspond plus aux valeurs théoriques de la variable dépendante mais aux effets marginaux de la variable étudiée (introduite après "dydx ()") * Documentation http://www.ssc.wisc.edu/sscc/pubs/stata_margins.htm http://www.timberlake.co.uk/common/pdf/stata-uk-12-ugm/uk12_rising.pdf http://www.stata.com/meeting/germany13/abstracts/materials/de13_jann.pdf https://www.amstat.org/sections/srms/Proceedings/papers/1997_111.pdf https://www3.nd.edu/~rwilliam/stats/Margins01.pdf *help margins *help marginsplot *help contour