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.

17 comentarios:

Anónimo dijo...

Ooops, olvidé poner el archivo .bas .... ya lo puse, bájense otra vez el .zip

egg dijo...

Ok, ya te iba a comentar que te faltó incluir los fuentes.
La verdad es que estos "tiempos" nos han obligado a recordar cosas (concretamente Probabilidades y Estadistica) que creimos nunca volver a utilizar, y menos aun en la vida real.

Larry dijo...

¿Por qué no calculaste cuánto tiempo es necesario para contar los votos y que se acabe de una vez por todas la diatriba sobre el presunto, pretendido o supuesto fraude? Eso sería mucho más fácil.

Larry dijo...
Este blog ha sido eliminado por un administrador de blog.
Andres dijo...

¿Puedes hacer un ajuste?, las mesas si tenían esa distribución, mas nó las máquinas. Cuando entrabas a votar distribuyes un promedio de 1600 votantes entre tres ó dos máquinas y la última mesa tenía menos votantes y allí la repetición es igual.

Gracias por aportar ideas

luigino dijo...

Larry:

En vez de eso, calculé la probabilidad de que, una vez hecho el conteo manual, la oposición diga que Chávez compró a los que contaron los votos. La probabilidad es de 99%.

Andrés:

Tienes razón... pero ando corto de tiempo, pana. Si alguien más puede hacer la modificación, sería excelente!

¿Pero tú crees que cambie mucho el resultado?

Anónimo dijo...

Chamo,

De verdad te felicito te tomes el tiempo para mostrarnos a los de la oposicion la supuesta invalidez de esta teoria. Creo q nunca se ha dicho q se este cerrando el oficialismo a registrar todo el proceso, todas las partes estan abiertas a auditarse. Alguien me dice quien esta corriendole a las auditorias?

X cierto, leanse uno de los titulares (o avances no recuerdo) de el universal on line... Dice q Smartmatic reconoce "topes" en no se q cuantas mesas... Si nos tomamos la molestia de leer todo, veremos q smarmatic en vez de "topes" lo q dijo fue "patrones de votacion" lo cual es muy diferente. Pobrecito el universal se le escapo... seguramente lo hizo sin culpa! le importamos mucho los lectores.

Otro sobre los votos en el exterior da a entender q la muestra de q hubo fraude es q esos votos manuales no concuerdan con las maquinas... Cual es el % de chavistas en el exterior? 60%???? Jalado de los pelos!

Puedo seguir consiguendo manejos mediaticos q nos tienen metidos en esta nube q nos meten un fraude x los ojos sin (hasta ahora) asidero o teorias solidas. Zamora dice q la auditoria no tiene sentido sin la presencia de una de las partes, claro q no lo tiene! Descubrio America? Sin embargo ahi hay observadores internacionales, y NADIE le impidio a la CD no estar en esa auditoria ellos solitos se salieron.

Lubrio, chamo otra vez, es una labor ARRECHISIMA la q haces! y dificil tambien! Perseverancia... y fe.

Caribe!

Sebastian dijo...

Comentario sobre el modelo...

El usar numeros aleatorios uniformes (mas menos 30) para determinar los votos totales no es correcto.

Los votos no siguen una distribucion uniforme. Son la suma de una serie de eventos aleatorios (cada votante) con lo que se obtiene una distribucion diferente.

La forma apropiada de simular el proceso es la siguiente:

- En cada maquina de cada mesa de cada centro:
-- Determinar la tendencia de votacion del "Si", llamemosla Psi.
-- Por cada votante de la maquina:
--- Generar un numero aleatorio del 1 al 100. Si el numero es menor o igual a Psi, contar el voto como "si", en caso contrario, contar el voto como "no".

Lamentablemente, no hay información disponible publicamente sobre cuantas máquinas hay en cada mesa o sobre cuantos votantes hay en cada máquina.

luigino dijo...

Caribe:

Pienso que al que hay que felicitar es al pueblo venezolano de ambos lados, en particular al CNE y muy en particular al rector Jorge Rodríguez, quien sí que le ha estado echando piernas pasa que la población se quede convencida de los resultados.

Sebastián:

En efecto, los votos no siguen una distribución uniforme... bien claro fui cuando dije que hay que generar los resultados utilizando alguna función que represente una campana de Gauss... o generarlo de la forma que tú propones. Muy buena idea! Cuando aparezcan los datos a nivel de cuaderno intentaré hacerlo así.

