Monday, July 30, 2012

Should you believe these numbers?


More than 282,000 Philadelphians are on the "no id" or "expired id" lists compiled by the Pennsylvania Secretary of State's office.

But Bob Warner of The Philadelphia Inquirer, in a very good story July 29, reported that when reporters called voters from the "no id" list, large numbers of people said they in fact had driver's licenses. This raises the question of whether the "no id" list contains mainly false hits and therefore overstates the magnitude of the Voter ID problem.
 
Exact details of how the list was put together have not been disclosed, but here is what has been reported:

-- The state's database of registered voters was compared against the Department of Transportation's list of driver's licenses and non-license IDs. Voter's names, and presumably dates of birth, were compared to the driver records. Voters who couldn't be found in the PennDOT database were added to the "no id" list, totaling 758,000, or about 1 in 11 Pennsylvania voters.

-- Weeks later, the Secretary of State released a second list, the "expired id" list of 574,000 voters who did match the PennDOT license database but whose IDs have expired in 2011 and can't be used to vote in November. This group also will need new IDs or they can't vote in November.

Here are some thoughts about this from someone who has been working with the data for a few weeks.

1) The people who told the Inquirer they have licenses might still have a problem on Election Day if their name on their license is different from their voter registration. The classic case of this is a woman (or man) who got married and now goes by a different last name. What if the driver's license has one name and the voter registration the other? What if someone starts going by their middle name and registers that way? When changes are made in one database or the other, are they synched? Apparently not.

No one should assume there will be a "reasonableness" standard applied to name discrepancies on election day either. Your kindly poll worker may know you're Bob even though your driver's license says Dave, but if Pennsylvania is still a swing state in November, you can be sure both the Democratic and Republican Parties will have swarms of lawyers looking over the poll workers' shoulders. The standard applied on Election Day might be very literal and very picky.

2) While the "no id" list is squishy because no one knows how name mismatches will be handled, the "expired" list is probably a harder number. It may be telling that the Secretary of State's office, which is charged with defending Voter ID, has had very little to say about the "expired list," and media organizations have paid it less attention. "Expired" represents actual matches in the PennDOT database, but to licenses that expired before November 2011 and would be unusable to vote in November 2012 under Pennsylvania's law.

3) Even if you assume half the "no id" voters will be able to vote, that would still mean 953,000 Pennsylvanians (200,000 Philadelphians), have ID problems that will prevent them from voting if they can't get a new ID from PennDOT before November. Even if you assume that 25% of these folks have left the state and have no intention of voting here, it is still way more IDs than anybody ever dreamed would be needed. At last week's Voter ID trial, one of the most comical comments came from a PennDOT official who said his agency was all prepared to process the 10,000 new IDs that would need to be created. 10,000 might not cover one ward in South Philly.

4) In some ways the most important question isn't the overall magnitude of impact anyway. What's important is whether Voter ID unfairly penalizes certain segments of society and therefore deprives them of representation (For example, see the age breakdowns posted here).

If the state lawsuit against Voter ID is unsuccessful, the U.S. Justice Department is getting ready to challenge the law under the 1965 Voting Rights Act, which bars states from erecting any law that disproportionately impacts minority voting, whether the law was intended to be discriminatory or not. We have just completed an analysis on this question, and based on what we've found, the Justice Department is going to have a case. If Pennsylvania's law can be shown to affect African American and Hispanic voters more than whites, it could be hard to defend.

Friday, July 27, 2012

How to assemble the Voter ID Database

Here is a technical step by step for people who would like to assemble this data and do their own analysis.
  
This document is a step by step description of steps taken to join the voter files with the "no id" and
"expired id" files and produce the crosstabs.

The voter registration file is maintained by the City of Philadelphia and is a public document. We requested it from City Commissioner Stephanie Singer's office. Requestors must certify that it will not be used for commercial purposes like mailing lists. 

The "no id" and "expired id" files were provided by the Pennsylvania Secretary of State to city and county registrars last week. The contain the state voter number for everyone on the list and can be linked to the voter registration file.  These are also public documents and can be requested from the Secretary of State. 

This was done in Visual FoxPro 6.0 but these commands
would work in any SQL database with simple adjustments. I would encourage/beg others to create the database do the analysis for themselves.


