Skip to contents

Alcohol Counts

Counts involving alcohol are complicated due to a high rate of missing BAC values. FARS and GESCRSS include the variables alc_res (BAC values) and dr_drink (police-reported alcohol involvement). NHTSA also uses multiple imputation (MI) to estimate missing BAC values in FARS records (not GES/CRSS records). Traffic Safety Facts uses MI to report the number of fatalities from crashes involving a driver with a BAC of .08 g/dL or higher. Using alc_res and dr_drink produce smaller counts than those produced via MI.

rfars::counts() counts alcohol-involved crashes, fatalities and injuries using alc_res and dr_drink. However, the flat object returned by get_fars() includes the MI variables a1:a10 from the Midrvacc file, and p1:p10 from the Miper file. Below we explore the differences and show how to use the MI variables to replicate NHTSA’s reporting. See Appendix E of the FARS Analytical User’s Manual for more information on these files.

## Warning: package 'ggplot2' was built under R version 4.4.3

Here we use rfars::counts() to count alcohol-involved crashes:

myFARS <- get_fars(2023)

✓ 2023 data downloaded Accident file: | | | 0% | |== | 2% | |=== | 4% | |===== | 7% | |====== | 9% | |======== | 11% | |========= | 13% | |=========== | 16% | |============ | 18% | |============== | 20% | |================ | 22% | |================= | 24% | |=================== | 27% | |==================== | 29% | |====================== | 31% | |======================= | 33% | |========================= | 36% | |========================== | 38% | |============================ | 40% | |============================== | 42% | |=============================== | 44% | |================================= | 47% | |================================== | 49% | |==================================== | 51% | |===================================== | 53% | |======================================= | 56% | |======================================== | 58% | |========================================== | 60% | |============================================ | 62% | |============================================= | 64% | |=============================================== | 67% | |================================================ | 69% | |================================================== | 71% | |=================================================== | 73% | |===================================================== | 76% | |====================================================== | 78% | |======================================================== | 80% | |========================================================== | 82% | |=========================================================== | 84% | |============================================================= | 87% | |============================================================== | 89% | |================================================================ | 91% | |================================================================= | 93% | |=================================================================== | 96% | |==================================================================== | 98% | |======================================================================| 100% Vehicle file: | | | 0% | |= | 1% | |== | 2% | |== | 3% | |=== | 4% | |==== | 6% | |===== | 7% | |====== | 8% | |====== | 9% | |======= | 10% | |======== | 11% | |========= | 12% | |========= | 13% | |========== | 15% | |=========== | 16% | |============ | 17% | |============= | 18% | |============= | 19% | |============== | 20% | |=============== | 21% | |================ | 22% | |================= | 24% | |================= | 25% | |================== | 26% | |=================== | 27% | |==================== | 28% | |==================== | 29% | |===================== | 30% | |====================== | 31% | |======================= | 33% | |======================== | 34% | |======================== | 35% | |========================= | 36% | |========================== | 37% | |=========================== | 38% | |============================ | 39% | |============================ | 40% | |============================= | 42% | |============================== | 43% | |=============================== | 44% | |=============================== | 45% | |================================ | 46% | |================================= | 47% | |================================== | 48% | |=================================== | 49% | |=================================== | 51% | |==================================== | 52% | |===================================== | 53% | |====================================== | 54% | |======================================= | 55% | |======================================= | 56% | |======================================== | 57% | |========================================= | 58% | |========================================== | 60% | |========================================== | 61% | |=========================================== | 62% | |============================================ | 63% | |============================================= | 64% | |============================================== | 65% | |============================================== | 66% | |=============================================== | 67% | |================================================ | 69% | |================================================= | 70% | |================================================== | 71% | |================================================== | 72% | |=================================================== | 73% | |==================================================== | 74% | |===================================================== | 75% | |===================================================== | 76% | |====================================================== | 78% | |======================================================= | 79% | |======================================================== | 80% | |========================================================= | 81% | |========================================================= | 82% | |========================================================== | 83% | |=========================================================== | 84% | |============================================================ | 85% | |============================================================= | 87% | |============================================================= | 88% | |============================================================== | 89% | |=============================================================== | 90% | |================================================================ | 91% | |================================================================ | 92% | |================================================================= | 93% | |================================================================== | 94% | |=================================================================== | 96% | |==================================================================== | 97% | |==================================================================== | 98% | |===================================================================== | 99% | |======================================================================| 100% Person file: | | | 0% | |== | 3% | |==== | 5% | |====== | 8% | |======== | 11% | |========= | 14% | |=========== | 16% | |============= | 19% | |=============== | 22% | |================= | 24% | |=================== | 27% | |===================== | 30% | |======================= | 32% | |========================= | 35% | |========================== | 38% | |============================ | 41% | |============================== | 43% | |================================ | 46% | |================================== | 49% | |==================================== | 51% | |====================================== | 54% | |======================================== | 57% | |========================================== | 59% | |============================================ | 62% | |============================================= | 65% | |=============================================== | 68% | |================================================= | 70% | |=================================================== | 73% | |===================================================== | 76% | |======================================================= | 78% | |========================================================= | 81% | |=========================================================== | 84% | |============================================================= | 86% | |============================================================== | 89% | |================================================================ | 92% | |================================================================== | 95% | |==================================================================== | 97% | |======================================================================| 100% Multiple Imputation Driver BAC by Crash file: | | | 0% | |======== | 11% | |================ | 22% | |======================= | 33% | |=============================== | 44% | |======================================= | 56% | |=============================================== | 67% | |====================================================== | 78% | |============================================================== | 89% | |======================================================================| 100% Weather file(s): | | | 0% | |======================================================================| 100% Crash risk factors: | | | 0% | |======================================================================| 100% vsoe file: | | | 0% | |================== | 25% | |=================================== | 50% | |==================================================== | 75% | |======================================================================| 100% distract file: | | | 0% | |=================================== | 50% | |======================================================================| 100% drimpair file: | | | 0% | |=================================== | 50% | |======================================================================| 100% factor file: | | | 0% | |=================================== | 50% | |======================================================================| 100% maneuver file: | | | 0% | |=================================== | 50% | |======================================================================| 100% violatn file: | | | 0% | |=================================== | 50% | |======================================================================| 100% vision file: | | | 0% | |=================================== | 50% | |======================================================================| 100% damage file: | | | 0% | |=================================== | 50% | |======================================================================| 100% vehiclesf file: | | | 0% | |=================================== | 50% | |======================================================================| 100% pvehiclesf file: | | | 0% | |=================================== | 50% | |======================================================================| 100% driverrf file: | | | 0% | |=================================== | 50% | |======================================================================| 100% PBtype file: | | | 0% | |=== | 5% | |====== | 9% | |========== | 14% | |============= | 18% | |================ | 23% | |=================== | 27% | |====================== | 32% | |========================= | 36% | |============================= | 41% | |================================ | 45% | |=================================== | 50% | |====================================== | 55% | |========================================= | 59% | |============================================= | 64% | |================================================ | 68% | |=================================================== | 73% | |====================================================== | 77% | |========================================================= | 82% | |============================================================ | 86% | |================================================================ | 91% | |=================================================================== | 95% | |======================================================================| 100% SafetyEq file: | | | 0% | |========= | 12% | |================== | 25% | |========================== | 38% | |=================================== | 50% | |============================================ | 62% | |==================================================== | 75% | |============================================================= | 88% | |======================================================================| 100% Multiple Imputation Person BAC file: | | | 0% | |====== | 9% | |============= | 18% | |=================== | 27% | |========================= | 36% | |================================ | 45% | |====================================== | 55% | |============================================= | 64% | |=================================================== | 73% | |========================================================= | 82% | |================================================================ | 91% | |======================================================================| 100% nmcrash file: | | | 0% | |======================= | 33% | |=============================================== | 67% | |======================================================================| 100% nmimpair file: | | | 0% | |======================= | 33% | |=============================================== | 67% | |======================================================================| 100% nmprior file: | | | 0% | |======================= | 33% | |=============================================== | 67% | |======================================================================| 100% nmdistract file: | | | 0% | |======================= | 33% | |=============================================== | 67% | |======================================================================| 100% drugs file: | | | 0% | |========= | 12% | |================== | 25% | |========================== | 38% | |=================================== | 50% | |============================================ | 62% | |==================================================== | 75% | |============================================================= | 88% | |======================================================================| 100% race file: | | | 0% | |============== | 20% | |============================ | 40% | |========================================== | 60% | |======================================================== | 80% | |======================================================================| 100% personrf file: | | | 0% | |======================= | 33% | |=============================================== | 67% | |======================================================================| 100% ✓ Flat file constructed ✓ Multi_acc file constructed ✓ Multi_veh file constructed ✓ Multi_per file constructed ✓ SOE file constructed ✓ Prepared files saved in C:/Users/STEVEJ~1/AppData/Local/Temp/Rtmpmk3OI9/FARS data/prepd/2023 ✓ Codebook file saved in C:/Users/STEVEJ~1/AppData/Local/Temp/Rtmpmk3OI9/FARS data/prepd/

counts(myFARS, involved = 'alcohol') %>% knitr::kable(format = "html")
## Note: rfars::counts() uses the variables alc_res and dr_drink to determine alcohol involvement. NHTSA reports counts using multiple imputation to estimate missing BAC values. See vignette('Alcohol Counts', package = 'rfars') for more information.
year what states region urb who involved n
2023 crashes all all all all alcohol 9324

And here we use rfars::counts() to count the number of alcohol-involved fatalities:

counts(
  df = myFARS, 
  what = "fatalities",
  involved = 'alcohol'
) %>%
  knitr::kable(format = "html")
## Note: rfars::counts() uses the variables alc_res and dr_drink to determine alcohol involvement. NHTSA reports counts using multiple imputation to estimate missing BAC values. See vignette('Alcohol Counts', package = 'rfars') for more information.
year what states region urb who involved n
2023 fatalities all all all all alcohol 10446

The MI process produces 10 separate BAC estimates. The Miper file provides p1:p10, person level BAC estimates for each driver and non-occupant in the FARS Person data file. The Midrvacc file provides variables a1:a10, crash level BAC estimates derived from driver records in the Miper file.

To replicate the estimated number of fatalities reported in Traffic Safety Facts, we implement the procedure below.

Step 1. Start with the flat object and filter to fatalities. Then generate 30 indicator variables, 10 FPC_i, 10 SPC_i, and 10 TPC_i variables. i corresponds to the 10 a_i and p_i variables. FPC indicates that BAC = 0.00, SPC that BAC is between 0.01 and 0.07, and TPC that BAC is >= 0.08. So if a_1 = 5 (representing a BAC of 0.05), then FPC_1 = 0, SPC_1 = 1, and TPC_1 = 0.

temp <- myFARS$flat %>% 
  select(year:per_no, age, sex, per_typ, inj_sev, alc_res, dr_drink, a1:a10) %>%
  filter(inj_sev == "Fatal Injury (K)")

for(i in 1:10) {
  imputation_col <- paste0("a", i)
  temp[[paste0("FPC", i)]] <- ifelse(temp[[imputation_col]] == 0, 1, 0)  # BAC = 0.00
  temp[[paste0("SPC", i)]] <- ifelse(temp[[imputation_col]] >= 1 & temp[[imputation_col]] <= 7, 1, 0)  # BAC = 0.01-0.07
  temp[[paste0("TPC", i)]] <- ifelse(temp[[imputation_col]] >= 8, 1, 0)  # BAC = 0.08+
}

This produces the table below (transposed for easier viewing).

temp %>% 
  select(st_case, a1:a10, starts_with("FPC"), starts_with("SPC"), starts_with("TPC")) %>% 
  slice(1:10) %>% 
  t() %>%
  knitr::kable(format = "html")
st_case 10001 10002 10003 10004 10005 10006 10007 10007 10008 10009
a1 21 21 14 11 0 25 0 0 0 0
a2 0 21 14 11 0 25 0 0 0 0
a3 0 21 14 11 0 18 0 0 0 0
a4 0 21 14 11 0 0 0 0 0 0
a5 13 21 14 11 0 25 0 0 0 0
a6 13 21 14 11 0 14 0 0 0 0
a7 0 21 14 11 0 0 0 0 0 0
a8 0 21 14 11 0 0 0 0 0 0
a9 0 21 14 11 0 8 0 0 0 0
a10 0 21 14 11 0 0 0 0 0 0
FPC1 0 0 0 0 1 0 1 1 1 1
FPC2 1 0 0 0 1 0 1 1 1 1
FPC3 1 0 0 0 1 0 1 1 1 1
FPC4 1 0 0 0 1 1 1 1 1 1
FPC5 0 0 0 0 1 0 1 1 1 1
FPC6 0 0 0 0 1 0 1 1 1 1
FPC7 1 0 0 0 1 1 1 1 1 1
FPC8 1 0 0 0 1 1 1 1 1 1
FPC9 1 0 0 0 1 0 1 1 1 1
FPC10 1 0 0 0 1 1 1 1 1 1
SPC1 0 0 0 0 0 0 0 0 0 0
SPC2 0 0 0 0 0 0 0 0 0 0
SPC3 0 0 0 0 0 0 0 0 0 0
SPC4 0 0 0 0 0 0 0 0 0 0
SPC5 0 0 0 0 0 0 0 0 0 0
SPC6 0 0 0 0 0 0 0 0 0 0
SPC7 0 0 0 0 0 0 0 0 0 0
SPC8 0 0 0 0 0 0 0 0 0 0
SPC9 0 0 0 0 0 0 0 0 0 0
SPC10 0 0 0 0 0 0 0 0 0 0
TPC1 1 1 1 1 0 1 0 0 0 0
TPC2 0 1 1 1 0 1 0 0 0 0
TPC3 0 1 1 1 0 1 0 0 0 0
TPC4 0 1 1 1 0 0 0 0 0 0
TPC5 1 1 1 1 0 1 0 0 0 0
TPC6 1 1 1 1 0 1 0 0 0 0
TPC7 0 1 1 1 0 0 0 0 0 0
TPC8 0 1 1 1 0 0 0 0 0 0
TPC9 0 1 1 1 0 1 0 0 0 0
TPC10 0 1 1 1 0 0 0 0 0 0

