Rango Finito

fotoscódigoobservatorioshermanocerdo temas plots

cálculos

14

Por estos días escribo en Mundo Pelota, un blog colectivo que Óscar organizó y montó para echar carreta sobre el mundial. Continuando con la tónica cuantitativa que llevo desde hace unos meses, he bajado datos de jugadores de WhoScored.com y pienso ir armando pequeños gráficos estáticos (y tal vez alguno interactivo) a medida que se acumula información con cada serie de partidos. Por lo pronto he escrito algo sobre el índice de masa corporal de los jugadores y algo sobre duelos aéreos y estatura. En el blog la categoría de estos ejercicios será Cuentas Alegres. Más adelante subiré los datos y código a este repositorio de GitHub.

16

Una ventaja de pensar las respuestas al cuestionario de Congreso Visible como un vector en dieciocho dimensiones es que se inyectan en un espacio geométrico de representación, con todas las ventajas que tiene la geometría. Por ejemplo se puede calcular el centroide de las respuestas de los cinco candidatos (i.e., un promedio multidimensional). Cada coordenada del centroide (un número entre cero y uno — cero es “NO” y uno es “SÍ”) sugiere cuál es la tendencia de los candidatos en general con respecto a cada pregunta. Si los candidatos dicen “lo que queremos oír” entonces eso es lo que queremos oír cuando hablan todos al tiempo:

    ¿Despenalización del aborto?: 0.2
    ¿Matrimonio homosexual?: 0.5
    ¿Despenalización de las drogas?: 0.2
    ¿Participación de criminales políticos en política?: 1.0
    ¿Constituyente por la paz?: 0.2
    ¿Eliminación reelección presidencial a cambio de períodos de seis años?: 0.7
    ¿Ley para promover la productividad de recursos naturales de reservas forestales e indígenas?: 0.4
    ¿Reformar facultades del Procurador?: 0.8
    ¿Moratoria minera hasta que no haya reglas claras?: 0.6
    ¿De acuerdo con demandas del Paro Nacional Agrario?: 0.9
    ¿Zonas de reserva campesina?: 0.5
    ¿Exenciones tributarias a la inversión extranjera?: 0.3
    ¿Eliminación consejo superior de la judicatura?: 1.0
    ¿Eliminación servicio militar obligatorio?: 0.9
    ¿Reducción presupuesto militar en “postconflicto”?: 0.2
    ¿Penas alternativas para reducir hacinamiento carcelario?: 0.8
    ¿Cupos indicativos (alias “Mermelada”)?: 0.2
    ¿Alianzas en segunda vuelta?: 0.6

También se puede calcular la distancia de cada uno de los candidatos al centroide. Este número sugeriría qué candidato es más “equilibrado” en sus respuestas con respecto a los demás y cuál es el más “extremo”. Cuando se hace ese cálculo las distancias al centroide son:

    Peñalosa: 1.691153
    López: 1.646208
    Zuluaga: 1.630951
    Ramírez: 1.435270
    Santos: 1.382027

Peñalosa es el más distante de este “centro” y Santos es el más cercano. Si se piensa bien no sorprende tanto.

Actualicé el Gist para que también calcule estos números.

23

He seguido jugando con los datos de homicidios. Entre ayer y hoy armé esta página para mirar las tablas de los cincuenta municipios con mayor número de homicidios y los cincuenta municipios con la mayor tasa de homicidios (por cada 100.000 habitantes) entre 1990 y 2013 (de paso resalto los que están en ambas listas al tiempo — los nombres de esos pocos capturan bien los focos de violencia más dura cada año). Son tablas muy sencillas de calcular pero no parecen estar disponibles en un formato amigable en ningún lado. El Observatorio de Derechos Humanos de la Presidencia (más amigable Mordor que ese sitio) tiene unos PDFs viejos que cubren por ahí desde 1998 hasta 2011 pero no encontré buenas listas (mapas sí tienen — son horribles). La semana pasada las generé a la carrera una noche usando R y quedé con ganas de hacer los mismos cálculos usando únicamente javascript. Esta vez fui más metódico y el código es más claro, organizado y hasta reutilizable que el adefesio del mapa (uno aprende montones haciendo esos ejercicios de carpintería). Escribí unas funciones muy básicas para cargar tablas en formato CSV e imprimirlas, seguro no muy óptimas pero funcionales al menos. Tal vez lo use de nuevo más adelante para soltar más tablas. Todavía no sé cómo se puede volver “responsive” el gráfico que encabeza la página. Seguiré investigando. También me parece que es un poco pesada. Tal vez es demasiado pedir que el navegador cargue y procese la tabla entera. El iPad se iba colgando.

