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