Sin embargo, los resultados que generó mi humilde programita parecieran no estar demasiado alejados de la realidad. Según mis resultados, se generan cerca de 400 repeticiones en el "Sí", lo cual se acerca a las denuncias de la oposición según las cuales hay 500 repeticiones para el "Sí" (pero la oposición no dice cuantas repeticiones hubo para el No).

Ahora bien Sebastián, tú colocaste en un post de tu blog que tú hiciste revisiones sobre la data de las mesas, y que obtuviste 17 resultados repetidos para el Sí, y 16 para el No. O sea, el "No" también estaría siendo afectado por máquinas con topes... ¡estás obteniendo resultados repetidos para ambos lados, no sólo para uno!

Agradezco que hayas sido sincero en tu blog, pues eso ayuda a aclarar que, muy seguramente, no hubo fraude.

Kabal dijo...

Hola Luiggino, yo también tenía esa misma inquietud y dediqué un tiempo a hacer un programita en Visual C++ con un buen generador de números aleatorios. En particular a mi me interesaba conocer el número esperado de centros en los que dos mesas o tres mesas obtengan el mismo número de votos (para culaquiera de las dos opciones) El fuente del programita es bastante corto y puede enviártelo si lo deseas. Estoy asumiendo que el SI obtuvo 44% +- 5 de los votos (distribuidos uniformemente y no normalmente como deberia hacer). Aunque se que probablemtne debi utilizar numeros mas bajos (como un 40%). Asumiendo máquinas con 800 votantes, pude encontrar que para 8000 mesas se puede esperar que en unas 60 existan dos maquinas iguales. Incluso puede esperarse unas 3 maquinas con la misma votacion, asumiendo que en todas las máquinas el número de votos para cada opción sera aprox. el mismo (con una desviación estandar del 10%. Ahora con la data del CNE quiero hacer pruebas con data real para comparar resultados (esto es lo cientificamente correcto). En fin, luego te aviso de los resultados. Porque toda esta información no ha salido en VTV? Por ejemplo ayer escuché a algún disociado decir que en ningun caso la cantidad de votos por el NO en mesas distintas ha sido el mismo, lo cual es una gran MENTIRA!

Saludos

Topocho dijo...

Bien interesante, estoy inundado de trabajo ahorita. Vamos a ver si el fin de semana tengo tiempo de jugar con esto...

Kabal dijo...

Después de analizar la data me encontré con esto:

Rpeticiones para el NO:

Anzoategui\Bolívar\Pq. El Carmen\GRUPO ESCOLAR BOYACA
565 565 184
Aragua\Santiago Mariño\Pq. Saman De Guere\CICLO BASICO MARIÐO
1184 1184
Carabobo\Valencia\Pq. San Jose\LICEO MANUEL FELIPE TOVAR
166 132 132
Distrito Capital\Libertador\Pq. El Valle\ESC BASC PADRE MENDOZA
911 856 911 318
Distrito Capital\Libertador\Pq. La Vega\COLEGIO LA CONCEPCION
233 233 217 145
Distrito Capital\Libertador\Pq. Macarao\U E NAC PARROQUIA MACARAO
910 910 317
Distrito Capital\Libertador\Pq. San Juan\ESCUELA NACIONAL ZOE XIQUES SIDistrito Capital
984 984 622
Distrito Capital\Libertador\Pq. San Juan\LICEO 25 DE JULIO
600 600 194
Distrito Capital\Libertador\Pq. San Pedro\COLEGIO CRISTO REY
239 239 220
Lara\Iribarren\Pq. El Cuji\ESC EST JOSE A GIRARDOT
1020 1020 1067 979
Miranda\Guaicaipuro\Pq. Los Teques\CICLO BASICO COMUN JULIO ROSALMiranda
687 687 284
Miranda\Plaza\Pq. Guarenas\GPO ESC MIGUEL OTERO SILVA
1180 1180 1182 809
Monagas\Maturin\Pq. San Simon\ESC BAS VICENTE SALIAS
597 597 218
Monagas\Maturin\Pq. San Simon\GRUPO ESCOLAR MILA DE LA ROCA
893 893
Nueva Esparta\Maneiro\Cm. Pampatar\E B N JOSE JOAQUIN D OLMEDO
581 581 402
Tachira\Bolívar\Cm. San Ant Del Tachira\ESC MUNICIP JUAN DE DIOS MU OZTachira
507 507
Zulia\Maracaibo\Pq. Chiquinquira\GRUPO ESCOLAR J A ROMAN VALECIZulia
525 525 202
Zulia\Maracaibo\Pq. Francisco Eugenio B.\COLEGIO FE Y ALEGRIA NO 4
867 911 911
Zulia\Maracaibo\Pq. Manuel Dagnino\GRUPO ESCOLAR 15 DE ENERO
780 798 798 733 268
Zulia\Sucre\Pq. Romulo Gallegos\GRUPO ESCOLAR MARIO BRICEÐO IRZulia
914 914 608

Son 20 repeticiones

Para el SI:

Aragua\Francisco Linares AlCm. Santa Rita\Cm. Santa Rita\ESC BAS PARMANACAY
250 248 246 246
Aragua\Sucre\Cm. Cagua\C D RAFAEL HERNANDEZ LEON
411 411 304
Carabobo\Libertador\Pq. Urb. Tocuyito\ESC. EST. CLEOPATRA CASANOVA
290 290 297 115
Carabobo\Valencia\Pq. Miguel Peña\ESC BAS JOSE REGINO PEÐA
352 338 302 338 355 310
Carabobo\Valencia\Pq. Miguel Peña\G E DR FCO ESPEJO
324 356 324 243
Carabobo\Valencia\Pq. Rafael Urdaneta\C B C LUIS SANOJO
756 778 778
Distrito Capital\Libertador\Pq. Antimano\ESC BASC MIGUEL OTERO SILVA
193 193
Lara\Iribarren\Pq. Juan De Villegas\ESC.BAS. LIBERTADOR
167 167
Lara\Iribarren\Pq. Juan De Villegas\ESC.EST.MARIA CONCEPCION P.
241 241
Miranda\Baruta\Pq. Baruta\COLEGIO LA CONCEPCION
1345 1345 873
Monagas\Maturin\Pq. Boqueron\ESC BELTRANA DE FIGUEROA
384 384 307
Sucre\Bermudez\Pq. Santa Catalina\GRUPO ESCOLAR JOSE ANTONIO RODSucre
368 368 101
Tachira\San Cristobal\Pq. Sn Juan Bautista\ESCUELA NACIONAL VIRGILIO PINZTachira
981 981 888
Trujillo\San Rafael De CarvajPq. Antonio N. Briceño\Pq. Antonio N. Briceño\ESC.BAS.JULIO SANCHEZ VIVAS
523 523 320
Zulia\Lagunillas\Pq. Libertad\GRUPO ESCOLAR ISAIAS M ANGARITZulia
659 659 464 232
Zulia\Maracaibo\Pq. Bolivar\GRUPO ESCOLAR JORGE WASHINGTONZulia
787 787 306
Zulia\Maracaibo\Pq. Idelfonzo Vasquez\E B N JULIO GONZALEZ
295 295 185
Zulia\San Francisco\Pq. San Francisco\GRUPO ESCOLAR EDUARDO EMIRO FEZulia
741 741 253

Son 18 repeticiones....

En los medios insisten en decir que han encontrado miles, pero estos son todos los que existen (falta la data adicional que no han montado en la pag. del CNE)

Anónimo dijo...

Excelente trabajo el que están haciendo... deberían buscar las maneras para difundirlo por medios masivos (VTV, por ejemplo)... acérquense por allá, son muy receptivos, y si tienen una laptop mejor.

Ciertamente el CNE aún no ha publicado una hoja excel o txt de los votantes por mesas, pero en la página web de ellos sí existe esta información, aunque difusa. No sé si les sirva de algo. Ya que le meten bien a la programación, hay un programita llamado sitesnagger (o algo por el estilo) que baja todo el contenido de un site al disco duro, tal vez luego puedan hacer un search (sobre lo descargado) de las cadenas de texto donde diga: "Total votantes: ######" y pegar los resultados en una hoja excel, y a jugar se ha dicho!! ;) (véanle otro lado positivo a este trabajito: lo pueden vender en CD a buhoneros claves en diferentes zonas de Caracas y se ganan unos reales ;) )