Por cierto, el mapa de homicidios ahora contiene los datos desde 1990 hasta 2013.

19

Gracias a José Rafael Espinosa conseguí una base de datos con los resultados de las pruebas Saber 11 de 2011 a nivel de estudiante (~572K entradas). No tiene los resultados de la prueba discriminados por área, sólo el promedio, pero para compensar tiene como 180 variables con datos sobre el estudiante y su entorno. Todo un banquete para este humilde lector de tablas.

Arranquemos con una gráfica que hace rato me debía, mirando cómo los resultados de la prueba cambian de acuerdo al nivel socioeconómico (medido por el “estrato”) del estudiante. Para enriquecerla diferencio colegios privados de públicos. Todo es más o menos como se espera:

saber-estratos-tipodecolegio

Entre más plata, mejores resultados. Menos promocionado pero también bien sabido: las diferencias en resultados entre colegios públicos y privados no son tan drásticas si se toman en cuenta las condiciones socioeconómicas de las familias de los estudiantes. Para entender el comportamiento de las distribuciones de colegios públicos en los estratos altos hay que tomar en cuenta de cuántos muchachos hablamos en cada grupo:

cuentas-colegios-estratos
Estrato 4: 3657 en público y 16258 en privado. Estrato 5: 452 en público y 7292 en privado. Estrato 6: 156 en público y 4634 en privado.

Mejor dicho: a partir de estrato cuatro las familias prefieren fuertemente los colegios privados para sus hijos. Y ahí es más o menos donde empieza la desigualdad.

*

Otra curiosidad: ¿Qué diferencia hace en los resultados que los padres del estudiante sean maestros?

papamaestro-promedios

Pero claro, si un papá es maestro es probable que la familia sea de estrato medio alto y a eso se deba la diferencia. Miremos cómo se distribuyen los hijos de padres maestros por estrato:

cuentas-padresmaestro-estrato

Tal vez esa es la razón de la diferencia. Otra posible razón es el tipo de colegio que eligen para sus hijos. De la gráfica de arriba sabemos que en estrato tres los estudiantes de colegios públicos todavía superan a los de colegios privados. ¿Pasa lo mismo si nos restringimos a hijos de maestros? ¿Y qué hay de los hijos de padres que no son maestros?

cuentas-estratos-maestros

Hipótesis: los maestros colombianos prefieren que sus hijos estudien en colegios privados.

4

Una pregunta: ¿dados los resultados de las pruebas Saber 11 por colegios cuál es el área evaluada cuyo resultado mejor prediría si el colegio es oficial o privado?

Una forma (tal vez muy ingenua, no estoy seguro) de abordar esta pregunta es a través de árboles de clasificación. Un árbol de clasificación intenta encontrar la variable de entrada que mejor parte los datos de acuerdo a la variable a predecir. Este procedimiento se itera en cada nuevo nivel de partición y de ahí se obtiene el árbol. Si generamos un árbol de clasificación, la variable contemplada en el primer nodo del árbol es, de cierta forma técnica muy precisa, la que tiene la mayor capacidad para clasificar la variable objetivo.

¿Y qué pasa cuando se generan árboles de clasificación con los resultados por áreas de las pruebas Saber 11 como variables de entrada y la naturaleza (oficial o no) del colegio como variable objetivo?

Pasa que de 2011 a 2013 la variable principal es siempre la misma: inglés. Esto no sorprende. En la lista de razones para inscribir a los niños en colegios privados usualmente figura el inglés que supuestamente recibirán. Más difícil, sin embargo, es intentar adivinar cuál sería la segunda área. Detengan la lectura unos segundos e intenten hipotetizar cuál sería (de haber alguna) y por qué.

Para intentar responder esta subpregunta usemos el mismo procedimiento pero esta vez tomando como variables de entrada los resultados de todas las áreas exceptuando inglés.

Una vez más, los tres árboles tienen la misma variable principal. En este caso, lenguaje.

¿Adivinaron?

Por curiosidad repetí el ejercicio para ver si la tercera variable (de acuerdo a este orden tal vez no muy confiable) también era la misma y no: en 2011 es sociales y en 2012 y 2013 es biología.

Aquí los árboles para los tres años:

arboles
Click para verlo más grande. Cada nodo dice cuál es la proporción de privados y públicos, cuál es mayoría y cuál es el porcentaje de datos total en ese punto. Los árboles fueron generados con rpart y pintados con el comando fancyRpartPlot del paquete rattle de R. Aparecen podados en versiones “óptimas” de acuerdo a un criterio técnico que no viene al caso.

