In 2000, Al Gore and George W. Bush ran for president of the United States. Gore, the Democratic candidate, lost to Bush, the Republican candidate, by 537 votes Florida. If Gore had won in Florida, he would have received Florida’s electoral college votes and been elected president. Many voters in Palm Beach County (PBC) Florida claimed that they mistakenly voted for Buchanan, the Reform party candidate, instead of Gore, and, indeed, Buchanan received quite a bit more votes than expected in PBC. Conventional wisdom says that few voters in PBC would cast their vote for Buchanan because it is a heavily Democratic county. In fact, Buchanan did not pay any visits to PBC prior to the election, and his campaign did not purchase any ads in the county. However, Buchanan received several thousand votes in PBC. PBC had adopted a new ballot format for the 2000 election, and claims were that this new format had misled voters.

In this case study, we consider the question: Is there strong evidence that votes were miscast in PBC, and if so, was the number of miscast votes enough to have tipped the presidential vote in Florida from Bush to Gore?

The Butterfly Ballot

The butterfly ballot, shown in the figure below, has a distinctive format. It is called a ‘butterfly’ because it has two columns of candidate names (the wings) with a column of punch holes in between (the body). These punch holes are alternating in that the top punch hole corresponds to the first candidate in the left-hand column, the next punch hole aligns with the first candidate on the right-hand side, the punch hole below that is for the second candidate on the left, and so on. For this particular ballot, the first punch hole (see the figure below) corresponds to Bush, the second punch hole is for Buchanan (the first candidate on the right), and the third aligns with Gore (the second candidate on the left). Voters claimed that they mistakenly punched the second hole (i.e., the punch hole for Buchanan) when they thought they were voting for the second candidate on the left (Gore).

In this case study, we examine voting patterns and try to ascertain whether the butterfly ballot in PBC cost Gore the presidency. More specifically, we consider the following questions:

To address these questions, we examine two data sets. The first contains the Florida county vote totals for Bush, Gore, and Buchanan. The second data set gives us a rare picture of how an individual voter in PBC cast his or her vote for president and for US senate. Our analysis is adapted from the analysis provided in Wand et al (2001).

Exploring Vote Counts

We begin by comparing the vote tallies for the counties in Florida so that we can whether or not the votes for Buchanan in PBC are any different than the results for the other counties. We load the data into R from the Web as follows:

load(url("http://www.stat.berkeley.edu/~nolan/data/stat101/election2000CountyFL.rda"))

We now have the data set countyFL in our workspace, and we can examine the first few records to get an idea of the variables and their values.

head(countyFL)
##          county totalVotes buchananVotes goreVotes bushVotes absVotes
## 1 Alachua            85729           263     47365     34124    10694
## 2 Baker               8154            73      2392      5610     1111
## 3 Bay                58805           248     18850     38637    12587
## 4 Bradford            8673            65      3075      5414     1126
## 5 Brevard           218395           570     97318    115185    31811
## 6 Broward           575143           795    387703    177902    48525
##   absBuchanan
## 1          40
## 2           4
## 3          37
## 4           4
## 5          83
## 6          83

We see that there are seven variables in the data set: county holds the county name; totalVotes provides the total number of votes cast in the election in that county; and the number of votes Buchanan, Gore, and Bush received are available in buchananVotes, goreVotes, and bushVotes, respectively. In addition, we have absVotes, the number of votes that were cast absentee, and absBuchanan, the number of absentee votes for Buchanan. Note that from these variables, we can easily find the total number of votes cast on election day and also the number of votes cast for Buchanan on election day.

To get a sense of the level of support for the candidates across the counties, we explore summary statistics for these variables.