Saludos!

luigino dijo...

Hola Kabal, excelente trabajo!

Es de notar que están trabajando sobre las MESAS, y las mesas generalmente tenían 2 o 3 máquinas de votación cada una. Por ello tus resultados son distintos a los que la Coordinadora alegaba al principio (aproximadamente 500 repeticiones en las máquinas) o los que alega el Centor Carter (aproximadamente 700 repeticiones).

Pienso que es vital que el CNE publique la data actualizada a nivel no sólo de mesas, sino de cuadernos de votación, ello para determinar de una buena vez cuantas repeticiones hay... si son 500 como decía la oposición al principio, si son 700 como dice la OEA o si son 1800 como dice la oposición hoy.

Y que se publiquen no sólo las mesas automatizadas, sino también las manuales... si encontramos también los topes y patrones en las mesas manuales (donde habían testigos de la oposición que vigilaron el conteo), pues entonces estaremos frente a una singularidad estadística y no frente a un "tope" en las máquinas.



Sobre lo de VTV: no hemos pedido que lo publiquen allá porque...

(1) Lo que hice lo hice como hobbie. No es 100 por ciento científico, como admití en el post original, ello debido a que no estamos trabajando con la data del CNE a nivel de cuadernos, y a que no se están generando los votos utilizando una distribución probabilística lo suficientemente acertada, sino que estamos usando una distribución uniforme sobre 60 resultados.

