Finalization of 2023 Crash Data (Draft)
Synopsis
With the goal of providing finalized 2023 data sets by the end of May, we have scheduled 2 finalization dates, a primary for 2024-05-15 and a fallback for 2024-05-22.
Overall Numbers (Preliminary)
These results for 2022 and earlier reflect finalized data. The 2023 data are production as of 2024-04-24 end of day. The statistics are the same as or similar to those provided in Final year-end crash statistics. Some of the statistics from that source are omitted because their calculation may have required significantly more work to interpret and reproduce.
Statistic Crash Year | 2018 | 2019 | 2020 | 2021 | 2022 | 2023 |
---|---|---|---|---|---|---|
Fatal Crashes | 517 | 511 | 540 | 546 | 547 | 524 |
Injury Crashes | 29959 | 28791 | 23747 | 26209 | 25071 | 24532 |
Property Damage Crashes | 113736 | 115986 | 90410 | 101541 | 103212 | 99568 |
Total Crashes | 144212 | 145288 | 114697 | 128296 | 128830 | 124624 |
A-Injury Crashes | 2714 | 2621 | 2651 | 2880 | 2740 | 2701 |
Total Persons Killed | 575 | 551 | 592 | 595 | 595 | 575 |
Total Persons Injured | 41125 | 39723 | 32374 | 35676 | 33813 | 33366 |
Total Serious (A) Injuries | 3213 | 3133 | 3187 | 3473 | 3213 | 3252 |
Alcohol-Related Crashes | 6255 | 6058 | 6050 | 6368 | 6230 | 5973 |
Alcohol-Related Fatalities | 159 | 140 | 167 | 166 | 155 | 159 |
Alcohol-Related Injuries | 3293 | 2918 | 3120 | 3234 | 3008 | 3051 |
Alcohol-Related A-Injuries | 719 | 666 | 752 | 736 | 661 | 704 |
Drug-Related Crashes | 1724 | 1749 | 2250 | 2094 | 1821 | 1723 |
Drug-Related Fatalities | 59 | 59 | 80 | 74 | 64 | 70 |
Drug-Related Injuries | 1198 | 1099 | 1412 | 1309 | 1144 | 1159 |
Drug-Related A-Injuries | 246 | 233 | 294 | 292 | 269 | 289 |
Impaired Driving Related Crashes | 7137 | 6938 | 7261 | 7375 | 7048 | 6695 |
Impaired Driving Related Fatalities | 185 | 168 | 212 | 197 | 184 | 199 |
Impaired Driving Related Injuries | 3949 | 3507 | 3861 | 3883 | 3556 | 3574 |
Impaired Driving Related A-Injuries | 838 | 768 | 905 | 876 | 787 | 833 |
Hit & Run Related Crashes | 19518 | 19778 | 18480 | 21377 | 20303 | 19252 |
Hit & Run Related Fatalities | 25 | 21 | 27 | 26 | 35 | 41 |
Hit & Run Related Injuries | 2891 | 2686 | 2588 | 2835 | 2469 | 2334 |
Hit & Run Related A-Injuries | 191 | 194 | 233 | 251 | 207 | 199 |
Motorcycle Crashes | 1967 | 1806 | 2104 | 2082 | 1921 | 1949 |
Motorcyclists Killed | 83 | 85 | 116 | 121 | 82 | 102 |
Motorcyclists Injured | 1819 | 1682 | 1917 | 1838 | 1768 | 1773 |
Motorcyclist A-Injuries | 563 | 523 | 609 | 656 | 648 | 631 |
Pedestrian Crashes | 1505 | 1460 | 1137 | 1273 | 1324 | 1299 |
Pedestrians Killed | 57 | 53 | 50 | 50 | 72 | 61 |
Pedestrians Injured | 1414 | 1376 | 1049 | 1270 | 1195 | 1190 |
Pedestrian A-Injuries | 276 | 277 | 254 | 305 | 257 | 254 |
Bicycle Crashes | 852 | 759 | 619 | 691 | 668 | 790 |
Bicyclists Killed | 4 | 14 | 12 | 9 | 14 | 7 |
Bicyclists Injured | 755 | 675 | 543 | 600 | 593 | 699 |
Bicyclist A-Injuries | 76 | 81 | 74 | 87 | 71 | 92 |
Construction Zone Crashes | 3166 | 2489 | 1805 | 2186 | 2034 | 2168 |
Construction Zone Fatalities | 9 | 17 | 16 | 13 | 8 | 9 |
Construction Zone Injuries | 1281 | 899 | 665 | 859 | 666 | 712 |
Construction Zone A-Injuries | 76 | 78 | 53 | 71 | 49 | 52 |
Deer Crashes | 20183 | 18414 | 16547 | 16204 | 16278 | 16153 |
Deer Crash Fatalities | 4 | 9 | 13 | 9 | 5 | 14 |
Deer Crash Injuries | 515 | 556 | 523 | 564 | 537 | 585 |
Deer Crash A-injuries | 73 | 80 | 76 | 76 | 69 | 75 |
Large Truck Crashes | 7727 | 8174 | 5685 | 6356 | 6785 | 6564 |
Large Truck Crash Fatalities | 76 | 69 | 63 | 94 | 73 | 73 |
Large Truck Crash Injuries | 2251 | 2306 | 1446 | 1715 | 1846 | 1665 |
Large Truck Crash A-injuries | 237 | 252 | 198 | 215 | 229 | 192 |
FMCSA Reportable Crashes | 3097 | 3126 | 2327 | 2654 | 2720 | 2560 |
FMCSA Reportable Crash Fatalities | 76 | 69 | 63 | 94 | 73 | 73 |
FMCSA Reportable Crash Injuries | 1956 | 2044 | 1308 | 1513 | 1628 | 1457 |
FMCSA Reportable Crash A-injuries | 233 | 253 | 197 | 215 | 227 | 190 |
For the most part my naïve calculations agree with the official statistics. I’ve highlighted where they differ (as identified in a manual scan of the two sets of data. I’m not claiming that mine is right but do want to call attention to 2023 statistics that might be different to this work once official numbers are calculated.
Highlight Color | Meaning |
---|---|
| Fatality Count Differences. The official statistics have one additional fatality in 2018 and 2020. It is on off in each year. |
| Idiosyncratic; no obvious reason for the difference. |
| Differences caused by how individuals are identified as Motorcyclists. Mine is anyone whose Unit Type is Motorcycle. Something more elaborate may be being used for the official calculations. If the identifying motorcyclists is non-trivial, we might want to consider adding a person level motorcyclist flag improve analysis reproducibility. |
| Something strange with Injured Pedestrians |
| There appears to be a difference in how large truck crashes were identified in 2020 and earlier. |
TLDR = Showing Work Because of Disagreeing Numbers
This is a lot of lines, but it is not complex. Create a flags for each of the person characteristics of interest. For example, person.is_bike_a
, was the person a bicyclist who suffered an A injury? Sum those over crashes to get the counts of each sort of person in each crash, and joint those totals to the crash level data. Finally sum those over the years to get year totals for each types of person and/or type of crash.
Identifying fatalities from the person data is made interesting by our rule that a fatality is not counted unless both indicated as such by the law enforcement officer’s report and by the FARS system. If the injury level is not fatal on the crash report, we use whatever injury was reported on the DT4000. On the other hand, if the report shows a fatality but the FARS team determined that it was not a motor vehicle traffic crash fatality, the injury level is taken as No Apparent Injury.
person.is_fatal = map(eachrow(person)) do x
x.INJSVR=="Fatal Injury" || return false
x.STAFATL=="Y"
end
person.is_pdo = map(eachrow(person)) do x
x.INJSVR=="No Apparent Injury" && return true
x.INJSVR=="Fatal Injury" || return false
x.STAFATL=="N"
end
person.is_injury = .!(person.is_fatal.||person.is_pdo)
person.is_ainjury = person.INJSVR.=="Suspected Serious Injury"
person.is_mcycle = person.UNITTYPE.=="Motorcycle"
person.is_ped = person.UNITTYPE.=="Pedestrian"
person.is_bike = person.UNITTYPE.=="Bicycle"
person.is_mcycle_k = person.is_mcycle.&&person.is_fatal
person.is_mcycle_a = person.is_mcycle.&&person.is_ainjury
person.is_mcycle_inj = person.is_mcycle.&&person.is_injury
person.is_ped_k = person.is_ped.&&person.is_fatal
person.is_ped_a = person.is_ped.&&person.is_ainjury
person.is_ped_inj = person.is_ped.&&person.is_injury
person.is_bike_k = person.is_bike.&&person.is_fatal
person.is_bike_a = person.is_bike.&&person.is_ainjury
person.is_bike_inj = person.is_bike.&&person.is_injury
psums = combine(groupby(person, :CRSHNMBR),
:is_fatal=>sum=>:num_fatal,
:is_injury=>sum=>:num_injury,
:is_ainjury=>sum=>:num_ainjury,
:is_mcycle_k=>sum=>:num_mcycle_k,
:is_mcycle_a=>sum=>:num_mcycle_a,
:is_mcycle_inj=>sum=>:num_mcycle_inj,
:is_ped_k=>sum=>:num_ped_k,
:is_ped_a=>sum=>:num_ped_a,
:is_ped_inj=>sum=>:num_ped_inj,
:is_bike_k=>sum=>:num_bike_k,
:is_bike_a=>sum=>:num_bike_a,
:is_bike_inj=>sum=>:num_bike_inj,
)
leftjoin!(crash, psums, on=:CRSHNMBR)
...
df = combine(groupby(crash, :crash_year),
"is_mcycle"=>sum=>"Motorcycle Crashes",
"num_mcycle_k"=>sum=>"Motorcyclists Killed",
"num_mcycle_inj"=>sum=>"Motorcyclists Injured",
"num_mcycle_a"=>sum=>"Motorcyclist A-Injuries",
"is_ped"=>sum=>"Pedestrian Crashes",
"num_ped_k"=>sum=>"Pedestrians Killed",
"num_ped_inj"=>sum=>"Pedestrians Injured",
"num_ped_a"=>sum=>"Pedestrian A-Injuries",
"is_bike"=>sum=>"Bicycle Crashes",
"num_bike_k"=>sum=>"Bicyclists Killed",
"num_bike_inj"=>sum=>"Bicyclists Injured",
"num_bike_a"=>sum=>"Bicyclist A-Injuries",
)
leftjoin!(cstats, df, on=:crash_year)
...