summary(countyFL)
##            county     totalVotes     buchananVotes      goreVotes     
##  Alachua      : 1   Min.   :  2410   Min.   :   9.0   Min.   :   789  
##  Baker        : 1   1st Qu.:  8082   1st Qu.:  46.5   1st Qu.:  3058  
##  Bay          : 1   Median : 35149   Median : 120.0   Median : 14167  
##  Bradford     : 1   Mean   : 88964   Mean   : 260.9   Mean   : 43454  
##  Brevard      : 1   3rd Qu.:103040   3rd Qu.: 285.5   3rd Qu.: 46015  
##  Broward      : 1   Max.   :625449   Max.   :3411.0   Max.   :387703  
##  (Other)      :61                                                     
##    bushVotes         absVotes      absBuchanan    
##  Min.   :  1317   Min.   :  211   Min.   :  0.00  
##  1st Qu.:  4757   1st Qu.: 1118   1st Qu.:  5.50  
##  Median : 20206   Median : 5581   Median : 16.00  
##  Mean   : 43451   Mean   :10606   Mean   : 27.54  
##  3rd Qu.: 56546   3rd Qu.:13843   3rd Qu.: 40.00  
##  Max.   :289533   Max.   :48525   Max.   :129.00  
## 

We can see from the summary of totalVotes that half of the counties had fewer than 35,000 voters, but one quarter of the counties had between 100,000 and 625,000 voters. Additionally, we see from the summary of buchananVotes that Buchanan typically received very few votes; the upper quartile is only 286 and the most votes Buchanan received was 3411. Furthermore, the number of absentee votes for Buchanan was under 130 in every one of the counties. Lastly, we note that the summary of the county names indicates that Florida has 67 counties.

We can visually examine votes for Buchanan in all Florida counties with a simple dot chart. To help us compare counties, we order them according to their Buchanan vote count.

orderCounts = order(countyFL$buchananVotes)
with(countyFL, 
     dotchart(buchananVotes[orderCounts], 
              labels = county[orderCounts], cex = 0.6))

From the dot chart, we see that Buchanan received the greatest support in PBC; the county with the next highest vote count for Buchanan is Pinellas County with about 1000 votes. Since Bush won the state by 537 votes, if many of the PBC votes were miscast and should have gone to Gore, then indeed Gore might have been the victor. That is, there were enough votes cast for Buchanan in PBC to entertain the possibility that mistakenly cast votes impacted the election outcome.

We have seen already that the total votes cast in a county ranges from 2,400 to 625,000 so we consider whether the large vote count in PBC is simply a reflection of a large number of voters in that county. In other words, we want to examine the relationship between the votes for Buchanan and the total votes in the Florida counties. One way to do this is to make a scatter plot of Buchanan votes against the total votes (see below). In this plot, we make it easy to spot the point corresponding to PBC by marking it with a solid red dot.

with(countyFL, plot(buchananVotes ~ totalVotes, axes = FALSE,
                    ylab = "Buchanan Votes", xlab = "Total Votes"))
xs = seq(0, 600000, by = 100000)
axis(1, at = xs, labels= sprintf("%6.0f", xs))
axis(2)
box()
# PBC is row 50 in countyFL
with(countyFL, points(x = totalVotes[50], y = buchananVotes[50],
                      col = "red", pch = 19))

From this scatter plot, we make a couple of observations. First, we see that PBC does have a large number of voters; it is the third largest county in the state in terms of total votes. Even so, the number of Buchanan votes in PBC seems unusually large for a county of its size. However, count data typically has the property that larger values have greater variability. Let’s change tack and examine the proportion of votes cast for Buchanan.

Exploring Vote Proportions

We begin our exploration of the proportion of votes for Buchanan with another dot chart. This time, we plot the number of votes for Buchanan per 1000 votes cast, i.e., we compute \(1000 \times Buchanan ~ votes / Total ~votes\). These values are simply re-scaled proportions. We multiple the proportion of Buchanan votes by 1000 simply to make the values easier to read and compare, i.e., when we scale by 1000 we get numbers that are larger than 1 rather than tiny proportions less than 0.01. As before, we order the counties according to these values (votes for Buchanan per 1000 votes).

buchananProp = 1000* countyFL$buchananVotes / countyFL$totalVotes
orderProp = order(buchananProp)
with(countyFL, dotchart(buchananProp[orderProp], 
                        labels = county[orderProp], cex = 0.5))