Create voter table for Philadelphia from delimited text file.
create table philavoters free ;
(ID C (12),;
Pref C (4),;
Last C (25),;
First C (25),;
Middle C (15),;
Suffix C (5),;
Sex C (1),;
DOB D,;
Dreg D,;
Status C (1),;
Changedt D,;
Party C (20),;
House I ,;
HouseNo C (4),;
Street C (50),;
Apt C (15),;
Addr_2 C (30),;
City C (35),;
State C (2),;
Zip C (15),;
MAdd_1 C (10),;
MAdd_2 C (10),;
MCity C (20),;
MState C (2),;
MZip C (15),;
Pollp C (50),;
Pollpl2 C (128),;
PollCSZ C (128),;
Lastvote D (8),;
Dist1 C (15),;
Dist2 C (15),;
Dist3 C (15),;
Dist4 C (15),;
Dist5 C (15),;
Dist6 C (15),;
Dist7 C (15),;
Dist8 C (15),;
Dist9 C (15),;
Dist10 C (15),;
Dist11 C (15),;
Dist12 C (15),;
Dist13 C (15),;
Dist14 C (15),;
Dist15 C (15),;
Custom1 C (25),;
Lastchange D (8),;
PR042412 C (10),;
PR042412VM C (10),;
GN110811 C (10),;
GN110811VM C (10),;
PR051711 C (10),;
PR051711VM C (10),;
SP020111 C (10),;
SP020111VM C (10),;
GN110210 C (10),;
GN110210VM C (10),;
PR051810 C (10),;
PR051810VM C (10),;
GN110309 C (10),;
GN110309VM C (10),;
PR051909 C (10),;
PR051909VM C (10),;
GN110408 C (10),;
GN110408VM C (10),;
PR042208 C (10),;
PR042208VM C (10))
append from voters2.txt type delimited with character "|"

1025829 records created. This represents all voters, active and inactive.

Add an index on id
Modify philavoters table to add the following fields.
Noid char(1) - flag for voters in the state's "no id" file
Expired char(1) - flag for voters in the "expired id" file.
Age integer - age calculated by subtracting Date of Birth from today's date.
Age range char(8) - range to be calculated from Age field.



Create noid table from the state's "no id" data release.

create table no_id free ;
(ID C (12),;
Las C (25),;
Fir C (25),;
Mid C (15),;
DOB C (8))
append from no_voter_id_per_state.csv type delimited

186830 records created. This represents all records in the "no id" file for Philadelphia, active
and inactive.

Add an index on id.


Create table from "expired" file from the state.
The file I received contained only a list of state voter ids.

create table expire free ;
(ID C (12))
append from expire.txt type delimited

574631 Records created. (this is more than just Philly voters; it is presumably a statewide file)

Add an index on id



Tables created, begin analysis.

Overall count of voters

Select count(*) from philavoters
Result: 1,025,829

Count of "active" voters:

Select count(*) from philavoters where status='A'
Result: 868,674

Query for records in the Philly voter file with IDs that are contained in the "no_id" file
select count(*) from Philavoters where id in (select id from no_id)
Result: 186,560 ...this is the number of ALL philly voters in the "no id" file.

Same query, this time limiting for voters on "active" status. This means voters who have voted in last X
years.

select count(*) from Philavoters where status='A' and id in (select id from no_id)
Result: 135,859

Query for records in the Philly voter file with IDs that are contained in the "expired" file

select count(*) from Philavoters where id in (select id from expire)
result: 175,769
select count(*) from Philavoters where status='A' and id in (select id from expire)
result: 146,750


Now, is there any overlap between the "no id" and the "expired" file?

select count(*) from expire where id in (select id from no_id)
Result: 0
Just for good measure, reverse it:
select count(*) from no_id where id in (select id from expire)
result: 0

So - there is no overlap between "no id" and "expired" sets from the state. They are different
subsets of voters.


Now, put the data into the main table using the fields we created:
update Philavoters set noid='1' where id in (select id from no_id)
update Philavoters set expired='1' where id in (select id from expire)

How many voters are either no id or expired?
select count(*) from Philavoters where Noid='1' or expired='1'
Result: 362,329
How many of these are active?
select count(*) from Philavoters where (Noid='1' or expired='1') and Status='A'
Result: 282,609


How many are both (just to double check our data)?
select count(*) from Philavoters where Noid='1' and expired='1'
Result: 0

For convenience, populate field "either" which represents voter is either "no id" or "expired"
THIS IS THE GROUP THAT THE STATE HAS IDENTIFIED WILL NOT BE ABLE TO VOTE
WITHOUT GETTING AN ID
update philavoters set either='1' where Noid='1' or expired='1'
362,369 records updated.


Populate age field by calculating from DOB (this will vary by database)
update philavoters set Age=(date()-dob)/365.25

