martes, 7 de febrero de 2012

Curso online "Advance Quantitative Methodology"

From Evernote:

Curso online "Advance Quantitative Methodology"

Para aquellos interesados, comenzó algunas semanas atrás el curso "Advance Quantitative Methodology" con el profesor Gary King. Desde la página web se puede acceder a los videos de las charlas y al material de lectura. El curso gira más que nada sobre los métodos Bayesianos y, a nivel práctico, sobre R. Más que interesante. Vengo siguiendo los videos y algunas lecturas, le debo al profe la tarea...
El link.

domingo, 8 de enero de 2012

Puntos ideales de la Cámara de Diputados 2011

En materia legislativa, el 2011 fue un año poco productivo y con escasa actividad en el recinto. Sin duda la campaña electoral, sumado al estado de confusión generalizado en el que se encuentra la oposición, luego de la contundente victoria del Kirchnerismo, explica en buena medida el bajo nivel de conflictividad y debate que caracterizó al período 2011. La Cámara de Diputados registró solo una 41 votaciones nominales correspondientes a 7 sesiones ordinarias, y unas 14 votaciones más que se agregaron en sesiones extraordinarias. Precisamente estas últimas votaciones son sin duda las más polémicas del año (presupuesto 2012, papel prensa, ley antiterrorista, etc.).

En este caso calculé los puntos ideales de los legisladores utilizando el método de puntos de acuerdos. El mismo es muy similar al método de OC del cual escribí en post anteriores, ya que es en escencia la base sobre la que OC y NOMINATE realizan sus cálculos. Los pasos a seguir para calcular los puntos de acuerdos son:
1- Partiendo de una matriz de votaciones con 1,2,3,...p legisladores y 1,2,3,...n votaciones, calcular la matriz de acuerdo p x p. Esto es, la proporción en que cada par de legisladores votó de manera similar. Ver  este post.
2- Convertir la matriz de acuerdo en una matriz de distancias caudradas restando 1 a cada elemento y elevandolo al cuadrado.
3-  Centrar la matriz de modo que a cada elemento le restamos la media de la fila y la media de la columna. Luego le sumamos la media de la matriz y dividimos por -2.
4- Extraemos el/los vectores propios de la matriz centrada. En este caso extraigo solo el 1er vector propio ya que realizo un análisis unidimensional.

Pero mejor leerlo del autor, " Spatial models of parliamentary voting", Keith Poole, 2005.

Dicho esto, la poca cantidad de votaciones durante el 2011 hace que los resultados de este análisis haya que agarrarlos con pinzas. En un futuro post pienso comparar estos resultados con los obtenidos mediante técnicas de estimación bayesiana, que son una posible solución para analizar legislaturas con pocas votaciones y/o pocos miembros.
Los cálculos estan hechos sobre aquellos legisladores que estuvieron presentes en al menos el 70% de las votaciones. Esto deja afuera a los diputados recientemente ingresados que votaron en solo las votaciones de la sesión extraordinaria, entre otros. Eso nos deja con un total de  248 legisladores y 55 votaciones.


Los resultados a nivel bloque muestran que este fue un período de poca polarización con algunos de los principales partidos opositores (UCR, CC) votando de manera muy similar a al FPV. Hay que recordar que muchos legisladores que votaron en la última sesión no son tomados para este análisis. También podemos observar que el Frente Peronista (FPER), la nueva versión de lo que queda del Peronismo Federal fue el bloque más distante al FPV. Sin interpretar más de lo que es, estos resultados parecen dar cuenta de la situación política actual donde las internas peronistas se presentas como las principales amenazas al gobierno, es decir, el Peronismo como referente del oficialismo y la oposición.

A nivel legislador doy cuenta de los 10 legisladores más "oficialistas" y los 10 más "opositores".





Como siempre los datos y el código en GitHub

martes, 20 de diciembre de 2011

Mapas surtidos

Como ya mencioné un par de veces, la capacidad gráfica de "R" es uno de los aspectos que más me atraen. Para que se den una idea, tienen como ejemplo el ya célebre mapa de amigos de Facebook,de Paul Butler hecho íntegramente con "R".


Además de poder ser "lindos", los mapas nos permiten representar información de diversas maneras. Siguiendo el tutorial de xingmowang, con unas pocas líneas de código pude representar las exportaciones Argentinas por grandes rubros del 2010, según país de destino en América Latina. Los datos son del INDEC.
No soy un gran fanático de los gráficos de torta, y suelo evitarlos cuando puedo, pero supongo que para darnos una idea general, cuando la información no en muy compleja, son útiles.

Los datos y el código, en github.