Dudas: ¿Es coincidencia que las primeras dos sean inglés y lenguaje o sería más o menos uniforme si se pudieran considerar otros años? Si no es coincidencia, ¿qué explicaría que lenguaje sea el diferenciador de colegios públicos y privados más eficiente después de inglés?

Otra duda: ¿Alguna forma más rigurosa de abordar la pregunta?

*

Increíblemente, no hay ningún buen graficador limpio y nativo de los árboles de clasificación que produce scikit-learn. Depender de graphviz me parece burdo. Lo ideal sería que matplotlib permitiera graficar árboles fácilmente, supongo. De pronto sería una buena forma de entender matplotlib a fondo. ¿Tarea para 2014?

Por lo pronto, R sigue siendo muchísimo más cómodo para estas vainas.

*

Hoy dejamos ir a Laia en la piscina agarrada sólo de su fideo de espuma. Pateó su camino hasta la mamá mientras yo la seguía de cerca por si acaso el sistema de flotación (todavía bastante endeble) fallaba. La primera vez estuvo sola unos veinte segundos. La segunda vez creo que alcanzó el minuto y se veía cansada. No avanzó sino un par de metros cada vez. Creo que tendremos a Laia chapoteando libre y sin ayuda antes de que cumpla los dos años.

I went through a sudden period where I couldn’t read

Llevo meses postergando este ejercicio. Hace un par de semanas le dediqué una tarde, pero con la muerte del computador perdí el trabajo (entre muchas otras cosas), así que ayer por la noche lo volví a hacer. El resultado final es más oscuro que iluminador pero qué más da. Su génesis se encuentra en el largo monólogo de Chris Fogle que ocupa el capítulo §22 de The Pale King, la (pseudo)novela póstuma de David Wallace:

[I]nstead of reading something I’d count the words in it, as though reading was the same as just counting the words. [En lugar de leer algo contaba sus palabras, como si leer fuera lo mismo que sólo contar palabras.]

The Pale King (en español El rey pálido, traducción de Javier Calvo) es el esqueleto escueto de una novela que, estimo, rondaría las 1500 páginas (i.e., apenas un tercio de la novela fue concluída). Está estructurada (al menos en su primera edición) en 50 capítulos que, tras la muerte de Wallace, fueron dispuestos en orden lineal por su editor (Wallace no dejó mayores directivas al respecto). Mi pregunta inicial, intencionalmente ingenua, era cómo automatizar ese trabajo o al menos facilitarlo mediante un procesamiento automático del texto que involucrara, cómo no, conteos de palabras.

Gráfico del logaritmo de la extensión en carácteres de cada uno de los capítulos de The Pale King

Con el tiempo, sin embargo, me decanté por un ejercicio alternativo más a mi alcance: (1) Calcular una distancia léxica entre los capítulos, y (2) Disponerlos como puntos en un plano de manera que respetaran (dentro de lo posible) la distancia propuesta. Mi teoría era que un gráfico de ese estilo sería una herramienta útil (un criterio más) para facilitar la organización del texto. Ya no estoy tan seguro.

*

El primer componente del ejercicio es la distancia. La aproximación más intuitiva al cálculo de distancias entre documentos (este artículo de Anna Huang ofrece un sobrevuelo por varios métodos) se basa en recolectar una lista de palabras presentes en los documentos (más detalles adelante) y utilizarlas como base de un espacio vectorial. Bajo este esquema, a cada documento le corresponde una combinación lineal de la base con escalares elegidos de acuerdo al número de apariciones (frecuencia) de la palabra en el documento. Así, si la lista de palabras es $\{v_i\colon 1 \leq i \leq M\}$, entonces un documento $d$ es representado por el vector $M$-dimensional $$\sum_{i=1}^M f_i(d) v_i,$$ donde $f_i(d)$ es igual al número de apariciones de la palabra $v_i$ en el documento $d$. Una vez representados de esta manera, calcular distancias entre documentos se reduce a aplicar el teorema de Pitágoras.