In this updated dot chart, PBC is only the ninth largest of the 67 counties in Florida. The PBC proportion no longer seems that surprising. However, as with the vote counts, it’s important to view these values in the context of the total number of votes cast in the counties. The following scatter plot shows the relationship between these two variables.

with(countyFL, plot(buchananProp ~ totalVotes, axes = FALSE,
     xlab = "Total Votes", ylab = "Buchanan Votes per 1000 Total Votes"))
axis(1, at = xs, labels = sprintf("%6.0f", xs))
axis(2)
box()
with(countyFL, points(x = totalVotes[50], y = buchananProp[50],
                      col = "red", pch = 19))

This scatter plot reveals a very different pattern of points than before. The display of points has a funnel shape. The counties with small total votes tend to have the most variation in their proportions. While several counties have larger proportions voting for Buchanan than PBC, for its size, the PBC proportion appears unusual. Let’s get a better understanding of this funneling before we try to ascertain the strength of the evidence vis-a-vis Buchanan’s support in PBC.

The funneling phenomena is a consequence of the law of large numbers. We take a short detour to investigate this property of averages before continuing with our study of PBC.

Law of Large Numbers

The binomial distribution is a probability distribution for count data. Coin flipping is a simple example. Each time we flip a coin we have chance \(1/2\) of the coin landing heads and the count, i.e., the number of heads among the flips, follows a binomial distribution. More generally with the binomial distribution, we have \(n\) trials, on each trial we have the same chance \(p\) of success, and the trials are independent of one another. In our coin flipping example, a ‘trial’ is a flip of the coin and a ‘success’ is the coin landing heads.

We can think of the votes for Buchanan in a county as following a binomial distribution. Here each voter is a ‘trial’ and ‘success’ is a vote for Buchanan so the vote count for Buchanan in a county follows a binomial distribution with \(n\) being the total votes cast in the county and \(p\) the support for Buchanan. We can estimate \(p\) with the observed proportion of votes for Buchanan, just as we might estimate \(p\) in coin flipping by the proportion of heads among the flips. We are making several assumptions when we use the binomial distribution to describe Buchanan votes. Particularly, we assume Buchanan’s support in a county is roughly the same for all types of voters, e.g., the same among men and women. For now, we entertain this possibility and explore the distribution of the proportion of votes for Buchanan for counties of different sizes.

To explore the behavior of the observed proportion of successes from a binomial distribution, we carry out a simulation study. We generate binomial random counts for \(p = 0.005\), which is near Buchanan’s typical support in a county. We let \(n\) range from 2,500 to 65,000, which covers the range of Florida county sizes. For each \(n\), we generate a few thousand possible random vote counts (votes for Buchanan) and compute their proportions of successes. The plot below shows these simulated proportions plotted against their corresponding county sizes. We have jittered the sizes to make it easier to see the points, and we use transparent coloring for the dots so that we can see the over plotting more easily.

p = 0.005
ns = seq(2400, 65000, by = 200)
samps = mapply(rbinom, n = 1000, prob = p, size = ns)
sampsToProps = t(apply(samps, 1, function(counts) counts/ ns))
plot(y = sampsToProps[1, ], x = ns, type = "n", xlim = c(1000, 50000),
     ylim = c(0, 0.01), xlab = "n", ylab = "Observed Proportion",
     main = "Simulation Study, Binomial(n, p = 0.005)")
greyT = rgb(190, 190, 190, 5, maxColorValue = 255)
apply(sampsToProps, 1, function(ys) 
  points(x = jitter(ns, 10), y = ys, pch = 19, cex = 0.4, col = greyT))
## NULL
lines(x = ns, y = p + 2 * sqrt(p * (1-p)/ns), col = "red")
lines(x = ns, y = p - 2 * sqrt(p * (1-p)/ns), col = "red")

We see in this plot that the smaller samples (counties) have greater variability in the observed proportion. This property follows from the law of large numbers, which says that as the sample size increases, the distribution of a sample average of independent observations gets closer to the expected average. In this simulation, the sample proportion is essentially a sample average because it is the average of \(n\) 0-1 values, where 1 indicates success and 0 failure on a trial.

