Data Sources and Variables |
||
Variable |
Measure |
Source |
---|---|---|
Outcome variable - from Prison Policy Initiative |
||
Rate of imprisonment | per 100,000 residents | Prison Policy Initiative |
Established indicators (demographics and socioeconomic) - from US Census |
||
Black residents | percent | US Census Data |
Median income | in thousands | US Census Data |
Unemployment rate | percent | US Census Data |
Urban/Rural Classification | dummy | US Census Data |
Primary explanatory variables - from SAMHSA |
||
Travel time to mental health facility | minutes at 9:00 am on a weekday from the center of the tract | Substance Abuse and Mental Health Services Administration |
Distance to mental health facility | driving miles from the center of the tract | Substance Abuse and Mental Health Services Administration |
Travel time to inpatient facility | minutes at 9:00 am on a weekday from the center of the tract | Substance Abuse and Mental Health Services Administration |
Driving miles to inpatient facility | driving miles from the center of the tract | Substance Abuse and Mental Health Services Administration |
Travel time to inpatient facility w/ crisis intervention | minutes at 9:00 am on a weekday from the center of the tract | Substance Abuse and Mental Health Services Administration |
Driving miles to inpatient facility w/ crisis intervention | driving miles from the center of the tract | Substance Abuse and Mental Health Services Administration |
Reference Data - from American Community Survey |
||
Tract shapfiles | geometric vector | American Community Survey |
Introduction
In 2022, the federal, state, and local governments of the United States held almost two million people in some form of detention in over 6,300 facilities (Sawyer & Wagner, 2023). The systems that contribute to this large number of incarcerated people in the US have been growing steadily over the past half-century. In 1998, activist and former political prisoner Angela Davis was the first to use the term “prison industrial complex” to refer to the massive industrialized profit-driven systems that make up the penal system in the US. She said the “prison industrial system materially and morally impoverishes its inhabitants and devours the social wealth needed to address the very problems that have led to spiraling numbers of prisoners” (Davis, 1998).
As the Prison Industrial Complex (PIC) has expanded, scholars have examined the relationship between place and imprisonment in terms of places with high rates of reported crime, places with an overwhelming police presence, and the experiences of people in those communities and their relationship with the criminal justice system. The removal of individuals from an already struggling community only contributes to the cycle of instability that leads to crime and harm. These individuals are fathers, workers, caregivers, and other valuable members of their community; ripping them from their families not only impacts those who may have violated the law but also those they leave behind who may have been financially or emotionally dependent on them (Gilmore, 2007).
A number of alternative measures have been proposed against mass incarceration, including the legalization of marijuana, the repeal of discriminatory “tough on crime” laws, and drug courts and other treatment programs (Braun, 2019; Porter, 2022). This research focuses on a different approach to the problem of mass incarceration—access to mental health, specifically inpatient care and crisis intervention. While this may not be a fully causal analysis, the association between access to mental health care and imprisonment rates combined with medical research about violent behavior and mental health care may provide insights about potential areas in need of these types of resources.
Any analysis of the PIC should include an examination of the demographic and socioeconomic factors associated with high imprisonment rates, and this analysis is no exception. The analysis of these relationships provides context about the harm caused by the PIC and that harm may be compounded by issues of access to mental health care and its relationship with imprisonment rates. In this evaluation, I focus on place-based implications of access to mental health care and imprisonment using only one dimension of access—proximity in travel time or miles. (It is worth noting here that the intention was to include the capacity of the nearest facility as it is related to population density in addition to proximity, but due to the fact that none of the facilities contacted for this project would provide any information about capacity or any other details about the care they provide, this analysis is limited to only distance.) By exploring the proximity of care and the characteristics of census tracts, this research may illuminate insights about areas in need of more resources for mental health accessibility to improve outcomes for communities overly impacted by an oppressive carceral system. Considering these spatial characteristics along with standard factors and existing research may illuminate an unexplored piece of the greater influence of oppressive policies that fuel the prison industrial complex as a whole.
Literature Review
It has been well documented that people of color, especially Black men, are more likely to become involved with the carceral system in the US (Alexander, 2012; Eason et al., 2017; Pettit & Western, 2004; Sharkey, 2013; Simes, 2021). Other than race, class is the next predominant factor that has been addressed by previous research; while race and class are inextricably intertwined, class conditions that lead to imprisonment stretch beyond the urban and racial factors usually associated with crime and subjugation (Eason et al., 2017; Pettit & Western, 2004). Outside of racial and economic barriers to care, Black Americans face cultural barriers and stigma surrounding seeking mental health care (Snowden, 2001).
People in jails and prisons are more likely than the general population to suffer from a serious mental health issue, and the carceral system does the bare minimum to provide resources and health care to these individuals while they are incarcerated, let alone before and after their imprisonment (Cloud, 2014). The availability of mental health treatment, and especially inpatient treatment for individuals who may be a risk to the community, as an alternative to imprisonment has more potential to increase public safety and the well-being of communities.
Prison Gerrymandering
Prison gerrymandering is the practice of counting imprisoned people as residents of the place where they are imprisoned. The US Census defines residence as “where [people] live and sleep most of the time” (US Census Bureau, 2018). However, incarcerated people cannot vote or participate in the community where they are detained, and they often maintain ties to their community of origin and hope to have a future there when they return. The practice of counting these people as part of a community in which they have no role not only boosts representation for people around a prison but siphons resources and representation from their home communities (Benveniste, 2022). Representatives in rural areas often lobby for new prisons in their district for the very reason of redirecting resources to their own constituents (Huling, 2002). Prisons are often far from the urban centers where most prisoners lived before incarceration. However, the motivation for this analysis is on how the PIC not only takes people out of their communities but also removes their citizenship in their home neighborhoods in matters that determine resource allocation and representation. Policies like these continue the legacy of attitudes about some individuals counting as only three-fifths of a citizen. As more people are pulled away from their homes and counted in a place that does not value their interests, the barriers to opportunity are reinforced, and the cycle of subjugation continues.
As of 2021, about a dozen states had ended prison gerrymandering which would impact the redistricting from the 2020 Census (Fenster, 2021). Through the administrative process of this policy change, data have been made available about precisely where people in prison are from, and where they intend to return to (Widra, 2023). This information is valuable and unique because it provides a link to determine the conditions that both create an environment where people feel the need to imprison larger portions of the population and create nuanced solutions to reduce both the harm that leads to imprisonment and the harm caused by it.
Mental Health, Crime, and Imprisonment
Mental health care is an important resource to ensure overall health and quality of life (Prince et al., 2007). The expansion of mental health care in the last few decades has been a response to a dire crisis that has long been ignored and stigmatized, and the benefits of access and awareness of mental health services are obvious to many who have utilized these services (Horton, 2007). Though access to mental health services is generally regarded as a positive influence on communities, the marginalized groups who often lack access to these services are the same communities that law enforcement often target for high crime resulting in increased imprisonment rates (Saxena et al., 2007). The link between access to mental health care, crime, and imprisonment is worth investigating to advocate for more resources to be made available for these communities and potentially prevent crime and harm before they happen, and as a result, reduce unnecessary imprisonment.
Barriers to accessing mental health services exist in a variety of forms—awareness, affordability, and availability. The availability component is the focus of this analysis; availability includes the capacity of nearby facilities and proximity to facilities. While there may be a higher density of facilities in urban areas, compared to the populations in those areas, resources may not be available to individuals in need. Long waiting lists, staffing shortages, and a general lack of funding and resources for behavioral health are the result of health and public policy prioritizing more lucrative ventures (Butryn et al., 2017). Proximity to services may add to the issue of availability; especially in low-income rural areas, many people may not have the resources or time to travel long distances for preventative care, and facilities may be too far away to be able to adequately respond to crisis situations, leading law enforcement to fill that role.
I have discussed three major components of mental health care and its relationship with imprisonment: mental health care as prevention, mental health care for families and individuals impacted by the imprisonment of a loved one, and mental health care for formerly imprisoned residents upon release. Mental health care as prevention of criminal and violent behavior has been discussed in medical journals, but the evaluation of access to care in high imprisonment areas may provide important insights about reducing harm, both in terms of crime rates and imprisonment itself (Brennan et al., 2000; Hodgins et al., 2005; Petras et al., 2008). Increased access to mental health care, especially on a large scale could lead to an overall reduction in violent and aggressive behavior, which encompasses most of the crime residents are most concerned about.
Hypotheses
With new information available about the home locations of imprisoned people, there are a number of relationships to investigate. The obvious demographic and socioeconomic factors, including median income, percent of Black residents, unemployment rate, and urban/rural classification, should be considered and potentially controlled in many analyses. Investigating spatial relationships to evaluate dimensions of the accessibility, in terms of distance and capacity, to mental health facilities can help identify areas most in need of attention.
While there are many dimensions to the concept of accessibility, distance can be a useful indicator of at least when mental health care options are not available. (The inpatient and daily capacities of urban facilities may reveal a different aspect of accessibility, especially in densely populated areas, but, unfortunately, that data has not been made available by the facilities providing care.) Other dimensions to consider might be specific services provided (another aspect where details are not shared), populations served, payment methods accepted, outreach or awareness of services available, and, perhaps the most important and illusive, the “success” rate of mental health care. Though outside the scope of this analysis, the measurement of the “success” of mental health care is a highly debated and nuanced topic that is even further obscured by the lack of transparency within, what some might call, the “mental health industrial complex.”
This analysis focuses only on the dimension of proximity as an indicator of access to mental health care, specifically inpatient care for emergency situations. I anticipate the following relationships:
- The percent of Black residents is likely to be positively related to imprisonment rates.
- Median income is likely to be negatively related to imprisonment rates.
- Unemployment rate is likely to be positively related to imprisonment rates
- In rural areas, proximity is expected to have a stronger positive correlation with imprisonment, whereas I anticipate capacity to be more negatively influential in urban areas.
Data
The data for this analysis comes from four different sources combined to create a versatile basis for geographic analysis of imprisonment and its relationship with location. The imprisonment data is from Prison Policy Initiative, a non-profit organization working to “expose the broader harm of mass criminalization” through data and research (Prison Policy Initiative, n.d.). The demographic data for the same census tracts is publicly available from the US Census Bureau (Census Bureau Data, 2020). Information about mental health facilities is available from the Substance Abuse and Mental Health Services Administration. Though the department provides data about many different aspects of mental health treatment and services, since this analysis is focused on the geography of imprisonment, the 2020 National Directory Of Mental Health Treatment Facilities contains locations and key characteristics for all facilities in the US (SAMHSA, 2021). Finally, the American Community Survey hosts geographic and demographic data at the census tract level that is available publicly. This data was used to map the previous data geographically and perform spatial analysis (Esri, 2020).
Prison Policy Initiative
The data gathered from the Prison Policy Initiative is cross-sectional data using 2020 Census and Maryland state data. I chose Maryland for a few reasons. Maryland was among the first states to end the practice of gerrymandering, and as a result, imprisonment rates from 2010 are also available. Since this project combines several data points from different sources to create a new dataset, the historical imprisonment rate could be useful for future research with this data. The second reason has more to do with the choice of states with available data. As an east coast resident with a history background focused on the US South, Maryland feels familiar (other southern states included Virginia and Louisiana and are certainly worthy of a similar analysis). Additionally, Baltimore City has a notorious reputation for issues around crime and policing, and a spatial analysis could prove helpful to identify communities most in need.
The data originated as administrative data from the Maryland Department of Public Safety and Correctional Services and was combined with population data from the Census. The Prison Policy Initiative collected, calculated, and combined this data for public use for various levels of geography for Maryland and eleven other states where prison gerrymandering has been overruled. The imprisonment rate used the redistricting data from Maryland’s law ending prison gerrymandering to count prisoners as residents of their home neighborhoods instead of the location of the prison (Redistricting Data, 2020; Widra, 2023).
This new data can be used to identify what characteristics are common among places with high imprisonment rates. Combined with demographic data about these locations and the proximity of mental health resources, this data can highlight areas in need of more mental health resources to reduce the harm caused by imprisonment and over-policing. The abolition of prison gerrymandering is still ongoing, so this data is only available in limited locations. However, it can be used to shed light on the issue of prison gerrymandering and identify the common circumstances of places with high imprisonment rates.
US Census Data
The US Census collects cross-sectional data every ten years and makes it available publicly. Though the Census collects data about many different attributes at the individual and household level, the data for this analysis is aggregated to the census tract level. Four datasets were acquired from the online Census repository (Census Bureau Data, 2020). In combination with the imprisonment data, the census data can show correlations between the racial and socioeconomic characteristics of an area and the rate of imprisonment and help to conceptualize the systematic ways that incarceration and the Prison Industrial Complex as a whole impact people of color and low-income communities disproportionately.
Substance Abuse and Mental Health Services Administration
Within the US Department of Health and Human Services, the Substance Abuse and Mental Health Services Administration collects and provides data about a wide array of treatments, services, and facilities for mental health and substance abuse (SAMHSA, 2021). The data used for this specific analysis contains geographic and key characteristics of mental health facilities in Maryland. While some of these facilities also provide substance abuse treatment, facilities that exclusively provide substance abuse treatment are not included in this directory. The information about each facility is collected by a survey at the facility level; many data points are collected in the survey about specific treatments and capacities, but the information provided with geographic information in this directory only contained basic characteristics about the type of care, settings, operation, payments accepted, populations served, and others. The locations and services provided by each facility can demonstrate how access and proximity may be related to the rate of imprisonment in a community.
American Community Survey
The American Community Survey (ACS) continuously collects data about many different variables to create estimates about the social, economic, and demographic characteristics of different communities. The Context for Emergency Response feature layer contains information about factors that relate to emergency response including the amount of the population without health insurance, internet access at home, or a personal vehicle. The spatial data for the census tracts will be used to determine the distance to different types of mental health facilities (Esri, 2020).
Methods
Variables
The dependent variable is the imprisonment rate per 100,000 residents for each census tract in Maryland. As described above, this variable was calculated by the Prison Policy Initiative and comes from administrative data made available by policies ending the practice of prison gerrymandering in Maryland (Redistricting Data, 2020; Widra, 2023). Using census tracts as the unit of analysis and GIS to determine the distance to the nearest mental health facility with various characteristics, including inpatient care and crisis intervention services, I can measure a dimension of accessibility of mental health care, particularly during a crisis to avoid involving law enforcement.
The independent variables are grouped into two categories: established indicators, demographic and socioeconomic factors known to be associated with imprisonment and involvement with the criminal justice system, and my primary explanatory variables measure the distance in driving miles and minutes between the geographical center of each tract and the nearest facility at 9 am on a weekday. See Table 1 for the specific variables and the source of the data for each.
The primary explanatory variables are divided into three groups, distance to (1) mental health facilities, (2) facilities with inpatient care, and (3) inpatient facilities with crisis intervention services. Within each group, two measures for each type of facility have been calculated, (a) travel time in minutes and (b) driving distance in miles (at 9:00 am on a weekday) (see Table 2). Driving miles and travel time to each category of facility will be evaluated separately and then compared as a robustness check.
Outcome Variables Matrix | |||
Mental health facilities | Facilities with inpatient care | Inpatient facilities with crisis intervention | |
---|---|---|---|
Minutes at 9:00 am on a weekday from the center of the tract | 1a | 2a | 3a |
Driving miles from the center of the tract | 1b | 2b | 3b |
Because urban areas are likely to have a shorter distance to a facility due to proximity to a city, the capacity of urban facilities is likely to be more critical to determining the accessibility of these services when they are needed. However, since these facilities have been unwilling to share any details about their capacity and services provided with the public, these data were not able to be obtained for this research. It is important to note that within the city of Baltimore, Maryland’s largest urban area (which contains the highest rates of imprisonment), there is only one inpatient facility according to the Substance Abuse and Mental Health Services Administration in 2021. The single inpatient facility in Baltimore city does not offer crisis intervention services. Even without exact numbers, it is highly likely that one facility does not have enough capacity to serve a city with more than half a million residents, let alone a city with a reputation for crime and police violence.
Modeling
In order to isolate the relationship between access to mental health care and imprisonment rate, I examined the potential variables that may confound the results. Data for many characteristics of census tracts are available, including the percent of residents with a disability, the percent under the poverty level, the percent without internet access at home, and the percent without any health insurance. However, all of these variables are so closely related to median income and unemployment rates that their impact is accounted for when I control for median income, unemployment rate, the percent of Black residents, and the tract’s urban/rural classification. The diagram in Figure 1 displays the directional logic of the model.
I use a multilevel Bayesian regression model to examine both the influence of the control variables and the variation within and between each county in Maryland. The Bayesian method differs from the common frequentist methods because these models will draw 10,000 iterations of the model (the first 5,000 draws are discarded as warm up), and I will assess the probability of direction for the coefficients in each model. Instead of statistical “significance,” I will discuss the results in terms of probability of direction based on the distribution of coefficients. I have included complete formal specifications of all models, likelihoods, and priors in the appendix.
Multilevel Model
I use a multilevel modeling approach to capture the variation both between and within each county. In other words, I want the model to consider the distribution of relationships within each county to inform the prediction for a specific tract; I also want to consider the variability between counties. In a way, this county-level random effects modeling approach considers the surrounding area, which variables are related to imprisonment rates, and how similar or different those relationships are within and between counties. Figure 2 provides a simplified diagram of the hierarchical levels in the model.
\[ \begin{aligned} \text{Layer 1:} & Y_{ij} | \mu_j, \sigma_y \sim \text{model of how imprisonment varies WITHIN counties } j \\ \text{Layer 2:} & \mu_j | \mu, \sigma_\mu \sim \text{model of how the typical imprisonment} \mu_j \text{varies BETWEEN counties.} \\ \text{Layer 3:} & \mu, \sigma_y, \sigma_\mu \sim \text{prior models for shared global parameters} \\ \\ i = & \text{Tract} \\ j = & \text{County} \\ \end{aligned} \]
Established indicators
(demographics and socioeconomic factors)
The first equation includes only the demographic and socioeconomic factors as the established indicators for high imprisonment rates. This model provides us with a baseline of the relationship between these established indicators and imprisonment rates in Maryland.
\[ \begin{aligned} Y_{ij} | \beta_{0j}, \beta_1, \beta_2, \beta_3, \beta_4, \sigma_y \sim N(\mu_{ij}, \sigma_y^2) \;\; \text{ with } \;\; \mu_{ij} =& \beta_{0j} + \\ &\beta_1\text{Percent Black}_{ij} + \\ &\beta_2\text{Median Income}_{ij} + \\ &\beta_3\text{Unemployment Rate}_{ij} + \\ &\beta_4\text{Urban}_{ij} \\ \\ \beta_{0j} | \beta_0, \sigma_0 \stackrel{ind}{\sim} & N(\beta_0, \sigma_0^2) \\ \beta_{0c} \sim & N(100, 10^2) \\ \beta_1 \sim & N(100, 60) \\ \beta_2 \sim & N(-50, 15) \\ \beta_3 \sim & N(100, 25) \\ \beta_4 \sim & N(100, 25) \\ \sigma \sim & \text{Exp}(l) \\ \sigma_y \sim & \text{Exp}(0.072) \\ \sigma_0 \sim & \text{Exp}(1) \\ \end{aligned} \]
Proximity to mental health facilities
Since each tract has three variables regarding distance to facilities and two measures of distance (miles and minutes), a total of six models for each equation were evaluated—distance in time and miles to any mental health facility, distance in time and miles to an inpatient mental health facility, and distance in time and miles to an inpatient mental health facility with crisis intervention. The first of these equations examines the relationship between distance (miles and minutes) and imprisonment without any controls.
The second equation is the same but controls for urban/rural classification of the tract. (Since each housing unit is classified as urban or rural and the data from the US Census provides the number of housing units in each trach and the counts for urban and rural classification, tracts were coded for this analysis as urban only when they contained no rural housing units. The high bar for urban classification comes from the higher number of urban tracts and the average size of census tracts is a relatively small unit of analysis; to even the numbers out, only 100% urban tracts are coded as urban, resulting in 1005 tracts coded as urban and 420 tracts coded rural for this analysis). The third equation combines all of the established indicators from the baseline model and distance to each type of facility.
\[ \begin{aligned} Y_{ij} | \beta_{0j}, \beta_5, \sigma_y \sim N(\mu_{ij}, \sigma_y^2) \;\; \text{ with } \;\; \mu_{ij} =& \beta_{0j} + \\ &\beta_5\text{Distance to Facility}_{ij}\\ \\ Y_{ij} | \beta_{0j}, \beta_4, \beta_5, \sigma_y \sim N(\mu_{ij}, \sigma_y^2) \;\; \text{ with } \;\; \mu_{ij} =& \beta_{0j} + \\ &\beta_4\text{Urban}_{ij} + \\ &\beta_5\text{Distance to Facility}_{ij} \\ \\ Y_{ij} | \beta_{0j}, \beta_1, \beta_2, \beta_3, \beta_4, \beta_5, \sigma_y \sim N(\mu_{ij}, \sigma_y^2) \;\; \text{ with } \;\; \mu_{ij} =& \beta_{0j} + \\ &\beta_{1-4}\text{Established indicators}_{ij}\\ &\beta_5\text{Distance to Facility}_{ij}\\ \end{aligned} \]
Analysis
Summary and Overview of the Data
Before interpreting the results from these models (visualizing the primary variables, imprisonment rate and inpatient mental health facilities) on a map provides some preliminary context for greater research questions. The map of imprisonment rates in Maryland, shown in Figure 3, highlights the concentration of high imprisonment in the Baltimore urban area. Since Baltimore is the largest urban area entirely in Maryland, it is not unexpected to see higher rates of imprisonment in the city and surrounding areas. However, the suburbs of Washington, D.C. are also partially in Maryland with comparable population density, but the imprisonment rate for those areas are much lower than the Baltimore suburbs. Though rural areas outside of the two major metropolitan areas seem to have lower rates of imprisonment overall, the southeast peninsula and northwest panhandle seem to have surprisingly higher rates. From this map, it seems that these areas are further from inpatient facilities, and the few in those areas may not have sufficient capacity for the large areas they serve.
Tract Characteristics | |||||
Mean | Median | Std Dev | Min | Max | |
---|---|---|---|---|---|
Imprisonment Rate per 100,000 | 314 | 139 | 497 | 0 | 3,767 |
Total Population | 4,104 | 3,911 | 1,603 | 776 | 11,509 |
Median Income | $107,055 | $101,406 | $44,815 | $14,464 | $250,001 |
% Black | 31.0% | 18.5% | 30.2% | 0.0% | 99.7% |
Unemployment Rate | 5.5% | 4.5% | 3.9% | 0.0% | 31.2% |
% Rural | 14.9% | 0.0% | 32.1% | 0.0% | 100% |
Table 3 summarizes some key variables regarding census tract characteristics in the new dataset. The median income across all tracts in Maryland was $101,406, compared to a national median income of $62,529. The average percentage of Black residents for each tract was 31.0%, compared to only 11.2% nationwide. As a mid-atlantic state, tracts in Maryland have a lower percentage of rural housing than the national average by about half.
Distance to Nearest Facility | |||||
Mean | Median | Std Dev | Min | Max | |
---|---|---|---|---|---|
Driving Miles to Mental Health Facility | 4.3 | 2.7 | 5.0 | 0.1 | 51.8 |
Travel Time to Mental Health Facility | 9 min | 8 min | 7 min | 1 min | 74 min |
Driving Miles to Inpatient Facility | 12.0 | 8.7 | 13.8 | 0.2 | 119.9 |
Travel Time to Inpatient Facility | 22 min | 19 min | 15 min | 1 min | 139 min |
Driving Miles to Inpatient Facility with Crisis Intervention | 22.3 | 16.6 | 24.7 | 0.4 | 152.4 |
Travel Time to Inpatient Facility with Crisis Intervention | 36 min | 30 min | 29 min | 2 min | 184 min |
The key additional variables calculated and added to the dataset are the distances from each census tract to the closest mental health facility with various characteristics. By identifying various measures of access by distance for each tract, this new dataset may offer unique insights about which communities are most in need of investment in mental health well-being and crisis response. As seen in Table 4, the average distance throughout the state is not extreme; the average travel time to any facility is less than ten minutes, and under thirty minutes to inpatient facilities with crisis intervention. However, some tracts are up to 74 minutes away from any mental health facility, 139 minutes from inpatient facilities, and up to almost three hours from an inpatient facility with crisis intervention. For communities in these areas, the only available response to crisis may be the police, which can lead to more harm to an individual in need of mental health services and those around them.
Facility Characteristics | ||||
All | Count | Inpatient | Count | |
---|---|---|---|---|
Inpatient Services | 8.6% | 20 | 100% | 20 |
Outpatient Services | 86.7% | 202 | 60.0% | 12 |
Partial Hospitalization Services | 17.2% | 40 | 90.0% | 18 |
Residential Services | 13.3% | 31 | 5.0% | 1 |
Telehealth Services | 65.7% | 153 | 35.0% | 7 |
Serves Adults | 88.0% | 205 | 90.0% | 18 |
Crisis Intervention | 30.0% | 70 | 50.0% | 10 |
Walk-ins Accepted | 18.9% | 44 | 65.0% | 13 |
Federally Qualified Health Center | 11.2% | 26 | 0.0% | 0 |
Accepts Medicaid | 93.6% | 218 | 100% | 20 |
Accepts Medicare | 69.1% | 161 | 100% | 20 |
Payment Assistance | 17.6% | 41 | 5.0% | 1 |
Sliding Scale | 35.6% | 83 | 5.0% | 1 |
Of all facilities in Maryland, only 8.6%, or 20 facilities, offer inpatient care. Table 5 shows the frequency and percentages of various services and payment options. Most of these characteristics will not be covered in-depth in this report; the primary focus will be inpatient facilities with crisis intervention. The larger issue of inadequate mental health outpatient care and cost-prohibitive preventative care is another dimension of the story about the interactions of mental health and imprisonment that could also be explored with these data given the new variables available.
An initial overall look at the distribution of the tracts and imprisonment rate shows that a clear and obvious characteristic related to higher rates is race. Figure 4 clearly shows that census tracts that have a majority Black population have, on average, much higher rates of imprisonment. Tracts with less than a majority Black population had an average imprisonment rate of 168, and majority Black tracts had an average of 747, or 580 higher than their counterparts. While majority Black tracts had over 100 tracts with an imprisonment rate above 1,000 per 100,000 people, tracts without a majority Black population had only eight above 1,000 per 100,000 people (see Table 6).
Outliers | |||
FIPS Code | Tract | Imprisonment Rate | % Black |
---|---|---|---|
24043000400 | Census Tract 4, Washington County, Maryland | 1,743 | 40.5% |
24510250401 | Census Tract 2504.01, Baltimore city, Maryland | 1,263 | 27.2% |
24510250303 | Census Tract 2503.03, Baltimore city, Maryland | 1,168 | 23.1% |
24510260404 | Census Tract 2604.04, Baltimore city, Maryland | 1,139 | 11.4% |
24510250500 | Census Tract 2505, Baltimore city, Maryland | 1,115 | 39.2% |
24510060300 | Census Tract 603, Baltimore city, Maryland | 1,096 | 36.1% |
24510060200 | Census Tract 602, Baltimore city, Maryland | 1,030 | 47.5% |
24510030200 | Census Tract 302, Baltimore city, Maryland | 1,009 | 26.5% |
Bayesian Regression
Established indicators
The first model examines the relationship between the percent of Black residents, median income, unemployment rate, and urban/rural classification with imprisonment rate per 100,000 residents by census tract. Using the hierarchical model explained earlier, I am taking into account the variation of imprisonment rate within and between counties to return a more precise estimate. The results indicate a positive correlation between the percent of Black residents and imprisonment rates (with a median coefficient of 4.3 and an entirely positive distribution), a negative correlation for median income (with a median coefficient of -2.8 and an entirely negative distribution), and a very positive correlation for unemployment rate (with a median coefficient of 19.2 and an entirely positive distribution); the urban rural classification of the census tract did not have a meaningful correlation with imprisonment rate when controlling for these other variables (the median coefficient was 9.3); even the 80% credible interval was spread well below and above zero (-12.4 and 32.7). The probability of a positive relationship between urban classification and imprisonment is only 70.6%.
Figure 5 shows the distribution of the coefficients for each variable throughout the iterations of the model. It is not unsurprising that areas with higher concentrations of Black and poor residents have higher imprisonment rates. Additionally, since unemployment rates impact lower income communities more, some of the statistical correlation may be obscured by the income variable. It is important to note that, though most crime is associated with urban areas, and imprisonment should be associated with crime, no significant difference was found between imprisonment rates in rural tracts and urban tracts when controlling for race and income (see Figure 6).
Taking a closer look into the variation by location in the state, or county, I have selected three pairs of neighboring counties to examine—Baltimore city and Baltimore county, Montgomery and Prince George’s counties (DC suburbs), and Dorchester and Wicomico counties (rural peninsula). With a reputation for high rates of violent crime, Baltimore city has been the topic of crime and policing in many discussions on the issue, but Baltimore county, which surrounds Baltimore city on all sides without a water border, is a very different place in terms of demographics and imprisonment.
The two DC suburbs, Montgomery and Prince George’s counties, actually have a greater disparity in the percent of Black residents than Baltimore city and Baltimore county, and an almost identical income disparity. However, Baltimore city has almost twice the unemployment and almost four and half times the imprisonment rate as Baltimore county; the imprisonment and unemployment disparity between the suburban DC counties is not as severe. The two rural peninsula counties were chosen because they had imprisonment rates higher than other rural areas. When comparing these rural counties with the other pairs, they stand out as having a lower percent of Black residents than the other counties (save Montgomery county). However, these rural counties also have a lower median income than all the other selected counties (including Baltimore city), and a higher unemployment rate than all but Baltimore city (see Table 7).
Selected Counties | ||||
County | Imprisonment Rate | Percent Black | Median Income | Unemployment Rate |
---|---|---|---|---|
Baltimore Metro Area | ||||
Baltimore City | 1,167 | 63.0% | $73,963 | 8.7% |
Baltimore County | 260 | 27.3% | $101,468 | 4.9% |
DC Suburbs | ||||
Montgomery County | 63 | 18.0% | $140,741 | 4.6% |
Prince George's County | 174 | 63.3% | $101,367 | 6.5% |
Rural Peninsula | ||||
Dorchester County | 511 | 23.8% | $67,102 | 7.3% |
Wicomico County | 688 | 28.8% | $72,223 | 7.7% |
Figure 7 shows the linear relationship between median income and imprisonment rate in several selected counties. The most noticeable correlations between income and imprisonment can be seen in the plots for Baltimore city and the two rural peninsula counties, Dorchester and Wicomico. The slopes for the suburban counties around DC are almost entirely flat, and there is only a slight downward slope for Baltimore county. Figure 8 shows these counties on the map to provide spatial context for these relationships.
It is interesting to note that Prince George’s county has an almost identical share of Black residents as Baltimore city but only 15% of the imprisonment rate. The median income for Prince George’s was also much higher than Baltimore city ($101,367 versus $73,963), and this calls into question whether income, once it reaches a minimum median, does it cancel the impact of the racial makeup of an area? This question is outside the scope of this research, but comparing these counties side by side may indicate that income, or the median income of an area, once it reaches a certain point, may reduce imprisonment rates.
Distance
Because urban tracts are overrepresented and more likely to be spatially close to a facility, the relationship is not clear. However, this does not account for capacity at urban facilities. Even assuming the one facility in Baltimore may have a higher capacity than average, it is unlikely the one inpatient facility (without crisis intervention) within Baltimore City is equipped to adequately provide care to the city’s nearly half a million people. The map from Figure 3 highlights that Baltimore has the highest concentration of high imprisonment rates in Maryland, but only one facility offering inpatient care for a large and densely populated area.
Since each tract has three variables regarding distance to facilities, three models for each equation were evaluated— (1) distance to any mental health facility, (2) distance to an inpatient mental health facility, and (3) distance to an inpatient mental health facility with crisis intervention. Figure 9 shows the distribution of coefficients for distance to facilities only, as it correlates with imprisonment rates. In the case of each type of facility, the correlation is either negative or unclear, but this is expected without any controls. Because the facilities, especially mental health facilities generally, act as a proxy for population density, and densely populated areas have a higher police presence and thus higher imprisonment rates, distance alone is not enough to determine any meaningful relationship between access to mental health care and imprisonment.
According to this model, each driving mile to a mental health facility from the center of a census tract is associated with a median 17.2 decrease in imprisonment rate per 100,000 residents in that tract, and I can be 99.9% certain that the relationship is negative. Each mile to an inpatient facility is associated with a median 7.5 decrease, and I can be 91.6% certain that the relationship is negative; each mile to an inpatient facility with crisis intervention services is associated with a median 0.2 decrease, and I am only 55.0% certain that the relationship is negative (see Figure 9).
Each driving mile to a mental health facility from the center of a census tract is associated with a median 14.3 decrease in imprisonment rate per 100,000 residents in that tract, and I can be 99.6% certain that the relationship is negative. Each mile to an inpatient facility is associated with a median 6.6 decrease, and I can be 89.3% certain that the relationship is negative; each mile to an inpatient facility with crisis intervention services is associated with a median 0.9 increase, but I can be only 70.3% certain that the relationship is positive.
Without the demographic controls (percent Black, median income, and unemployment rate), an urban classification corresponds to a median coefficient of 54 when controlling for distance to any mental health facility, and I can be 96.2% that the relationship is positive. When I control for inpatient and crisis intervention facilities, the relationship between urban classification is even more certain— a median coefficient of 83 when controlling for distance to an inpatient facility, 114 for distance to a facility with crisis intervention, and I can be 100.0% certain that the relationships are positive (see Figure 10).
When I add the demographic variables back into the model with distance, each driving mile to a mental health facility from the center of a census tract is associated with a median 4.1 decrease in imprisonment rate per 100,000 residents in that tract, and I can be 88.6% certain that the relationship is negative. Each mile to an inpatient facility is associated with a median 4.8 decrease, and I can be 83.4% certain that the relationship is negative; each mile to an inpatient facility with crisis intervention services is associated with a median 4.5 increase, and I can be 96.2% certain that the relationship is positive (see Figure 11).
The results with all controls do alter the degree of correlation with the control variables. These models indicate a higher positive correlation between the percent of Black residents and imprisonment rates with a median coefficient of 6.1 for distance to any mental health facility, 6.7 for inpatient, and 7.1 for facilities with crisis intervention. The negative correlation between median income and imprisonment rate does shrink a bit, with a median coefficient of -1.7 for distance to any facility, -1.5 for inpatient, and -1.3 for facilities with crisis intervention, but I can still be 100.0% certain the relationship is negative for all three models. The positive correlation for unemployment rate (already the most correlated variable without controlling for distance) becomes even more apparent in these models, with median coefficients of 27.8, 25.6, and 26.7, I can be 100.0% certain the relationship is positive for all three models.
The urban classification of the census tract still did not have a meaningful correlation with imprisonment rate when controlling for these other variables (the median coefficients were -23.5 for any facilities, -19.8 for inpatient, and -6.6 for crisis intervention). The distribution for urban/rural classification has been left off of Figure 11 since it is much wider than the others and does not contribute meaningful results. The probability of a positive relationship between urban classification and imprisonment is only 15.4% for any facilities, 17.9% for inpatient, and 38.1% for crisis intervention.
Figure 12 displays the spatial representation of distance to mental health facilities with crisis intervention and imprisonment rates. Each variable is represented by a different color and as they increase the color is darker, and when they overlap the color darkens and changes. This map helps to orient the spatial relationship and identify areas that may benefit from more available mental health care, especially crisis intervention.
Discussion
Although the results of this analysis are not overwhelmingly conclusive regarding the distance to facilities, this research does confirm that the established indicators about race, income, and unemployment have precise and noteworthy associations with imprisonment rates. It may be important to note that, though distance itself may not have a meaningful correlation with imprisonment, when I control for distance, the unemployment rate becomes more influential. Unemployment in the first model (without distance) had a median coefficient of 19.2, and that increased to 27.8 in the any facilities model, 25.6 in the inpatient model, and 26.7 in the crisis intervention model; that is an average increase of 7.5 imprisoned people per 100,000.
Additionally, the coefficients for my robustness check using travel time to the nearest facility in minutes did not make any meaningful difference to any other variables, and the coefficients for travel time were actually distributed more narrowly, suggesting that travel time may be a more accurate measure that distance in miles.Additionally, the coefficients for my robustness check using travel time to the nearest facility in minutes did not make any meaningful difference to any other variables, and the coefficients for travel time were actually distributed more narrowly, suggesting that travel time may be a more accurate measure that distance in miles.
Without data about the capacity of these facilities to compare to the population densities in their area, distance alone is just not a sufficient measure of access to care. Other than the further contribution about demographic and socio-economic status influencing who is imprisoned (a well-tread area of research), this analysis mostly leaves us with more questions. While capacity is certainly an important attribute to consider, there are many other barriers to accessing mental health care—lack of insurance, dependents that rely on you, financial demands that are prioritized over the time and energy investment of finding appropriate care, the list goes on.
Limitations
The primary limitation in this analysis is the lack of data about facility capacity, especially for inpatient facilities. Many inpatient facilities have very few beds, and the few with higher capacity are generally poorly funded and staffed, rendering them unable to provide meaningful treatment to patients. While the issue of unknown capacity limits the significance of this analysis, it also speaks to a larger issue around transparency in the mental health industry. As a consumer of mental health services, especially inpatient services, very little agency or informed choice (or consent) exists when seeking out these services. In a general medical situation, one has access and information about available treatments and the details of those treatments before they seek them out. However, when examining the publicly available information from mental health providers, especially inpatient facilities, little specifics exist about the nature of available treatments at a given facility. Websites for these facilities generally offer vague bullet points about the kinds of mental health diagnoses they treat and maybe a list of general therapeutic practices.
On the website for one facility, the only information regarding inpatient care provided was that it is “a secure nursing unit that provides short term acute care, overnight medical treatment and therapy to patients who need life-saving care for their behavioral health condition” (UM Baltimore Washington Medical Center, n.d.). Another facility’s website reads, “Our safe spaces are created to promote comfort, healing, and privacy for our patients. We provide personalized, collaborative care to patients with serious and recurring mental health disorders that may include:” and goes on to list several common mental health disorders (University of Maryland School of Medicine, n.d.). In the best cases, facilities may list a variety of therapeutic methods such as “Cognitive Behavioral Therapy,” “Dialectical Behavioral Therapy,” or “Mindfulness-Based Therapies,” but the variation in these methods is immense, so there is no way to really know what those therapies will look like in practice (MedStar Health, n.d.). Speaking from personal experience with several inpatient facilities, both for my own care and the care of a loved one, I have seen how deceptive and evasive the intake process can be (even as far as being directly lied to in order to gain my consent). Asking questions about the care or requesting any kind of agency over the kind of care you are seeking is nearly impossible; if you are deemed a threat to yourself or others by whichever underpaid intake staff has a shift when you arrive, you can be held without consent, and there is no recourse.
I took myself to a facility on one occasion when I was suffering from severe suicidal ideations, no plan just thoughts, and it had worsened over the weekend. I was concerned about being home alone on Monday when my partner would be at work. I found a facility in my area with an intensive outpatient program; this would provide me a safe place to be during the day when I would otherwise be alone. I had been depressed for a while, and probably not taking the best care of myself, so I did not look my best when I arrived at the facility on a Sunday evening. Upon entering the building, they took mine and my partner’s phones and personal items and locked them in a closet. After a very judgmental woman completed an intake questionnaire with me, without allowing my partner to be present, she left me alone and scared. I had told her that I wanted to do the partial hospitalization program because I had completed a program like that in the past, and it was helpful. When she came back she told me that I was recommended for impatient treatment. I told her I did not want inpatient treatment, and at that time she told me that I did not have a choice, and if I refused, the police would get involved and they would force me to stay. When I asked why I had to accept inpatient treatment, she would not give me any details other than that my hair was unkempt. After two days in jail-like conditions, I was finally seen by a doctor who concluded I did not need inpatient care, and recommended that I participate in the partial hospitalization program.
Transparency
The lack of transparency and informed consent surrounding mental health, especially inpatient care, is disturbing for several reasons: the legacy of deinstitutionalization has not been adequately addressed, the utilization of mental health care is rising, and, in part because of deinstitutionalization, funding to mental health care is slim to say the least.
Deinstitutionalization refers to the era in the 1980s when the Reagan Administration gutted funding for large mental institutions and replaced them with block grants to the states which resulted in many facility closures, leaving their patients to fend for themselves (Perry, 2016). Schutt aptly describes the implications and impacts concluding that “Deinstitutionalization in the absence of socially supportive programs has been associated with increased rates of homelessness and incarceration among those most chronically ill” (Schutt, 2016).
The Mental Health Parity and Addiction Equity Act of 2008 mandated that behavioral health care must be covered by health insurance equal to general medical care, which gave access to mental health care to many people for the first time (Internal Revenue Service, Department of the Treasury et al., 2010). Since 2008 the rate of people in the US utilizing mental health care has steadily risen since the Mental Health Parity Act went into effect in 2010 (Wang et al., 2023).
Prior to last year’s historical reform to eliminate cash bail in Illinois, The Atlantic called out the outrageous rates of mental health needs in the Cook County Jail (Ford, 2015; Illinois Safety, Accountability, Fairness and Equity-Today (SAFE-T) Act, 2021). A study in 2010 found that there were “now more than three times more seriously mentally ill persons in jails and prisons than in hospitals” (Torrey et al., 2010). Despite the success of the Mental Health Parity Act, federal and state governments have failed to provide adequate funding for mental health providers and institutions (Kennedy-Hendricks et al., 2018; Mahomed, 2020). The average salary for mental health care providers, in both the private and public sector, is only marginally higher than correctional officers according to GlassDoor.com ($46K - $71K/year for mental health care providers versus $39K - $56K/year for correctional officers) (Salary, n.d.-a, n.d.-b).
Transparency is increasingly important as access and availability of mental health care is being pushed as an alternative to incarceration because we want to know that individuals are actually getting the care they need and not allowing mental health facilities to turn into a new brand of confinement for society’s “undesirables” (as was often true of the original asylums for the mentally ill in the United States) (Whitaker, 2019).
Further Research
The new datasets and insights from this analysis open up many more research questions to explore. Some have already been mentioned but would require cooperation with the facilities providing care. The question of capacity is a critical one to investigate, but perhaps a more important issue (and more difficult) might be the question of quality of the care received at the limited place available. While this research hopes to provide insights into alternatives to carceral punishment, it should not be misunderstood that the goal is not to empty the prisons only to detain the same people in mental health facilities. Mental health care can be helpful to prevent harm and to heal from harm, but the care must be adequate, accessible, and appropriate for the individuals seeking support. Further research should consider the quality of care, even if it is not the main focus.
One interesting insight discussed earlier may warrant further investigation. We know race is highly related to imprisonment, but by examining these trends on county and census tract levels, it seems there may be a threshold of median income for an area that cancels out the impact of race. The county-level random effects in the model without proximity showed an almost flat slope for the suburban DC counties. Prince George’s county has a higher percentage of Black residents than Baltimore city (and a comparable income disparity with its neighboring majority white county), but a much lower imprisonment rate. Is this because Prince George’s county has an inpatient facility with crisis intervention (and probably a less dense population), or is it the higher median income that is primarily driving down imprisonment rates (or interactions with police in the first place)? Perhaps there is a threshold of median income where race is no longer a reliable indicator of imprisonment. If Black people live in an area with primarily other Black people, how much money do they need to make on average to keep the police out of their neighborhoods?
Another important question that warrants further analysis with these unique dataset concerns issues facing individuals after they are released from prison. Presumably, they will return to the communities from which they were removed, and they are likely to experience increased barriers to mental health care. Their criminal record alone is likely to diminish employment opportunities (often in areas where unemployment rates are well about the average). Even when gainful employment and health insurance are possible, the stigma and traumatic consequences of seeking mental health care within prison culture can prevent many from seeking care even when it is available long after they are released. Using this spatial data to identify places most in need of re-entry support will be an important component of fighting the cycle of harm caused by the prison industrial complex. Similarly, these same areas can be targeted for increased mental health (and material) support for the families left behind in these communities when a loved one is sent to a cage sometimes hundreds of miles away with no means to provide financial or emotional support.
Datasets:
In addition to the insights discussed in this paper, this research has also produced two useful datasets, as well as the process for creating these datasets for different states (see appendix for R code and ArcGIS Pro logs):
- Maryland facilities list with their characteristics according to the SAMHSA’s National Directory of Mental Health Treatment Facilities 2021
- Maryland tracts with nearest facilities (mental health, inpatient, and inpatient with crisis intervention) and the other characteristics for each of the nearest facilities in each category
Conclusion
Though the results of this research are not overwhelmingly novel or conclusive in answering our research question, the difficulty obtaining the necessary information about capacity (or anything else) has illuminated a greater issue of transparency around mental health care. Future researchers should continue to press these institutions to increase transparency to enable researchers and the greater public to analyze and assess their work and impact.
Warning
I would like to conclude with a disclaimer to future researchers and policymakers who will help shape the future of mental health care. While I am advocating for mental health care and treatment as an alternative to imprisonment and detention to combat violence and other harms to community members, the quality of care is equally important, albeit much more complex and difficult to measure. In no uncertain terms, I want to warn against the threat of profit-driven agendas that would be happy to rehouse those they deem “criminals” in mental health hospitals instead of prisons. As advocates of alternatives to detention, we must not be appeased by these attempts to placate our demands with a mere vocabulary adjustment; “a rose by another name” is not progress.
Appendix
Established indicators
\[ \begin{aligned} Y_{ij} | \beta_{0j}, \beta_1, \beta_2, \beta_3, \beta_4, \sigma_y \sim N(\mu_{ij}, \sigma_y^2) \;\; \text{ with } \;\; \mu_{ij} =& \beta_{0j} + \\ &\beta_1\text{Percent Black}_{ij} + \\ &\beta_2\text{Median Income}_{ij} + \\ &\beta_3\text{Unemployment Rate}_{ij} + \\ &\beta_4\text{Urban}_{ij} \\ \\ \beta_{0j} | \beta_0, \sigma_0 \stackrel{ind}{\sim} & N(\beta_0, \sigma_0^2) \\ \beta_{0c} \sim & N(100, 10^2) \\ \beta_1 \sim & N(100, 60) \\ \beta_2 \sim & N(-50, 15) \\ \beta_3 \sim & N(100, 25) \\ \beta_4 \sim & N(100, 25) \\ \sigma \sim & \text{Exp}(l) \\ \sigma_y \sim & \text{Exp}(0.072) \\ \sigma_0 \sim & \text{Exp}(1) \\ \end{aligned} \]
The following figures demonstrate the fit of the model with the original data. It does not appear to be a perfect fit because so many tracts had a rate of zero or close to zero rate of imprisonment, and a negative rate is not possible. Since the model can predict outcomes below zero, the fit is not perfect with a greater spread in the distribution around zero, as opposed to the high peak and drop in the original data.
Proximity to mental health facilities
\[ \begin{aligned} Y_{ij} | \beta_{0j}, \beta_5, \sigma_y \sim N(\mu_{ij}, \sigma_y^2) \;\; \text{ with } \;\; \mu_{ij} =& \beta_{0j} + \\ &\beta_5\text{Distance to Facility}_{ij}\\ \\ Y_{ij} | \beta_{0j}, \beta_4, \beta_5, \sigma_y \sim N(\mu_{ij}, \sigma_y^2) \;\; \text{ with } \;\; \mu_{ij} =& \beta_{0j} + \\ &\beta_4\text{Urban}_{ij} + \\ &\beta_5\text{Distance to Facility}_{ij} \\ \\ Y_{ij} | \beta_{0j}, \beta_1, \beta_2, \beta_3, \beta_4, \beta_5, \sigma_y \sim N(\mu_{ij}, \sigma_y^2) \;\; \text{ with } \;\; \mu_{ij} =& \beta_{0j} + \\ &\beta_1\text{Percent Black}_{ij} + \\ &\beta_2\text{Median Income}_{ij} + \\ &\beta_3\text{Unemployment Rate}_{ij} + \\ &\beta_4\text{Urban}_{ij} + \\ &\beta_5\text{Distance to Facility}_{ij} \\ \\ \beta_{0j} | \beta_0, \sigma_0 \stackrel{ind}{\sim} & N(\beta_0, \sigma_0^2) \\ \beta_{0c} \sim & N(100, 10^2) \\ \beta_1 \sim & N(100, 60) \\ \beta_2 \sim & N(-50, 15) \\ \beta_3 \sim & N(100, 25) \\ \beta_4 \sim & N(-100, 35) \\ \beta_5 \sim & N(100, 25) \\ \sigma \sim & \text{Exp}(l) \\ \sigma_y \sim & \text{Exp}(0.072) \\ \sigma_0 \sim & \text{Exp}(1) \\ \end{aligned} \]
Since each tract has three variables regarding distance to facilities, three models for each equation were evaluated—distance to any mental health facility, distance to an inpatient mental health facility, and distance to an inpatient mental health facility with crisis intervention. The following figures demonstrate the fit of the model with the original data. It does not appear to be a perfect fit because so many tracts had a rate of zero or close to zero rate of imprisonment, and a negative rate is not possible. Since the model can predict outcomes below zero, the fit is not perfect with a greater spread in the distribution around zero, as opposed to the high peak and drop in the original data.
Distance to Mental Health Facilities
\[ \begin{aligned} Y_{ij} | \beta_{0j}, \beta_5, \sigma_y \sim N(\mu_{ij}, \sigma_y^2) \;\; \text{ with } \;\; \mu_{ij} =& \beta_{0j} + \beta_5\text{Distance to Facility}_{ij}\\ \end{aligned} \]
Distance to Mental Health Facilities and Urban/Rural Classification
\[ \begin{aligned} Y_{ij} | \beta_{0j}, \beta_4, \beta_5, \sigma_y \sim N(\mu_{ij}, \sigma_y^2) \;\; \text{ with } \;\; \mu_{ij} =& \beta_{0j} + \beta_4\text{Urban}_{ij} + \\ &\beta_5\text{Distance to Facility}_{ij} \\ \end{aligned} \]
Distance to Mental Health Facilities and All Other Variables
\[ \begin{aligned} Y_{ij} | \beta_{0j}, \beta_1, \beta_2, \beta_3, \beta_4, \beta_5, \sigma_y \sim N(\mu_{ij}, \sigma_y^2) \;\; \text{ with } \;\; \mu_{ij} =& \beta_{0j} + \\ &\beta_1\text{Percent Black}_{ij} + \\ &\beta_2\text{Median Income}_{ij} + \\ &\beta_3\text{Unemployment Rate}_{ij} + \\ &\beta_4\text{Urban}_{ij} + \\ &\beta_5\text{Distance to Facility}_{ij} \\ \end{aligned} \]
Code
Setup
::opts_chunk$set(echo = FALSE,
knitrinclude = TRUE,
message = FALSE,
warning = FALSE,
cache = TRUE)
library(tidyverse)
library(modelsummary)
library(scales)
library(readr)
library(tufte)
library(broom)
library(tinytex)
library(summarytools)
library(patchwork)
library(stringr)
library(ggpmisc)
library(cowplot)
library(grid)
library(ggridges)
library(bayesrules)
library(rstanarm)
library(rstan)
library(bayesplot)
library(tidybayes)
library(broom.mixed)
library(extrafont)
library(googlesheets4)
library(gt)
library(targets)
library(ggdag)
library(dagitty)
library(here)
library(pointblank)
library(lme4)
library(prismatic)
library(tidycensus)
<- c("#7400CC", "#CC0AA4", "#3ACC14", "#0E0ACC",
colors "#0E0ACC", "#0ACCC5", "#CC1F14", "#1471CC",
"#805713", "#4F008C", "#B785DD")
<- c("#CCAC14", "#CC1F14")
colors1 <- c("#0ACCC5", "#0E0ACC", "#0E0ACC")
colors2 <- c("#0ACCC5", "#7400CC", "#CC0AA4", "#3ACC14", "#0E0ACC")
colors3
<- c("#F3D9F9", "#DE9BD0", "#D656BB", "#B04585")
pink4 <- c("#C3DEC8", "#6FD555", "#4D7D4A")
green3 <- c("#C3DEC8", "#A8DD9B", "#6FD555", "#4CB045", "#4D7D4A")
green5
<- label_percent(accuracy = 0.1, scale = 1)
my_pct <- label_percent(accuracy = 0.1)
my_pct1 <- label_percent(accuracy = 1, scale = 1)
my_pct100 <- label_percent(accuracy = 1)
my_pct100_2 <- label_number(accuracy = 1, big.mark = ",")
my_number <- label_number(accuracy = .01, big.mark = ",")
my_number1 <- label_number(accuracy = 1, suffix = " min")
my_number2 <- label_number(accuracy = .1)
my_number3 <- label_number(accuracy = 1, prefix = "$", big.mark = ",")
my_dollar
<- theme_light() +
th_md theme(plot.title = element_text(family = "Changa",
color = "#310873",
size = 14,
hjust = .5),
plot.subtitle = element_text(family = "Changa",
color = "#310873",
size = 12,
hjust = .5),
plot.caption = element_text(family = "Cambria",
color = "#310873",
size = 8),
axis.title = element_text(family = "Changa",
color = "#310873"),
axis.text = element_text(family = "Cambria",
color = "#310873"),
axis.ticks = element_blank(),
strip.text = element_text(family = "Changa",
color = "#310873",
size = 12),
strip.background = element_blank(),
legend.text = element_text(family = "Cambria",
color = "#310873"),
legend.title = element_text(family = "Changa",
color = "#310873"),
legend.position = "bottom",
panel.border = element_blank(),
panel.grid.major = element_line(color = "#FFD1F9",
linewidth = .35,
linetype = "longdash"),
panel.grid.minor = element_line(color = "#FFD1F9",
linewidth = .6,
linetype = "dotted"))
<- function(x) {
custom_labels <- as.character(x)
labels 1] <- paste0(labels[1], " min")
labels[return(labels)
}
<- function(x, page_width = 5.5) {
pct if (knitr::pandoc_to("latex")) {
paste0(page_width * (x / 100), "in")
else {
} ::pct(x)
gt
} }
th_md <- theme_light() + theme(panel.grid.major = element_line(color = “#FFD1F9”, linewidth = .5, linetype = “longdash”), panel.grid.minor = element_line(color = “#FFD1F9”, linewidth = .5, linetype = “dotted”), panel.border = element_blank(), axis.ticks = element_blank(), axis.text = element_text(family = “Cambria”), axis.title = element_text(family = “Changa”), plot.title = element_text(size = 14, family = “Changa”), plot.caption = element_text(family = “Cambria”), legend.text = element_text(family = “Changa”), legend.title = element_text(family = “Changa”))
## Data Manipulation in R
::: {.cell hash='prisoners_cache/html/facilities2_c4675a1de768bb3c8256546808227e8a'}
```{.r .cell-code}
## Extract facilities data from PDF.
## Parse data into a dataset with facility name, address, and services in Sheets.
MD <- readRDS("data/MD.RDS")
facilities <- read_csv("data/Facilities21.csv")
## Geocode facilities data in ArcGIS Pro.
## Join MD.csv to ACS tracts in ArcGIS for mapping.
## Join geocoded facilities with joined MD.csv and ACS tracts in ArcGIS Pro.
##
## Calculate distances to mental health facilities in ArcGIS Pro.
## Calculate distances to inpatient facilities in ArcGIS Pro.
## Calculate distances to inpatient facilities with Crisis Intervention in ArcGIS Pro.
## Load Calculated Distance Data
list_csv_files <- list.files(path = "data/gis/")
gis <- read_csv(paste0("data/gis/", list_csv_files), id = "file_name") %>%
mutate(FIPS = as.numeric(substr(Name, 1, regexpr(" - ", Name) - 1))) %>%
select(file_name, Name, FIPS, Total_TravelTime, Total_Miles)
## Miles to Nearest Mental Health Facility
mhf <- gis %>%
filter(file_name == "data/gis/rural.csv" |
file_name == "data/gis/urban.csv") %>%
rename(miles2mhf = Total_Miles,
tract2mhf = Name) %>%
select(tract2mhf, FIPS, miles2mhf)
## Minutes to Nearest Mental Health Facility
mhf_time <- gis %>%
filter(file_name == "data/gis/rural_time.csv" |
file_name == "data/gis/urban_time.csv") %>%
rename(time2mhf = Total_TravelTime,
tract2mhf_time = Name) %>%
select(tract2mhf_time, FIPS, time2mhf)
## Miles to Nearest Inpatient Mental Health Facility
hi <- gis %>%
filter(file_name == "data/gis/rural_HI.csv" |
file_name == "data/gis/urban_HI.csv") %>%
rename(miles2inpatient = Total_Miles,
tract2inpatient = Name) %>%
select(tract2inpatient, FIPS, miles2inpatient)
## Minutes to Nearest Inpatient Mental Health Facility
hi_time <- gis %>%
filter(file_name == "data/gis/rural_time_HI.csv" |
file_name == "data/gis/urban_time_HI.csv") %>%
rename(time2inpatient = Total_TravelTime,
tract2inpatient_time = Name) %>%
select(tract2inpatient_time, FIPS, time2inpatient)
## Miles to Nearest Inpatient Mental Health Facility with Crisis Intervention
crisis <- gis %>%
filter(file_name == "data/gis/rural_crisis.csv" |
file_name == "data/gis/urban_crisis.csv") %>%
rename(miles2crisis = Total_Miles,
tract2crisis = Name) %>%
select(tract2crisis, FIPS, miles2crisis)
## Minutes to Nearest Inpatient Mental Health Facility with Crisis Intervention
crisis_time <- gis %>%
filter(file_name == "data/gis/rural_time_crisis.csv" |
file_name == "data/gis/urban_time_crisis.csv") %>%
rename(time2crisis = Total_TravelTime,
tract2crisis_time = Name) %>%
select(tract2crisis_time, FIPS, time2crisis)
:::
## Rural housing counts from census
<- get_decennial(geography = "tract",
rural variables = "H2_003N",
summary_var = "H2_001N",
state = 24,
year = 2020,
sumfile = "dhc") %>%
mutate(pctRural = (value / summary_value) * 100) %>%
rename(FIPS = GEOID) %>%
select(FIPS, pctRural) %>%
mutate(urban = ifelse(pctRural == 0, 1, 0),
urban_cat = ifelse(pctRural == 0, "Urban", "Rural"))
## Other variables from ACS
<- get_acs(geography = "tract",
acsMD variables = c(IncomeMedian = "S1901_C02_012",
Total_Pop = "S0701_C01_001",
black_pop = "S0701_C01_016",
povStatusDet = "S0701_C01_049",
underPov = "S0701_C01_050",
UnempRate16 = "S2301_C04_001"),
state = "MD",
year = 2020) %>%
spread(variable, estimate) %>%
group_by(GEOID, NAME) %>%
summarize(IncomeMedian = sum(IncomeMedian, na.rm = TRUE),
Total_Pop = sum(Total_Pop, na.rm = TRUE),
black_pop = sum(black_pop, na.rm = TRUE),
povStatusDet = sum(povStatusDet, na.rm = TRUE),
underPov = sum(underPov, na.rm = TRUE),
UnempRate16 = sum(UnempRate16, na.rm = TRUE)) %>%
rename(FIPS = GEOID) %>%
merge(rural, by = "FIPS")
## Load Imprisonment Data
<- read_csv("data/Imprisonment_rates.csv") %>%
MD select(FIPS, Imprisonment_Rate) %>%
merge(acsMD, by = "FIPS") %>% ## Merge with ACS data
mutate(tract = substr(NAME, 1, regexpr(",", NAME) - 1)) %>%
mutate(County = substr(NAME,
regexpr(",", NAME) + 2,
regexpr("County", NAME) + 5),
County = ifelse(str_detect(NAME, "Baltimore city"),
"Baltimore City",
trimws(County, which = c("both")))) %>% ## Extract County Column
mutate(pctBlack = (black_pop / Total_Pop) * 100,
pctUnderPoverty = (underPov / povStatusDet) * 100) %>% ## Calculate Percentages
mutate(black = case_when(pctBlack > 50 ~ 1,
<= 50 ~ 0),
pctBlack black_cat = factor(black,
labels = c("Not Majority Black Tracts",
"Majority Black Tracts"))) %>% ## Create dummies
left_join(mhf, by = "FIPS") %>%
left_join(mhf_time, by = "FIPS") %>%
left_join(hi, by = "FIPS") %>%
left_join(hi_time, by = "FIPS") %>%
left_join(crisis, by = "FIPS") %>%
left_join(crisis_time, by = "FIPS")
## Save data
saveRDS(MD, file = "data/MD_GIS_raw.RDS")
write.csv(MD, "data/MD_GIS_raw.csv", row.names=FALSE)
<- readRDS("data/MD_GIS_raw.RDS")
MD
<- MD %>%
zeros filter(Imprisonment_Rate == 0)
# Interpolating erroneous zeros for IncomeMedian
<- (((195588 + 146607 +
estincome24003706404 94985 + 92557 +
101167) / 5) + # Adjacent tracts
119426.503937) / 2 # County median
<- (((75868 + 135163 +
estincome24021750801 112527 + 56250 +
124625 + 99257 +
114757) / 7) + # Adjacent tracts
113061.553846154) / 2 # County median
<- (((61525 + 37000 +
estincome24045010503 102244 + 80089 +
110536 + 58256) / 6) + # Adjacent tracts
68801.0476190476) / 2 # County median
<- (((77679 + 128969 +
estincomeBmore1 88463 + 15114 +
43359 + 21222 +
59643 + 65156 +
41398 + 162578 +
24274) / 11) + # Adjacent tracts
71972.8172588833) / 2 # County median
<- (((134708 + 154018 +
estincomeBmore2 80250 + 50513 +
26521 + 77188) / 6) +
71972.8172588833) / 2 # County median
<- (((66387 + 50490 + 52059) / 3) + # Adjacent tracts
estincomeBmore3 71972.8172588833 +
(119426.503937008 * 3)) / 4) / 2 # County medians
(
<- MD %>%
MD filter(Total_Pop >= 100, ## Drop Tracts with a population below 100
# Corrections
!= 24510100300, # Baltimore jail
FIPS != 24043011000, # Maryland correctional training center
FIPS != 24003740400, # Maryland State Prison
FIPS # Campuses
!= 24005403801, # Stevenson University Greenspring Campus
FIPS != 24005490605, # Towson University
FIPS != 24510271300, # St Mary's Seminary & University
FIPS != 24031700836, # Research park
FIPS != 24033980000, # University of Maryland
FIPS != 24005492500, # University of Maryland
FIPS # Military
!= 24017850201, # Naval Support Facility Indian Head /
FIPS # Smallwood State Park
!= 24003706700, # United States Naval Academy
FIPS != 24003740601, # Fort George G. Meade
FIPS != 24003740602, # Fort George G. Meade
FIPS != 24021751203, # AFMESA ???
FIPS != 24025303102, # Churchville Test Area
FIPS != 24025306500, # Army Pulse Radiation Facility
FIPS != 24031705000, # National Institutes of Health /
FIPS # Walter Reed National Military Medical Center
!= 24033801105, # Joint Base Andrews
FIPS != 24033801106, # Joint Base Andrews
FIPS # Protected Land
!= 24005400500, # Patapsco Valley State Park - Hilton Area
FIPS != 24013505206, # Patapsco Valley State Park- McKeldin Area
FIPS != 24027601104, # Patapsco Valley State Park - Hilton Area /
FIPS # Rockburn Branch Park
!= 24031700606, # Muddy Branch Greenway Trail
FIPS != 24005408502, # Loch Raven Reservoir
FIPS != 24031701210, # Rock Creek Regional Park
FIPS != 24031701219, # Parklawn Community Garden
FIPS != 24031706012, # Cabin John Regional Park
FIPS != 24031700209, # Goshen Recreational Park /
FIPS # Damascus Recreational Park
# Other
!= 24001001300, # Allegany County Fairgrounds
FIPS != 24031702502, # Commercial only
FIPS != 24031704403, # Commercial only
FIPS != 24031702603, # Commercial only
FIPS != 24031704805, # Bethesda Chevy Chase High School /
FIPS # Commercial only
%>%
) mutate(IncomeMedian = case_when(FIPS == 24003706404 ~ estincome24003706404,
== 24021750801 ~ estincome24021750801,
FIPS == 24045010503 ~ estincome24045010503,
FIPS == 24510040200 ~ estincomeBmore1,
FIPS == 24510170100 ~ estincomeBmore1,
FIPS == 24510170200 ~ estincomeBmore1,
FIPS == 24510170300 ~ estincomeBmore1,
FIPS == 24510180300 ~ estincomeBmore1,
FIPS == 24510060100 ~ estincomeBmore2,
FIPS == 24510250402 ~ estincomeBmore3,
FIPS TRUE ~ IncomeMedian)) %>% # Interpolate erroneous zeros
mutate(IncomeMedian1000 = IncomeMedian / 1000) %>% ## Scale median income by 1000
mutate(County = substr(NAME,
regexpr(",", NAME) + 2,
regexpr("County", NAME) + 5),
County = ifelse(str_detect(NAME, "Baltimore city"),
"Baltimore City",
trimws(County, which = c("both")))) ## Extract County Column
## Save data
saveRDS(MD, file = "data/MD_GIS.RDS")
write.csv(MD, "data/MD_GIS.csv", row.names=FALSE)
<- readRDS("data/MD_GIS.RDS")
MD
## Aggregate to the County Level
<- MD %>%
MD_counties select(FIPS, NAME, County, Imprisonment_Rate, Total_Pop, IncomeMedian,
%>%
pctBlack, pctUnderPoverty, UnempRate16, pctRural) group_by(County) %>%
summarise(Imprisonment_RateCounty = mean(Imprisonment_Rate),
Total_PopCounty = sum(Total_Pop),
IncomeMedianCounty = mean(IncomeMedian),
pctBlackCounty = mean(pctBlack),
pctUnderPovertyCounty = mean(pctUnderPoverty),
UnempRate16County = mean(UnempRate16),
pctRuralCounty = mean(pctRural)) %>%
mutate(ruralCounty = ifelse(pctRuralCounty > 20, TRUE, FALSE))
<- MD %>%
MD merge(MD_counties, by = "County")
## Save data
saveRDS(MD, file = "data/MD.RDS")
saveRDS(MD_counties, file = "data/MD_counties.RDS")
write.csv(MD_counties, "data/MD_counties.csv", row.names=FALSE)
write.csv(MD, "data/MD.csv", row.names=FALSE)
Modeling Code
if (file.exists("data/alldemos.rds")) {
<- readRDS("data/alldemos.rds")
alldemos_ else {
} <- stan_glmer(Imprisonment_Rate ~ pctBlack +
alldemos_ +
IncomeMedian1000 +
UnempRate16 +
urban 1 + IncomeMedian1000 | County),
(data = MD,
family = gaussian,
chains = 4, iter = 5000*2, seed = 84735,
cores = 4)
saveRDS(alldemos_, "data/alldemos.rds")
}
color_scheme_set("purple")
ppc_dens_overlay(y = MD$Imprisonment_Rate,
yrep = posterior_predict(alldemos_,
draws = 50)) +
th_md
<- alldemos_ %>%
all spread_draws(pctBlack, IncomeMedian1000, UnempRate16, urban) %>%
summarize(pctBlack_greater_0 = sum(pctBlack > 0) / n(),
IncomeMedian_greater_0 = sum(IncomeMedian1000 > 0) / n(),
Unemp_greater_0 = sum(UnempRate16 > 0) / n(),
urban_greater_0 = sum(urban > 0) / n())
<- alldemos_ %>%
all_ spread_draws(pctBlack, IncomeMedian1000, UnempRate16, urban) %>%
median_hdi()
<- alldemos_ %>%
all_u spread_draws(urban) %>%
median_hdi(.width = .80)
Distance to Mental Health Facilities with Crisis Intervention
if (file.exists("data/distance_mh.rds")) {
<- readRDS("data/distance_mh.rds")
distance_mh else {
} <- stan_glmer(Imprisonment_Rate ~ miles2mhf +
distance_mh 1 + miles2mhf | County),
(data = MD,
family = gaussian,
chains = 4, iter = 5000*2, seed = 84735,
cores = 4)
saveRDS(distance_mh, "data/distance_mh.rds")
}
color_scheme_set("purple")
<- ppc_dens_overlay(y = MD$Imprisonment_Rate,
dmh yrep = posterior_predict(distance_mh,
draws = 50)) +
labs(title = "Mental Health Facility") +
+
th_md theme(axis.text.y = element_blank())
if (file.exists("data/distance_inpatient.rds")) {
<- readRDS("data/distance_inpatient.rds")
distance_inpatient else {
} <- stan_glmer(Imprisonment_Rate ~ miles2inpatient +
distance_inpatient 1 + miles2inpatient | County),
(data = MD,
family = gaussian,
chains = 4, iter = 5000*2, seed = 84735,
cores = 4)
saveRDS(distance_inpatient, "data/distance_inpatient.rds")
}
color_scheme_set("purple")
<- ppc_dens_overlay(y = MD$Imprisonment_Rate,
di yrep = posterior_predict(distance_inpatient,
draws = 50)) +
labs(title = "Inpatient") +
+
th_md theme(axis.text.y = element_blank())
if (file.exists("data/distance_crisis.rds")) {
<- readRDS("data/distance_crisis.rds")
distance_crisis else {
} <- stan_glmer(Imprisonment_Rate ~ miles2crisis +
distance_crisis 1 + miles2crisis | County),
(data = MD,
family = gaussian,
chains = 4, iter = 5000*2, seed = 84735,
cores = 4)
saveRDS(distance_crisis, "data/distance_crisis.rds")
}
color_scheme_set("purple")
<- ppc_dens_overlay(y = MD$Imprisonment_Rate,
dcr yrep = posterior_predict(distance_crisis,
draws = 50)) +
labs(title = "Crisis Intervention") +
+
th_md theme(axis.text.y = element_blank())
+ di + dcr +
dmh plot_layout(guides = "collect") &
theme(legend.position = "bottom")
<- distance_mh %>%
dist_mh spread_draws(miles2mhf) %>%
summarize(miles2mhf_greater_0 = sum(miles2mhf > 0) / n())
<- distance_mh %>%
dist_mh_ spread_draws(miles2mhf) %>%
median_hdi()
<- distance_inpatient %>%
dist_inpatient spread_draws(miles2inpatient) %>%
summarize(miles2inpatient_greater_0 = sum(miles2inpatient > 0) / n())
<- distance_inpatient %>%
dist_inpatient_ spread_draws(miles2inpatient) %>%
median_hdi()
<- distance_crisis %>%
dist_crisis spread_draws(miles2crisis) %>%
summarize(miles2crisis_greater_0 = sum(miles2crisis > 0) / n())
<- distance_crisis %>%
dist_crisis_ spread_draws(miles2crisis) %>%
median_hdi()
if (file.exists("data/time_mh.rds")) {
<- readRDS("data/time_mh.rds")
time_mh else {
} <- stan_glmer(Imprisonment_Rate ~ time2mhf +
time_mh 1 + time2mhf | County),
(data = MD,
family = gaussian,
chains = 4, iter = 5000*2, seed = 84735,
cores = 4)
saveRDS(time_mh, "data/time_mh.rds")
}
color_scheme_set("purple")
<- ppc_dens_overlay(y = MD$Imprisonment_Rate,
dmh yrep = posterior_predict(time_mh,
draws = 50)) +
labs(title = "Mental Health Facility") +
+
th_md theme(axis.text.y = element_blank())
if (file.exists("data/time_inpatient.rds")) {
<- readRDS("data/time_inpatient.rds")
time_inpatient else {
} <- stan_glmer(Imprisonment_Rate ~ time2inpatient +
time_inpatient 1 + time2inpatient | County),
(data = MD,
family = gaussian,
chains = 4, iter = 5000*2, seed = 84735,
cores = 4)
saveRDS(time_inpatient, "data/time_inpatient.rds")
}
color_scheme_set("purple")
<- ppc_dens_overlay(y = MD$Imprisonment_Rate,
di yrep = posterior_predict(time_inpatient,
draws = 50)) +
labs(title = "Inpatient") +
+
th_md theme(axis.text.y = element_blank())
if (file.exists("data/time_crisis.rds")) {
<- readRDS("data/time_crisis.rds")
time_crisis else {
} <- stan_glmer(Imprisonment_Rate ~ time2crisis +
time_crisis 1 + time2crisis | County),
(data = MD,
family = gaussian,
chains = 4, iter = 5000*2, seed = 84735,
cores = 4)
saveRDS(time_crisis, "data/time_crisis.rds")
}
color_scheme_set("purple")
<- ppc_dens_overlay(y = MD$Imprisonment_Rate,
dcr yrep = posterior_predict(time_crisis,
draws = 50)) +
labs(title = "Crisis Intervention") +
+
th_md theme(axis.text.y = element_blank())
+ di + dcr +
dmh plot_layout(guides = "collect") &
theme(legend.position = "bottom")
<- time_mh %>%
ti_mh spread_draws(time2mhf) %>%
summarize(time2mhf_greater_0 = sum(time2mhf > 0) / n())
<- time_mh %>%
ti_mh_ spread_draws(time2mhf) %>%
median_hdi()
<- time_inpatient %>%
ti_inpatient spread_draws(time2inpatient) %>%
summarize(time2inpatient_greater_0 = sum(time2inpatient > 0) / n())
<- time_inpatient %>%
ti_inpatient_ spread_draws(time2inpatient) %>%
median_hdi()
<- time_crisis %>%
ti_crisis spread_draws(time2crisis) %>%
summarize(time2crisis_greater_0 = sum(time2crisis > 0) / n())
<- time_crisis %>%
ti_crisis_ spread_draws(time2crisis) %>%
median_hdi()
Distance to Mental Health Facilities with Crisis Intervention and Urban/Rural Classification
if (file.exists("data/distance_rural_mh.rds")) {
<- readRDS("data/distance_rural_mh.rds")
distance_rural_mh else {
} <- stan_glmer(Imprisonment_Rate ~ miles2mhf +
distance_rural_mh +
urban 1 + miles2mhf | County),
(data = MD,
family = gaussian,
chains = 4, iter = 5000*2, seed = 84735,
cores = 4)
saveRDS(distance_rural_mh, "data/distance_rural_mh.rds")
}
color_scheme_set("purple")
<- ppc_dens_overlay(y = MD$Imprisonment_Rate,
drmh yrep = posterior_predict(distance_rural_mh,
draws = 50)) +
labs(title = "Mental Health Facility") +
+
th_md theme(axis.text.y = element_blank())
if (file.exists("data/distance_rural_inpatient.rds")) {
<- readRDS("data/distance_rural_inpatient.rds")
distance_rural_inpatient else {
} <- stan_glmer(Imprisonment_Rate ~ miles2inpatient +
distance_rural_inpatient +
urban 1 + miles2inpatient | County),
(data = MD,
family = gaussian,
chains = 4, iter = 5000*2, seed = 84735,
cores = 4)
saveRDS(distance_rural_inpatient, "data/distance_rural_inpatient.rds")
}
color_scheme_set("purple")
<- ppc_dens_overlay(y = MD$Imprisonment_Rate,
dri yrep = posterior_predict(distance_rural_inpatient,
draws = 50)) +
labs(title = "Inpatient") +
+
th_md theme(axis.text.y = element_blank())
if (file.exists("data/distance_rural_crisis.rds")) {
<- readRDS("data/distance_rural_crisis.rds")
distance_rural_crisis else {
} <- stan_glmer(Imprisonment_Rate ~ miles2crisis +
distance_rural_crisis +
urban 1 + miles2crisis | County),
(data = MD,
family = gaussian,
chains = 4, iter = 5000*2, seed = 84735,
cores = 4)
saveRDS(distance_rural_crisis, "data/distance_rural_crisis.rds")
}
color_scheme_set("purple")
<- ppc_dens_overlay(y = MD$Imprisonment_Rate,
drc yrep = posterior_predict(distance_rural_crisis,
draws = 50)) +
labs(title = "Crisis Intervention") +
+
th_md theme(axis.text.y = element_blank())
+ dri + drc +
drmh plot_layout(guides = "collect") &
theme(legend.position = "bottom")
<- distance_rural_mh %>%
dist_rural_mh spread_draws(miles2mhf, urban) %>%
summarize(miles2mhf_greater_0 = sum(miles2mhf > 0) / n(),
urban_greater_0 = sum(urban > 0) / n())
<- distance_rural_mh %>%
dist_rural_mh_ spread_draws(miles2mhf, urban) %>%
median_hdi()
<- distance_rural_inpatient %>%
dist_rural_inpatient spread_draws(miles2inpatient, urban) %>%
summarize(miles2inpatient_greater_0 = sum(miles2inpatient > 0) / n(),
urban_greater_0 = sum(urban > 0) / n())
<- distance_rural_inpatient %>%
dist_rural_inpatient_ spread_draws(miles2inpatient, urban) %>%
median_hdi()
<- distance_rural_crisis %>%
dist_rural_crisis spread_draws(miles2crisis, urban) %>%
summarize(miles2crisis_greater_0 = sum(miles2crisis > 0) / n(),
urban_greater_0 = sum(urban > 0) / n())
<- distance_rural_crisis %>%
dist_rural_crisis_ spread_draws(miles2crisis, urban) %>%
median_hdi()
if (file.exists("data/time_rural_mh.rds")) {
<- readRDS("data/time_rural_mh.rds")
time_rural_mh else {
} <- stan_glmer(Imprisonment_Rate ~ time2mhf +
time_rural_mh +
urban 1 + time2mhf | County),
(data = MD,
family = gaussian,
chains = 4, iter = 5000*2, seed = 84735,
cores = 4)
saveRDS(time_rural_mh, "data/time_rural_mh.rds")
}
color_scheme_set("purple")
<- ppc_dens_overlay(y = MD$Imprisonment_Rate,
drmh yrep = posterior_predict(time_rural_mh,
draws = 50)) +
labs(title = "Mental Health Facility") +
+
th_md theme(axis.text.y = element_blank())
if (file.exists("data/time_rural_inpatient.rds")) {
<- readRDS("data/time_rural_inpatient.rds")
time_rural_inpatient else {
} <- stan_glmer(Imprisonment_Rate ~ time2inpatient +
time_rural_inpatient +
urban 1 + time2inpatient | County),
(data = MD,
family = gaussian,
chains = 4, iter = 5000*2, seed = 84735,
cores = 4)
saveRDS(time_rural_inpatient, "data/time_rural_inpatient.rds")
}
color_scheme_set("purple")
<- ppc_dens_overlay(y = MD$Imprisonment_Rate,
dri yrep = posterior_predict(time_rural_inpatient,
draws = 50)) +
labs(title = "Inpatient") +
+
th_md theme(axis.text.y = element_blank())
if (file.exists("data/time_rural_crisis.rds")) {
<- readRDS("data/time_rural_crisis.rds")
time_rural_crisis else {
} <- stan_glmer(Imprisonment_Rate ~ time2crisis +
time_rural_crisis +
urban 1 + time2crisis | County),
(data = MD,
family = gaussian,
chains = 4, iter = 5000*2, seed = 84735,
cores = 4)
saveRDS(time_rural_crisis, "data/time_rural_crisis.rds")
}
color_scheme_set("purple")
<- ppc_dens_overlay(y = MD$Imprisonment_Rate,
drc yrep = posterior_predict(time_rural_crisis,
draws = 50)) +
labs(title = "Crisis Intervention") +
+
th_md theme(axis.text.y = element_blank())
+ dri + drc +
drmh plot_layout(guides = "collect") &
theme(legend.position = "bottom")
<- time_rural_mh %>%
ti_rural_mh spread_draws(time2mhf, urban) %>%
summarize(time2mhf_greater_0 = sum(time2mhf > 0) / n(),
urban_greater_0 = sum(urban > 0) / n())
<- time_rural_mh %>%
ti_rural_mh_ spread_draws(time2mhf, urban) %>%
median_hdi()
<- time_rural_inpatient %>%
ti_rural_inpatient spread_draws(time2inpatient, urban) %>%
summarize(time2inpatient_greater_0 = sum(time2inpatient > 0) / n(),
urban_greater_0 = sum(urban > 0) / n())
<- time_rural_inpatient %>%
ti_rural_inpatient_ spread_draws(time2inpatient, urban) %>%
median_hdi()
<- time_rural_crisis %>%
ti_rural_crisis spread_draws(time2crisis, urban) %>%
summarize(time2crisis_greater_0 = sum(time2crisis > 0) / n(),
urban_greater_0 = sum(urban > 0) / n())
<- time_rural_crisis %>%
ti_rural_crisis_ spread_draws(time2crisis, urban) %>%
median_hdi()
Distance to Mental Health Facilities with Crisis Intervention and All Other Variables
if (file.exists("data/distance_all_mh.rds")) {
<- readRDS("data/distance_all_mh.rds")
distance_all_mh else {
} <- stan_glmer(Imprisonment_Rate ~ miles2mhf +
distance_all_mh +
pctBlack +
IncomeMedian1000 +
UnempRate16 +
urban 1 + miles2mhf | County),
(data = MD,
family = gaussian,
chains = 4, iter = 5000*2, seed = 84735,
cores = 4)
saveRDS(distance_all_mh, "data/distance_all_mh.rds")
}
color_scheme_set("purple")
<- ppc_dens_overlay(y = MD$Imprisonment_Rate,
damh yrep = posterior_predict(distance_all_mh,
draws = 50)) +
labs(title = "Mental Health Facility") +
+
th_md theme(axis.text.y = element_blank())
if (file.exists("data/distance_all_inpatient.rds")) {
<- readRDS("data/distance_all_inpatient.rds")
distance_all_inpatient else {
} <- stan_glmer(Imprisonment_Rate ~ miles2inpatient +
distance_all_inpatient +
pctBlack +
IncomeMedian1000 +
UnempRate16 +
urban 1 + miles2inpatient | County),
(data = MD,
family = gaussian,
chains = 4, iter = 5000*2, seed = 84735,
cores = 4)
saveRDS(distance_all_inpatient, "data/distance_all_inpatient.rds")
}
color_scheme_set("purple")
<- ppc_dens_overlay(y = MD$Imprisonment_Rate,
dai yrep = posterior_predict(distance_all_inpatient,
draws = 50)) +
labs(title = "Inpatient") +
+
th_md theme(axis.text.y = element_blank())
if (file.exists("data/distance_all_crisis.rds")) {
<- readRDS("data/distance_all_crisis.rds")
distance_all_crisis else {
} <- stan_glmer(Imprisonment_Rate ~ miles2crisis +
distance_all_crisis +
pctBlack +
IncomeMedian1000 +
UnempRate16 +
urban 1 + miles2crisis | County),
(data = MD,
family = gaussian,
chains = 4, iter = 5000*2, seed = 84735,
cores = 4)
saveRDS(distance_all_crisis, "data/distance_all_crisis.rds")
}
color_scheme_set("purple")
<- ppc_dens_overlay(y = MD$Imprisonment_Rate,
dac yrep = posterior_predict(distance_all_crisis,
draws = 50)) +
labs(title = "Crisis Intervention") +
+
th_md theme(axis.text.y = element_blank())
+ dai + dac +
damh plot_layout(guides = "collect") &
theme(legend.position = "bottom")
<- distance_all_mh %>%
dist_all_mh spread_draws(miles2mhf, pctBlack, IncomeMedian1000, UnempRate16, urban) %>%
summarize(miles2mhf_greater_0 = sum(miles2mhf > 0) / n(),
pctBlack_greater_0 = sum(pctBlack > 0) / n(),
IncomeMedian_greater_0 = sum(IncomeMedian1000 > 0) / n(),
Unemp_greater_0 = sum(UnempRate16 > 0) / n(),
urban_greater_0 = sum(urban > 0) / n())
<- distance_all_mh %>%
dist_all_mh_ spread_draws(miles2mhf, pctBlack, IncomeMedian1000, UnempRate16, urban) %>%
median_hdi()
<- distance_all_inpatient %>%
dist_all_inpatient spread_draws(miles2inpatient, pctBlack, IncomeMedian1000, UnempRate16, urban) %>%
summarize(miles2inpatient_greater_0 = sum(miles2inpatient > 0) / n(),
pctBlack_greater_0 = sum(pctBlack > 0) / n(),
IncomeMedian_greater_0 = sum(IncomeMedian1000 > 0) / n(),
Unemp_greater_0 = sum(UnempRate16 > 0) / n(),
urban_greater_0 = sum(urban > 0) / n())
<- distance_all_inpatient %>%
dist_all_inpatient_ spread_draws(miles2inpatient, pctBlack, IncomeMedian1000, UnempRate16, urban) %>%
median_hdi()
<- distance_all_crisis %>%
dist_all_crisis spread_draws(miles2crisis, pctBlack, IncomeMedian1000, UnempRate16, urban) %>%
summarize(miles2crisis_greater_0 = sum(miles2crisis > 0) / n(),
pctBlack_greater_0 = sum(pctBlack > 0) / n(),
IncomeMedian_greater_0 = sum(IncomeMedian1000 > 0) / n(),
Unemp_greater_0 = sum(UnempRate16 > 0) / n(),
urban_greater_0 = sum(urban > 0) / n())
<- distance_all_crisis %>%
dist_all_crisis_ spread_draws(miles2crisis, pctBlack, IncomeMedian1000, UnempRate16, urban) %>%
median_hdi()
if (file.exists("data/time_all_mh.rds")) {
<- readRDS("data/time_all_mh.rds")
time_all_mh else {
} <- stan_glmer(Imprisonment_Rate ~ time2mhf +
time_all_mh +
pctBlack +
IncomeMedian1000 +
UnempRate16 +
urban 1 + time2mhf | County),
(data = MD,
family = gaussian,
chains = 4, iter = 5000*2, seed = 84735,
cores = 4)
saveRDS(time_all_mh, "data/time_all_mh.rds")
}
color_scheme_set("purple")
<- ppc_dens_overlay(y = MD$Imprisonment_Rate,
damh yrep = posterior_predict(time_all_mh,
draws = 50)) +
labs(title = "Mental Health Facility") +
+
th_md theme(axis.text.y = element_blank())
if (file.exists("data/time_all_inpatient.rds")) {
<- readRDS("data/time_all_inpatient.rds")
time_all_inpatient else {
} <- stan_glmer(Imprisonment_Rate ~ time2inpatient +
time_all_inpatient +
pctBlack +
IncomeMedian1000 +
UnempRate16 +
urban 1 + time2inpatient | County),
(data = MD,
family = gaussian,
chains = 4, iter = 5000*2, seed = 84735,
cores = 4)
saveRDS(time_all_inpatient, "data/time_all_inpatient.rds")
}
color_scheme_set("purple")
<- ppc_dens_overlay(y = MD$Imprisonment_Rate,
dai yrep = posterior_predict(time_all_inpatient,
draws = 50)) +
labs(title = "Inpatient") +
+
th_md theme(axis.text.y = element_blank())
if (file.exists("data/time_all_crisis.rds")) {
<- readRDS("data/time_all_crisis.rds")
time_all_crisis else {
} <- stan_glmer(Imprisonment_Rate ~ time2crisis +
time_all_crisis +
pctBlack +
IncomeMedian1000 +
UnempRate16 +
urban 1 + time2crisis | County),
(data = MD,
family = gaussian,
chains = 4, iter = 5000*2, seed = 84735,
cores = 4)
saveRDS(time_all_crisis, "data/time_all_crisis.rds")
}
color_scheme_set("purple")
<- ppc_dens_overlay(y = MD$Imprisonment_Rate,
dac yrep = posterior_predict(time_all_crisis,
draws = 50)) +
labs(title = "Crisis Intervention") +
+
th_md theme(axis.text.y = element_blank())
+ dai + dac +
damh plot_layout(guides = "collect") &
theme(legend.position = "bottom")
<- time_all_mh %>%
ti_all_mh spread_draws(time2mhf, pctBlack, IncomeMedian1000, UnempRate16, urban) %>%
summarize(time2mhf_greater_0 = sum(time2mhf > 0) / n(),
pctBlack_greater_0 = sum(pctBlack > 0) / n(),
IncomeMedian_greater_0 = sum(IncomeMedian1000 > 0) / n(),
Unemp_greater_0 = sum(UnempRate16 > 0) / n(),
urban_greater_0 = sum(urban > 0) / n())
<- time_all_mh %>%
ti_all_mh_ spread_draws(time2mhf, pctBlack, IncomeMedian1000, UnempRate16, urban) %>%
median_hdi()
<- time_all_inpatient %>%
ti_all_inpatient spread_draws(time2inpatient, pctBlack, IncomeMedian1000, UnempRate16, urban) %>%
summarize(time2inpatient_greater_0 = sum(time2inpatient > 0) / n(),
pctBlack_greater_0 = sum(pctBlack > 0) / n(),
IncomeMedian_greater_0 = sum(IncomeMedian1000 > 0) / n(),
Unemp_greater_0 = sum(UnempRate16 > 0) / n(),
urban_greater_0 = sum(urban > 0) / n())
<- time_all_inpatient %>%
ti_all_inpatient_ spread_draws(time2inpatient, pctBlack, IncomeMedian1000, UnempRate16, urban) %>%
median_hdi()
<- time_all_crisis %>%
ti_all_crisis spread_draws(time2crisis, pctBlack, IncomeMedian1000, UnempRate16, urban) %>%
summarize(time2crisis_greater_0 = sum(time2crisis > 0) / n(),
pctBlack_greater_0 = sum(pctBlack > 0) / n(),
IncomeMedian_greater_0 = sum(IncomeMedian1000 > 0) / n(),
Unemp_greater_0 = sum(UnempRate16 > 0) / n(),
urban_greater_0 = sum(urban > 0) / n())
<- time_all_crisis %>%
ti_all_crisis_ spread_draws(time2crisis, pctBlack, IncomeMedian1000, UnempRate16, urban) %>%
median_hdi()
Graphics
<- dagitty('
dag dag {
"`Median Income`" [adjusted,pos="1.5,1"]
"`% with Disability`" [pos="4.2,1"]
"`% Under Poverty`" [pos="3.4,1.0475"]
"`Unemployment`" [adjusted,pos="1,1.35"]
"`% Black`" [adjusted,pos="1.55,1.45"]
"`Urban/Rural Classification`" [adjusted,pos="2.25,1.55"]
"`% w/o Internet`" [pos="2.7,1.118"]
"`% w/o Health Insurance`" [pos="1.775,1.175"]
"`Access to Mental Health Care`" [exposure,pos="4.55,1.475"]
"`Imprisonment Rate`" [outcome,pos="6,1.25"]
"`Median Income`" -> "`% w/o Internet`"
"`Median Income`" -> "`% w/o Health Insurance`"
"`Median Income`" -> "`% Under Poverty`"
"`% with Disability`" -> "`Median Income`"
"`% with Disability`" -> "`Imprisonment Rate`"
"`% Under Poverty`" -> "`Imprisonment Rate`"
"`% w/o Internet`" -> "`Imprisonment Rate`"
"`% w/o Internet`" -> "`Access to Mental Health Care`"
"`% w/o Health Insurance`" -> "`Imprisonment Rate`"
"`% Black`" -> "`Imprisonment Rate`"
"`Urban/Rural Classification`" -> "`Imprisonment Rate`"
"`Unemployment`" -> "`Imprisonment Rate`"
"`Access to Mental Health Care`" -> "`Imprisonment Rate`"
"`Median Income`" -> "`Imprisonment Rate`"
"`Median Income`" -> "`Access to Mental Health Care`"
"`Urban/Rural Classification`" -> "`Access to Mental Health Care`"
"`% Black`" -> "`Access to Mental Health Care`"
"`Unemployment`" -> "`Access to Mental Health Care`"
"`Unemployment`" -> "`Median Income`"
"`Unemployment`" -> "`% w/o Health Insurance`"
"`% w/o Health Insurance`" -> "`Access to Mental Health Care`"
}
')
<- dag %>%
dag_plot tidy_dagitty() %>%
mutate(var_type = case_when(
str_detect(name, "`Imprisonment Rate`") ~
"`Imprisonment Rate`",
str_detect(name, "`Access to Mental Health Care`") ~
"`Access to Mental Health Care`",
str_detect(name, "`Median Income`") ~ "A",
str_detect(name, "`% Black`") ~ "A",
str_detect(name, "`Urban/Rural Classification`") ~ "A",
str_detect(name, "`Unemployment`") ~ "A",
TRUE ~ "Z"
%>%
)) mutate(arrow_color = case_when(
== "`Access to Mental Health Care`" &
name == "`Imprisonment Rate`" ~ "#7400CC",
to TRUE ~ "#B785DD"),
arrow_width = case_when(
== "`Access to Mental Health Care`" &
name == "`Imprisonment Rate`" ~ 1.5,
to TRUE ~ 1.15
))
set.seed(800855)
<- ggplot(dag_plot, aes(x = x, y = y,
full_dag xend = xend, yend = yend)) +
geom_dag_edges(aes(edge_colour = arrow_color,
edge_width = arrow_width)) +
geom_dag_point(aes(color = var_type),
size = 15) +
geom_dag_label_repel(data = filter(
dag_plot, == "`Imprisonment Rate`"),
var_type aes(label = name),
color = "black",
fill = "#DACDE3",
size = 4.5,
family = "Changa",
parse = TRUE) +
geom_dag_label_repel(data = filter(
dag_plot, == "`Access to Mental Health Care`"),
var_type aes(label = name),
color = "black",
fill = "#DACDE3",
size = 4.5,
family = "Changa",
parse = TRUE) +
geom_dag_label_repel(data = filter(dag_plot,
== "A"),
var_type aes(label = name),
color = "black",
fill = "#DACDE3",
size = 4,
family = "Changa",
parse = TRUE) +
geom_dag_label_repel(data = filter(dag_plot,
== "Z"),
var_type aes(label = name),
color = "black",
fill = "#DACDE3",
alpha = .6,
size = 4,
family = "Changa",
parse = TRUE) +
scale_color_manual(values = c("#7400CC",
"#CC0AA4",
"#1471CC",
"#9BBCDD")) +
scale_y_reverse() +
guides(color = "none") +
theme_dag()
full_dag
ggsave("figures/dag.png", height = 4.944376, width = 8,
device = png, type = "cairo", dpi = 300)
<- label_number(accuracy = 1, prefix = "mean = ")
my_mean <- t.test(Imprisonment_Rate ~ black, data = MD)
black_dif
<- data.frame(
dat_text label = c(my_mean(black_dif$estimate[1]),
my_mean(black_dif$estimate[2])),
black_cat = c("Not Majority Black Tracts",
"Majority Black Tracts"),
x = c(462, 1036),
y = c(435, 45)
)
%>%
MD ggplot(aes(Imprisonment_Rate, color = black_cat)) +
geom_histogram(aes(fill = black_cat),
color = "white",
binwidth = 100,
boundary = 0) +
geom_vline(aes(xintercept = ifelse(MD$black == 1,
$estimate[2],
black_dif$estimate[1]),
black_difcolor = black_cat),
linetype = "longdash",
linewidth = 1) +
geom_text(data = dat_text,
aes(x = x,
y = y,
label = label,
color = black_cat),
size = 3.5,
family = "Changa") +
facet_wrap(vars(black_cat),
ncol = 1,
scales = "free_y",
labeller = labeller(paste0(MD$black_cat, " Tracts"))) +
scale_fill_manual(values = c("#8CE0FF", "#3ACC14"),
guide = "none") +
scale_color_manual(values = c("#4FADD0", "#2FA811"),
guide = "none") +
scale_x_continuous(labels = label_comma(),
expand = expansion(mult = 0.01,
add = 0)) +
labs(x = "Imprisonment Rate per 100,000 Residents",
y = "Number of Census Tracts",
title = "Distribution of Imprisonment Rate by Race",
caption = "Note: 'Majority Black Tracts' rescaled to show distribution. Top: N = 1086; Bottom: N = 359; Total N = 1455") +
+
th_md theme(panel.grid.major.x = element_blank(),
panel.grid.minor.x = element_blank(),
panel.grid.minor.y = element_blank(),
strip.text = element_text(color = "#310873",
family = "Changa"),
strip.background = element_blank(),
strip.placement = "outside")
ggsave("figures/blackhistogram.png",
device = png, type = "cairo", dpi = 300,
width = 8, height = (8 / 1.618))
ggsave("figures/blackhistogram.pdf",
width = 8, height = (8 / 1.618),
device = cairo_pdf)
%>%
alldemos_ gather_draws(pctBlack, IncomeMedian1000, UnempRate16) %>%
ggplot(aes(.value, .variable)) +
geom_vline(xintercept = 0,
color = "#CCAC14",
linewidth = .75) +
stat_halfeye(.width = c(0.8, 0.95),
aes(fill = .variable),
alpha = .85,
normalize = "xy") +
geom_vline(xintercept = 0,
color = "#310873",
linetype = "longdash") +
scale_x_continuous(breaks = seq(-20,30,5)) +
scale_y_discrete(limits = c("UnempRate16",
"IncomeMedian1000",
"pctBlack"),
labels = c("Unemployment",
"Median Income",
"Percent Black")) +
scale_fill_manual(values = colors,
guide = "none",
limits = c("UnempRate16",
"IncomeMedian1000",
"pctBlack")) +
coord_cartesian(xlim = c(-6,27.5)) +
labs(y = NULL,
title = "Imprisonment Rates and Demographic Variables",
caption = "Note: Urban/Rural Classification is held constant but is omitted since the distribution of coefficents was much wider.\nPoint shows median value; thick black bar shows 80% credible interval; thin black bar shows 95% credible interval") +
+
th_md theme(panel.grid.major.x = element_line(color = "#FFD1F9",
linewidth = .75,
linetype = "dashed"),
panel.grid.major.y = element_line(color = "#FFD1F9",
linewidth = .25,
linetype = "longdash"),
axis.title = element_blank(),
axis.text.y = element_text(size = 11))
ggsave("figures/alldemos.png",
width = 7, height = 7 / 1.618,
device = png, type = "cairo", dpi = 300)
ggsave("figures/alldemos.pdf",
width = 7, height = 7 / 1.618,
device = cairo_pdf)
%>%
alldemos_ gather_draws(pctBlack, IncomeMedian1000, UnempRate16, urban) %>%
ggplot(aes(.value, .variable)) +
geom_vline(xintercept = 0,
color = "#CCAC14",
linewidth = .75) +
stat_halfeye(.width = c(0.8, 0.95),
aes(fill = .variable),
alpha = .85,
normalize = "xy") +
geom_vline(xintercept = 0,
color = "#310873",
linetype = "longdash") +
scale_x_continuous(breaks = seq(-100,100,20)) +
scale_y_discrete(limits = c("urban",
"UnempRate16",
"IncomeMedian1000",
"pctBlack"),
labels = c("Urban/Rural\nClassification",
"Unemployment",
"Median Income",
"Percent Black")) +
scale_fill_manual(values = colors3,
guide = "none",
limits = c("urban",
"UnempRate16",
"IncomeMedian1000",
"pctBlack")) +
coord_cartesian(xlim = c(-50,65)) +
labs(y = NULL,
title = "Imprisonment Rates and Demographic Variables",
subtitle = "with Urban/Rural Classification",
caption = "Point shows median value; thick black bar shows 80% credible interval; thin black bar shows 95% credible interval") +
+
th_md theme(panel.grid.major.x = element_line(color = "#FFD1F9",
linewidth = .75,
linetype = "dashed"),
panel.grid.major.y = element_line(color = "#FFD1F9",
linewidth = .25,
linetype = "longdash"),
axis.title = element_blank(),
axis.text.y = element_text(size = 11))
ggsave("figures/alldemosurban.png",
width = 7, height = 7 / 1.618,
device = png, type = "cairo", dpi = 300)
# ggsave("figures/alldemosurban.pdf",
# width = 7, height = 7 / 1.618)
<- expand_grid(pctBlack = seq(0,100,25),
minia IncomeMedian1000 = seq(15,215,25),
UnempRate16 = seq(0,32,4),
urban = c(0,1),
County = c("Baltimore City",
"Baltimore County",
"Montgomery County",
"Prince George's County",
"Dorchester County",
"Wicomico County"))
<- expand_grid(pctBlack = seq(25,75,50),
minia_bm IncomeMedian1000 = seq(15,215,25),
UnempRate16 = seq(0,32,4),
urban = c(0,1),
County = c("Baltimore City",
"Baltimore County"))
<- expand_grid(pctBlack = seq(25,75,50),
minia_dc IncomeMedian1000 = seq(15,215,25),
UnempRate16 = seq(0,32,4),
urban = c(0,1),
County = c("Montgomery County",
"Prince George's County"))
<- expand_grid(pctBlack = seq(25,75,50),
minia_ru IncomeMedian1000 = seq(15,215,25),
UnempRate16 = seq(0,32,4),
urban = c(0,1),
County = c("Dorchester County",
"Wicomico County"))
## Baltimore City and Baltimore County
<- alldemos_ %>%
bm epred_draws(newdata = minia_bm,
ndraws = 100) %>%
ggplot(aes(IncomeMedian1000, .epred)) +
stat_lineribbon(.width = c(.99, .95, .8, .5),
linewidth = 1.2,
color = "#7400CC") +
facet_wrap(vars(County),
nrow = 1) +
scale_x_continuous(labels = label_dollar()) +
scale_y_continuous(labels = label_comma(),
expand = expansion(mult = c(.01,.01),
add = c(0,0))) +
scale_fill_manual(values = pink4,
labels = c("99%", "95%", "80%", "50%")) +
coord_cartesian(ylim = c(0, 2500)) +
labs(x = "Median Income (in thousands)",
y = "Predicted Imprisonment Rate",
color = "Black Population",
fill = "Credible Level") +
+
th_md theme(strip.text = element_text(family = "Cambria",
color = "#310873",
size = 12),
axis.title = element_blank())
## DC Suburbs
<- alldemos_ %>%
dc epred_draws(newdata = minia_dc,
ndraws = 100) %>%
ggplot(aes(IncomeMedian1000, .epred)) +
stat_lineribbon(.width = c(.99, .95, .8, .5),
linewidth = 1.2,
color = "#7400CC") +
facet_wrap(vars(County),
nrow = 1) +
scale_x_continuous(labels = label_dollar()) +
scale_y_continuous(labels = label_comma(),
expand = expansion(mult = c(.01,.01),
add = c(0,0))) +
scale_fill_manual(values = pink4,
labels = c("99%", "95%", "80%", "50%")) +
coord_cartesian(ylim = c(0, 2500)) +
labs(x = "Median Income (in thousands)",
y = "Predicted Imprisonment Rate",
color = "Black Population",
fill = "Credible Level",
title = "DC Suburbs") +
+
th_md theme(strip.text = element_text(family = "Cambria",
color = "#310873",
size = 12),
axis.title.x = element_blank(),
plot.title = element_text(family = "Changa",
color = "#310873",
size = 14,
hjust = 0))
## Rural Counties
<- alldemos_ %>%
ru epred_draws(newdata = minia_ru,
ndraws = 100) %>%
ggplot(aes(IncomeMedian1000, .epred)) +
stat_lineribbon(.width = c(.99, .95, .8, .5),
linewidth = 1.2,
color = "#7400CC") +
facet_wrap(vars(County),
nrow = 1) +
scale_x_continuous(labels = label_dollar()) +
scale_y_continuous(labels = label_comma(),
expand = expansion(mult = c(.01,.01),
add = c(0,0))) +
scale_fill_manual(values = pink4,
labels = c("99%", "95%", "80%", "50%")) +
coord_cartesian(ylim = c(0, 2500)) +
labs(x = "Median Income (in thousands)",
y = "Predicted Imprisonment Rate",
color = "Black Population",
fill = "Credible Level",
title = "Rural Peninsula Counties") +
+
th_md theme(strip.text = element_text(family = "Cambria",
color = "#310873",
size = 12),
axis.title.y = element_blank(),
plot.title = element_text(family = "Changa",
color = "#310873",
size = 14,
hjust = 0))
/ dc / ru) +
(bm plot_annotation(
"Relationships between Median Income and\nImprisonment Rates within Selected Counties",
theme = theme(plot.title = element_text(size = 16,
family = "Changa",
hjust = .5))) +
plot_layout(guides = "collect") &
theme(legend.position = "bottom")
ggsave("figures/counties.png",
width = 7, height = 8,
device = png, type = "cairo", dpi = 300)
ggsave("figures/counties.pdf",
width = 7, height = 8,
device = cairo_pdf)
<- distance_mh %>%
mh gather_draws(miles2mhf) %>%
ggplot(aes(.value, .variable)) +
geom_vline(xintercept = 0,
color = "#CCAC14",
linewidth = 1) +
stat_halfeye(data = time_mh %>% gather_draws(time2mhf),
.width = c(0.8, 0.95),
fill = "#0E0ACC",
alpha = .5) +
stat_halfeye(.width = c(0.8, 0.95),
fill = "#0E0ACC",
alpha = .85) +
geom_vline(xintercept = 0,
color = "#310873",
linetype = "longdash") +
scale_x_continuous(breaks = seq(-60,60,15)) +
scale_y_discrete(limits = c("time2mhf",
"miles2mhf"),
labels = c("Travel\nTime",
"Driving\nMiles")) +
scale_fill_manual(values = colors,
guide = "none",
limits = c("time2mhf",
"miles2mhf")) +
coord_cartesian(xlim = c(-37.5,17.5)) +
labs(title = "Mental Health Facilities") +
+
th_md theme(plot.title = element_text(family = "Cambria",
color = "#310873",
size = 12),
panel.grid.major.x = element_line(color = "#FFD1F9",
linewidth = .75,
linetype = "dashed"),
panel.grid.major.y = element_line(color = "#FFD1F9",
linewidth = .25,
linetype = "longdash"),
axis.title = element_blank())
<- distance_inpatient %>%
inpatient gather_draws(miles2inpatient) %>%
ggplot(aes(.value, .variable)) +
geom_vline(xintercept = 0,
color = "#CCAC14",
linewidth = 1) +
stat_halfeye(data = time_inpatient %>% gather_draws(time2inpatient),
.width = c(0.8, 0.95),
fill = "#0E0ACC",
alpha = .5) +
stat_halfeye(.width = c(0.8, 0.95),
fill = "#0E0ACC",
alpha = .85) +
geom_vline(xintercept = 0,
color = "#310873",
linetype = "longdash") +
scale_x_continuous(breaks = seq(-60,60,15)) +
scale_y_discrete(limits = c("time2inpatient",
"miles2inpatient")) +
scale_fill_manual(values = colors,
guide = "none",
limits = c("time2inpatient",
"miles2inpatient")) +
coord_cartesian(xlim = c(-37.5,17.5)) +
labs(title = "Inpatient Facilities") +
+
th_md theme(plot.title = element_text(family = "Cambria",
color = "#310873",
size = 12),
panel.grid.major.x = element_line(color = "#FFD1F9",
linewidth = .75,
linetype = "dashed"),
panel.grid.major.y = element_line(color = "#FFD1F9",
linewidth = .25,
linetype = "longdash"),
axis.title = element_blank(),
axis.text.y = element_blank())
<- distance_crisis %>%
crisis gather_draws(miles2crisis) %>%
ggplot(aes(.value, .variable)) +
geom_vline(xintercept = 0,
color = "#CCAC14",
linewidth = 1) +
stat_halfeye(data = time_crisis %>% gather_draws(time2crisis),
.width = c(0.8, 0.95),
fill = "#0E0ACC",
alpha = .5) +
stat_halfeye(.width = c(0.8, 0.95),
fill = "#0E0ACC",
alpha = .85) +
geom_vline(xintercept = 0,
color = "#310873",
linetype = "longdash") +
scale_x_continuous(breaks = seq(-60,60,15)) +
scale_y_discrete(limits = c("time2crisis",
"miles2crisis")) +
scale_fill_manual(values = colors,
guide = "none",
limits = c("time2crisis",
"miles2crisis")) +
coord_cartesian(xlim = c(-37.5,17.5)) +
labs(title = "Crisis Intervention Facilities") +
+
th_md theme(plot.title = element_text(family = "Cambria",
color = "#310873",
size = 12),
panel.grid.major.x = element_line(color = "#FFD1F9",
linewidth = .75,
linetype = "dashed"),
panel.grid.major.y = element_line(color = "#FFD1F9",
linewidth = .25,
linetype = "longdash"),
axis.title = element_blank(),
axis.text.y = element_blank())
+ inpatient + crisis +
mh plot_annotation(title = "Imprisonment Rates and Distance to Mental Health Facilities",
subtitle = "Distance Only",
caption = "Point shows median value; thick black bar shows 80% credible interval; thin black bar shows 95% credible interval",
theme = theme(plot.title = element_text(size = 16,
family = "Changa",
hjust = .5),
plot.subtitle = element_text(size = 14,
family = "Changa",
hjust = .5),
plot.caption = element_text(family = "Cambria",
color = "#310873",
size = 8)))
ggsave("figures/distance_.png",
width = 7.5, height = 2.5,
device = png, type = "cairo", dpi = 300)
# ggsave("figures/distance_.pdf",
# width = 6, height = 4.7)
<- distance_rural_mh %>%
mh gather_draws(miles2mhf, urban) %>%
ggplot(aes(.value, .variable)) +
geom_vline(xintercept = 0,
color = "#CCAC14",
linewidth = 1) +
stat_halfeye(data = time_rural_mh %>% gather_draws(time2mhf, urban),
.width = c(0.8, 0.95),
aes(fill = .variable),
alpha = .5,
normalize = "xy") +
stat_halfeye(.width = c(0.8, 0.95),
aes(fill = .variable),
alpha = .85,
normalize = "xy") +
geom_vline(xintercept = 0,
color = "#310873",
linetype = "longdash") +
scale_x_continuous(breaks = seq(-100,300,100)) +
scale_y_discrete(limits = c("urban",
"time2mhf",
"miles2mhf"),
labels = c("Urban/Rural\nClassification",
"Travel Time",
"Driving Miles")) +
scale_fill_manual(values = colors2,
guide = "none",
limits = c("urban",
"time2mhf",
"miles2mhf")) +
coord_cartesian(xlim = c(-50,225)) +
labs(title = "Mental Health Facilities") +
+
th_md theme(plot.title = element_text(family = "Cambria",
color = "#310873",
size = 12),
panel.grid.major.x = element_line(color = "#FFD1F9",
linewidth = .75,
linetype = "dashed"),
panel.grid.major.y = element_line(color = "#FFD1F9",
linewidth = .25,
linetype = "longdash"),
axis.title = element_blank())
<- distance_rural_inpatient %>%
inpatient gather_draws(miles2inpatient, urban) %>%
ggplot(aes(.value, .variable)) +
geom_vline(xintercept = 0,
color = "#CCAC14",
linewidth = 1) +
stat_halfeye(data = time_rural_inpatient %>% gather_draws(time2inpatient, urban),
.width = c(0.8, 0.95),
aes(fill = .variable),
alpha = .5,
normalize = "xy") +
stat_halfeye(.width = c(0.8, 0.95),
aes(fill = .variable),
alpha = .85,
normalize = "xy") +
geom_vline(xintercept = 0,
color = "#310873",
linetype = "longdash") +
scale_x_continuous(breaks = seq(-100,300,100)) +
scale_y_discrete(limits = c("urban",
"time2inpatient",
"miles2inpatient")) +
scale_fill_manual(values = colors2,
guide = "none",
limits = c("urban",
"time2inpatient",
"miles2inpatient")) +
coord_cartesian(xlim = c(-50,225)) +
labs(title = "Inpatient Facilities") +
+
th_md theme(plot.title = element_text(family = "Cambria",
color = "#310873",
size = 12),
panel.grid.major.x = element_line(color = "#FFD1F9",
linewidth = .75,
linetype = "dashed"),
panel.grid.major.y = element_line(color = "#FFD1F9",
linewidth = .25,
linetype = "longdash"),
axis.title = element_blank(),
axis.text.y = element_blank())
<- distance_rural_crisis %>%
crisis gather_draws(miles2crisis, urban) %>%
ggplot(aes(.value, .variable)) +
geom_vline(xintercept = 0,
color = "#CCAC14",
linewidth = 1) +
stat_halfeye(data = time_rural_crisis %>% gather_draws(time2crisis, urban),
.width = c(0.8, 0.95),
aes(fill = .variable),
alpha = .5,
normalize = "xy") +
stat_halfeye(.width = c(0.8, 0.95),
aes(fill = .variable),
alpha = .85,
normalize = "xy") +
geom_vline(xintercept = 0,
color = "#310873",
linetype = "longdash") +
scale_x_continuous(breaks = seq(-100,300,100)) +
scale_y_discrete(limits = c("urban",
"time2crisis",
"miles2crisis")) +
scale_fill_manual(values = colors2,
guide = "none",
limits = c("urban",
"time2crisis",
"miles2crisis")) +
coord_cartesian(xlim = c(-50,225)) +
labs(title = "Crisis Intervention Facilities") +
+
th_md theme(plot.title = element_text(family = "Cambria",
color = "#310873",
size = 12),
panel.grid.major.x = element_line(color = "#FFD1F9",
linewidth = .75,
linetype = "dashed"),
panel.grid.major.y = element_line(color = "#FFD1F9",
linewidth = .25,
linetype = "longdash"),
axis.title = element_blank(),
axis.text.y = element_blank())
+ inpatient + crisis +
mh plot_annotation(title = "Imprisonment Rates and Distance to Mental Health Facilities",
subtitle = "Urban/Rural Classification",
caption = "Point shows median value; thick black bar shows 80% credible interval; thin black bar shows 95% credible interval",
theme = theme(plot.title = element_text(size = 16,
family = "Changa",
hjust = .5),
plot.subtitle = element_text(size = 14,
family = "Changa",
hjust = .5),
plot.caption = element_text(family = "Cambria",
color = "#310873",
size = 8)))
ggsave("figures/distance_rural_.png",
width = 7.5, height = 3,
device = png, type = "cairo", dpi = 300)
# ggsave("figures/distance_rural_.pdf",
# width = 6, height = 4.7)
<- distance_all_mh %>%
mh gather_draws(miles2mhf, pctBlack, IncomeMedian1000, UnempRate16) %>%
ggplot(aes(.value, .variable)) +
geom_vline(xintercept = 0,
color = "#CCAC14",
linewidth = 1) +
stat_halfeye(data = time_all_mh %>% gather_draws(time2mhf,
pctBlack,
IncomeMedian1000,
UnempRate16),.width = c(0.8, 0.95),
aes(fill = .variable),
alpha = .5,
slab_linewidth = 0,
normalize = "xy") +
stat_halfeye(.width = c(0.8, 0.95),
aes(fill = .variable),
alpha = .85,
normalize = "xy") +
geom_vline(xintercept = 0,
color = "#310873",
linetype = "longdash") +
scale_x_continuous(breaks = seq(-20,60,10),
position = "top") +
scale_y_discrete(limits = c("UnempRate16",
"IncomeMedian1000",
"pctBlack",
"time2mhf",
"miles2mhf"),
labels = c("Unemployment",
"Median Income",
"Percent Black",
"Travel Time",
"Driving Miles")) +
scale_fill_manual(values = colors,
guide = "none",
limits = c("UnempRate16",
"IncomeMedian1000",
"pctBlack",
"time2mhf",
"miles2mhf")) +
coord_cartesian(xlim = c(-20,35)) +
labs(title = "Mental Health Facilities") +
+
th_md theme(plot.title = element_text(family = "Cambria",
color = "#310873",
size = 12),
panel.grid.major.x = element_line(color = "#FFD1F9",
linewidth = .75,
linetype = "dashed"),
panel.grid.major.y = element_line(color = "#FFD1F9",
linewidth = .25,
linetype = "longdash"),
axis.title = element_blank())
<- distance_all_inpatient %>%
inpatient gather_draws(miles2inpatient, pctBlack, IncomeMedian1000, UnempRate16) %>%
ggplot(aes(.value, .variable)) +
geom_vline(xintercept = 0,
color = "#CCAC14",
linewidth = 1) +
stat_halfeye(data = time_all_inpatient %>% gather_draws(time2inpatient,
pctBlack,
IncomeMedian1000,
UnempRate16),.width = c(0.8, 0.95),
aes(fill = .variable),
alpha = .5,
normalize = "xy") +
stat_halfeye(.width = c(0.8, 0.95),
aes(fill = .variable),
alpha = .85,
normalize = "xy") +
geom_vline(xintercept = 0,
color = "#310873",
linetype = "longdash") +
scale_x_continuous(breaks = seq(-20,60,10)) +
scale_y_discrete(limits = c("UnempRate16",
"IncomeMedian1000",
"pctBlack",
"time2inpatient",
"miles2inpatient"),
labels = c("Unemployment",
"Median Income",
"Percent Black",
"Travel Time",
"Driving Miles")) +
scale_fill_manual(values = colors,
guide = "none",
limits = c("UnempRate16",
"IncomeMedian1000",
"pctBlack",
"time2inpatient",
"miles2inpatient")) +
coord_cartesian(xlim = c(-20,35)) +
labs(title = "Inpatient Facilities") +
+
th_md theme(plot.title = element_text(family = "Cambria",
color = "#310873",
size = 12),
panel.grid.major.x = element_line(color = "#FFD1F9",
linewidth = .75,
linetype = "dashed"),
panel.grid.major.y = element_line(color = "#FFD1F9",
linewidth = .25,
linetype = "longdash"),
axis.title = element_blank(),
axis.text.x = element_blank())
<- distance_all_crisis %>%
crisis gather_draws(miles2crisis, pctBlack, IncomeMedian1000, UnempRate16) %>%
ggplot(aes(.value, .variable)) +
geom_vline(xintercept = 0,
color = "#CCAC14",
linewidth = 1) +
stat_halfeye(data = time_all_crisis %>% gather_draws(time2crisis,
pctBlack,
IncomeMedian1000,
UnempRate16),.width = c(0.8, 0.95),
aes(fill = .variable),
alpha = .5,
normalize = "xy") +
stat_halfeye(.width = c(0.8, 0.95),
aes(fill = .variable),
alpha = .85,
normalize = "xy") +
geom_vline(xintercept = 0,
color = "#310873",
linetype = "longdash") +
scale_x_continuous(breaks = seq(-20,60,10)) +
scale_y_discrete(limits = c("UnempRate16",
"IncomeMedian1000",
"pctBlack",
"time2crisis",
"miles2crisis"),
labels = c("Unemployment",
"Median Income",
"Percent Black",
"Travel Time",
"Driving Miles")) +
scale_fill_manual(values = colors,
guide = "none",
limits = c("UnempRate16",
"IncomeMedian1000",
"pctBlack",
"time2crisis",
"miles2crisis")) +
coord_cartesian(xlim = c(-20,35)) +
labs(title = "Crisis Intervention Facilities",
caption = "Note: Urban/Rural Classification is held constant but is omitted since the distribution of coefficents was much wider.\nPoint shows median value; thick black bar shows 80% credible interval; thin black bar shows 95% credible interval") +
+
th_md theme(plot.title = element_text(family = "Cambria",
color = "#310873",
size = 12),
panel.grid.major.x = element_line(color = "#FFD1F9",
linewidth = .75,
linetype = "dashed"),
panel.grid.major.y = element_line(color = "#FFD1F9",
linewidth = .25,
linetype = "longdash"),
axis.title = element_blank())
/ inpatient / crisis +
mh plot_annotation(title = "Imprisonment Rates and Distance to Mental Health Facilities",
subtitle = "All Variables",
theme = theme(plot.title = element_text(size = 16,
family = "Changa",
hjust = .5),
plot.subtitle = element_text(size = 14,
family = "Changa",
hjust = .5)))
ggsave("figures/distance_all_.png",
width = 7.5, height = 7,
device = png, type = "cairo", dpi = 300)
ggsave("figures/distance_all_.pdf",
width = 7.5, height = 7,
device = cairo_pdf)
Excel Formulas
Formula to test the accuracy of the imprisonment calculations:
=IF(E2-D2=C2,TRUE,FALSE)
Formula to calculate total population:
=C2+D2
Formula to test the accuracy of the imprisonment calculations:
=IF(ROUND((C2/E2)*100000,0)=F2,TRUE,FALSE)
Formula to calculate corrected imprisonment rates:
=ROUND((C2/E2)*100000,0)
Formula to parse out the facility name:
=LEFT(A2, MIN(FIND(REGEXEXTRACT(A2, "\d"),A2))-1)
Formula to parse out the facility address:
=REGEXEXTRACT(A2,"[0-9]+ .+, [A-Z][a-z]+ [0-9]{5}")
Formula to create dummy variables for services codes:
=COUNTIF(INDEX(data2!$A:$DC, MATCH(data!$B2, data2!$B:$B, 0), 0), data!D$1)
ArcGIS Pro Log
Export Table
Input Table - MD.csv
Output Table - MD_ExportTable
Export Table
Input Table - MD_counties.csv
Output Table - MD_counties_ExportTable
Export Table
Input Table - Facilities.csv
Output Table - Facilities_ExportTable
Geocode Addresses
Input Table - Facilities_ExportTable
Input Address Locator - https://geocode.arcgis.com/arcgis/rest/services/World/GeocodeServer/Esri World Geocoder
Input Address Fields - ‘Single Line Input’ Address VISIBLE NONE
Output Feature Class - Facilities_Geocode
Dynamic Output Feature Class - STATIC
Country - US
Preferred Location Type - ADDRESS_LOCATION
Output Fields - ALL
Export Features
Input Features - ACS Context for Emergency Response - Boundaries\Tract
Output Feature Class - ACS_Tract
Calculate Field
Input Table - ACS_Tract
Field Name - FIPS
Expression - !GEOID!*1
Expression Type - PYTHON3
Add Join
Input Table - ACS_Tract
Input Join Field - FIPS
Join Table - MD_ExportTable
Join Table Field - FIPS
Keep All Target Features - KEEP_ALL
Updated Input Layer or Table View - ACS_Tract_ExportFeatures
Index Joined Fields - NO_INDEX_JOIN_FIELDS
Export Features
Input Table - ACS_Tract
Output Table - MD
Project
Input Dataset or Feature Class - Facilities_Geocode
Output Dataset or Feature Class - Facilities_MDSP
Output Coordinate System - PROJCS["NAD_1983_StatePlane_Maryland_FIPS_1900_Feet",
GEOGCS["GCS_North_American_1983",DATUM["D_North_American_1983",
SPHEROID["GRS_1980",6378137.0,298.257222101]],PRIMEM["Greenwich",0.0],
UNIT["Degree",0.0174532925199433]],PROJECTION["Lambert_Conformal_Conic"],
PARAMETER["False_Easting",1312333.333333333],PARAMETER["False_Northing",0.0],
PARAMETER["Central_Meridian",-77.0],PARAMETER["Standard_Parallel_1",38.3],
PARAMETER["Standard_Parallel_2",39.45],PARAMETER["Latitude_Of_Origin",37.66666666666666],
UNIT["Foot_US",0.3048006096012192]]
Geographic Transformation - NAD_1983_To_WGS_1984_1
Input Coordinate System - GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",
SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],
UNIT["Degree",0.0174532925199433]]
Preserve Shape - NO_PRESERVE_SHAPE
Vertical - NO_VERTICAL
Project
Input Dataset or Feature Class - County Boundaries
Output Dataset or Feature Class - County_Boundaries_MDSP
Output Coordinate System - PROJCS["NAD_1983_StatePlane_Maryland_FIPS_1900_Feet",
GEOGCS["GCS_North_American_1983",DATUM["D_North_American_1983",
SPHEROID["GRS_1980",6378137.0,298.257222101]],PRIMEM["Greenwich",0.0],
UNIT["Degree",0.0174532925199433]],PROJECTION["Lambert_Conformal_Conic"],
PARAMETER["False_Easting",1312333.333333333],PARAMETER["False_Northing",0.0],
PARAMETER["Central_Meridian",-77.0],PARAMETER["Standard_Parallel_1",38.3],
PARAMETER["Standard_Parallel_2",39.45],PARAMETER["Latitude_Of_Origin",37.66666666666666],
UNIT["Foot_US",0.3048006096012192]]
Geographic Transformation - NAD_1983_To_WGS_1984_1
Input Coordinate System - GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",
SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],
UNIT["Degree",0.0174532925199433]]
Preserve Shape - NO_PRESERVE_SHAPE
Vertical - NO_VERTICAL
Project
Input Dataset or Feature Class - MD
Output Dataset or Feature Class - MD_MDSP
Output Coordinate System - PROJCS["NAD_1983_StatePlane_Maryland_FIPS_1900_Feet",
GEOGCS["GCS_North_American_1983",DATUM["D_North_American_1983",
SPHEROID["GRS_1980",6378137.0,298.257222101]],PRIMEM["Greenwich",0.0],
UNIT["Degree",0.0174532925199433]],PROJECTION["Lambert_Conformal_Conic"],
PARAMETER["False_Easting",1312333.333333333],PARAMETER["False_Northing",0.0],
PARAMETER["Central_Meridian",-77.0],PARAMETER["Standard_Parallel_1",38.3],
PARAMETER["Standard_Parallel_2",39.45],PARAMETER["Latitude_Of_Origin",37.66666666666666],
UNIT["Foot_US",0.3048006096012192]]
Geographic Transformation - NAD_1983_To_WGS_1984_1
Input Coordinate System - GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",
SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],
UNIT["Degree",0.0174532925199433]]
Preserve Shape - NO_PRESERVE_SHAPE
Vertical - NO_VERTICAL
Select Layer By Attribute
Input Rows - Facilities_MDSP
Selection Type - NEW_SELECTION
Expression - USER_VeteransOnly = 0
Updated Layer Or Table View - Facilities_MDSP
Count - 230
Spatial Join
Target Features - MD_MDSP
Join Features - Facilities_MDSP
Output Feature Class - MD_MHF
Join Operation - JOIN_ONE_TO_MANY
Keep All Target Features - KEEP_ALL
Match Option - CLOSEST
Distance Field Name - MHF_distance
Calculate Field
Input Table - MD_MHF
Field Name - MHF_miles
Expression - !MHF_distance! / 5280
Expression Type - PYTHON3
Select Layer By Attribute
Input Rows - Facilities_MDSP
Selection Type - NEW_SELECTION
Expression - USER_VeteransOnly = 0 And USER_Setting_Inpatient = 1
Updated Layer Or Table View - Facilities_MDSP
Count - 20
Spatial Join
Target Features - MD_MHF
Join Features - Facilities_MDSP
Output Feature Class - MD_MHF_IH
Join Operation - JOIN_ONE_TO_MANY
Keep All Target Features - KEEP_ALL
Match Option - CLOSEST
Distance Field Name - Inpatient_distance
Calculate Field
Input Table - MD_MHF_IH
Field Name - Inpatient_miles
Expression - !Inpatient_distance! / 5280
Expression Type - PYTHON3
Select Layer By Attribute
Input Rows - Facilities_MDSP
Selection Type - NEW_SELECTION
Expression - USER_VeteransOnly = 0 And USER_Setting_Inpatient = 1 And USER_Emer_CrisisIntervention = 1
Updated Layer Or Table View - Facilities_MDSP
Count - 13
Spatial Join
Target Features - MD_MHF_IH
Join Features - Facilities__MDSP
Output Feature Class - MD_MHF_IH_Crisis
Join Operation - JOIN_ONE_TO_MANY
Keep All Target Features - KEEP_ALL
Match Option - CLOSEST
Distance Field Name - Crisis_distance
Calculate Field
Input Table - MD_MHF_IH_Crisis
Field Name - Crisis_miles
Expression - !Crisis_distance! / 5280
Expression Type - PYTHON3
Select Layer By Attribute
Input Rows - Facilities_MDSP
Selection Type - NEW_SELECTION
Expression - USER_VeteransOnly = 0 And USER_Setting_Inpatient = 1 And USER_Emer_Walkins = 1
Updated Layer Or Table View - Facilities_MDSP
Count - 15
Spatial Join
Target Features - MD_MHF_IH_Crisis
Join Features - Facilities_MDSP
Output Feature Class - MD_MHF_IH_Crisis_Walk
Join Operation - JOIN_ONE_TO_MANY
Keep All Target Features - KEEP_ALL
Match Option - CLOSEST
Distance Field Name - Walkin_distance
Calculate Field
Input Table - MD_MHF_IH_Crisis_Walk
Field Name - Walkin_miles
Expression - !Walkin_distance! / 5280
Expression Type - PYTHON3
Export Features
Input Features - MD_MHF_IH_Crisis_Walk
Output Feature Class - MD
Use Field Alias as Name - NOT_USE_ALIAS
Export Table
Input Table - Urban_Rural.csv
Output Table - Urban_Rural_ExportTable
Calculate Field
Input Table - Urban_Rural_ExportTable
Field Name - FIPS
Expression - !GEO_ID![-11:]
Expression Type - PYTHON3
Add Join
Input Table - tl_2010_24_tract10
Input Join Field - GEOID10
Join Table - Urban_Rural_ExportTable
Join Table Field - FIPS
Keep All Target Features - KEEP_ALL
Updated Input Layer or Table View - tl_2010_24_tract10
Index Joined Field - INDEX_JOIN_FIELDS
Export Features
Input Features - tl_2010_24_tract10
Output Feature Class - Urban_Rural2010
Use Field Alias as Name - NOT_USE_ALIAS
Apportion Polygon
Input Polygons - Urban_Rural2010
Fields to Apportion - H002001;H002002;H002005;H002006
Target Polygons - MD
Output Feature Class - MD_ApportionPoly
Apportion Method - AREA
Weight Field - Total_Pop
Maintain target geometry - MAINTAIN_GEOMETRIES
Calculate Field
Input Table - MD_ApportionPoly
Field Name - pctRural
Expression - (!H002005! / !H002001!) *100
Expression Type - PYTHON3
Select Layer By Attribute
Input Rows - Facilities_MDSP
Selection Type - NEW_SELECTION
Expression - USER_VeteransOnly = 0 And USER_Setting_Inpatient = 1
Updated Layer Or Table View - Facilities_MDSP
Count - 20
Make OD Cost Matrix Analysis Layer
Network Data Source - https://www.arcgis.com/
Layer Name - Urban Tracts to Inpatient
Travel Mode - Driving Time
Number of Destinations to Find - 1 Time Zone - LOCAL_TIME_AT_LOCATIONS
Line Shape - STRAIGHT_LINES
Network Analyst Layer - Urban Tracts to Inpatient
Ignore Invalid Locations at Solve Time - SKIP
Add Locations
Input Network Analysis Layer - Urban Tracts to Inpatient
Sub Layer - Origins
Input Locations - MDurban_Points
Field Mappings - Name FIPS
Search Tolerance - 20000 Meters
Search Criteria - main.Routing_Streets SHAPE
Find Closest among All Classes - MATCH_TO_CLOSEST
Append to Existing Locations - APPEND
Snap to Network - NO_SNAP
Snap Offset - 5 Meters
Exclude Restricted Portions of the Network - EXCLUDE
Updated Input Network Analysis Layer - Urban Tracts to Inpatient
Allow automatic relocating at solve time - ALLOW
Add Locations
Input Network Analysis Layer - Urban Tracts to Inpatient
Sub Layer - Destinations
Input Locations - Facilities_MDSP
Field Mappings - Name USER_FacilityName
Search Tolerance - 20000 Meters
Search Criteria - main.Routing_Streets SHAPE
Find Closest among All Classes - MATCH_TO_CLOSEST
Append to Existing Locations - APPEND
Snap to Network - NO_SNAP
Snap Offset - 5 Meters
Exclude Restricted Portions of the Network - EXCLUDE
Updated Input Network Analysis Layer - Urban Tracts to Inpatient
Allow automatic relocating at solve time - ALLOW
Solve
Input Network Analysis Layer - Urban Tracts to Inpatient
Ignore Invalid Locations - SKIP
Terminate on Solve Error - TERMINATE
Network Analyst Layer - Urban Tracts to Inpatient
Solve Succeeded - true
Export Features
Input Features - Urban Tracts to Inpatient\Lines
Output Feature Class - Urban_Lines_Inpatient
Use Field Alias as Name - NOT_USE_ALIAS
Calculate Field
Input Table - Urban_Lines_Inpatient
Field Name - FIPS
Expression - !Name![:11]
Expression Type - PYTHON3
Delete Identical
Input Dataset - Urban_Lines_Inpatient
Field(s) - FIPS
XY Tolerance -
Z Tolerance - 0
Updated Input Dataset - Urban_Lines_Inpatient
Make OD Cost Matrix Analysis Layer
Network Data Source - https://www.arcgis.com/
Layer Name - Rural Tracts to Inpatient
Travel Mode - Driving Time
Number of Destinations to Find - 1 Time Zone - LOCAL_TIME_AT_LOCATIONS
Line Shape - STRAIGHT_LINES
Network Analyst Layer - Rural Tracts to Inpatient
Ignore Invalid Locations at Solve Time - SKIP
Add Locations
Input Network Analysis Layer - Rural Tracts to Inpatient
Sub Layer - Origins
Input Locations - MDrural_Points
Field Mappings - Name FIPS
Search Tolerance - 20000 Meters
Search Criteria - main.Routing_Streets SHAPE
Find Closest among All Classes - MATCH_TO_CLOSEST
Append to Existing Locations - APPEND
Snap to Network - NO_SNAP
Snap Offset - 5 Meters
Exclude Restricted Portions of the Network - EXCLUDE
Updated Input Network Analysis Layer - Rural Tracts to Inpatient
Allow automatic relocating at solve time - ALLOW
Add Locations
Input Network Analysis Layer - Rural Tracts to Inpatient
Sub Layer - Destinations
Input Locations - Facilities_MDSP
Field Mappings - Name USER_FacilityName
Search Tolerance - 20000 Meters
Search Criteria - main.Routing_Streets SHAPE
Find Closest among All Classes - MATCH_TO_CLOSEST
Append to Existing Locations - APPEND
Snap to Network - NO_SNAP
Snap Offset - 5 Meters
Exclude Restricted Portions of the Network - EXCLUDE
Updated Input Network Analysis Layer - Rural Tracts to Inpatient
Allow automatic relocating at solve time - ALLOW
Solve
Input Network Analysis Layer - Rural Tracts to Inpatient
Ignore Invalid Locations - SKIP
Terminate on Solve Error - TERMINATE
Network Analyst Layer - Rural Tracts to Inpatient
Solve Succeeded - true
Export Features
Input Features - Rural Tracts to Inpatient\Lines
Output Feature Class - Rural_Lines_Inpatient
Use Field Alias as Name - NOT_USE_ALIAS
Calculate Field
Input Table - Rural_Lines_Inpatient
Field Name - FIPS
Expression - !Name![:11]
Expression Type - PYTHON3
Delete Identical
Input Dataset - Rural_Lines_Inpatient
Field(s) - FIPS
XY Tolerance -
Z Tolerance - 0
Updated Input Dataset - Rural_Lines_Inpatient
Append
Input Datasets - Rural_Lines_Inpatient
Target Dataset - Urban_Lines_Inpatient
Field Matching Type - TEST
Updated Target Dataset - Urban_Lines_Inpatient
Join Field
Input Table - MD_ApportionPoly
Input Join Field - GEOID
Join Table - Urban_Lines_Inpatient
Join Table Field - FIPS
Transfer Fields - Name;Total_TravelTime;Total_Miles
Updated Input Table - MD_ApportionPoly
Transfer Method - NOT_USE_FM
Select Layer By Attribute
Input Rows - Facilities_MDSP
Selection Type - NEW_SELECTION
Expression - USER_VeteransOnly = 0 And USER_Setting_Inpatient = 1 And USER_Emer_CrisisIntervention = 1
Updated Layer Or Table View - Facilities_MDSP
Count - 13
Make OD Cost Matrix Analysis Layer
Network Data Source - https://www.arcgis.com/
Layer Name - Urban Tracts to Crisis
Travel Mode - Driving Time
Number of Destinations to Find - 1 Time Zone - LOCAL_TIME_AT_LOCATIONS
Line Shape - STRAIGHT_LINES
Network Analyst Layer - Urban Tracts to Crisis
Ignore Invalid Locations at Solve Time - SKIP
Add Locations
Input Network Analysis Layer - Urban Tracts to Crisis
Sub Layer - Origins
Input Locations - MDurban_Points
Field Mappings - Name FIPS
Search Tolerance - 20000 Meters
Search Criteria - main.Routing_Streets SHAPE
Find Closest among All Classes - MATCH_TO_CLOSEST
Append to Existing Locations - APPEND
Snap to Network - NO_SNAP
Snap Offset - 5 Meters
Exclude Restricted Portions of the Network - EXCLUDE
Updated Input Network Analysis Layer - Urban Tracts to Crisis
Allow automatic relocating at solve time - ALLOW
Add Locations
Input Network Analysis Layer - Urban Tracts to Crisis
Sub Layer - Destinations
Input Locations - Facilities_MDSP
Field Mappings - Name USER_FacilityName
Search Tolerance - 20000 Meters
Search Criteria - main.Routing_Streets SHAPE
Find Closest among All Classes - MATCH_TO_CLOSEST
Append to Existing Locations - APPEND
Snap to Network - NO_SNAP
Snap Offset - 5 Meters
Exclude Restricted Portions of the Network - EXCLUDE
Updated Input Network Analysis Layer - Urban Tracts to Crisis
Allow automatic relocating at solve time - ALLOW
Solve
Input Network Analysis Layer - Urban Tracts to Crisis
Ignore Invalid Locations - SKIP
Terminate on Solve Error - TERMINATE
Network Analyst Layer - Urban Tracts to Crisis
Solve Succeeded - true
Export Features
Input Features - Urban Tracts to Crisis\Lines
Output Feature Class - Urban_Lines_Crisis
Use Field Alias as Name - NOT_USE_ALIAS
Calculate Field
Input Table - Urban_Lines_Crisis
Field Name - FIPS
Expression - !Name![:11]
Expression Type - PYTHON3
Delete Identical
Input Dataset - Urban_Lines_Crisis
Field(s) - FIPS
XY Tolerance -
Z Tolerance - 0
Updated Input Dataset - Urban_Lines_Crisis
Make OD Cost Matrix Analysis Layer
Network Data Source - https://www.arcgis.com/
Layer Name - Rural Tracts to Crisis
Travel Mode - Driving Time
Number of Destinations to Find - 1 Time Zone - LOCAL_TIME_AT_LOCATIONS
Line Shape - STRAIGHT_LINES
Network Analyst Layer - Rural Tracts to Crisis
Ignore Invalid Locations at Solve Time - SKIP
Add Locations
Input Network Analysis Layer - Rural Tracts to Crisis
Sub Layer - Origins
Input Locations - MDrural_Points
Field Mappings - Name FIPS
Search Tolerance - 20000 Meters
Search Criteria - main.Routing_Streets SHAPE
Find Closest among All Classes - MATCH_TO_CLOSEST
Append to Existing Locations - APPEND
Snap to Network - NO_SNAP
Snap Offset - 5 Meters
Exclude Restricted Portions of the Network - EXCLUDE
Updated Input Network Analysis Layer - Rural Tracts to Crisis
Allow automatic relocating at solve time - ALLOW
Add Locations
Input Network Analysis Layer - Rural Tracts to Crisis
Sub Layer - Destinations
Input Locations - Facilities_MDSP
Field Mappings - Name USER_FacilityName
Search Tolerance - 20000 Meters
Search Criteria - main.Routing_Streets SHAPE
Find Closest among All Classes - MATCH_TO_CLOSEST
Append to Existing Locations - APPEND
Snap to Network - NO_SNAP
Snap Offset - 5 Meters
Exclude Restricted Portions of the Network - EXCLUDE
Updated Input Network Analysis Layer - Rural Tracts to Crisis
Allow automatic relocating at solve time - ALLOW
Solve
Input Network Analysis Layer - Rural Tracts to Crisis
Ignore Invalid Locations - SKIP
Terminate on Solve Error - TERMINATE
Network Analyst Layer - Rural Tracts to Crisis
Solve Succeeded - true
Export Features
Input Features - Rural Tracts to Crisis\Lines
Output Feature Class - Rural_Lines_Crisis
Use Field Alias as Name - NOT_USE_ALIAS
Calculate Field
Input Table - Rural_Lines_Crisis
Field Name - FIPS
Expression - !Name![:11]
Expression Type - PYTHON3
Delete Identical
Input Dataset - Rural_Lines_Crisis
Field(s) - FIPS
XY Tolerance -
Z Tolerance - 0
Updated Input Dataset - Rural_Lines_Crisis
Append
Input Datasets - Rural_Lines_Crisis
Target Dataset - Urban_Lines_Crisis
Field Matching Type - TEST
Updated Target Dataset - Urban_Lines_Crisis
Join Field
Input Table - MD_ApportionPoly
Input Join Field - GEOID
Join Table - Urban_Lines_Crisis
Join Table Field - FIPS
Transfer Fields - Name;Total_TravelTime;Total_Miles
Updated Input Table - MD_ApportionPoly
Transfer Method - NOT_USE_FM
Select Layer By Attribute
Input Rows - Facilities_MDSP
Selection Type - NEW_SELECTION
Expression - USER_VeteransOnly = 0
Updated Layer Or Table View - Facilities_MDSP
Count - 230
Make OD Cost Matrix Analysis Layer
Network Data Source - https://www.arcgis.com/
Layer Name - Urban Tracts to MHF
Travel Mode - Driving Time
Number of Destinations to Find - 1 Time Zone - LOCAL_TIME_AT_LOCATIONS
Line Shape - STRAIGHT_LINES
Network Analyst Layer - Urban Tracts to MHF
Ignore Invalid Locations at Solve Time - SKIP
Add Locations
Input Network Analysis Layer - Urban Tracts to MHF
Sub Layer - Origins
Input Locations - MDurban_Points
Field Mappings - Name FIPS
Search Tolerance - 20000 Meters
Search Criteria - main.Routing_Streets SHAPE
Find Closest among All Classes - MATCH_TO_CLOSEST
Append to Existing Locations - APPEND
Snap to Network - NO_SNAP
Snap Offset - 5 Meters
Exclude Restricted Portions of the Network - EXCLUDE
Updated Input Network Analysis Layer - Urban Tracts to MHF
Allow automatic relocating at solve time - ALLOW
Add Locations
Input Network Analysis Layer - Urban Tracts to MHF
Sub Layer - Destinations
Input Locations - Facilities_MDSP
Field Mappings - Name USER_FacilityName
Search Tolerance - 20000 Meters
Search Criteria - main.Routing_Streets SHAPE
Find Closest among All Classes - MATCH_TO_CLOSEST
Append to Existing Locations - APPEND
Snap to Network - NO_SNAP
Snap Offset - 5 Meters
Exclude Restricted Portions of the Network - EXCLUDE
Updated Input Network Analysis Layer - Urban Tracts to MHF
Allow automatic relocating at solve time - ALLOW
Solve
Input Network Analysis Layer - Urban Tracts to MHF
Ignore Invalid Locations - SKIP
Terminate on Solve Error - TERMINATE
Network Analyst Layer - Urban Tracts to MHF
Solve Succeeded - true
Export Features
Input Features - Urban Tracts to MHF\Lines
Output Feature Class - Urban_Lines_MHF
Use Field Alias as Name - NOT_USE_ALIAS
Calculate Field
Input Table - Urban_Lines_MHF
Field Name - FIPS
Expression - !Name![:11]
Expression Type - PYTHON3
Delete Identical
Input Dataset - Urban_Lines_MHF
Field(s) - FIPS
XY Tolerance -
Z Tolerance - 0
Updated Input Dataset - Urban_Lines_MHF
Make OD Cost Matrix Analysis Layer
Network Data Source - https://www.arcgis.com/
Layer Name - Rural Tracts to MHF
Travel Mode - Driving Time
Number of Destinations to Find - 1 Time Zone - LOCAL_TIME_AT_LOCATIONS
Line Shape - STRAIGHT_LINES
Network Analyst Layer - Rural Tracts to MHF
Ignore Invalid Locations at Solve Time - SKIP
Add Locations
Input Network Analysis Layer - Rural Tracts to MHF
Sub Layer - Origins
Input Locations - MDrural_Points
Field Mappings - Name FIPS
Search Tolerance - 20000 Meters
Search Criteria - main.Routing_Streets SHAPE
Find Closest among All Classes - MATCH_TO_CLOSEST
Append to Existing Locations - APPEND
Snap to Network - NO_SNAP
Snap Offset - 5 Meters
Exclude Restricted Portions of the Network - EXCLUDE
Updated Input Network Analysis Layer - Rural Tracts to MHF
Allow automatic relocating at solve time - ALLOW
Add Locations
Input Network Analysis Layer - Rural Tracts to MHF
Sub Layer - Destinations
Input Locations - Facilities_MDSP
Field Mappings - Name USER_FacilityName
Search Tolerance - 20000 Meters
Search Criteria - main.Routing_Streets SHAPE
Find Closest among All Classes - MATCH_TO_CLOSEST
Append to Existing Locations - APPEND
Snap to Network - NO_SNAP
Snap Offset - 5 Meters
Exclude Restricted Portions of the Network - EXCLUDE
Updated Input Network Analysis Layer - Rural Tracts to MHF
Allow automatic relocating at solve time - ALLOW
Solve
Input Network Analysis Layer - Rural Tracts to MHF
Ignore Invalid Locations - SKIP
Terminate on Solve Error - TERMINATE
Network Analyst Layer - Rural Tracts to MHF
Solve Succeeded - true
Export Features
Input Features - Rural Tracts to MHF\Lines
Output Feature Class - Rural_Lines_MHF
Use Field Alias as Name - NOT_USE_ALIAS
Calculate Field
Input Table - Rural_Lines_MHF
Field Name - FIPS
Expression - !Name![:11]
Expression Type - PYTHON3
Delete Identical
Input Dataset - Rural_Lines_MHF
Field(s) - FIPS
XY Tolerance -
Z Tolerance - 0
Updated Input Dataset - Rural_Lines_MHF
Append
Input Datasets - Rural_Lines_MHF
Target Dataset - Urban_Lines_MHF
Field Matching Type - TEST
Updated Target Dataset - Urban_Lines_MHF
Join Field
Input Table - MD_ApportionPoly
Input Join Field - GEOID
Join Table - Urban_Lines_Walkin
Join Table Field - FIPS
Transfer Fields - Name;Total_TravelTime;Total_Miles
Updated Input Table - MD_ApportionPoly
Transfer Method - NOT_USE_FM
Select Layer By Attribute
Input Rows - Facilities_MDSP
Selection Type - NEW_SELECTION
Expression - USER_VeteransOnly = 0 And USER_Setting_Inpatient = 1 And USER_Emer_Walkins = 1
Updated Layer Or Table View - Facilities_MDSP
Count - 15
Make OD Cost Matrix Analysis Layer
Network Data Source - https://www.arcgis.com/
Layer Name - Urban Tracts to Walkin
Travel Mode - Driving Time
Number of Destinations to Find - 1 Time Zone - LOCAL_TIME_AT_LOCATIONS
Line Shape - STRAIGHT_LINES
Network Analyst Layer - Urban Tracts to Walkin
Ignore Invalid Locations at Solve Time - SKIP
Add Locations
Input Network Analysis Layer - Urban Tracts to Walkin
Sub Layer - Origins
Input Locations - MDurban_Points
Field Mappings - Name FIPS
Search Tolerance - 20000 Meters
Search Criteria - main.Routing_Streets SHAPE
Find Closest among All Classes - MATCH_TO_CLOSEST
Append to Existing Locations - APPEND
Snap to Network - NO_SNAP
Snap Offset - 5 Meters
Exclude Restricted Portions of the Network - EXCLUDE
Updated Input Network Analysis Layer - Urban Tracts to Walkin
Allow automatic relocating at solve time - ALLOW
Add Locations
Input Network Analysis Layer - Urban Tracts to Walkin
Sub Layer - Destinations
Input Locations - Facilities_MDSP
Field Mappings - Name USER_FacilityName
Search Tolerance - 20000 Meters
Search Criteria - main.Routing_Streets SHAPE
Find Closest among All Classes - MATCH_TO_CLOSEST
Append to Existing Locations - APPEND
Snap to Network - NO_SNAP
Snap Offset - 5 Meters
Exclude Restricted Portions of the Network - EXCLUDE
Updated Input Network Analysis Layer - Urban Tracts to Walkin
Allow automatic relocating at solve time - ALLOW
Solve
Input Network Analysis Layer - Urban Tracts to Walkin
Ignore Invalid Locations - SKIP
Terminate on Solve Error - TERMINATE
Network Analyst Layer - Urban Tracts to Walkin
Solve Succeeded - true
Export Features
Input Features - Urban Tracts to Walkin\Lines
Output Feature Class - Urban_Lines_Walkin
Use Field Alias as Name - NOT_USE_ALIAS
Calculate Field
Input Table - Urban_Lines_Walkin
Field Name - FIPS
Expression - !Name![:11]
Expression Type - PYTHON3
Delete Identical
Input Dataset - Urban_Lines_Walkin
Field(s) - FIPS
XY Tolerance -
Z Tolerance - 0
Updated Input Dataset - Urban_Lines_Walkin
Make OD Cost Matrix Analysis Layer
Network Data Source - https://www.arcgis.com/
Layer Name - Rural Tracts to Walkin
Travel Mode - Driving Time
Number of Destinations to Find - 1 Time Zone - LOCAL_TIME_AT_LOCATIONS
Line Shape - STRAIGHT_LINES
Network Analyst Layer - Rural Tracts to Walkin
Ignore Invalid Locations at Solve Time - SKIP
Add Locations
Input Network Analysis Layer - Rural Tracts to Walkin
Sub Layer - Origins
Input Locations - MDrural_Points
Field Mappings - Name FIPS
Search Tolerance - 20000 Meters
Search Criteria - main.Routing_Streets SHAPE
Find Closest among All Classes - MATCH_TO_CLOSEST
Append to Existing Locations - APPEND
Snap to Network - NO_SNAP
Snap Offset - 5 Meters
Exclude Restricted Portions of the Network - EXCLUDE
Updated Input Network Analysis Layer - Rural Tracts to Walkin
Allow automatic relocating at solve time - ALLOW
Add Locations
Input Network Analysis Layer - Rural Tracts to Walkin
Sub Layer - Destinations
Input Locations - Facilities_MDSP
Field Mappings - Name USER_FacilityName
Search Tolerance - 20000 Meters
Search Criteria - main.Routing_Streets SHAPE
Find Closest among All Classes - MATCH_TO_CLOSEST
Append to Existing Locations - APPEND
Snap to Network - NO_SNAP
Snap Offset - 5 Meters
Exclude Restricted Portions of the Network - EXCLUDE
Updated Input Network Analysis Layer - Rural Tracts to Walkin
Allow automatic relocating at solve time - ALLOW
Solve
Input Network Analysis Layer - Rural Tracts to Walkin
Ignore Invalid Locations - SKIP
Terminate on Solve Error - TERMINATE
Network Analyst Layer - Rural Tracts to Walkin
Solve Succeeded - true
Export Features
Input Features - Rural Tracts to Walkin\Lines
Output Feature Class - Rural_Lines_Walkin
Use Field Alias as Name - NOT_USE_ALIAS
Calculate Field
Input Table - Rural_Lines_Walkin
Field Name - FIPS
Expression - !Name![:11]
Expression Type - PYTHON3
Delete Identical
Input Dataset - Rural_Lines_Walkin
Field(s) - FIPS
XY Tolerance -
Z Tolerance - 0
Updated Input Dataset - Rural_Lines_Walkin
Append
Input Datasets - Rural_Lines_Walkin
Target Dataset - Urban_Lines_Walkin
Field Matching Type - TEST
Updated Target Dataset - Urban_Lines_Walkin
Join Field
Input Table - MD_ApportionPoly
Input Join Field - GEOID
Join Table - Urban_Lines_Walkin
Join Table Field - FIPS
Transfer Fields - Name;Total_TravelTime;Total_Miles
Updated Input Table - MD_ApportionPoly
Transfer Method - NOT_USE_FM
Export Table
Input Table - MD_ApportionPoly
Output Table - MD_GIS
Use Field Alias as Name - NOT_USE_ALIAS