Una versión sólo un poco más sofisticada de lo anterior se basa en la siguiente observación: si una palabra $v_i$ es muy frecuente en un documento $d$ pero también está presente en la mayoría de los documentos disponibles (supongamos que tenemos $N$ documentos) entonces probablemente no sea tan representativa del documento $d$ como cabría esperar inicialmente. Para tomar en cuenta esto, reescribimos la representación vectorial del documento $d$ como $$\sum_{i=1}^M f_i(d) \log\left (\frac{N}{P_i}\right ) v_i,$$ donde $P_i$ es igual al número de documentos que contienen la palabra $v_i$. De esta manera, la frecuencia de la palabra $v_i$ en cada documento es penalizada multiplicándola por un número ($\log(\frac{N}{P_i})$) que se acerca a cero entre más documentos la mencionen.

Así, al final el problema del cálculo de distancias se reduce a decidir cuál debe ser la lista de palabras que se utilicen como base del espacio vectorial de documentos. Siguiendo (a mano alzada) el artículo de Huang, tras una serie de filtros sencillos que removieran diferencias innecesarias y contenido irrelevante busqué (usando NLTK, la navaja suiza del análisis automatizado de texto) todas las palabras que aparecieran más de siete veces en todo el libro. 2060 palabras (aproximadamente un décimo de las que contiene el libro) cumplían con esta condición. Esto en particular implica que los capítulos del libro son representados por puntos en un espacio de dos mil y tantas dimensiones. Calcular distancias entre ellos, ya lo dije, es sencillo. Verlos en un plano es otra historia.

*

Había sobrestimado seriamente la incomprensibilidad del texto. Un conteo burdo de nombres propios en páginas 12-21 ofrece 38, 28, 17, 28, 40, 32, 31, 31, 18, 22. Número medio por página, 28,2, desviación estándar de 6,9, 70% de los datos a s de la media. Número promedio de palabras por página basado en una muestra de 2, 302. O sea 9% de comprensibilidad. Alto.

— H. DeWitt, Ese oscuro objeto del deseo

*

No sé por qué pensaba que el problema de aplanar dimensiones debía estar completa y contundentemente resuelto desde hace décadas. Fue difícil dar por mi cuenta con soluciones convincentes. Finalmente, Juan Manuel me sugirió revisar los métodos de manifold learning implementados en scikit-learn. Para mi sorpresa, varios de los algoritmos disponibles son bastante recientes y provienen de laboratorios de ciencias cognitivas interesados en visión. El que elegí para mi ejercicio, Isomap, fue desarrollado por Josh Tenenbaum (y amigos) cuando trabajaba en Stanford.

La conexión entre visión y reducción de dimensiones se basa en el hecho, permítome ser burdo, de que el ojo cuenta con (muchísimos) sensores que registran el estímulo (imaginen cada sensor como un vector independiente) y luego el cerebro toma esas (combinaciones lineales de) señales y compone una imagen bidimensional (o tal vez un par). ¿Cómo lo hace? Ni idea. Los métodos de manifold analysis intentan simularlo. La idea es asumir que un conjunto de puntos en un espacio de dimensión alta yacen sobre una superficie (de ahí el término manifold) y luego aplanarla preservando en lo posible distancias locales. En el caso particular de Isomap primero se construye un grafo que captura, mediante la imposición de vértices, el sabor local de la colección de puntos, luego se define una distancia optimizada sobre el grafo y finalmente se soluciona un problema de optimización para encontrar los puntos de baja dimensión correspondientes (para el interesado en por qué y cómo funciona, aquí hay detalles y aquí todavía más detalles). Como es de esperarse, entre más puntos, mejor el resultado.

*

Tal vez cincuenta puntos no sean suficientes. (Aquí más grande.)

Este de arriba es el resultado de aplicar Isomap a una versión normalizada (para evitar desequilibrios por diferencias de extensión) de los 50 puntos 2060-dimensionales que representan, de acuerdo a la lista de palabras elegidas, los 50 capítulos de The Pale King. Así se ve. Con Javier discutimos una noche los posibles significados de varios gráficos similares a este pero no logramos decidir si se conectaban de alguna manera con la sustancia del libro, lo que quiera que eso signifique. La verdad, prefiero que sea así. El anticlímax tiene naturaleza de Buda.

*

