20 de agosto de 2004

Golpe mortal a la teoría de los topes

Anoche, luego de escuchar la rueda de prensa de Antonio Mugica, presidente de SmartMatic, se me ocurrió hacer un programa que tomara la data de las mesas automatizadas, generara al azar votos por el SÍ y por el NO y entonces viéramos allí cuántas veces hay repeticiones de números.

Así que tomé la data del CNE extraída por Sebastián y de allí saqué la cantidad de votantes por cada uno de los 4559 centros automatizados, de los 4776 que hay en total. Dejé eso en un archivo de texto plano, llamado "electoresxcentro2.txt".

Hice entonces un programa que hace más o menos esto:

  1. Lee la cantidad de votantes que hubo en el primer centro de votación. Pongamos que en un centro hubo 3.000 votantes.

  2. Como no tengo la cantidad exacta de votantes por cada máquina (el CNE no la ha publicado), la genero al azar. Asumo que en cada máquina votaron unas 500 personas, con una variación aleatoria de más o menos 30 (estos números son pedidos al usuario y se pueden variar).

    Ejemplo: 500 + ((rnd*60) - 30) = 497

  3. Se asume que el 40 por ciento de los votantes votaron "Sí" en todos los centros (el porcentaje también se pide al usuario). Entonces, genero aleatoriamente el número de personas que votaron "Sí" en ese centro, con una variación también de más o menos 30.

    Ejemplo: 497 * 0.4 + ((rnd*60) - 30) = 208

  4. El número de votantes por el "No" es igual al número de votantes por máquina menos el número de votantes por el Sí.

    Ejemplo: 497 - 208 = 289

  5. Guardo eso en dos arreglos (uno para el sí, uno para el no), y sigo generando más votantes para ese centro hasta que se me hayan acabado los votantes para ese centro.

    Maquina 1: 208 por el sí, 297 por el No, me quedan 3000 - 497 = 2503 en este centro
    Maquina 2: 165 por el sí, 308 por el No, me quedan 2503 - 473 = 2030 en este centro
    Maquina 3: 207 por el sí, 286 por el No, me quedan 2030 - 493 = 1537 en este centro
    Maquina 4: 165 por el sí, 271 por el No, me quedan 1537 - 436 = 1101 en este centro

    ... Sigo así hasta llegar a cero votantes en ese centro.

  6. Cuando llego a cero votantes para ese centro, busco en los arreglos cuántas repeticiones de votantes hubo por el Sí, y cuantas repeticiones hubo para el No. Por ejemplo, arriba puse una repetición para el Sí adrede, sólo para que vieran lo que andamos buscando.

  7. Reinicio los arreglos y continúo con el siguiente centro de votación, hasta que haya terminado con todos.


Bueno, corrí el programita. ¿Saben cuántas repeticiones me da? ¿5? ¿10? ¿40? Eh... ¿80? No señores... Me da...

402 para el Sí
430 para el No


En efecto, el obtener repeticiones en los números parece ser algo muy común hablando en términos estadísticos y probabilísticos, por lo que, en mi humilde opinión, la aparición de algunas repeticiones en los votos en un mismo centro de votación no puede usarse como evidencia para decir que las máquinas están programadas con un tope.

El programa, lamentablemente, está hecho en VisualBasic 6. Aún cuando Java y C++ indiscutiblemente son mejores lenguajes de programación, yo trabajé 8 años en VisualBasic y me siento más cómodo en él... pero sé que ustedes podrán convertirlo a su lenguaje favorito en cuestión de segundos.

El programa genera un archivo de texto con los resultados, imprimiendo los números para cada mesa. Aún si no tienes VisualBasic instalado, puedes bajarlo para revisar el código fuente y chequear que yo no le haya puesto "topes". Luego, puedes chequear el archivo con los resultados. Pero insto a todos a bajar el código fuente, compilarlo, ejecutarlo, cambiarlo, mejorarlo, variar los números, auditarlo, chequear errores, etc.

Aquí les dejo el código fuente, el ejecutable, el archivo de texto con la cantidad de votantes por centro y el archivo de texto con los resultados. Todo en un zip de 139 KB.


Mejoras posibles:
  1. En vez de generar un número aleatorio con una variación de más o menos 30, se debería generar en torno a una campana de Gauss. Pero eso se lo dejo a gente con más tiempo y conocimientos matemáticos y probabilísticos. Sin embargo, creo que ese cambio no haría una diferencia muy notable.

  2. El programa también puede mejorarse utilizando funciones generadoras de números aleatorios más poderosas que las que trae VisualBasic. Java y C++ tienen a su disposición bibliotecas con funciones random más poderosas, para aplicaciones científicas. Así que, ¡manos a la obra!

  3. El programa también se podría mejorar si consiguiéramos la cantidad de votantes por máquina para las máquinas de todo el país; así yo no tendría que generar ese número al azar. Será esperasr a que el CNE lo publique, o a que los buhoneros empiecen a vender el disco compacto en las calles.
Publicar un comentario