We can extend our understanding of the properties of the sample proportions with some knowledge of the binomial distribution. Recall that for a binomial with \(n\) trials and probability of success \(p\), the expected number of success is \(np\). The actual number of successes varies about \(np\) with a standard deviation (SD) of \(\sqrt{np(1-p)}\). For the proportion of successes, we divide the number of successes by \(n\) so the expected proportion of successes is \(p\), and the observed proportion varies about \(p\) with an SD of \(\sqrt{p(1-p)}/\sqrt{n}\). We overlaid on the simulation plot two curves at \(+/- 2SD\)s, i.e., at \(+/-2 \sqrt{0.005(0.995)}/\sqrt{n}\).

We see in the plot the same funnel shape that we observed in the plot of Buchanan’s proportions in the Florida counties. This funneling decreases with the square root of the sample size, i.e., with the decrease in SD. Moreover, nearly all of the sample proportions fall between the two curves. This property follows from the Central Limit Theorem which says that the binomial distribution roughly follows the normal distribution when \(n\) is large. In this case, we expect about 95% of the observations to fall between the curves. A rule of thumb for determining if \(n\) is large enough for the CLT to hold is whether \(\sqrt{np(1-p)} > 3\). This is the case for \(p=0.005\) and all \(n\) in our study.

Overdispersion of the binomial

We noted earlier that the binomial distribution might not accurately capture the voting process because different groups of people often behave differently when casting their votes. That is, voters of the same gender, race, and location tend to have similar voting patterns, and these patterns often differ from voters in other groups. A more reasonable model typically has a voter’s support depend on the group to which they belong. In this situation, the variability in counts tends to be larger than described by the binomial (i.e., larger than \(\sqrt{np(1-p)}\)). This phenomenon is called over-dispersion. Researchers have estimated the over-dispersion for the 2000 presidential race to be about a factor of 3.8, i.e., the standard deviation is about 3.8 times larger than that calculated from the simple binomial. We can use this factor to correct the estimate of the SD of the proportion of votes for Buchanan in each of the counties. We make this adjustment in our calculations in the next section.

A Natural Experiment

In PBC, the absentee ballot did not use the butterfly format. This means that we have a natural experiment: one group of PBC voters used a butterfly ballot and another group did not. With these data we can address the question: How does Buchanan’s support in PBC on election day compare to his support on absentee ballots?

We call this experiment ‘natural’ because the voters were not randomly assigned to vote absentee or on election day. Voters themselves determined when they were going to vote. This means that these two groups of voters may be different in important ways, i.e., ways that could impact who they voted for. However, in all of the other counties in Florida, the election day ballot and absentee ballot were the same format, and none of them used the butterfly format. Since there’s no reason to believe the decision to vote absentee in PBC is any different than the decision made by voters in the other counties, we can compare the difference between absentee and election-day voting patterns for PBC to the differences in the other counties. That is, for each county in Florida, we calculate the difference: \[ election~day~Buchanan~proportion - absentee~Buchanan~proportion\] We can examine the typical fluctuations for the counties and determine whether or not the difference for PBC is anomalous.

We begin by computing the two proportions for each county, i.e., the proportion of absentee voters who voted for Buchanan and the proportion of election-day voters who voted for him.

# Compute the number of votes cast on election day 
edayTotalVotes = countyFL$totalVotes - countyFL$absVotes
edayBuchanan = countyFL$buchananVotes - countyFL$absBuchanan

# Compute the proportion of votes for Buchanan absentee and on election day
edayBuchananProp = edayBuchanan / edayTotalVotes
absBuchananProp = countyFL$absBuchanan / countyFL$absVotes

Then, we calculate the difference in these two proportions for all of the counties.

diffEdayAbs = edayBuchananProp - absBuchananProp

We have seen already that the proportion of Buchanan voters has an SD that decreases with total votes. This means that we need to standardize these differences so that they can be directly compared. We do this next.

Standardizing the Difference in Proportions

