4.6 Lowndes’ Method
William Lowndes (1782-1822) was a Congressman from South Carolina (a small state) who proposed a method of apportionment that was more favorable to smaller states. Unlike the methods of Hamilton, Jefferson, and Webster, Lowndes’s method has never been used to apportion Congress.
Lowndes believed that an additional representative was much more valuable to a small state than to a large one. If a state already has 20 or 30 representatives, getting one more doesn’t matter very much. But if it only has 2 or 3, one more is a big deal, and he felt that the additional representatives should go where they could make the most difference.
Like Hamilton’s method, Lowndes’s method follows the quota rule. In fact, it arrives at the same quotas as Hamilton and the rest, and like Hamilton and Jefferson, it drops the decimal parts. But in deciding where the remaining representatives should go, we divide the decimal part of each state’s quota by the whole number part (so that the same decimal part with a smaller whole number is worth more, because it matters more to that state).
# Math in Society 4.6 -- Lowndes' Method: who does a leftover seat matter MOST to?
# Hamilton ranks leftovers by the raw decimal part. Lowndes divides that decimal by
# the whole number already earned, so the same decimal counts for more when the
# state is small.
def compare(pops, seats, label):
divisor = sum(pops.values()) / seats
quota = {k: v / divisor for k, v in pops.items()}
base = {k: int(q) for k, q in quota.items()}
dec = {k: quota[k] - base[k] for k in pops}
ratio = {k: dec[k] / base[k] if base[k] else float("inf") for k in pops}
spare = seats - sum(base.values())
ham_wins = sorted(pops, key=lambda k: (-dec[k], k))[:spare]
low_wins = sorted(pops, key=lambda k: (-ratio[k], k))[:spare]
print(f"{label}: {seats} seats, divisor {divisor:,.5f}, "
f"{spare} leftover seat(s) to place")
print(f" {'':<12}{'quota':>10}{'lower':>7}{'decimal':>10}"
f"{'dec/whole':>11}{'Hamilton':>10}{'Lowndes':>9}")
for k in sorted(pops, key=lambda k: -pops[k]):
print(f" {k:<12}{quota[k]:>10.4f}{base[k]:>7}{dec[k]:>10.4f}"
f"{ratio[k]:>11.4f}{base[k] + (k in ham_wins):>10}"
f"{base[k] + (k in low_wins):>9}")
if set(ham_wins) != set(low_wins):
print(f" the two methods disagree: Hamilton hands the spare seat(s) to "
+ ", ".join(ham_wins))
print(f" {'':<26}Lowndes hands them to " + ", ".join(low_wins))
else:
print(" both methods place the leftover seat(s) identically here")
print()
delaware = {"Kent": 162310, "New Castle": 538479, "Sussex": 197145}
rhode_island = {"Bristol": 49875, "Kent": 166158, "Newport": 82888,
"Providence": 626667, "Washington": 126979}
compare(delaware, 41, "Delaware")
compare(rhode_island, 75, "Rhode Island") # EDIT: change either house size
print("New Castle's decimal (.5872) beats Kent's (.4111), so Hamilton gives it the")
print("seat. But .5872 spread over 24 seats New Castle already holds is worth far")
print("less per seat than .4111 spread over Kent's 7, so Lowndes gives it to Kent.")
print("Neither is 'right' -- they answer different questions about what a seat is for.")
print("Try it: run compare(rhode_island, 73, 'Rhode Island') and then 77. Count how")
print("often Providence, the largest county, wins a leftover under each method.")
Adapted from Math in Society by David Lippman, hosted on LibreTexts (math.libretexts.org) and licensed under CC BY-SA 3.0. Changes were made. License: CC-BY-SA-3.0.