Created
September 15, 2011 19:34
-
-
Save becarioenmoncloa/1220246 to your computer and use it in GitHub Desktop.
Simulacion Elecciones 2011
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
******************************************************************* | |
** DO-FILE: simulacion de resultados de las elecciones de 2011 | |
** Autor: becarioenmoncloa.com | |
******************************************************************* | |
clear all | |
set more off | |
set mem 300m | |
insheet using "http://www.becarioenmoncloa.com/datos_simulacion.csv", comma clear | |
save datos.dta, replace | |
** Paquete necesario para calcular distribucion de escanos | |
ssc install electool | |
******************************************************************* | |
** SIMULACION 1 | |
** Supuesto: todos los votos que pierde el PSOE los gana el PP | |
******************************************************************* | |
qui foreach i of numlist 1(1)235{ | |
** abro el archivo de datos | |
use datos.dta, clear | |
** fijo la diferencia entre PSOE y PP | |
local diferencia = .035 - .001 * `i' | |
** calculo pesos para ponderacion | |
gen dif_psoe_2011 = psoe2011 - (psoe2007 + psoe2003) /2 | |
sum dif_psoe_2011 if partido == 14 | |
gen peso = dif_psoe_2011 / `r(sum)' | |
drop psoe2011 - dif_psoe_2011 | |
sum validos if partido == 14 | |
local total_validos = r(sum) | |
gen distr_voto = validos / `total_validos' | |
gen peso2 = distr_voto * peso | |
sum peso2 if partido == 14 | |
replace peso2 = peso2 / r(sum) | |
drop peso distr_voto | |
rename peso2 peso | |
** genero votos de psoe y pp | |
sum votos if partido == 14 | |
local votos_psoe = r(sum) | |
sum votos if partido == 13 | |
local votos_pp = r(sum) | |
local porc_psoe = `votos_psoe' / `total_validos' | |
local porc_pp = `votos_pp' / `total_validos' | |
** genero la perdida del psoe | |
local perdida = 1/2 * (`votos_psoe' - `votos_pp' - `diferencia' * `total_validos') | |
di `perdida' | |
gen perdida = `perdida' * peso | |
** calculo nueva distribucion de votos | |
** (asumo que todos los votos que pierde el PSOE van al PP) | |
gen votos_sim = votos - perdida if partido == 14 | |
replace votos_sim = votos + perdida if partido == 13 | |
replace votos_sim = votos if partido!=14 & partido!=13 | |
** redondeo los votos | |
replace votos_sim = round(votos_sim,1) | |
gen diferencia = `diferencia' | |
** utilizando electool, calculo distribucion de escanos | |
v2seats votos_sim, party(partido) formula(dhondt) district(prov) size(magnitud) dthres(3) /// | |
nooutput save(resultados`i'.dta) preserve(prov diferencia) | |
** guardo los resultados de la simulacion | |
use resultados`i'.dta, clear | |
collapse (sum) dhondt (first) _diferencia, by(party) | |
rename _diferencia diferencia | |
gen supuesto = 1 | |
save resultados`i'.dta, replace | |
} | |
** fusiono todos los resultados de la simulacion en un unico archivo | |
clear all | |
use resultados1.dta | |
qui foreach i of numlist 2(1)235{ | |
append using resultados`i'.dta | |
erase resultados`i'.dta | |
} | |
save simulacion_1.dta, replace | |
******************************************************************* | |
** SIMULACION 2 | |
** Supuesto: todos los votos que pierde el PSOE van a la abstencion | |
******************************************************************* | |
qui foreach i of numlist 1(1)235{ | |
** abro el archivo de datos | |
use datos.dta, clear | |
** fijo la diferencia entre PSOE y PP | |
local diferencia = .035 - .001 * `i' | |
** calculo pesos para ponderacion | |
gen dif_psoe_2011 = psoe2011 - (psoe2007 + psoe2003) /2 | |
sum dif_psoe_2011 if partido == 14 | |
gen peso = dif_psoe_2011 / `r(sum)' | |
drop psoe2011 - dif_psoe_2011 | |
sum validos if partido == 14 | |
local total_validos = r(sum) | |
gen distr_voto = validos / `total_validos' | |
gen peso2 = distr_voto * peso | |
sum peso2 if partido == 14 | |
replace peso2 = peso2 / r(sum) | |
drop peso distr_voto | |
rename peso2 peso | |
** genero votos de psoe y pp | |
sum votos if partido == 14 | |
local votos_psoe = r(sum) | |
sum votos if partido == 13 | |
local votos_pp = r(sum) | |
local porc_psoe = `votos_psoe' / `total_validos' | |
local porc_pp = `votos_pp' / `total_validos' | |
** genero la perdida del psoe | |
local perdida = (`votos_psoe' - `votos_pp' - `diferencia' * `total_validos') | |
di `perdida' | |
gen perdida = `perdida' * peso | |
** calculo nueva distribucion de votos | |
** (asumo que todos los votos que pierde el PSOE van a la abstencion) | |
gen votos_sim = votos - perdida if partido == 14 | |
replace votos_sim = votos if partido!=14 | |
** redondeo los votos | |
replace votos_sim = round(votos_sim,1) | |
gen diferencia = `diferencia' | |
** utilizando electool, calculo distribucion de escanos | |
v2seats votos_sim, party(partido) formula(dhondt) district(prov) size(magnitud) dthres(3) /// | |
nooutput save(resultados`i'.dta) preserve(prov diferencia) | |
** guardo los resultados de la simulacion | |
use resultados`i'.dta, clear | |
collapse (sum) dhondt (first) _diferencia, by(party) | |
rename _diferencia diferencia | |
gen supuesto = 2 | |
save resultados`i'.dta, replace | |
} | |
** fusiono todos los resultados de la simulacion en un unico archivo | |
clear all | |
use resultados1.dta | |
qui foreach i of numlist 2(1)235{ | |
append using resultados`i'.dta | |
erase resultados`i'.dta | |
} | |
save simulacion_2.dta, replace | |
******************************************************************* | |
** SIMULACION 3 | |
** Supuesto: los votos van 1/3 PP, 1/3 abstencion, 1/3 otros part. | |
******************************************************************* | |
qui foreach i of numlist 1(1)235{ | |
** abro el archivo de datos | |
use datos.dta, clear | |
** fijo la diferencia entre PSOE y PP | |
local diferencia = .035 - .001 * `i' | |
** calculo pesos para ponderacion | |
gen dif_psoe_2011 = psoe2011 - (psoe2007 + psoe2003) /2 | |
sum dif_psoe_2011 if partido == 14 | |
gen peso = dif_psoe_2011 / `r(sum)' | |
drop psoe2011 - dif_psoe_2011 | |
sum validos if partido == 14 | |
local total_validos = r(sum) | |
gen distr_voto = validos / `total_validos' | |
gen peso2 = distr_voto * peso | |
sum peso2 if partido == 14 | |
replace peso2 = peso2 / r(sum) | |
drop peso distr_voto | |
rename peso2 peso | |
** genero votos de psoe y pp | |
sum votos if partido == 14 | |
local votos_psoe = r(sum) | |
sum votos if partido == 13 | |
local votos_pp = r(sum) | |
local porc_psoe = `votos_psoe' / `total_validos' | |
local porc_pp = `votos_pp' / `total_validos' | |
** genero la perdida del psoe | |
local perdida = 3/4 * (`votos_psoe' - `votos_pp' - `diferencia' * `total_validos') | |
*di `perdida' | |
gen perdida = `perdida' * peso | |
** calculo nueva distribucion de votos | |
** (asumo que todos 1/3 de los votos que pierde el PSOE van al PP, | |
** otro 1/3 a la abstencion, y otro 1/3 se divide equitativemente entre | |
** todos los terceros partidos importantes en cada provincia | |
** en las anteriores elecciones) | |
gen votos_sim = votos - perdida if partido == 14 | |
replace votos_sim = votos + perdida / 3 if partido == 13 | |
foreach j of numlist 1(1)52{ | |
qui sum partido if prov == `j' | |
local partidos = `r(N)' - 2 | |
qui levelsof partido if prov == `j' & partido != 14 & partido!= 13, local(partidos_d) | |
qui foreach k of local partidos_d{ | |
replace votos_sim = votos + (perdida / 3) / `partidos' if prov == `j' & partido == `k' & perdida > 0 | |
} | |
} | |
** redondeo los votos | |
replace votos_sim = round(votos_sim,1) | |
gen diferencia = `diferencia' | |
** utilizando electool, calculo distribucion de escanos | |
v2seats votos_sim, party(partido) formula(dhondt) district(prov) size(magnitud) dthres(3) /// | |
nooutput save(resultados`i'.dta) preserve(prov diferencia) | |
** guardo los resultados de la simulacion | |
use resultados`i'.dta, clear | |
collapse (sum) dhondt (first) _diferencia, by(party) | |
rename _diferencia diferencia | |
gen supuesto = 3 | |
save resultados`i'.dta, replace | |
} | |
** fusiono todos los resultados de la simulacion en un unico archivo | |
clear all | |
use resultados1.dta | |
qui foreach i of numlist 2(1)235{ | |
append using resultados`i'.dta | |
erase resultados`i'.dta | |
} | |
save simulacion_3.dta, replace | |
******************************************************************* | |
** PREPARACION DEL DATASET PARA GENERAR LOS GRAFICOS EN R | |
******************************************************************* | |
use simulacion_1.dta, clear | |
append using simulacion_2.dta | |
append using simulacion_3.dta | |
gen partido = "" | |
replace partido = "PSOE" if party == 14 | |
replace partido = "PP" if party == 13 | |
replace partido = "Otros" if partido == "" | |
collapse (sum) dhondt, by(partido supuesto diferencia) | |
replace diferencia = diferencia * -1 | |
gen group = . | |
replace group = 1 if partido == "PSOE" & supuesto == 1 | |
replace group = 2 if partido == "PSOE" & supuesto == 2 | |
replace group = 3 if partido == "PSOE" & supuesto == 3 | |
replace group = 4 if partido == "PP" & supuesto == 1 | |
replace group = 5 if partido == "PP" & supuesto == 2 | |
replace group = 6 if partido == "PP" & supuesto == 3 | |
replace group = 7 if partido == "Otros" & supuesto == 1 | |
replace group = 8 if partido == "Otros" & supuesto == 2 | |
replace group = 0 if partido == "Otros" & supuesto == 3 | |
outsheet using datos_grafico.csv, replace | |
erase simulacion_1.dta | |
erase simulacion_2.dta | |
erase simulacion_3.dta | |
erase datos.dta |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment