Model 1: Outcome as Charges Laid

We opted to investigate whether race of the victim of police violence was associated with the odds of the police officer having charges laid against them. Charges in this case specifically relate to legal ramifications, and do not include discipline or civil suits against the police officer without charges. Due to small cell counts, race was operationalized to include only white and Black individuals.

 

Crude Analysis

Crude analyses show that, in instances where the victim of police violence is Black, the odds of charges being laid is increased by 133% (95% CI: 1.59, 3.42).

glm(charges ~ race_rec, data = mpv_df_charges, family = binomial()) %>% 
  broom::tidy() %>% 
  mutate(
    OR = exp(estimate),
    CI_lower = exp(estimate - 1.96 * std.error),
    CI_upper = exp(estimate + 1.96 * std.error)
  ) %>% 
  select(term, OR, starts_with("CI")) %>% 
  mutate(
    term = str_replace(term, "race_rec", "Race: ")) %>% 
  kable(digits = 3) %>% 
  kable_styling(bootstrap_options = c("striped", "hover"))
term OR CI_lower CI_upper
(Intercept) 0.015 0.011 0.020
Race: Black 2.331 1.591 3.417

OR = Odds Ratio, CI = Confidence Interval

 

Confounder Selection

We considered year during which the event occurred as a potential confounder, due to a hypothesized association between time since incident and charges administered. We also considered gender and age of the individual killed by police as potential confounders.

Based on the results in the tables below, and using the 10% change rule in the beta estimate as a requirement for confounding along with a priori hypothesis, we included gender and symptoms of mental illness as confounders.

#Year - Not significant, not further explored
glm(charges ~ year, data = mpv_df_charges, family = binomial()) %>% 
  broom::tidy() %>% 
  kable(digits = 3) %>% 
  kable_styling(bootstrap_options = c("striped", "hover"))
term estimate std.error statistic p.value
(Intercept) 77.937 88.553 0.880 0.379
year -0.041 0.044 -0.923 0.356
#Gender - Significant, further explored
glm(charges ~ gender, data = mpv_df_charges, family = binomial()) %>% 
  broom::tidy() %>% 
    mutate(
    term = str_replace(term, "gender", "Gender: ")) %>% 
  kable(digits = 3) %>% 
  kable_styling(bootstrap_options = c("striped", "hover"))
term estimate std.error statistic p.value
(Intercept) -2.434 0.222 -10.949 0
Gender: Male -1.543 0.247 -6.248 0
#Symptoms of MI - Significant, further explored
glm(charges ~ MI, data = mpv_df_charges, family = binomial()) %>% 
  broom::tidy() %>% 
  kable(digits = 3) %>% 
  kable_styling(bootstrap_options = c("striped", "hover"))
term estimate std.error statistic p.value
(Intercept) -3.631 0.101 -35.838 0.000
MI -1.135 0.333 -3.404 0.001
#Age - Not significant, not further explored
glm(charges ~ age_rec, data = mpv_df_charges, family = binomial()) %>% 
  broom::tidy() %>% 
  mutate(
    term = str_replace(term, "age_rec", "Age: ")) %>% 
  kable(digits = 3) %>% 
  kable_styling(bootstrap_options = c("striped", "hover"))
term estimate std.error statistic p.value
(Intercept) -3.758 0.125 -30.178 0.000
Age: [40,60) -0.156 0.222 -0.703 0.482
Age: [60,100) -0.164 0.431 -0.382 0.703
Age: [0,20) 0.242 0.380 0.638 0.523

 

Adjusted Analysis

After adjustment for gender and symptoms of mental illness, among victims of police violence who are Black, the odds of charges being laid against the police officer increase by 142% (95% CI: 1.63, 3.60). While the direction of association is opposite than we were anticipating, it is possible that the odds of charges being laid are higher when the victim is Black because the reasons behind carrying out these violent actions are not well justified. Ideally, we would be able to further investigate this with data regarding the reason for police stops or police intervention, but we were not able to do so.

glm(charges ~ race_rec + gender + MI, data = mpv_df_charges, family = binomial()) %>% 
  broom::tidy() %>% 
  mutate(
    aOR = exp(estimate),
    CI_lower = exp(estimate - 1.96 * std.error),
    CI_upper = exp(estimate + 1.96 * std.error)
  ) %>% 
  select(term, aOR, starts_with("CI")) %>% 
  mutate(
    term = str_replace(term, "race_rec", "Race: "),
    term = str_replace(term, "gender", "Gender: ")) %>% 
  kable(digits = 3) %>% 
  kable_styling(bootstrap_options = c("striped", "hover"))
term aOR CI_lower CI_upper
(Intercept) 0.088 0.054 0.142
Race: Black 2.424 1.633 3.597
Gender: Male 0.160 0.097 0.265
MI 0.336 0.173 0.653

MI = Symptoms of mental illness; aOR = Adjusted Odds Ratio, CI = Confidence Interval

 

Sensitivity Analysis: Model 1