We can examine one crash to see the relation between the a and FPC, SPS, and TPC variables. The table below shows the 10 iterations for a, and the corresponding indicator variables.

temp %>% 
  slice(1) %>% 
  select(st_case, a1:a10, starts_with("FPC"), starts_with("SPC"), starts_with("TPC")) %>%
  pivot_longer(-1) %>%
  mutate(
    iter = gsub("\\D", "", name),
    name = gsub("[^A-Za-z]", "", name)
  ) %>%
  pivot_wider() %>%
  knitr::kable(format = "html")
st_case iter a FPC SPC TPC
10001 1 21 0 0 1
10001 2 0 1 0 0
10001 3 0 1 0 0
10001 4 0 1 0 0
10001 5 13 0 0 1
10001 6 13 0 0 1
10001 7 0 1 0 0
10001 8 0 1 0 0
10001 9 0 1 0 0
10001 10 0 1 0 0

Step 2. Sum the indicator variables in each iteration.

case_results <- list()

for(i in 1:10) {
  fpc_col <- paste0("FPC", i)
  spc_col <- paste0("SPC", i)
  tpc_col <- paste0("TPC", i)
  
  case_results[[i]] <-
    temp %>%
    summarise(
      TOTAL = n(),
      !!paste0("FSBAC", i) := sum(!!sym(fpc_col), na.rm = TRUE),
      !!paste0("SSBAC", i) := sum(!!sym(spc_col), na.rm = TRUE),
      !!paste0("TSBAC", i) := sum(!!sym(tpc_col), na.rm = TRUE),
      .groups = 'drop'
    )
}

This produces 10 estimates of the number of fatalities from crashes where BAC = 0 (FSBAC), where BAC was between 0.01 and 0.07 (SSBAC), and where BAC >= 0.08 (TSBAC). The table below shows all of these estimates.