From our simulation study and our knowledge of the binomial distribution, we found the standard deviation of an observed proportion is \(\sqrt{p(1-p)}/\sqrt{n}\). We also noted how the county-level counts (and proportions) in our situation are over-dispersed by a factor of 3.8 in comparison to the typical binomial. That is, the SD for the observed proportion is around \[ 3.8 \sqrt{p(1-p)} / \sqrt{n},\] where \(p\) is the proportion of votes for Buchanan in a county and \(n\) is the total votes in that county.

Taking this over-dispersion into account, we estimate the SD of our election-day and absentee proportions to be

sdEdayProp = 3.8 * 
  sqrt(edayBuchananProp * (1 - edayBuchananProp) / edayTotalVotes)
sdAbsProp = 3.8 * 
  sqrt(absBuchananProp * (1 - absBuchananProp) / countyFL$absVotes)

Our goal is to standardize the differences in the observed county proportions. To do this, recall that the variance of a difference of independent random variables is the sum of their variances, so the standard deviation of the difference is the square root of this sum of variances. In our situation, we can think of election-day and absentee voters acting independently so the SD of the difference in the two proportions is \[SD_{difference} = \sqrt{SD_E^2 + SD_A^2},\] where \(SD_E\) and \(SD_A\) are the SDs for election-day and absentee Buchanan proportions in a county, respectively. We compute the SD for each county’s difference as follows:

sdDiffProp = sqrt(sdEdayProp^2 + sdAbsProp^2)

And we standardize the differences with

diffEdayAbsStd = diffEdayAbs / sdDiffProp

In PBC, the difference between election-day and absentee support for Buchanan is 0.0063413 and the SD of the difference is 0.0010043. This means that in standard units, the PBC difference is 6.3140267.

hist(diffEdayAbsStd, breaks = 30, 
     xlab = "Standardized Differences", 
     main = "Election Day - Absentee Buchanan Proportions")

A histogram of these standardized scores reveals that all of the remaining 66 counties in Florida are within 2 SDs of 0. The chance of at least one of 67 standardized-scores being 6 SDs above 0 is less than 1 in 15 million. To compute this chance, we assume the difference between the absentee and election-day proportions is 0, and the standardized scores are approximately normal, i.e., these are \(z\)-scores. As mentioned in the simulation study, the assumption of normality seems reasonable.

Given how unlikely the PBC difference is, let’s try to estimate the number of miscast votes that Buchanan received in PBC.

Estimating the Number of Miscast Votes

Our previous analysis provides very strong evidence in support of the butterfly ballot being the cause of the unusually large number of votes for Buchanan on election day in PBC. In PBC, on election day, \(387356\) votes were cast. If the election-day voters had cast ballots for Buchanan at the same rate as the absentee voters, then Buchanan would have received \(0.0022\) of the election-day votes, i.e., \(387356 \times 0.0022 = 854\) votes. However, Buchanan received 3,310 votes on election day. We can estimate the number of accidental votes Buchanan received due to the butterfly ballot as the difference: \(3310 - 854 = 2456\) votes. Of these \(2456\) votes, some might have gone to Bush or candidates other than Gore. We can conservatively say that since Gore received 62% of all votes in PBC, he also received 62% of the miscast votes. This amounts to 1529 votes. This is conservative because with the design of the butterfly ballot, it seems more likely that Gore voters made a mistake in casting their votes than Bush voters. In other words, we would expect Gore’s share of the miscast votes to be higher than 62%. In the next section, we examine ballot-level detail in an attempt to further tease apart who made mistakes in voting.

Individual ballots

A voter’s ballot is secret, and vote totals are all that are reported in determining the outcome of an election. However, since the election in Florida was so close, individual ballots were examined in PBC. With ballot-level data, we know how an individual votes in both the presidential AND US senatorial races. It is extremely rare to have this kind of information, and it offers a special opportunity to study voting patterns. For example, we can split voters into groups according to how they voted in the senate race and study each group’s support for the presidential candidates. Such comparisons are not possible from the marginal counts where we know only the total votes for each presidential candidate and the total votes for each senatorial candidate.

