List of methods

Highest averages methods

  • \(r(k)\): \(k+1\)th divisor
Method Argument Rule Approx. first values
D’hondt / Jefferson "d'hondt", "dt", or "jefferson" \(r(k) = k + 1\) 1, 2, 3, 4, …
Adams / Cambridge "adams" or "cambridge" \(r(k) = k\) 0, 1, 2, 3, …
Sainte-Laguë / Webster "sl", "sainte-lague", or "webster" \(r(k) = k + 0.5\) 0.5, 1.5, 2.5, 3.5, …
Modified Sainte-Laguë "msl" \(r(k) = k + 0.5, r_1 = 0.7\) 0.7, 1.5, 2.5, 3.5, …
Danish "danish" \(r(k) = k + \frac{1}{3}\) 0.33, 1.33, 2.33, 3.33, …
Imperiali "imperiali" \(r(k) = k + 2\) 2, 3, 4, 5, …
Huntington-Hill "hh" or "huntington-hill" \(r(k) = \sqrt{k (k + 1)}\) 0, 1.41, 2.45, 3.46, …
Dean "dean" \(r(k) = \frac{2}{\frac{1}{k} + \frac{1}{k + 1}}\) 0, 1.33, 2.40, 3.43, …
\(\alpha\)-divergence "ad" See Note 1 See Note 1
Custom divisor "custom divisor" or "cd" See Note 2 See Note 2

Largest reminder method

  • \(Q\): Quota
  • \(v\): Total votes
  • \(m\): Magnitude (total seats)
Method Argument Quota
Hare-Niemeyer quota "hn", "hare", or "hare-niemeyer" \(Q = \frac{v}{m}\)
Droop quota "droop" \(Q = 1 + \frac{v}{1 + m}\)
Hagenbach-Bischoff quota "hb" or "hagenbach-bischoff" \(Q = \frac{v}{1 + m}\)
Imperiali quota "iq" or "imperiali quota" \(Q = \frac{v}{2 + m}\)
Custom quota "custom quota" or "cq" See Note 3

Divisor (\(r(k)\)) is calculated as follow:

\[ r(k) = \begin{cases} \frac{1}{e} \frac{(k + 1)^{k + 1}}{k^k}& \mbox{if}\quad\alpha = 1,\\ \frac{1}{\log{\frac{k + 1}{k}}} & \mbox{if}\quad\alpha = 0,\\ \Bigl(\frac{(k + 1)^\alpha - k^\alpha}{\alpha}\Bigr)^{\frac{1}{\alpha - 1}} & \mbox{otherwise.}\\ \end{cases} \]

\(\alpha\) Method
+\(\infty\) D’hondt / Jefferson
3 \(\frac{1}{3}\)
2 Sainte-Laguë / Webster
1 Theil
0 Theil and Schrage
-1 Hill
-4 \(\simeq\)Dean
-\(\infty\) Adams / Cambridge

Please note that extra parameter \(\alpha\) is required (extra).

library(PRcalc)
data(jp_upper_2019)
# Jefferson vs alpha = 10
list(prcalc(jp_upper_2019, m = 50, method = "dt"),
     prcalc(jp_upper_2019, m = 50, method = "ad", extra = 10)) |> 
  compare() |> 
  print(use_gt = TRUE)
Party Model1 Model2
自民 18 18
公明 7 7
立憲 8 8
維新 5 5
共産 5 5
国民 3 3
れいわ 2 2
社民 1 1
N国 1 1
安楽死 0 0
幸福 0 0
オリーブ 0 0
労働者 0 0
# Dean vs alpha = -4
list(prcalc(jp_upper_2019, m = 50, method = "dean"),
     prcalc(jp_upper_2019, m = 50, method = "ad", extra = -4)) |> 
  compare() |> 
  print(use_gt = TRUE)
Party Model1 Model2
自民 17 17
公明 6 6
立憲 7 7
維新 5 5
共産 4 4
国民 3 3
れいわ 2 2
社民 1 1
N国 1 1
安楽死 1 1
幸福 1 1
オリーブ 1 1
労働者 1 1

Please note that extra parameter (extra) is required. extra must be length of maximum value of m or longer.

list(prcalc(jp_upper_2019, m = 50, method = "msl"),
     prcalc(jp_upper_2019, m = 50, method = "cd", 
            extra = c(1.4, seq(3, 100, by = 2)))) |> 
  compare() |> 
  print(use_gt = TRUE)
Party Model1 Model2
自民 18 18
公明 7 7
立憲 8 8
維新 5 5
共産 5 5
国民 3 3
れいわ 2 2
社民 1 1
N国 1 1
安楽死 0 0
幸福 0 0
オリーブ 0 0
労働者 0 0

For detail, see “Customized allocation methods” section in calculation tutorial.

Please note that extra parameter (extra) is required. extra must be length of maximum value of m or longer. For detail, see “Customized allocation methods” section in calculation tutorial.