bind_rows(
  data.frame(case_results[[1]])  %>% select(TOTAL, FSBAC=2, SSBAC=3, TSBAC=4) %>% mutate(iter=1),
  data.frame(case_results[[2]])  %>% select(TOTAL, FSBAC=2, SSBAC=3, TSBAC=4) %>% mutate(iter=2),
  data.frame(case_results[[3]])  %>% select(TOTAL, FSBAC=2, SSBAC=3, TSBAC=4) %>% mutate(iter=3),
  data.frame(case_results[[4]])  %>% select(TOTAL, FSBAC=2, SSBAC=3, TSBAC=4) %>% mutate(iter=4),
  data.frame(case_results[[5]])  %>% select(TOTAL, FSBAC=2, SSBAC=3, TSBAC=4) %>% mutate(iter=5),
  data.frame(case_results[[6]])  %>% select(TOTAL, FSBAC=2, SSBAC=3, TSBAC=4) %>% mutate(iter=6),
  data.frame(case_results[[7]])  %>% select(TOTAL, FSBAC=2, SSBAC=3, TSBAC=4) %>% mutate(iter=7),
  data.frame(case_results[[8]])  %>% select(TOTAL, FSBAC=2, SSBAC=3, TSBAC=4) %>% mutate(iter=8),
  data.frame(case_results[[9]])  %>% select(TOTAL, FSBAC=2, SSBAC=3, TSBAC=4) %>% mutate(iter=9),
  data.frame(case_results[[10]]) %>% select(TOTAL, FSBAC=2, SSBAC=3, TSBAC=4) %>% mutate(iter=10)
  ) %>%
  knitr::kable(format = "html")
TOTAL FSBAC SSBAC TSBAC iter
40901 26315 2117 12398 1
40901 26222 2121 12487 2
40901 26343 2129 12358 3
40901 26326 2071 12433 4
40901 26344 2102 12384 5
40901 26249 2156 12425 6
40901 26390 2070 12370 7
40901 26284 2127 12419 8
40901 26269 2159 12402 9
40901 26093 2120 12617 10

Step 3. Take the average of each set of estimates.

calc <- case_results[[1]]
  for(i in 2:10) {
    calc <- calc %>% bind_cols(case_results[[i]] %>% select(-TOTAL))
  }

calc <-
  calc %>%
  rowwise() %>%
  mutate(
    SBAC0 = round(mean(c_across(starts_with("FSBAC")), na.rm = TRUE)), # BAC 0.00
    SBAC1 = round(mean(c_across(starts_with("SSBAC")), na.rm = TRUE)), # BAC 0.01-0.07
    SBAC2 = round(mean(c_across(starts_with("TSBAC")), na.rm = TRUE))  # BAC 0.08+
  ) %>%
  ungroup()

This gives us our answer. The values below give the final estimates of the number of fatalities from crashes where BAC = 0 (SBAC0), where BAC was between 0.01 and 0.07 (SBAC1), and where BAC >= 0.08 (SBAC2). The value for SBAC2 is 12,429, which matches Traffic Safety Facts for 2023.

select(calc, SBAC0:SBAC2) %>% knitr::kable(format = "html")
SBAC0 SBAC1 SBAC2
26284 2117 12429

Shortcut. We can do this more directly if we’re only interested in the number of fatalities from crashes with alcohol-impaired drivers:

x <-
  myFARS$flat %>% 
  select(year:per_no, age, sex, per_typ, inj_sev, alc_res, dr_drink, a1:a10) %>%
  filter(inj_sev == "Fatal Injury (K)") %>%
  mutate_at(paste0("a", 1:10), function(x) 1*(x>=8)) %>%
  group_by(year) %>%
  summarize_at(paste0("a", 1:10), sum, na.rm=T) %>%
  rowwise() %>%
  mutate(a = round(mean(c_across(a1:a10)))) 

x$a
## [1] 12429

Please see Transitioning to Multiple Imputation – A New Method to Impute Missing BAC values in FARS for more guidance on generating other counts using the MI data.