YO pienso que el programa sí genera resultados bastante cercanos a los reales (400-420 versus los 500 que alega la oposición), pero a lo mejor un estadítico o un matemático está en desacuerdo conmigo.

(2) Trabajo para la página web de Radio Nacional de Venezuela (www.rnv.gov.ve) y si bien todo lo que estoy haciendo lo estoy haciendo por mi cuenta, de una forma independiente, sin embargo alguien va a decir que mi trabajo no puede ser admitido por trabajar para el Estado.


Sin embargo, estoy orgulloso de decirles que hoy en la tarde estaba en una camioneta por puesto con KYS FM puesto, y la locutora leyó desde Aporrea la noticia sobre esta humilde paginita web :) :) :) Gracias a ellos por su ecuanimidad.

Anónimo dijo...

1ro. Soy un opositor (Y)

Soy opositor dado que me duele mi país y creo que se están haciendo cosas muy malas para su futuro, quizás Chavez tiene muy buenas ideas pero está muy mal acompañando. Quienes ejecutan los planes tácticos se están engordando y desde arriba se tapan los ojos. Eso de que los de antes eral igual no me importa, yo tengo la esperanza de que algún día nos organicemos bien y tengamos personas +/-honestas manejando los dineros públicos, y so no son honestas, que la contraloría las controle.

2do. Chavez ganó y estaba claro desde la tarde del domingo, al menos para mí.

Yo no creo que hubo fraude. Yo creo que la mayoría salió y voto NO y hay muchos que no lo quieren aceptar, así de simple.

Yo creo que lo que hubo fue corrupción. Se gastó mucho dinero para que las clases C,D y E crean tienen una esperanza que para mi no la tienen. Es mi opinión y respeto las de los demás aunque no las comparta.

Mi teoría, en complemento al párrafo anterior es que:

1.- El CNE dio todas las señales para que se considerase que el proceso era hasta las 4-6 de la tarde
2.- Dieron riendas sueltas ya terminada la tarde
3.- La oposición se acostó luego de haber celebrado y ...
4.- Maisanta arremetió al final moviendo la maquinaria y buscando sus votos, llevando a su gente a votar. Esto es perfectamente legal si no se usan los dineros del estado. Esto es lo que siempre se había hecho.
Walaaa! Perdimos :-(

Parece que el voto oculto era NO :-|

Anónimo dijo...

Según tú: "simulastes el REFERENDO REVOCATORIO", pero en el fondo lo que hicistes fue simular un centro de votación, generastes muestras con la función rnd, que generan valores con distribución normal(0,1), la teoría de la Simulación dice que los resultados esperados deben distribuirse normalmente, como en efecto te sucedió.
Tu programa está lejos, pero muy lejos, de reprsentar un modelo de simulación del REFERENDO REVOCATORIO, por el contrario es un buen ejercicio para principiantes de la simulación.

luigino dijo...

En ningún momento dije que fuera a simular el referendo revocatorio; sólo estoy simulando aspectos claves del mismo, haciendo salvedades muy importantes como la que dices y que he especificado desde un principio.

En este post hice otra aclaratoria al respecto, con la ayuda de un profesor de la USB.

Insisto: Si vamos a discutir, lean primero todo que escribo, no sólo el pedacito que les conviene. Otra cosa: no pongan palabras en mi boca que no he dicho.

Y, por último, el código fuente de mi primitivo programa está disponible para que cualquier pesona, incluyendo la oposición (que son los interesados en probar el "fraude") lo mejoren utilizando la data real del referendo y le apliquen distribuciones probabilísticas gaussianas o binomiales.