Two of the candidates running for senate in 2000 were Nelson (Democratic party) and Deckard (Reform party). With ballot-level results, we can, for example, examine those ballots with votes for Nelson. We expect those who voted for Nelson for senate to be less likely to vote for Buchanan for president, and we can compare the support for Buchanan among election-day Nelson voters to the support for him from absentee Nelson voters. In this way, we narrow our comparison to two groups that are more similar than in our earlier comparison. That is, individuals in both groups supported the Democratic senatorial candidate.

Furthermore, we can compare the Deckard voters to the Nelson voters. We anticipate the support for Buchanan among Deckard voters to be higher than among the Nelson voters. We can compare the difference in the support for Buchanan on absentee ballots and on election-day among Nelson voters to that same difference among Deckard voters.

We load the data set ballotPBC into our workspace, and examine the variables available to us.

load(url("http://www.stat.berkeley.edu/users/nolan/data/stat101/ballotPBC.rda"))

nrow(ballotPBC)
## [1] 417861
summary(ballotPBC)
##    ibuchanan           inelson          ideckard           isabs        
##  Min.   :0.000000   Min.   :0.0000   Min.   :0.00000   Min.   :0.00000  
##  1st Qu.:0.000000   1st Qu.:0.0000   1st Qu.:0.00000   1st Qu.:0.00000  
##  Median :0.000000   Median :1.0000   Median :0.00000   Median :0.00000  
##  Mean   :0.007998   Mean   :0.5893   Mean   :0.00263   Mean   :0.08714  
##  3rd Qu.:0.000000   3rd Qu.:1.0000   3rd Qu.:0.00000   3rd Qu.:0.00000  
##  Max.   :1.000000   Max.   :1.0000   Max.   :1.00000   Max.   :1.00000

Each record in ballotPBC corresponds to one voter in PBC. There are 417861 voters. This number does not match the total vote count for the county (433186) because ballots were destroyed for 25 precincts in PBC when they tested their vote tabulating machines. We have only 98% of the actual ballots. Fortunately, statisticians have compared the Nelson, Deckard, Buchanan, Bush, and Gore support among all PBC voters against the support among voters in these 25 precincts and found similar voting patterns. It seems reasonable to assume that the voters in these 25 precincts behaved similarly to voters in the remaining precincts.

All of the variables in our data frame have only values of 0 or 1, i.e., they are all dummy variables (also known as indicator variables). For example, the variable ideckard is 1 if a voter voted for Deckard and 0 otherwise. The variable inelson is similarly defined, and since it is not possible to vote for more than one candidate for senate, inelson and ideckard cannot both be 1 for a voter. However, they can both be 0; this occurs when the voter voted for another candidate, such as the Republican candidate. One other variable that we have available to us is isabs, which is 1 if an individual voted absentee and 0 if the vote was cast on election day.

Consider the 396th row in ballotPBC,

ballotPBC[396, ]
##     ibuchanan inelson ideckard isabs
## 396         0       1        0     0

This individual voted on election day (isabs is 0), and he or she cast their ballot for Nelson (and therefore not for Deckard) and not for Buchanan. As a second example, the 381832nd row in ballotPBC corresponds to a voter who voted absentee for Buchanan and for neither Nelson nor Deckard, i.e.,

ballotPBC[381832, ]
##        ibuchanan inelson ideckard isabs
## 381832         1       0        0     1

The table below shows the voting totals in PBC for the senatorial race.

with(ballotPBC, table(inelson, ideckard))
##        ideckard
## inelson      0      1
##       0 170528   1099
##       1 246234      0

We see from this table that Deckard received 1099 votes and Nelson received 2.4623410^{5}.

We can also directly calculate vote tallies with sums of these dummy variables or with sums of products of these variables. For example, to find the number of absentee ballots cast, we sum isabs.

sum(ballotPBC$isabs)
## [1] 36412

From this calculation, we see that 36412 votes were cast absentee. As another example, to find the number of votes cast absentee for Deckard, we sum the product of isabs and ideckard. Note that when we multiply together isabs and ideckard, we get a variable with 1s and 0s where we have a 1 if a voter voted for Deckard and voted absentee and 0 otherwise.

sum(ballotPBC$ideckard * ballotPBC$isabs)
## [1] 99