Todo muy lindo, pero a lo que le tengo ganas es a los llamados "great circles", es decir a los segmentos de líneas que conectan dos puntos de coordenadas en un mapa. Con esta técnica se hizo, por ejemplo, el mapa de Facebook.
Yo realicé un intento, siguiendo ahora un muy buen tutorial en Flowing Data. Supongo que la base está, pero mis resultados están todavía lejos de lo que me gustaría. Algunos de los problemas que me encontré son:
1- El sistema de grandes círculos encuentra y dibuja la distancia menor entre dos puntos, por lo que si queremos conectar Buenos Aires con Japón, la línea se dibuja hacia el pacífico y de hecho se "rompe" en nuestro mapa. Por eso tuve que eliminar las conexiones con Japón, Australia, Filipinas, etc. de mi mapa. Supuestamente este problema se puede solucionar, pero yo no encontré como.
2- Algunas coordenadas de ciudades me generaban un error en la función que no pude identificar. También eliminé estas ciudades.

Bueno, el mapa es este. Los datos son triviales, son los acuerdos diplomáticos bilaterales de Argentina desde 1911 a 1999, sacados del World Treaty Index. Supuestamente la intensidad de la línea esta relacionada a la cantidad de acuerdos con cada país, pero al tener la mayoría un solo acuerdo no se nota mucho (solo en Chile, Brasil, Paraguay y Uruguay las líneas son más blancas).

Los datos y el código en github.

miércoles, 14 de diciembre de 2011

Visualizando la matriz de acuerdo legislativo

Inspirado en el gráfico de  Aleks Jakulin del Senado de Estados Unidos, traté de hacer algo parecido para la Cámara de Diputados. La visualización es muy poco práctica e ilegible (demasiados legisladores). Además todavía faltaría sumar las votaciones de las sesiones extraordinarias. Pero así y todo, acá va.

Esta visualización de la matriz nos muestra el nivel en el que un par de legisladores coincidieron entre si a la hora de votar en la Cámara. Los cuadrados negros representan acuerdo total, y los blancos desacuerdo total.

Los datos son las votaciones nominales del período 129, hasta el 14/12. El código y los datos pueden verse en mi repositorio GitHub.

miércoles, 23 de noviembre de 2011

W-NOMINATE vs Optimal Classification II


Siguiendo con el post anterior, realizo el mismo análisis ahora utilizando el paquete W-NOMINATE.  
 


SUMMARY OF W-NOMINATE OBJECT
----------------------------

Number of Legislators:   256 (9 legislators deleted)
Number of Votes:   118 (1 votes deleted)
Number of Dimensions:   2
Predicted Yeas:    14179 of 16562 (85.6%) predictions correct
Predicted Nays:    9976 of 12861 (77.6%) predictions correct
Correct Classifiction:   78.29% 82.1%
APRE:     0.484 0.574
GMP:     0.655 0.687 


The first 10 legislator estimates are:
                                coord1D coord2D
AGOSTO, Walter Alfredo           -0.945   0.288
ALBRISI, Cesar Alfredo           -0.467   0.108
BARRIOS, Miguel Angel            -0.257  -0.967
BARTOLUCCI, Gilda Liliana        -0.460   0.448
BIANCHI, Ivana Maria             -0.456   0.243
CREMER de BUSTI, Maria Cristina  -0.477   0.488
GALVALISI, Luis Alberto          -0.522  -0.342
GEREZ, Elda Ramona               -0.472  -0.401
IGLESIAS, Fernando Adolfo        -0.522  -0.271
LUSQUINOS, Luis Bernardo         -0.489   0.411
En este caso, el porcentaje de clasificación correcta es de 78.29% para la primera dimensión y 82.1% para la segunda. Es significativamente más bajo que el de OC, pero es entendible ya que OC lo que hace es justamente maximizar las clasificaciones correctas. Más importante es sin embargo el APRE, que es considerablemente bajo, de solo 48% para la primera dimensión (a diferencia de OC que nos daba un 70%).

Las diferencias se hacen todavía más evidentes si graficamos los resultados.

Como vemos, la gran diferencia con OC es que muchos legisladores (en particular del FPV y la UCR) figuran más cerca de los extremos. Esto es así porque W-NOMINATE maneja los errores de clasificación de modo que un legislador con un nivel de error bajo es "empujado" hacia su extremo correspondiente.

En conclusión creo que porque no hace suposiciones sobre los errores de los legisladores y se adapta mejor a cámaras con altos niveles de disciplina partidaria, OC es más apropiado para estudiar la votaciones nominales en Argentina.

lunes, 21 de noviembre de 2011

W-NOMINATE vs Optimal Classification I

NOMINATE y OC son métodos de escalamiento multidimensional desarrollados por Keith Poole y Howard Rosenthal. El primero cuenta ya con algunas décadas de vida y se ha convertido en el estándard académico a la hora de analizar las VN.

Ambos métodos son muy similares. La gran diferencia es que NOMINATE asigna una distribución de probabilidad a los errores (votaciones mal clasificadas), y en base a eso calcula las coordenadas para cada legislador.  En cambio OC no asigna un elemento probabilístico, sino que maximiza la clasificación correcta de las votaciones. Una votación mal clasificada es aquella que, por ejemplo, habiendo un legislador votado de manera "afirmativa" queda del lado "negativo" de la línea de corte.

