Dataset:
TXJail_DeathsCounties2015_2025_Capstone_analysis.xlsx
Study Period: January 1, 2015 - December 31, 2025
Total Observations: N = 390 custodial deaths
Analysis Date: February 2026
Texas Justice Initiative (TJI) custodial death reports, compiled from Texas Attorney General mandatory reporting under Texas Public Information Act.
Website: https://texasjusticeinitiative.org/datasets/custodial-deaths
Deaths in four largest Texas county jails:
| County | N Deaths | % of Sample | Preventable Deaths | Preventable Rate |
|---|---|---|---|---|
| Bexar | 119 | 30.5% | 33 | 27.7% |
| Dallas | 77 | 19.7% | 6 | 7.8% |
| Harris | 151 | 38.7% | 13 | 8.6% |
| Travis | 43 | 11.0% | 12 | 27.9% |
| Total | 390 | 100% | 64 | 16.4% |
Type: Binary (0/1)
Definition: Deaths from suicide OR drug/alcohol intoxication
Coding: - 0 = Non-Preventable (N=326, 83.6%) - 1 = Preventable (N=64, 16.4%)
Categories included as Preventable: - Suicide: 62 deaths (15.9%) - Drug/alcohol intoxication: 2 deaths (0.5%)
Categories coded as Non-Preventable: - Natural causes/illness: 213 deaths (54.6%) - Homicide: 28 deaths (7.2%) - Accidental (non-drug): 36 deaths (9.2%) - Other: 49 deaths (12.6%)
R Code:
df$preventable_death <- ifelse(
df$manner_of_death %in% c("SUICIDE", "ALCOHOL OR DRUG INTOXICATION"),
1, # Preventable
0 # Not preventable
)R Code:
R Code:
Why Bexar is the reference: Highest preventable death rate (27.7%)
# Preventable death (DEPENDENT VARIABLE)
df$preventable_death <- ifelse(
df$manner_of_death %in% c("SUICIDE", "ALCOHOL OR DRUG INTOXICATION"),
1, 0
)
# Sex dummy
df$sex_male <- ifelse(df$sex == "MALE", 1, 0)
# Race dummies (reference: OTHER)
df$race_white <- ifelse(df$race == "WHITE", 1, 0)
df$race_black <- ifelse(df$race == "BLACK", 1, 0)
df$race_hispanic <- ifelse(df$race == "HISPANIC", 1, 0)
# Age group dummies
df$age_26_35 <- ifelse(df$age_at_time_of_death >= 26 &
df$age_at_time_of_death <= 35, 1, 0)
df$age_36_45 <- ifelse(df$age_at_time_of_death >= 36 &
df$age_at_time_of_death <= 45, 1, 0)
df$age_46_55 <- ifelse(df$age_at_time_of_death >= 46 &
df$age_at_time_of_death <= 55, 1, 0)
# Mental health dummies
df$mh_yes <- ifelse(df$exhibit_any_mental_health_problems == "YES", 1, 0)
df$mh_unknown <- ifelse(df$exhibit_any_mental_health_problems == "UNKNOWN", 1, 0)
# Suicidal statements dummy
df$suicidal_yes <- ifelse(df$make_suicidal_statements == "YES", 1, 0)
# Housing dummies
df$housing_single_cell <- ifelse(df$housing_type == "Single Cell", 1, 0)
df$housing_multiple <- ifelse(df$housing_type == "Multiple Occupancy", 1, 0)
# County dummies (reference: BEXAR)
df$county_dallas <- ifelse(df$agency_county == "DALLAS", 1, 0)
df$county_harris <- ifelse(df$agency_county == "HARRIS", 1, 0)
df$county_travis <- ifelse(df$agency_county == "TRAVIS", 1, 0)model3 <- glm(preventable_death ~ age_at_time_of_death + sex_male +
race_black + race_hispanic + mh_yes + suicidal_yes +
days_from_custody_to_death + county_dallas + county_harris +
county_travis,
data = df,
family = binomial)
summary(model3)
# Create odds ratio table
model3_or <- data.frame(
Variable = names(coef(model3)),
Odds_Ratio = exp(coef(model3)),
CI_Lower = exp(confint(model3))[,1],
CI_Upper = exp(confint(model3))[,2],
P_Value = summary(model3)$coefficients[,4]
)
print(model3_or)| Variable | Odds Ratio | 95% CI Lower | 95% CI Upper | P-Value | Interpretation |
|---|---|---|---|---|---|
| (Intercept) | 15.762 | 3.811 | 70.349 | 0.000 | Baseline odds (Bexar, other race, female) |
| age_at_time_of_death | 0.927 | 0.902 | 0.950 | 0.000 | 7.3% lower odds per year ✓ |
| sex_male | 0.852 | 0.352 | 2.226 | 0.732 | Not significant |
| race_black | 0.229 | 0.098 | 0.503 | 0.000 | 77% lower odds (protective) ✓ |
| race_hispanic | 0.640 | 0.296 | 1.349 | 0.246 | Not significant |
| mh_yes | 0.926 | 0.330 | 2.391 | 0.878 | Not significant |
| suicidal_yes | 5.498 | 1.651 | 19.064 | 0.006 | 5.5x higher odds ✓ |
| days_from_custody_to_death | 1.000 | 0.999 | 1.002 | 0.691 | Not significant |
| county_dallas | 0.209 | 0.065 | 0.577 | 0.004 | 79% lower odds than Bexar ✓ |
| county_harris | 0.317 | 0.138 | 0.700 | 0.005 | 68% lower odds than Bexar ✓ |
| county_travis | 0.659 | 0.248 | 1.662 | 0.388 | Not different from Bexar |
✓ = Statistically significant (p < .05)
Status: ✅ SUPPORTED
Status: ✅ SUPPORTED
Status: ✅ STRONGLY SUPPORTED
Status: ✅ SUPPORTED
Counties ranked by screening quality (% UNKNOWN MH status):
| County | % MH Unknown | Screening Quality | Suicide Rate | Paradox |
|---|---|---|---|---|
| Travis | 11.6% | ★★★★ Best | 25.6% | ⚠️ High suicide despite best screening |
| Bexar | 33.6% | ★★★ Good | 27.7% | ⚠️ High suicide despite good screening |
| Dallas | 41.6% | ★★ Poor | 7.8% | ✓ Low suicide despite poor screening |
| Harris | 60.9% | ★ Worst | 7.9% | ✓ Low suicide despite worst screening |
Conclusion: Documentation quality ≠ Prevention effectiveness
Intervention Success Rate: - 11 inmates identified as suicidal at intake - 0 died by suicide - 100% intervention success
Compare to Bexar County: - 4 inmates identified as suicidal - 3 died by suicide - 75% intervention failure
Implication: Post-intake monitoring and intervention > Intake screening
| Variable | N Missing | % Missing | Treatment |
|---|---|---|---|
| Core variables | 0 | 0.0% | Complete data |
| housing_type | 2 | 0.5% | Excluded from housing analysis |
| exhibit_any_mental_health_problems | 65 | 16.7% | Coded as “UNKNOWN” category |
| make_suicidal_statements | 65 | 16.7% | Coded as “UNKNOWN” category |
| type_of_offense | 75 | 19.2% | Not used in primary models |
Philosophy: “UNKNOWN” mental health status treated as substantively meaningful (screening failure) rather than missing data.
Primary Data Source:
Texas Justice Initiative. (2025). Custodial deaths in Texas, 2015-2025 [Dataset]. Retrieved from https://texasjusticeinitiative.org/datasets/custodial-deaths
Analysis:
Palma, J. (2026). Preventable deaths in Texas county jails: A comparative analysis of institutional failures (2015-2025) [Master’s capstone]. University of Texas at San Antonio.
For questions about this codebook or analysis:
Janice Palma, MPA Candidate
University of Texas at San Antonio
Data source inquiries:
Texas Justice Initiative
Website: https://texasjusticeinitiative.org
Last Updated: February 20, 2026
Version: 2.0 (Error-proof edition)
Document Status: Final
| Variable Type | Reference Category | How to Interpret Coefficients |
|---|---|---|
| Sex | Female (sex_male = 0) | Male coefficient = effect of being male vs. female |
| Race | Other (all race dummies = 0) | Race coefficients = effect vs. Other race |
| Age | Continuous (no reference) | Per-year effect on log-odds |
| Mental Health | NO problems (mh_yes = 0) | mh_yes = effect of documented problems vs. no problems |
| Suicidal | NO statements (suicidal_yes = 0) | suicidal_yes = effect of statements vs. no statements |
| County | BEXAR (all county dummies = 0) | County coefficients = effect vs. Bexar County |
All binary variables coded 0/1 where 1 = presence of characteristic
END OF CODEBOOK