The sum of this product shows us that 99 of Deckard’s votes were absentee.

With these ballot-level results, we narrow our focus to those who voted for Nelson and consider how they voted in the presidential race on election day vs. absentee. In this way, we are comparing similar groups of voters because individuals in both groups supported the same senatorial candidate. Furthermore, we also can study the Deckard voters. We anticipate the support for Buchanan among Deckard voters to be higher than the Nelson voters, and we can examine how this support differs between absentee and election-day voters.

Proportions for subgroups

To compute proportions for these groups, we need to be careful with our denominators. For example, if we want to know the proportion of absentee Nelson voters who voted for Buchanan, then our denominator is the number of voters who voted absentee for Nelson. And, our numerator is the subset of those voters who voted for Buchanan. We find the denominator first by taking the sum of the product of inelson and isabs.

# Votes cast for Nelson absentee
votes.AN = with(ballotPBC, sum(inelson * isabs))

Also, if we take the product of inelson and 1-isabs, then the result is 1 if a voter voted for Nelson on election day and 0 otherwise so the sum of this product is the number of election-day Nelson voters.

# Votes cast for Nelson on election day
votes.EN = with(ballotPBC, sum(inelson * (1 - isabs)))

Now we find how many of the absentee Nelson voters voted for Buchanan. We do this by taking the sum the triple product of isabs, inelson and ibuchanan. Similarly, we find the number of votes for Buchanan among the election-day Nelson voters by taking the sum of the product of (1 - isabs), inelson and ibuchanan.

votesB.AN = with(ballotPBC, sum(ibuchanan * isabs * inelson))
votesB.EN = with(ballotPBC, sum(ibuchanan * (1 - isabs) * inelson))

Finally, we calculate the proportion of votes as follows

propB.AN = votesB.AN / votes.AN
propB.AN
## [1] 0.001799876

propB.EN = votesB.EN / votes.EN
propB.EN
## [1] 0.01028649

Notice that the naming convention we used with these variables helps make it clear with which group we are working. For example, propB.EN stands for the proportion of Buchanan votes among the election-day Nelson voters. We see that about 1% of the election-day Nelson voters also voted for Buchanan. Whereas, only 0.18% of those who voted absentee for Nelson also voted for Buchanan.

Let’s examine the vote counts in greater detail so that we also compare the Buchanan support among the Deckard and Nelson voters. To do this, we make a new variable that is 2 for a Nelson voter, 1 for a Deckard voter, and 0 otherwise.

senateVote = with(ballotPBC, 2*inelson + ideckard)

Then we make a 3-way table of ibuchanan, senateVote, and isabs

with(ballotPBC, table(ibuchanan, senateVote, isabs))
## , , isabs = 0
## 
##          senateVote
## ibuchanan      0      1      2
##         0 151142    941 226105
##         1    852     59   2350
## 
## , , isabs = 1
## 
##          senateVote
## ibuchanan      0      1      2
##         0  18493     91  17747
##         1     41      8     32

From the middle column of the second table, we see that ninety-nine voters voted absentee for Deckard and of these 8, or 8%, voted for Buchanan. From the middle column of the first table, we see that on election day, 1000 voters voted for Deckard, and of these 59, or 6% voted for Buchanan. That is, Buchanan’s support decreased from absentee voting to election-day voting for those who voted for the Reform candidate for senate. This is in stark contrast to Buchanan’s support among Nelson voters. Nelson voters’ support for Buchanan dramatically increased on election day in comparison to absentee voting.

Let’s examine these proportions with an interaction plot. First we compute the proportions for the Deckard voters using computations similar to those for the proportions of Nelson voters. Again, the naming convention indicates the group being tabulated, e.g., votes.ED is the number of election-day votes for Deckard and propB.ED is the proportion of those voters who also voted for Buchanan.

votes.AD = with(ballotPBC, sum(ideckard * isabs))
votes.ED = with(ballotPBC, sum(ideckard * (1 - isabs)))
votesB.AD = with(ballotPBC, sum(ibuchanan * isabs * ideckard))
votesB.ED = with(ballotPBC, sum(ibuchanan * (1 - isabs) * ideckard))
propB.AD = votesB.AD / votes.AD
propB.ED = votesB.ED / votes.ED