Given the concerns regarding our adjusted model, we opted to carry out a sensitivity analysis investigating whether this association changed when excluding pending cases. We aimed to explore whether a pending investigation was the cause for what seems like a spuriously inflated OR. However, adjusted analyses show that in instances where the victim of police violence is Black, the odds of charges being laid is increased by 128% (95% CI: 1.52, 3.32), adjusting for gender and symptoms of mental illness. Restricting to solved cases did not change this association.

mpv_solved = 
  mpv_df_charges %>% 
  filter(resolved == "1")

glm(charges ~ race_rec + gender + MI, data = mpv_solved, family = binomial()) %>% 
  broom::tidy() %>% 
  mutate(
    aOR = exp(estimate),
    CI_lower = exp(estimate - 1.96 * std.error),
    CI_upper = exp(estimate + 1.96 * std.error)
  ) %>% 
  select(term, aOR, starts_with("CI")) %>% 
  mutate(
    term = str_replace(term, "race_rec", "Race: "),
    term = str_replace(term, "gender", "Gender: ")) %>% 
  kable(digits = 3) %>% 
  kable_styling(bootstrap_options = c("striped", "hover"))
term aOR CI_lower CI_upper
(Intercept) 0.239 0.144 0.397
Race: Black 2.284 1.516 3.442
Gender: Male 0.188 0.110 0.323
MI 0.326 0.166 0.638

MI = Symptoms of mental illness; aOR = Adjusted Odds Ratio, CI = Confidence Interval

 

Model 2: Outcome as Symptoms of Mental Illness

Crude Analysis

Given that we found symptoms of mental illness to be negatively associated with charges laid against police, we opted to investigate this variable more. We set out to explore whether there was an association between gender and recording a victim as having symptoms of mental illness. Crude analyses show that being male was protective against recorded symptoms of mental illness (OR: 0.60, 95% CI: 0.46, 0.78).

glm(MI ~ gender, data = mpv_df_charges, family = binomial()) %>% 
  broom::tidy() %>% 
  mutate(
    OR = exp(estimate),
    CI_lower = exp(estimate - 1.96 * std.error),
    CI_upper = exp(estimate + 1.96 * std.error)
  ) %>% 
  select(term, OR, starts_with("CI")) %>% 
  mutate(
    term = str_replace(term, "gender", "Gender: ")) %>% 
  kable(digits = 3) %>% 
  kable_styling(bootstrap_options = c("striped", "hover"))
term OR CI_lower CI_upper
(Intercept) 0.492 0.382 0.633
Gender: Male 0.603 0.464 0.782

OR = Odds Ratio, CI = Confidence Interval

 

Confounder Selection

We considered age and race as potential confounders of the relationship between gender and symptoms of mental illness. Similar to the model above, we used the 10% change rule in the beta estimate as a requirement for confounding along with a priori hypotheses. We included both age and race in the final adjusted model.

#Age - Significant, further explored
glm(MI ~ age_rec, data = mpv_df_charges, family = binomial()) %>% 
  broom::tidy() %>% 
  mutate(
    term = str_replace(term, "age_rec", "Age: ")) %>% 
  kable(digits = 3) %>% 
  kable_styling(bootstrap_options = c("striped", "hover"))
term estimate std.error statistic p.value
(Intercept) -1.331 0.046 -29.108 0.000
Age: [40,60) 0.331 0.074 4.495 0.000
Age: [60,100) 0.808 0.126 6.398 0.000
Age: [0,20) -0.420 0.175 -2.394 0.017
#Race - Significant, further explored
glm(MI ~ race_rec, data = mpv_df_charges, family = binomial()) %>% 
  broom::tidy() %>% 
    mutate(
    term = str_replace(term, "race_rec", "Race: ")) %>% 
  kable(digits = 3) %>% 
  kable_styling(bootstrap_options = c("striped", "hover"))
term estimate std.error statistic p.value
(Intercept) -0.898 0.039 -23.001 0
Race: Black -0.921 0.077 -11.908 0

 

Adjusted Analysis

After adjustment for age and race, we found no association between gender and recorded symptoms of mental illness (aOR: 0.68, 95% CI: 0.52, 0.89). While we should avoid interpreting covariates other than the exposure of interest due to Table 2 fallacy, they are presented here for completeness.

glm(MI ~ gender + race_rec + age_rec, data = mpv_df_charges, family = binomial()) %>% 
  broom::tidy() %>% 
  mutate(
    OR = exp(estimate),
    CI_lower = exp(estimate - 1.96 * std.error),
    CI_upper = exp(estimate + 1.96 * std.error)
  ) %>% 
  select(term, OR, starts_with("CI")) %>% 
  mutate(
    term = str_replace(term, "gender", "Gender: "),
    term = str_replace(term, "race_rec", "Race: "),
    term = str_replace(term, "age_rec", "Age: ")) %>% 
  kable(digits = 3) %>% 
  kable_styling(bootstrap_options = c("striped", "hover"))
term OR CI_lower CI_upper
(Intercept) 0.519 0.397 0.678
Gender: Male 0.682 0.522 0.890
Race: Black 0.435 0.372 0.509
Age: [40,60) 1.191 1.027 1.381
Age: [60,100) 1.886 1.466 2.426
Age: [0,20) 0.760 0.536 1.078

MI = Symptoms of mental illness; aOR = Adjusted Odds Ratio, CI = Confidence Interval