Anoche, antes de acostarme, se me ocurrió un posible orden lineal que se desprendería de estos cálculos: organizar los capítulos de acuerdo a la distancia al centro de masa (Isomap lo clava en $(0,0)$). El orden sería: §20, §6, §9, §22, §2, §14, §13, §7, §15, §16, §35, §32, §21, §46, §31, §17, §43, §26, §29, §45, §4, §8, §42, §19, §39, §10, §38, §33, §24, §50, §36, §27, §44, §47, §49, §12, §34, §23, §5, §1, §18, §11, §28, §30, §41, §48, §37, §3, §40 y §25. Ya puestos, calculé directamente sobre los puntos originales (en el espacio de dimensión 2060) y en ese caso (cambia, obviamente) el orden es: §22, §24, §2, §27, §42, §30, §7, §19, §33, §9, §5, §14, §47, §6, §49, §16, §8, §46, §43, §15, §13, §23, §36, §32, §26, §45, §39, §3, §12, §18, §29, §20, §17, §48, §38, §37, §50, §21, §31, §4, §35, §44, §1, §11, §41, §40, §28, §34, §10 y §25. En ambos, el recorrido se cierra en ese capítulo neurótico a dos columnas (Devils are actually angels) que describe la tediosa cotidianidad diaria de la oficina de impuestos (casi todos los personajes son mencionados), y se inicia (o casi) con el soliloquio de Chris Fogle (§22) sobre, entre otras cosas, su tendencia a contar palabras en lugar de leer. También podrían organizarse en sentido inverso, como en una espiral hacia el origen. Tal vez eso tenga más sentido.

Pequeña teoría del lenguaje

El lenguaje permite construir vínculos sintácticos entre realidades independientes para crear la ilusión de una experiencia compartida a través de la normalización local de referentes. Este proceso es conocido en matemáticas como skolemización. El uso extendido del lenguaje colapsa la dimensión del universo, entendido no como el espacio-tiempo (modelo primitivo y falaz) sino como la suma directa de percepciones de sus habitantes conscientes (inicialmente aislados, cada uno en su vivencia). Lo anterior facilita los cálculos requeridos en cada iteración de la simulación y contribuye a optimizar el manejo de memoria activa.

Martes

Desmonto la oficina. No hay mucho que desmontar, la verdad. Nunca me preocupé mucho por apropiarme de este espacio. Apenas colgué un par de postales. También limpio los cajones y estanterías de basura. En un ataque paranoico salvo de la basura a último minuto cuarenta páginas dispersas de lo que parecen cálculos. Cuido los cálculos porque me cuestan. Una vez me convenzo de que algo es cierto olvido los trucos y más tarde soy incapaz de reproducirlos. Además soy desordenado, así que nunca sé dónde dejé la versión depurada y limpia y cuáles son apenas intentos infructuosos que podría desechar. Cuarenta páginas que debo filtrar. Tengo un sueño recurrente en el que debo calcular algo, algo sencillo, algo concreto que por pura inseguridad he hecho al menos quince veces con mucho cuidado, y soy incapaz. Sé que es verdad, sé lo que quiero evidenciar, pero no encuentro el camino. Odio eso. Me levanto de muy mal genio. Tengo el vicio, adquirido cuando era niño y, por ende, omnipotente, de depender demasiado de mi memoria. Eso es algo que debo cambiar. Hoy escribí en dos páginas un resumen al vuelo pero organizado del trabajo del semestre. Todavía no hay resultados muy serios pero luce promisorio. El jueves tendremos una nueva reunión. Tal vez sea la última en un buen rato.

The Pale King (Un juego: conteo y lectura)

Situación: Suponga que tiene N (50) capítulos de una novela. Los capítulos están interrelacionados pero tras la muerte del escritor no hay manera sensata de decidir un orden lineal explícito. El editor hace lo que puede y organiza un libro a partir de la fragmentación, sobre ella, gracias a ciertas pistas, con la tranquilidad de que los lectores del escritor están acostumbrados al desorden (entre tantas otras cosas) y aceptarán sin mayor problema cualquier disposición propuesta. Son las cosas de la postmodernidad bien asumida.

Problema: Dado lo anterior, tal vez el mejor orden es suponer que no hay un orden sino apenas afinidades entre las partes y proponer, en lugar de una disposición lineal, un grafo de conexiones. ¿Es posible detectar automáticamente las interrelaciones entre los capítulos (claro, se podría hacer manualmente (para allá va esto), pero el reto aquí es restringirse a herramientas sintácticas)? Este análisis, por supuesto, no puede llegar demasiado lejos. ¿Pero será posible, por métodos de conteo y análisis estadístico de texto simples (o semi-simples), reconocer con cierta certeza los capítulos que tratan los mismos temas o hablan de los mismos personajes? Mejor dicho: ¿Será posible leer este libro sin leerlo (¡herejía!) mediante un conteo cuidadoso de sus palabras? (Problema difícil en general. Muy difícil.)

Tamaño de los capítulos en bytes

[…] instead of reading something I’d count the words in it, as though reading was the same as just counting the words.

D. Wallace, The Pale King (§22)

(Continuará, creo…)