Import data into Stata
clear all
quietly import excel "C:\Users\tjhuegerich\Downloads\2025-ICLI-00019_2024-ICFO-39357_ERO Admin Arrests_raw.xlsx", sheet("Admin Arrests") cellrange(A7:W265233) firstrow
July 18, 2025
July 21, 2025
New data on immigration arrests was released recently. I learned about it from an Axios article yesterday highlighting the June increase in non-criminal arrests (non-criminal because “being in the U.S. illegally is a civil, not criminal, violation”). The article led with the following chart:
I was curious whether there had been a proportionate increase in ICE arrests near me in Wisconsin, as opposed to the increase being concentrated in places like California. So I downloaded the data from the Deportation Data Project.1
The raw data is detailed enough to identify individual arrests by date and location.2 But here I just need date, state, and “criminal status.”
First I confirmed that I could replicate the Axios chart.
frame copy default NATIONAL
frame NATIONAL {
collapse (sum) n, by(date cs_id)
quietly {
xtset cs_id date
tsfill, full
replace n = 0 if missing(n)
tssmooth ma n_7trailing_ = n, window(6 1 0)
reshape wide n_7trailing_ n, i(date) j(cs_id)
}
format date %tdMonYY
label var n_7trailing_1 "At least one conviction"
label var n_7trailing_2 "At least one charge (no conviction)"
label var n_7trailing_3 "No criminal charges or convictions"
tsline n_7trailing_1 n_7trailing_2 n_7trailing_3 if date >= mdy(1,7,2025), ///
lcolor("#FE9116" "#FEC170" "#102BB6") xtitle("") xlabel(#7) legend(position(12)) ///
title("ICE arrests by reported criminal status") ///
subtitle("Daily, Seven-day trailing average")
}
Then I zoomed out to allow a comparison between the Biden and Trump administrations, also using a different style of chart to more easily see total immigration arrests.
frame NATIONAL {
quietly replace date = date - 3 // center moving averages
gen cumul2_7t = n_7trailing_1 + n_7trailing_2
gen cumul3_7t = cumul2_7t + n_7trailing_3
label var n_7trailing_1 "At least one conviction"
label var cumul2_7t "At least one charge (no conviction)"
label var cumul3_7t "No criminal charges or convictions"
format date %tdMonCCYY
twoway (area cumul3_7t cumul2_7t n_7trailing_1 date if date >= mdy(9,23,2023), ///
color("#102BB6" "#FEC170" "#FE9116") fintensity(75 75 75) lwidth(none none none)), ///
xtitle("") legend(ring(0) bplacement(11)) xlabel(#11) ymtick(##5) ///
title("ICE arrests by reported criminal status") ///
subtitle("Daily, Seven-day moving average")
}
The same chart limited to California shows a Trump Administration increase in arrests just as large as the national one, with an even more pronounced increase in June.
frame copy default CALIFORNIA
frame CALIFORNIA {
quietly keep if ApprehensionState == "CALIFORNIA"
drop ApprehensionState
quietly {
xtset cs_id date
tsfill, full
replace n = 0 if missing(n)
tssmooth ma n_7trailing_ = n, window(6 1 0)
reshape wide n_7trailing_ n, i(date) j(cs_id)
replace date = date - 3 // center moving averages
}
gen cumul2_7t = n_7trailing_1 + n_7trailing_2
gen cumul3_7t = cumul2_7t + n_7trailing_3
label var n_7trailing_1 "At least one conviction"
label var cumul2_7t "At least one charge (no conviction)"
label var cumul3_7t "No criminal charges or convictions"
format date %tdMonCCYY
twoway (area cumul3_7t cumul2_7t n_7trailing_1 date if date >= mdy(9,23,2023), ///
color("#102BB6" "#FEC170" "#FE9116") fintensity(75 75 75) lwidth(none none none)), ///
xtitle("") legend(ring(0) bplacement(11)) xlabel(#11) ymtick(##5) ///
title("California ICE arrests by reported criminal status") ///
subtitle("Daily, Seven-day moving average")
}
Finally, I wanted a comparable chart for Wisconsin. Because daily Wisconsin arrests are generally in the single digits, making even a moving average of daily arrests quite choppy, I instead plotted weekly arrests.
For purposes of cross-state comparison, I made the y-axis match the scale of the California chart after adjusting for estimated 2022 unauthorized immigrant populations (and the use of a weekly measure rather than daily).3
frame copy default WISCONSIN
frame WISCONSIN {
quietly {
keep if ApprehensionState == "WISCONSIN"
local end_dow = 4 // b/c data ends on 2025-6-26, a Thurs.
gen week_date = `end_dow' + (date - dow(date)) if dow(date) <= `end_dow'
replace week_date = `end_dow' + (date + 7 - dow(date)) if dow(date) > `end_dow'
collapse (sum) n, by(cs_id week_date)
xtset cs_id week_date
tsfill, full
assert missing(n) if dow(week_date) != `end_dow'
keep if dow(week_date) == `end_dow'
replace n = 0 if missing(n)
reshape wide n, i(week_date) j(cs_id)
gen cumul2 = n1 + n2
gen cumul3 = cumul2 + n3
expand 2, gen(week_start) // to enable 'stairstep' chart, visually representing weekly aggregation
replace week_date = week_date - 6 if week_start
sort week_date
}
label var n1 "At least one conviction"
label var cumul2 "At least one charge (no conviction)"
label var cumul3 "No criminal charges or convictions"
format week_date %tdMonCCYY
twoway (area cumul3 cumul2 n1 week_date if week_date >= mdy(9,21,2023), ///
color("#102BB6" "#FEC170" "#FE9116") fintensity(75 75 75) lwidth(none none none)), ///
xtitle("") legend(ring(0) bplacement(11)) xlabel(#10) ///
yscale(range(46.7)) ///
title("Wisconsin ICE arrests by reported criminal status") ///
subtitle("Weekly")
}
Total Wisconsin arrests had apparently been comparable to pre-2025 rates until the past couple months. And the recent increase is not as dramatic as that experienced by California or the U.S. as a whole. On the other hand, recent arrest rates relative to unauthorized population appear comparable to those in California.
There is a lot more that could be done with this data. Ideally someone would put up some interactive charts so that answering a question like this would be easier. If I become aware of any, I’ll put the link(s) here.
The “Late June 2025” Arrests data, specifically.↩︎
For instance, I was able to find the record for an acquaintance arrested in the Madison area. He is classified in the data as a “Convicted Criminal” despite, I’m told, merely having the same name as a fugitive from a different country, one thousands of miles away from his own. So maybe take these ICE classifications with a grain of salt.↩︎
Pew Research estimates California’s 2022 unauthorized immigrant population as 1.8 million and Wisconsin’s as 80 thousand. So I set the Wisconsin y-axis maximum to: \(150 \times \frac{80}{1800} \times 7 \approx 46.7\).↩︎