Para los interesados, recomiendo darse una vuelta por Voteview, el sitio web de Keith Poole que tiene toda la información sobre estos métodos (papers, datos, paquetes R, etc).

Bueno, la idea es entonces ver cuál de estas 2 técnicas es "mejor" para analizar la Cámara de Diputados Argentina. El período para este análisis es el 127 (2009-2010), y las votaciones fueron extraidas del sitio web de la HCDN. Los datos están codificados de manera binaria, siendo 1 = afirmativo, 0 = negativo (los ausentes fueron codificados como negativos y las abstenciones como datos faltantes).

Empezamos con OC, utilizando el paquete correspondiete de R, obtenemos los siguientes resultados:


SUMMARY OF OPTIMAL CLASSIFICATION OBJECT
----------------------------

Number of Legislators:  256 (9 legislators deleted)
Number of Votes:  118 (1 votes deleted)
Number of Dimensions:  2
Predicted Yeas:   14895 of 16562 (89.9%) predictions correct
Predicted Nays:   10772 of 12861 (83.8%) predictions correct

The first 10 legislator estimates are:
                                coord1D coord2D
AGOSTO, Walter Alfredo           -0.456   0.310
ALBRISI, Cesar Alfredo           -0.484  -0.033
BARRIOS, Miguel Angel            -0.171  -0.337
BARTOLUCCI, Gilda Liliana        -0.468  -0.017
BIANCHI, Ivana Maria             -0.345   0.028
CREMER de BUSTI, Maria Cristina  -0.509   0.154
GALVALISI, Luis Alberto          -0.530  -0.576
GEREZ, Elda Ramona               -0.678  -0.168
IGLESIAS, Fernando Adolfo        -0.356  -0.086
LUSQUINOS, Luis Bernardo         -0.522   0.580
Observamos un alto nivel de predicciones correctas (89.9 y 83.8). Además, revisado las medidas de ajuste, vemos que el porcentaje total de clasificación correcta es de 87%, y el APRE de casi 70%. El Agregated Proportion Reductions in Error (APRE) es la medida de ajuste que nos dice si nuestro modelo espacial sirve para clasificar las votaciones. El APRE varía entre 1 (el modelo se ajusta de forma perfecta) y 0 (el modelo no explica nada).

> result$fits
[1] 0.8723448 0.6964358

Graficamos los resultados de las coordenadas de 4 bloques.

También graficamos los vectores propios. Podemos observar que la 1er dimensión explica la mayor parte de los resultados, pero el "codo" de la curva deja ver la existencia de una 2da dimensión y posiblemente más.


Por ahora lo dejo acá, mañana sigo con W-NOMINATE. También prometo ir subiendo los datos y el código de R.

domingo, 20 de noviembre de 2011

Análisis de votaciones nominales

El 11 de Noviembre pasado se realizó la primera reunión del Grupo de Usuarios de R en Argentina. La jornada fue excelente, con charlas super interesantes sobre finanzas, juegos sociales y bioinformática. Yo por mi parte hablé de cómo uso R para el análisis de votaciones nominales.
En los posts que siguen voy a ir haciendo algunas anotaciones (cortas) sobre las diferentes técnicas disponibles para el analizar las votaciones, y como se pueden aplicar al estudio de la legislatura Argentina.

Modelo espacial de votación

El objetivo en el análisis cuantitativo de las votaciones nominales (VN) es el de, partiendo del registro de votaciones de determinado período, encontrar el "punto ideal" o de preferencia de cada legislador. Una forma popular para encontrar estos puntos es mediante una función de distancia euclidieana. Entonces, en su estado más simple, la maximización de las preferencias de los legisladores (su función de utilidad), puede formalizarse así:

Ui(Sj) = | xi - Sj |
Ui(Nj) = | xi - Nj |

Donde:
i=1,.....,p legisladores
j=1,.....,k votaciones
x= punto ideal del legislador
S=resultado afirmativo de la votación
N=resultado Negativo de la votación
|.| = norma euclidiana

Si nuestro modelo es probabilístico agregamos una distribución para los errores, de modo que:

Ui(Sj) = | xi - Sj | + eij
Ui(Nj) = | xi - Nj | + eij

Así, un legislador votaría de manera afirmativa (computada con un "1") si...
Ui(Sj) - Ui(Ni) > 0
y de manera negativa si...
Ui(Sj) - Ui(Ni) <= 0


Sobre esta idea base surgieron varios modelos. Mi idea es ir probando los que pueda teniendo en cuenta las particularidades de nuestro Congreso. Para anticipar algunos interrogantes que me gustaría tratar puedo mencionar:

1- ¿Qué modelo se ajusta mejor para un sistema de partidos historicamente muy discipliando?
2- ¿Cómo  computar las ausencias y abstenciones?
3- ¿Cómo interpretar adecuadamente las dimensiones?

Por ahora la dejo acá, los próximos post serán algo más prácticos.