In the line plot below, the y-axis is the number of votes for Buchanan per 1000 votes cast. This choice of scale makes it easier for us to compare groups.

plot( x = 0:1, y = c(1000*propB.AN, 1000*propB.EN), xlim = c(-0.2, 1.2),
      ylim = c(-10, 100), type = "b", lwd = 3, axes = FALSE,
      ylab = "Votes for Buchanan per 1000 Senate Votes", xlab = "")
axis(2)
axis(1, at=c(0,1), labels=c("Absentee", "Election Day"))
box()
lines(x = 0:1, y = c(1000*propB.AD, 1000*propB.ED), type = "b", lwd = 3, lty = 2)
text(x = 0.2, y = 12, labels = "Voted for Nelson (Dem)")
text(x = 0.75, y = 80, labels = "Voted for Deckard (Ref)")

The slight increase on election day for Buchanan among the Nelson supporters is in contrast to the decrease seen among Deckard voters. This increase in support on election-day seems negligible, but how many votes would Gore have received if these excess votes were mistakes? We tackle that question next.

Estimate Miscast Votes Among Nelson Supporters

We have already made an estimate of 2450 miscast votes for Buchanan and we also estimated that at least 1500 of these should have gone to Gore. We used the county-level absentee and election-day vote counts to make these estimates. We now try to corroborate these results by using the individual ballots. If we focus on the Nelson supporters, we have a smaller group of voters, but these voters are more likely to support Gore. For example, Gore received 89.6% of the vote from the absentee Nelson voters.

We work with only Nelson voters to estimate the number of miscast votes for Buchanan on election day that should have gone to Gore. To estimate the number of miscast votes for Buchanan on election day, we assume that the level of support for Buchanan in the absentee votes carries over to election-day. Then, since some of these miscast votes might have gone to other candidates, we apply the level of support for Gore among Nelson absentee voters to the miscast votes. This gives us our estimate of the number of miscast votes that should have gone to Gore. That is, our formula is: \[votes.EN * (propB.EN - propB.AN) * propG.AN,\] where votes.EN is the number of election-day votes for Nelson, propB.EN and propB.AN are the proportions of election-day (absentee) Nelson voters who voted for Buchanan, and propG.AN is the proportion of absentee Nelson voters who voted for Gore. For propG.AN we use 0.896 and for votes.EN we use 269835, which includes those ballots that were ruined in the testing (we call this vote count votes.EN2).

propG.AN = 0.896
votes.EN2 = 269835 

miscastGoreVotes = votes.EN2 * (propB.EN - propB.AN) * propG.AN
floor(miscastGoreVotes)
## [1] 2051

Our estimate, 2051, is nearly 4 times the number of votes needed for Gore to win the election. It is also in line with our earlier estimate, which supports the claim that it was primarily Gore voters who made mistakes in voting for Buchanan. To attach a standard error to our estimate, we again use the variance calculation for a difference in proportions. We also treat the support for Gore among absentee voters as constant. This quantity is not actually constant, but this approach gives us a good approximation to the SD:

sdExcess = votes.EN2 * propG.AN * 
  sqrt(propB.AN * (1 - propB.AN)/votes.AN + 
         propB.EN * (1 - propB.EN)/votes.EN)
sdExcess
## [1] 92.25977

(Note that with individual ballots we do not need to correct for over dispersion.)

Then with sdExcess we can make a 99% one-sided confidence interval for Gore’s miscast votes. The left endpoint of the interval is

floor(miscastGoreVotes - 2.58 * sdExcess)
## [1] 1813

This left endpoint is far greater than the votes Gore needed to win in Florida.

What We Learned

References

J. N. A. Wand, K. Shotts, W. R. Mebane, J. S. Sekhon, M. Herron, and H. E. Brady (2001) ``The Butterfly Did It: The Aberrant Vote for Buchanan in Palm Beach County, Florida’’ American Political Science Review, 95(4):793–810.