Época de elecciones, época de encuestas. Y época de análisis de encuestas. Hace tiempo (mucho tiempo) que tengo la misma impresión: me parece que la mayoría de las afirmaciones que hacen los politólogos (y, mucho más, los medios) son, directamente erróneas, o al menos no se desprenden de los datos. Van dos encuestas en las que baja un punto y entonces: "El Frente Amplio consolida su caída". Pero, claro, mi afirmación es tan imprecisa como las originales.
Aunque trabajo habitualmente con probabilidades, no soy ni de lejos un experto (siquiera un conocedor profundo) de los métodos estadísticos. Así que leí un poco, busqué otro poco... y finalmente encontré exactamente lo que quería: este artículo sobre cómo analizar resultados de encuestas, y cómo tener en cuenta el "margen de error" reportado. Si les interesa leerlo, se llama "The 'Margin of Error' for Differences in Polls", de Charles Franklin, y está disponible en https://abcnews.go.com/images/PollingUnit/MOEFranklin.pdf.
Algunos comentarios, antes de empezar:
O sea, a las encuestas hay que tomarlas con pinzas. No voy a repetirlo, pero cada vez que demos un valor o un intervalo, recuerden que 1 de cada 20 veces es normal errarle. Normal.
Vamos a los datos para ver ejemplos: consideramos la encuesta Factum en el 2009 en diversas ediciones (elijo la misma encuesta para que las comparaciones sean válidas, porque uno supone que el método es el mismo):
In [0]:
# Datos
# Consideramos los votos a setiembre de diferentes años, para ver cómo van cambiando
votaciones_factum_2014={'votoFA':0.42,'votoPN':0.32,'votoPC':0.15,'votoPI':0.03,'votoIndefinidos':0.04,'votoOtros':0.02}
votaciones_factum_julio_2014={'votoFA':0.42,'votoPN':0.30,'votoPC':0.14,'votoPI':0.03,'votoIndefinidos':0.04,'votoOtros':0.02}
votaciones_factum_2013={'votoFA':0.43,'votoPN':0.23,'votoPC':0.16,'votoPI':0.02,'votoIndefinidos':0.08,'votoOtros':0.08}
votaciones_factum_2010={'votoFA':0.49,'votoPN':0.22,'votoPC':0.13,'votoPI':0.00,'votoIndefinidos':0.00,'votoOtros':0.00}
votaciones_factum_2009={'votoFA':0.46,'votoPN':0.34,'votoPC':0.10,'votoPI':0.02,'votoIndefinidos':0.06,'votoOtros':0.02}
La biblioteca franklin.py (en Python) tiene la definición de las funciones que vamos a utilizar. Para los que les interese el código para jugar con sus propios números, están disponibles aquí, pero quieren ser exactamente las fórmulas mencionadas en el paper. Desafío para programadores con más habilidades (y tiempo) que yo: hacer una página web que haga estas cuentas para cualquier par de valores en las encuestas
In [0]:
#!wget franklin.py https://raw.githubusercontent.com/gmonce/datascience/master/src/franklin.py
from franklin import *
Empecemos por ver los diferentes intervalos de confianza para cada partido, según la última encuesta (Setiembre de 2014):
In [60]:
# Veamos los intervalos de confianza para los votos al día de hoy
for (key,value) in votaciones_factum_2014.items():
print (key,votaciones_factum_2014[key],ci(votaciones_factum_2014[key]))
Por ejemplo, el Frente Amplio está entre 0.389 y 0.451. El Partido Colorado está entre 0.128 y 0.17. Pero hay que tener en cuenta que estos rangos aplican a la proporción calculada, es decir al valor obtenido por cada partido en particular. No puede usarse ese rango para comparar valores (por cuestiones de varianza, errores estándar y esas cosas de estadísticos). Para eso, hay que hacer algunas cuentas (que están descritas en el paper, y programadas más arriba). Veamos algunos ejemplos:
Pregunta 1: ¿Es estadísticamente significativa la diferencia entre el FA y el PN? Esta pregunta puede traducirse como "¿podemos afirmar con confianza que el FA tiene más votos que el PN? (siempre dentro del 95% mencionado, que dije que no iba a mencionar de nuevo, pero no puedo evitarlo...). Calculemos el intervalo para la diferencia entre ambos votos. Si el rango no incluye al 0, entonces la diferencia es significativa:
In [61]:
cidif=ci_dif(votaciones_factum_2014['votoFA'],votaciones_factum_2014['votoPN'])
Es. Estamos bastante seguros de que (según las encuestas), va ganando el FA. Pregunta 2: ¿Es significativa la diferencia entre el FA y los partidos tradicionales sumados?
In [62]:
cidif=ci_dif(votaciones_factum_2014['votoFA'],votaciones_factum_2014['votoPN']+votaciones_factum_2014['votoPC'])
Primera observación: si blancos y colorados suman sus votos, no sabemos qué pasa. Atención cuando digo que no sabemos qué pasa, no estoy hablando de indecisos. Estoy diciendo que con la cantidad de gente que encuestamos, los modelos estadísticos en las que nos basamos nos dicen que no alcanza para hacer la afirmación, al menos para no errarle en más de 1 en 20 veces.
También podemos comparar resultados entre diferentes encuestas, para ver si hubo cambios. Con otra fórmula. Pregunta 3:¿Mejoró el Partido Nacional del 2010 hasta ahora?
In [63]:
cidif=ci_dif_between(votaciones_factum_2010['votoPN'],votaciones_factum_2014['votoPN'])
Sí, mejoró. ¿Y el Partido Colorado?
In [64]:
cidif=ci_dif_between(votaciones_factum_2010['votoPC'],votaciones_factum_2014['votoPC'])
No, ¿y el FA?
In [65]:
cidif=ci_dif_between(votaciones_factum_2010['votoFA'],votaciones_factum_2014['votoFA'])
El FA está hoy peor que luego de ganar las elecciones. Pero tal vez sería mejor comparar con el 2009 (es decir, antes de las elecciones, en la misma época en la que estamos ahora). De hecho, podemos comparar a todos los partidos.
In [66]:
for partido in ['votoFA','votoPN','votoPC','votoPI']:
print (partido)
cidif=ci_dif_between(votaciones_factum_2009[partido],votaciones_factum_2014[partido])
Lo único que podríamos afirmar con "certeza estadística" es que el Partido Colorado está mejor que en las elecciones pasadas. Después, todo más o menos igual
En los diarios uruguayos se hacen afirmaciones sobre las encuestas que parecen omitir el margen de error. Si un partido bajó un punto, "su imagen se ha deteriorado". Si sube dos, "muestra un repunte". La mayoría de esas afirmaciones son estadísticamente muy arriesgadas. Veamos un ejemplo:
Blancos y Colorados sumados siguen aventajando al Frente Amplio El País 8/9/2014. http://www.elpais.com.uy/informacion/encuesta-factum-intencion-voto-septiembre.html
In [67]:
cidif=ci_dif(votaciones_factum_2014['votoFA'],votaciones_factum_2014['votoPN']+votaciones_factum_2014['votoPC'])
Como dijimos antes, los números son demasiado parecidos como para afirmar que este valor no es casualidad. En la misma nota: "el Frente Amplio detuvo la caída"
In [68]:
cidif=ci_dif_between(votaciones_factum_julio_2014['votoFA'],votaciones_factum_2014['votoFA'])
No sabemos. De hecho no sabemos si efectivamente venía cayendo, porque la diferencia entre los números es siempre muy pequeña. En la misma nota: "El partido Nacional sigue creciendo"
In [69]:
cidif=ci_dif_between(votaciones_factum_julio_2014['votoPN'],votaciones_factum_2014['votoPN'])
Tampoco.
Estimado lector: la próxima vez que veas afirmaciones (especialmente sobre diferencias), desconfía. Lo más probable es que, salvo que la diferencia sea muy grande, el margen de error producido por encuestar a 900 personas sea tan grande que haga que las afirmaciones no sean estadísticamente adecuadas. Muchas veces, terminan explicando el ruido estadístico. Y eso es malo, porque disfraza de ciencia lo que son especulaciones (es válido especular; lo que no es valido es disfrazarlo de ciencia).
El código presentado en este notebook es tomado del artículo mencionado, si detectan algún error por favor me avisan a @gmonce en Twitter.
(*) Esto no es un juicio de valor, solamente un juego de palabras. http://en.wikipedia.org/wiki/Lies,_damned_lies,_and_statistics