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

Une vignette R sur l'analyse triadique partielle, l'analyse factorielle multiple et l'analyse des co-inerties multiples

[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 Geoda



Sauvegarde 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.

La prochaine fois : un exemple avec TMPFS sous Linux

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

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 :

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

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. »

Lien

Les 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.html

Quelques 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.html

IPSOS - 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-exterieur

Mi-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-diversite

La 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/#.U1U1YFdtWHQ

D’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