Populate age range field
update philavoters set age_range="und_25" where age<25
update philavoters set age_range="25-34" where age<35 and age >=25
update philavoters set age_range="35-44" where age<45 and age >=35
update philavoters set age_range="45-49" where age<50 and age >=45
update philavoters set age_range="50-54" where age<55 and age >=50
update philavoters set age_range="55-59" where age<60 and age >=55
update philavoters set age_range="60-64" where age<65 and age >=60
update philavoters set age_range="65-69" where age<70 and age >=65
update philavoters set age_range="70-74" where age<75 and age >=70
update philavoters set age_range="75-79" where age<80 and age >=75
update philavoters set age_range="80-84" where age<85 and age >=80
update philavoters set age_range="85-" where age >=85


Cross-tabulate age range with "either" (all voters)
SELECT Philavoters.age_range, Philavoters.either, count(*);
 FROM philavoters;
 GROUP BY Philavoters.age_range, Philavoters.either;
 ORDER BY Philavoters.age_range, Philavoters.either;
 INTO CURSOR SYS(2015)
 DO (_GENXTAB) WITH 'Query1'


Note: c_1 in this table means the voters have ID problems of one kind or another. Blank means
they have a valid ID in the state licensing database according to Secretary of State.

age_range
ID problem
 Has id
und_25
52151
46052
25-34
85609
158700
35-44
58156
121515
45-49
30643
58415
50-54
31264
58705
55-59
26077
57193
60-64
19876
48445
65-69
15217
36635
70-74
11861
25664
75-79
9889
19806
80-84
8565
15542
85-
13021
16828



Same crosstab but including only "active" voters.

SELECT Philavoters.age_range, Philavoters.either, count(*);
 FROM philavoters;
 WHERE Philavoters.status = "A";
 GROUP BY Philavoters.age_range, Philavoters.either;
 ORDER BY Philavoters.age_range, Philavoters.either;
 INTO CURSOR SYS(2015)
 DO (_GENXTAB) WITH 'Query1'

Note: c_1 in this table means the voters have ID problems of one kind or another. Blank
means they have a valid ID in the state licensing database according to Secretary of State.
Includes only "active" voters


age_range
id problem
has id
und_25
48623
44087
25-34
57389
134129
35-44
40714
102937
45-49
23402
51109
50-54
24923
52595
55-59
21708
52043
60-64
16768
44695
65-69
13106
33835
70-74
10286
23842
75-79
8634
18399
80-84
7328
14278
85-
9728
14116


Thursday, July 26, 2012

Making sense of the numbers -- overview of Voter ID in Philadelphia

  •  Phila total registered voters: 1.026 million
  • Active voters (meaning voted in the last 4 years): 868,674
  • "No ID" voters for Philly (active): 186,560 (135,859)
  • "Expired for Philly: 175,769 (146,750)
  • No ID or Expired, active 282,609 (32.5 percent of all Philly active voters)
 Just to put that last number in perspective, that is 7 packed Citizens Bank Parks full of Phillies fans who could lose their right to vote in November.

Using other data fields in the Philadelphia voter file, crosstabs can be run by age, party registration, and all levels of voting and legislative districts.


Wednesday, July 11, 2012

The old and the young....


One clear pattern that emerges is that the young and elderly are over-represented on the "need ID" lists.

Among those over 85 years old, 41 percent either cannot be found in the state's database of driver's licenses or ID cards, or have IDs that have expired and are not usable to vote.

There are people over 90 who have been voting in every election since Gov. Corbett was in diapers who will lose their right to vote unless they can get their paperwork in order and stand in line at PennDOT.
 
Among those under age 25, more than 50 percent lack ids, though that number is no doubt inflated by college students who registered to vote here but have driver licenses in other states.



--------------------------------------------------------------


Philadelphia voters without IDs, broken down by age ranges
Active voters only.







Age  No id or expired Has valid id Total Pct needs id
und_25 43994 38254 82248 53.5%
25-34 59879 134024 193903 30.9%
35-44 40669 104024 144693 28.1%
45-49 23142 50710 73852 31.3%
50-54 24889 52536 77425 32.1%
55-59 22317 52468 74785 29.8%
60-64 17143 45516 62659 27.4%
65-69 13359 34740 48099 27.8%
70-74 10624 24951 35575 29.9%
75-79 8716 18862 27578 31.6%
80-84 7475 14649 22124 33.8%
85- 10402 15331 25733 40.4%
Citywide 282609 586065 868674 32.5%