En los sistemas electorales de representación proporcional es necesario utilizar un algoritmo para asignar los escaños de las circunscripciones a los partidos o listas electorales. Convirtiendo así los votos en escaños. El método Sainte-Laguë, también conocido como el método Webster o el método de cociente y resto, es la opción que se utiliza en países como Alemania, Noruega, Suecia o Dinamarca. Siendo un método similar en funcionamiento al D’Hondt en el que solamente se usan divisores impares, lo que hace que los partidos más votados reciban menos escaños. En esta entrada se va a ver las bases del método Sainte-Laguë y como se puede implementar en Python.
Fundamentos del método Sainte-Laguë
El método Sainte-Laguë es un sistema para asignar escaños en sistemas de representación proporcional similar al método D’Hondt. La principal diferencia es que solamente usa divisores impares para calcular los cocientes que determinarán la asignación de escaños, esto es, 1, 3, 5, … Lo que debería favorecer a los partidos más pequeños respectó al al método D’Hondt. El procedimiento para asignar los escaños según el método Sainte-Laguë es:
- Votos obtenidos por cada partido: Al igual que en el método D’Hondt, primero se recopilan los resultados electorales y se cuentan los votos obtenidos por cada partido o lista electoral.
- Divisor inicial: A diferencia del método D’Hondt, el método Sainte-Laguë utiliza un divisor inicial de números impares, comenzando con el número 1, y luego se incrementa de forma secuencial (3, 5, 7, etc.). Los divisores impares tienden a favorecer a los partidos más pequeños.
- Cálculo de cocientes: Se divide el número de votos obtenidos por cada partido entre el divisor actual para obtener un cociente. Este cociente representa cuántas veces el partido ha superado el divisor. \textrm {Cociente} = \frac{\textrm{Votos del partido}}{\textrm{Divisor actual}}
- Asignación de escaños: El escaño se asigna al partido que tenga el cociente más alto en cada ronda. Es decir, el partido que haya obtenido más votos en relación con el divisor actual. Ese partido recibe un escaño.
- Actualización del divisor: Después de asignar un escaño, se actualiza el divisor para el siguiente cálculo. El divisor se incrementa en 2 unidades. \textrm{Divisor actualizado} = \textrm{Divisor actual} + 2
- Repetición del proceso: Los pasos 3 al 5 se repiten hasta que se asignan todos los escaños disponibles.
El método Sainte-Laguë también se puede utilizar con un umbral electoral para evitar que los partidos que no superan un cierto porcentaje de votos obtengan escaños.
Implementación en Python del método Sainte-Laguë
El método Sainte-Laguë solamente incluye un cambio respecto al método D’Hondt, el uso de divisores impares. Un cambio que se puede introducir fácilmente en la función implementada la semana pasada para el método D’Hondt. Lo que se muestra en el siguiente código.
def sainte_lague_method(votes, num_seats): """ Método para aplicar el método Sainte-Laguë y obtener la asignación de escaños. Parámetros ---------- votes : array-like, shape (num_parties, ) Una lista o array con los votos obtenidos por cada partido. num_seats : int Número total de escaños a asignar. Retorna ------- seats : array, shape (num_parties,) Una lista con el número de escaños asignados a cada partido. """ num_parties = len(votes) # Inicializar la asignación de escaños a cero seats = [0] * num_parties # Realizar el proceso de asignación de escaños for _ in range(num_seats): max_index = max(range(num_parties), key=lambda i: votes[i] / (2 * seats[i] + 1)) seats[max_index] += 1 return seats
En este ejemplo lo primero que se hace es calcular el número de partidos en base a la lista de votos. Luego se crea una lista de escaños para cada uno de los partidos inicializada a cero. Finalmente, se hace una iteración en la que se asignan los escaños a la lista con los restos más altos.
Notase que la única diferencia con el método de D’Hondt se encuentra en la línea 25. En esta línea, para el método de D’Hondt el divisor era seats[i] + 1
, donde seats[i]
es el número de escaños asignados hasta ese momento a la lista i
. Para el método Sainte-Laguë se usa 2 * seats[i] + 1
.
Evaluación de los resultados y comparación con el método D’Hondt
Se puede evaluar la implementación del método Sainte-Laguë y cómo varían los resultados en comparación con el método de D’Hondt. Por ejemplo, se puede ver en una circunscripción pequeña en la que solamente se reparten 4 escaños. (El código de la función dhondt_method
y sus detalles se pueden ver en esta entrada o en el apéndice).
votes = [15000, 12000, 8000, 6000, 2000, 1200] print("D'Hondt: ", dhondt_method(votes, 4)) print("Sainte-Laguë: ", sainte_lague_method(votes, 4))
D'Hondt: [2, 1, 1, 0, 0, 0] Sainte-Laguë: [1, 1, 1, 1, 0, 0]
En este ejemplo se puede ver como el método D’Hondt beneficia al partido más votado con un escaño adicional respecto a lo que ofrece el método Sainte-Laguë. Escaño que pierde la cuarta lista. Esto es así porque a la hora de repartir el último escaño el método de D’Hondt 2 como divisor para el primer partido (15.000 / 2 = 7500), mientras que el Sainte-Laguë usar 3 (15.000 / 3 = 5000). Por lo que el método D’Hondt asigna el último escaño al primer partido porque el cociente supera a los 6000 del cuarto, lo que no es así en el caso del método Sainte-Laguë.
Usando el mismo número de votos, si se repartieran 10 escaños no existirá diferencia entre el método D’Hondt y el de Sainte-Laguë. Lo que se puede ver en el siguiente ejemplo.
print("D'Hondt: ", dhondt_method(votes, 10)) print("Sainte-Laguë: ", sainte_lague_method(votes, 10))
D'Hondt: [4, 3, 2, 1, 0, 0] Sainte-Laguë: [4, 3, 2, 1, 0, 0]
Si se repartieran 35 escaños, habría un pequeño baile entre los partidos minoritarios. Aunque el reparto es similar.
print("D'Hondt: ", dhondt_method(votes, 35)) print("Sainte-Laguë: ", sainte_lague_method(votes, 35))
D'Hondt: [12, 10, 6, 5, 1, 1] Sainte-Laguë: [12, 9, 6, 5, 2, 1]
En este caso el segundo partido pierde un escaño que recae sobre el quinto.
Conclusiones
El método Sainte-Laguë es una alternativa al método D’Hondt para asignar los escaños en un sistema electoral. Como se ha visto en los ejemplos, el método Sainte-Laguë beneficia a los partidos pequeños respecto a los grandes. Algo que se aprecia especialmente en las circunscripciones pequeñas donde hay pocos asientos en juego.
Apéndice
La implementación de la función dhondt_method
que se explicó en una publicación sobre el método D’Hondt es:
def dhondt_method(votes, num_seats): """ Método para aplicar el método D'Hondt y obtener la asignación de escaños. Parámetros ---------- votes : array-like, shape (num_parties, ) Una lista o array con los votos obtenidos por cada partido. num_seats : int Número total de escaños a asignar. Retorna ------- seats : array, shape (num_parties,) Una lista con el número de escaños asignados a cada partido. """ num_parties = len(votes) # Inicializar la asignación de escaños a cero seats = [0] * num_parties # Realizar el proceso de asignación de escaños for _ in range(num_seats): max_index = max(range(num_parties), key=lambda i: votes[i] / (seats[i] + 1)) seats[max_index] += 1 return seats
Imágenes: Unsplash (Arnaud Jaegers)
Deja una respuesta