# Install any of these you don't have with install.packages("pkgname")
library(sf)
library(dplyr)
library(ggplot2)
library(spdep)
library(spatialreg)
library(gtsummary)
library(gt)
library(tmap)
library(knitr)
1. Load and Inspect
Data
data <- st_read("https://drive.google.com/uc?export=download&id=1hxz7coJASXKz-yGC1Z7yVQPsqf8mIBzE")
## Reading layer `geog391_finalproj' from data source
## `https://drive.google.com/uc?export=download&id=1hxz7coJASXKz-yGC1Z7yVQPsqf8mIBzE'
## using driver `GeoJSON'
## Simple feature collection with 10168 features and 7 fields
## Geometry type: MULTIPOLYGON
## Dimension: XY
## Bounding box: xmin: -122.7772 ymin: 25.70759 xmax: -70.93769 ymax: 47.69787
## Geodetic CRS: NAD83
## Rows: 10,168
## Columns: 8
## $ GEOID20 <chr> "06073000400", "06073000500", "0607300060…
## $ redlining <dbl> 3.000000, 2.787630, 3.000000, 3.000000, 4…
## $ env_deprivation_index <dbl> 0.3607128, 0.3600261, 0.3600261, 0.449214…
## $ index_concentration_extremes <dbl> 0.1550, 0.3380, 0.3000, 0.1870, -0.0687, …
## $ walkability <dbl> 13.80, 13.90, 13.90, 15.40, 11.80, 12.90,…
## $ METRO_NAME <chr> "San Diego-Carlsbad, CA", "San Diego-Carl…
## $ median_home_value <dbl> 802500, 1031800, 723300, 1003200, 606200,…
## $ geometry <MULTIPOLYGON [°]> MULTIPOLYGON (((-117.1709 3.…
## [1] "GEOID20" "redlining"
## [3] "env_deprivation_index" "index_concentration_extremes"
## [5] "walkability" "METRO_NAME"
## [7] "median_home_value" "geometry"
2. Select and Prepare
Two Cities
data |>
st_drop_geometry() |>
distinct(METRO_NAME) |>
filter(grepl("Chicago|Denver", METRO_NAME, ignore.case = TRUE))
chicago <- data |> filter(METRO_NAME == "Chicago-Naperville-Elgin, IL-I")
denver <- data |> filter(METRO_NAME == "Denver-Aurora-Lakewood, CO")
nrow(chicago)
## [1] 993
## [1] 103
3. Describe and
Visualize Social Segregation (ICE)
3.1 Descriptive
Statistics Tables
chicago |>
st_drop_geometry() |>
summarise(
Mean = mean(index_concentration_extremes, na.rm = TRUE),
Median = median(index_concentration_extremes, na.rm = TRUE),
SD = sd(index_concentration_extremes, na.rm = TRUE),
Min = min(index_concentration_extremes, na.rm = TRUE),
Max = max(index_concentration_extremes, na.rm = TRUE)
) |>
gt() |>
tab_header(title = "Descriptive Statistics: ICE in Chicago")
| Descriptive Statistics: ICE in Chicago |
| Mean |
Median |
SD |
Min |
Max |
| 0.0327382 |
-0.00282 |
0.3164939 |
-0.778 |
0.811 |
denver |>
st_drop_geometry() |>
summarise(
Mean = mean(index_concentration_extremes, na.rm = TRUE),
Median = median(index_concentration_extremes, na.rm = TRUE),
SD = sd(index_concentration_extremes, na.rm = TRUE),
Min = min(index_concentration_extremes, na.rm = TRUE),
Max = max(index_concentration_extremes, na.rm = TRUE)
) |>
gt() |>
tab_header(title = "Descriptive Statistics: ICE in Denver")
| Descriptive Statistics: ICE in Denver |
| Mean |
Median |
SD |
Min |
Max |
| 0.3184392 |
0.328 |
0.1998287 |
-0.274 |
0.771 |
Interpretation: Chicago’s ICE distribution is nearly centered on
zero (mean = 0.033, median = -0.003) but has a wide spread (SD = 0.316)
and reaches both extremes of the index (min = -0.778, max = 0.811). This
means Chicago has substantial numbers of both intensely low-ICE tracts
(concentrated low-income communities of color) and intensely high-ICE
tracts (concentrated high-income white communities), with the city split
fairly evenly between the two. Denver’s distribution tells a different
story: its mean (0.318) and median (0.328) sit well above zero, and its
spread is considerably tighter (SD = 0.200, range -0.274 to 0.771) —
Denver, on average, leans toward the affluent/white end of the index and
has almost none of the deeply negative-ICE tracts found in Chicago. In
short, Chicago is more polarized between two extremes of concentration,
while Denver is more uniformly concentrated toward one end.
3.2 Maps of ICE
tm_shape(chicago) +
tm_fill("index_concentration_extremes", palette = "RdBu", style = "cont", title = "ICE") +
tm_borders(alpha = 0.3) +
tm_layout(title = "Index of Concentration at the Extremes: Chicago",
legend.outside = TRUE)

tm_shape(denver) +
tm_fill("index_concentration_extremes", palette = "RdBu", style = "cont", title = "ICE") +
tm_borders(alpha = 0.3) +
tm_layout(title = "Index of Concentration at the Extremes: Denver",
legend.outside = TRUE)

Interpretation: Chicago’s map shows a clear geographic split:
high-ICE tracts (blue, affluent/white) form a long, contiguous band
running along the North Side lakefront — communities like Lincoln Park,
Lakeview, and Edgewater while low-ICE tracts (red/orange, low-income
communities of color) dominate the central, west, and south sides of the
city. This lakefront-versus-inland divide closely mirrors Chicago’s
historical “Black Belt” geography and the legacy of HOLC-era redlining,
which concentrated the lowest grades in the same South and West Side
areas that still show the lowest ICE values today (Chicago History
Museum, 2024; Chicago Reporter, 2023). Denver’s map shows a milder
version of a similar west/central concentration of higher ICE, but the
pattern is visually smoother, with fewer sharply bounded extremes and a
couple of isolated lower-ICE patches on the city’s outer edges rather
than one large contiguous low-ICE zone. This is consistent with Denver’s
documented pattern of gentrification reshaping formerly redlined areas
near downtown — such as Five Points — into some of the city’s
higher-value neighborhoods rather than leaving a single, stable dividing
line in place (Planetizen, 2018).
4. Global and Local
Spatial Structure
4.1 Chicago: Moran’s
I and LISA
chicago_clean <- chicago |> filter(!is.na(index_concentration_extremes))
nb_chi <- poly2nb(chicago_clean, queen = TRUE)
lw_chi <- nb2listw(nb_chi, style = "W", zero.policy = TRUE)
moran_chi <- moran.test(chicago_clean$index_concentration_extremes, lw_chi, zero.policy = TRUE)
moran_chi
##
## Moran I test under randomisation
##
## data: chicago_clean$index_concentration_extremes
## weights: lw_chi
## n reduced by no-neighbour observations
##
## Moran I statistic standard deviate = 40.777, p-value < 2.2e-16
## alternative hypothesis: greater
## sample estimates:
## Moran I statistic Expectation Variance
## 0.8066942588 -0.0010152284 0.0003923523
lisa_chi <- localmoran(chicago_clean$index_concentration_extremes, lw_chi, zero.policy = TRUE)
chicago_clean <- chicago_clean |>
mutate(
lisa_I = lisa_chi[, "Ii"],
lisa_p = lisa_chi[, "Pr(z != E(Ii))"],
ice_scaled = scale(index_concentration_extremes)[, 1],
ice_lag = lag.listw(lw_chi, index_concentration_extremes, zero.policy = TRUE),
ice_lag_scaled = scale(ice_lag)[, 1],
quadrant = case_when(
lisa_p >= 0.05 ~ "Not Significant",
ice_scaled > 0 & ice_lag_scaled > 0 ~ "High-High",
ice_scaled < 0 & ice_lag_scaled < 0 ~ "Low-Low",
ice_scaled > 0 & ice_lag_scaled < 0 ~ "High-Low",
ice_scaled < 0 & ice_lag_scaled > 0 ~ "Low-High",
TRUE ~ "Not Significant"
)
)
tm_shape(chicago_clean) +
tm_fill("quadrant",
palette = c("High-High" = "red", "Low-Low" = "blue",
"High-Low" = "pink", "Low-High" = "lightblue",
"Not Significant" = "grey90"),
title = "LISA Cluster") +
tm_borders(alpha = 0.3) +
tm_layout(title = "LISA Clusters: ICE in Chicago", legend.outside = TRUE)

4.2 Denver: Moran’s I
and LISA
denver_clean <- denver |> filter(!is.na(index_concentration_extremes))
nb_den <- poly2nb(denver_clean, queen = TRUE)
lw_den <- nb2listw(nb_den, style = "W", zero.policy = TRUE)
moran_den <- moran.test(denver_clean$index_concentration_extremes, lw_den, zero.policy = TRUE)
moran_den
##
## Moran I test under randomisation
##
## data: denver_clean$index_concentration_extremes
## weights: lw_den
##
## Moran I statistic standard deviate = 7.2258, p-value = 2.491e-13
## alternative hypothesis: greater
## sample estimates:
## Moran I statistic Expectation Variance
## 0.426892904 -0.009803922 0.003652469
lisa_den <- localmoran(denver_clean$index_concentration_extremes, lw_den, zero.policy = TRUE)
denver_clean <- denver_clean |>
mutate(
lisa_I = lisa_den[, "Ii"],
lisa_p = lisa_den[, "Pr(z != E(Ii))"],
ice_scaled = scale(index_concentration_extremes)[, 1],
ice_lag = lag.listw(lw_den, index_concentration_extremes, zero.policy = TRUE),
ice_lag_scaled = scale(ice_lag)[, 1],
quadrant = case_when(
lisa_p >= 0.05 ~ "Not Significant",
ice_scaled > 0 & ice_lag_scaled > 0 ~ "High-High",
ice_scaled < 0 & ice_lag_scaled < 0 ~ "Low-Low",
ice_scaled > 0 & ice_lag_scaled < 0 ~ "High-Low",
ice_scaled < 0 & ice_lag_scaled > 0 ~ "Low-High",
TRUE ~ "Not Significant"
)
)
tm_shape(denver_clean) +
tm_fill("quadrant",
palette = c("High-High" = "red", "Low-Low" = "blue",
"High-Low" = "pink", "Low-High" = "lightblue",
"Not Significant" = "grey90"),
title = "LISA Cluster") +
tm_borders(alpha = 0.3) +
tm_layout(title = "LISA Clusters: ICE in Denver", legend.outside = TRUE)

*Interpretation: Chicago’s ICE ranges from -0.778 to 0.811 with a
mean near zero (0.033) and a standard deviation of 0.316 — a wide,
evenly-spread distribution indicating the city has both intensely
segregated majority-POC/low-income tracts and intensely segregated
majority-white/affluent tracts, with relatively few tracts near the
middle. Denver’s ICE is both higher on average (mean 0.318) and far less
dispersed (SD 0.200, range -0.274 to 0.771) — Denver as a whole leans
toward the affluent/white end of the index and has almost no tracts
approaching Chicago’s most extreme low end. This alone suggests
Chicago’s segregation is more polarized between two extremes, while
Denver’s is better described as a milder, one-sided concentration of
advantage.
The maps confirm this: Chicago shows a large, contiguous high-ICE
band running along the North Side lakefront, a substantial contiguous
low-ICE zone across the central and near-west/south areas, and a smaller
high-ICE pocket further south — a pattern that maps closely onto the
city’s well-documented lakefront/inland divide and its historical Black
Belt geography (Chicago Reporter, 2023; Chicago History Museum, 2024).
Denver’s map shows a comparable west/central concentration of higher
ICE, but the pattern is visually smoother and less starkly bounded,
consistent with a city where gentrification has been actively reshaping
formerly disinvested areas near downtown (Planetizen, 2018) rather than
leaving a single hardened divide in place.
Global Moran’s I confirms this difference numerically and
dramatically: Chicago’s ICE shows extremely strong positive spatial
autocorrelation (I = 0.807, p < 2.2e-16), while Denver’s is
significant but roughly half as strong (I = 0.427, p = 2.49e-13). In
substantive terms, both cities have segregation that is spatially
clustered rather than randomly distributed across tracts — but Chicago’s
clustering is close to the practical ceiling for this kind of index,
indicating segregation operates at the scale of large, contiguous
multi-tract regions, while Denver’s, though still highly significant, is
more localized and patchier.
The LISA maps make this concrete. Chicago’s High-High cluster (red)
is a long, unbroken band running the length of the North Side lakefront,
and its Low-Low cluster (blue) forms one large connected zone through
the central and near-south side — very few tracts fall outside a
significant cluster. Denver’s High-High and Low-Low clusters are
considerably smaller and more scattered, with a large share of the city
(grey, “Not Significant”) showing no detectable local clustering at all.
This reinforces the same conclusion as the global statistic: Chicago’s
segregation is geographically “hardened” into a small number of large
zones, while Denver’s is present but more fragmented and localized — a
difference that becomes central to the discussion of spatial
nonstationarity in Section 7.*
5. Hypotheses on
Spatial Processes
Primary city: Chicago.
Chicago is a useful primary case because it was not just a site where
redlining happened, but one of the places where the practice was
invented — local realtors, appraisers, and university researchers helped
originate the risk-rating methods that HOLC later used nationally
(Digital Scholarship Lab, n.d.-a). Because those grading practices were
built around and reinforced segregation that already existed in the city
(Digital Scholarship Lab, n.d.-a), and because postwar disinvestment in
downgraded areas compounded for decades afterward (Chicago History
Museum, 2024; Chicago Reporter, 2023), I expect both the
redlining–ICE and home value–ICE relationships to be comparatively
strong in Chicago. Federal Reserve Bank of Chicago (n.d.)
research estimates that redlining accounts for roughly 40–50% of the
house-value gap between graded neighborhoods from 1950–1980, and finds
that segregation in the lowest-graded areas continued rising until
fair-housing-era legislation took effect. As a legacy industrial metro
without the rapid, broad-based growth seen in Sunbelt cities, Chicago
has had less market pressure to disrupt these long-settled patterns, so
I expect the historical redlining signal to still show up clearly in
present-day ICE, alongside a strong home-value relationship reflecting
persistent, geographically concentrated disinvestment.
By contrast, in Denver, formerly redlined
neighborhoods close to downtown (e.g., Five Points) have gentrified
enough that several now have higher home values than the city
average (Planetizen, 2018), even though racial disparities in mortgage
lending persist — Denver Black applicants were more than twice as likely
as white applicants to be denied a conventional mortgage as of 2015
(Collective Colorado, 2023). Because rapid growth and gentrification
have partly decoupled historic HOLC grade from present-day home value in
specific tracts, I expect the redlining–ICE relationship to be
comparatively weaker or noisier in Denver relative to Chicago,
while the home value–ICE relationship may still be strong but driven
more by contemporary displacement pressure than by legacy disinvestment
alone.
Third process (primary city): Environmental
deprivation.
- Expected direction: ambiguous/weak, and this is
itself the interesting prediction. Unlike a Sunbelt metro built out
mostly after 1960 in a car-dependent pattern, Chicago has high
walkability in two very different kinds of neighborhoods at once: the
wealthy, majority-white North Side lakefront communities that have
benefited from “back-to-the-city” reinvestment, and the dense,
pre-war grid-pattern South and West Side neighborhoods that were
historically redlined and remain majority-Black and lower-income.
Because dense urban form in Chicago cuts across both ends of the ICE
spectrum rather than tracking cleanly with one end, I expect walkability
to show a comparatively weak relationship with ICE once
redlining and home value are already in the model.
- Expected strength: weak.
- Why it matters here: if walkability turns out to
have little independent explanatory power in Chicago, that itself
supports the idea that Chicago’s segregation is driven overwhelmingly by
the historical redlining/disinvestment channel rather than by
present-day urban form amenities. A contrast worth testing against
Denver, where a fast-growing, more car-oriented development pattern
might make walkability track more cleanly with wealth and, by extension,
with ICE.
6. Model Spatial
Processes
6.1 Standardize
Predictors
standardized_chicago <- chicago_clean |>
mutate(
redlining_z = scale(redlining)[, 1],
home_value_z = scale(median_home_value)[, 1],
var3_z = scale(env_deprivation_index)[, 1] # or scale(walkability)[, 1]
)
standardized_denver <- denver_clean |>
mutate(
redlining_z = scale(redlining)[, 1],
home_value_z = scale(median_home_value)[, 1],
var3_z = scale(env_deprivation_index)[, 1] # or scale(walkability)[, 1]
)
6.2 Primary City OLS
Model (Chicago)
ols_chicago <- lm(index_concentration_extremes ~ redlining_z + home_value_z + var3_z, data = standardized_chicago)
summary(ols_chicago)
##
## Call:
## lm(formula = index_concentration_extremes ~ redlining_z + home_value_z +
## var3_z, data = standardized_chicago)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.90667 -0.13629 0.00879 0.14169 0.63513
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.032738 0.006636 4.933 9.48e-07 ***
## redlining_z -0.053765 0.006813 -7.891 7.89e-15 ***
## home_value_z 0.223688 0.006694 33.415 < 2e-16 ***
## var3_z -0.015916 0.006759 -2.355 0.0187 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.2091 on 989 degrees of freedom
## Multiple R-squared: 0.5647, Adjusted R-squared: 0.5634
## F-statistic: 427.7 on 3 and 989 DF, p-value: < 2.2e-16
Interpretation: In Chicago, all three predictors are
statistically significant, but they differ enormously in size. Home
value has by far the largest coefficient (0.224), meaning a
one-standard-deviation increase in a tract’s median home value is
associated with a 0.224-point increase in ICE by nearly 15 times the
size of the walkability coefficient. Redlining is the second-strongest
predictor (-0.054): more severely redlined tracts (closer to a D grade)
have lower ICE, consistent with the expected direction. Walkability has
a small but significant negative coefficient (-0.016), meaning slightly
more walkable tracts are, on average, slightly more associated with
lower ICE. The opposite of a “walkability = affluence” story, and
consistent with my hypothesis that dense, walkable urban form in Chicago
cuts across both the wealthy North Side and the historically disinvested
South/West Sides rather than tracking cleanly with one end of the
segregation spectrum. The model explains a substantial share of
variation in ICE (R² = 0.565). Overall, this partially confirms my
hypothesis: home value and redlining are both strong and significant as
predicted, but home value — not redlining — turns out to be the dominant
predictor, and walkability’s weak, negative effect matches the “cuts
both ways” reasoning from Section 5 rather than showing no relationship
at all.
6.3 Chicago Residual
Spatial Autocorrelation
standardized_chicago$resid_ols <- residuals(ols_chicago)
nb_chi2 <- poly2nb(standardized_chicago, queen = TRUE)
lw_chi2 <- nb2listw(nb_chi2, style = "W", zero.policy = TRUE)
moran.test(standardized_chicago$resid_ols, lw_chi2, zero.policy = TRUE)
##
## Moran I test under randomisation
##
## data: standardized_chicago$resid_ols
## weights: lw_chi2
## n reduced by no-neighbour observations
##
## Moran I statistic standard deviate = 26.37, p-value < 2.2e-16
## alternative hypothesis: greater
## sample estimates:
## Moran I statistic Expectation Variance
## 0.5210487093 -0.0010152284 0.0003919468
# Only needed if the residual Moran's I above is significant.
sem_chicago <- errorsarlm(
index_concentration_extremes ~ redlining_z + home_value_z + var3_z,
data = standardized_chicago,
listw = lw_chi2,
zero.policy = TRUE
)
summary(sem_chicago)
##
## Call:errorsarlm(formula = index_concentration_extremes ~ redlining_z +
## home_value_z + var3_z, data = standardized_chicago, listw = lw_chi2,
## zero.policy = TRUE)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.5519193 -0.0925687 -0.0037431 0.0674095 0.6428268
##
## Type: error
## Regions with no neighbours included:
## 542 732 787 877 883 907 934
## Coefficients: (asymptotic standard errors)
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 0.0999349 0.0240242 4.1597 3.186e-05
## redlining_z -0.0304092 0.0073203 -4.1541 3.266e-05
## home_value_z 0.0963848 0.0095203 10.1241 < 2.2e-16
## var3_z -0.0020746 0.0076819 -0.2701 0.7871
##
## Lambda: 0.83907, LR test value: 634, p-value: < 2.22e-16
## Asymptotic standard error: 0.017285
## z-value: 48.544, p-value: < 2.22e-16
## Wald statistic: 2356.5, p-value: < 2.22e-16
##
## Log likelihood: 463.8908 for error model
## ML residual variance (sigma squared): 0.018732, (sigma: 0.13686)
## Number of observations: 993
## Number of parameters estimated: 6
## AIC: -915.78, (AIC for lm: -283.78)
*Interpretation: A Moran’s I test on the OLS residuals confirms
substantial unmodeled spatial structure remains: I = 0.521 (p <
2.2e-16) smaller than the raw ICE autocorrelation from Section 4
(0.807), meaning the three predictors do absorb some of Chicago’s
spatial structure, but a large amount is still left over in what the
model can’t explain. The subsequent spatial error model’s Lambda (0.839)
is extremely large and highly significant (LR test p < 2.22e-16),
consistent with this segregation in one tract’s unexplained “leftover”
ICE is strongly predicted by its neighbors’ leftover ICE, exactly what
the near-ceiling global Moran’s I and the still-substantial residual
Moran’s I would suggest.
Accounting for this changes the story meaningfully. The home value
coefficient shrinks by more than half, from 0.224 in the OLS model to
0.096 in the SEM meaning a large share of what looked like a strong
home-value effect in the naive OLS model was actually just reflecting
the fact that home values and ICE are both organized into the same large
contiguous spatial zones (the North Side vs. the central/south side),
not a purely local, tract-by-tract relationship. Redlining also shrinks
(-0.054 to -0.030) but remains statistically significant, suggesting its
effect is partly — but not entirely — a story about broad regional zones
rather than fine-grained tract effects. Walkability, which was weakly
significant in OLS, becomes fully non-significant in the SEM (p =
0.787), indicating its apparent OLS effect was essentially spatial noise
rather than a real local relationship.
The practical conclusion for Chicago: once spatial structure is
properly accounted for, home value remains the strongest predictor of
segregation, but its true independent effect is much smaller than OLS
implied, and walkability drops out entirely as a meaningful
predictor.*
6.4 Second City OLS
Model (Denver)
ols_denver <- lm(index_concentration_extremes ~ redlining_z + home_value_z + var3_z, data = standardized_denver)
summary(ols_denver)
##
## Call:
## lm(formula = index_concentration_extremes ~ redlining_z + home_value_z +
## var3_z, data = standardized_denver)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.33892 -0.07604 0.01329 0.08488 0.26815
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.31844 0.01343 23.717 < 2e-16 ***
## redlining_z -0.05630 0.01921 -2.930 0.00421 **
## home_value_z 0.11428 0.01632 7.001 3.08e-10 ***
## var3_z 0.01540 0.01644 0.936 0.35134
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.1363 on 99 degrees of freedom
## Multiple R-squared: 0.5487, Adjusted R-squared: 0.535
## F-statistic: 40.12 on 3 and 99 DF, p-value: < 2.2e-16
standardized_denver$resid_ols <- residuals(ols_denver)
nb_den2 <- poly2nb(standardized_denver, queen = TRUE)
lw_den2 <- nb2listw(nb_den2, style = "W", zero.policy = TRUE)
moran.test(standardized_denver$resid_ols, lw_den2, zero.policy = TRUE)
##
## Moran I test under randomisation
##
## data: standardized_denver$resid_ols
## weights: lw_den2
##
## Moran I statistic standard deviate = 2.8006, p-value = 0.00255
## alternative hypothesis: greater
## sample estimates:
## Moran I statistic Expectation Variance
## 0.159707324 -0.009803922 0.003663479
# Only needed if the residual Moran's I above is significant.
sem_denver <- errorsarlm(
index_concentration_extremes ~ redlining_z + home_value_z + var3_z,
data = standardized_denver,
listw = lw_den2,
zero.policy = TRUE
)
summary(sem_denver)
##
## Call:errorsarlm(formula = index_concentration_extremes ~ redlining_z +
## home_value_z + var3_z, data = standardized_denver, listw = lw_den2,
## zero.policy = TRUE)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.3086663 -0.0634185 0.0099658 0.0855281 0.2624182
##
## Type: error
## Coefficients: (asymptotic standard errors)
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 0.3181926 0.0208757 15.2422 < 2.2e-16
## redlining_z -0.0472313 0.0207161 -2.2799 0.02261
## home_value_z 0.1071216 0.0159681 6.7085 1.967e-11
## var3_z 0.0027593 0.0195466 0.1412 0.88774
##
## Lambda: 0.40072, LR test value: 7.0465, p-value: 0.0079421
## Asymptotic standard error: 0.1228
## z-value: 3.2633, p-value: 0.0011014
## Wald statistic: 10.649, p-value: 0.0011014
##
## Log likelihood: 64.70715 for error model
## ML residual variance (sigma squared): 0.016109, (sigma: 0.12692)
## Number of observations: 103
## Number of parameters estimated: 6
## AIC: -117.41, (AIC for lm: -112.37)
*Interpretation: Denver’s OLS model also finds all three predictors
in the expected direction, though the pattern of significance differs
from Chicago. Redlining (-0.056) and home value (0.114) are both
significant, while walkability (0.015) is not (p = 0.351) — matching the
Chicago finding that walkability adds little once redlining and home
value are already in the model, though for a different substantive
reason: Denver’s rapid, largely post-industrial growth means walkable
neighborhoods aren’t concentrated in one particular part of the
segregation spectrum the way Chicago’s historically dense grid is. The
model explains a similar share of variance to Chicago’s (R² =
0.549).
Denver’s residual spatial autocorrelation is weaker than Chicago’s
but still present: a Moran’s I test on the OLS residuals is small but
statistically significant (I = 0.160, p = 0.0026) — far smaller than the
raw ICE autocorrelation from Section 4 (0.427), meaning the three
predictors already absorb most of Denver’s spatial structure, but not
quite all of it. The subsequent SEM’s Lambda (0.401) is significant (LR
test p = 0.0079), confirming that a small but real amount of spatial
dependence remains. After correcting for it, home value barely moves
(0.114 to 0.107), redlining weakens somewhat (-0.056 to -0.047) but
stays significant, and walkability remains non-significant. The key
contrast with Chicago: in Denver, home value’s relationship with ICE
holds up almost unchanged once spatial structure is accounted for, while
in Chicago it was cut by more than half. This suggests Denver’s
home-value/segregation relationship is a more genuinely local,
tract-level dynamic, while Chicago’s is substantially a story about
broad contiguous regions.*
6.5 Side-by-Side
Model Comparison Table
library(broom)
chi_tidy <- tidy(ols_chicago) |> mutate(city = "Chicago", model = "OLS")
den_tidy <- tidy(ols_denver) |> mutate(city = "Denver", model = "OLS")
# If you ran SEMs above, add them too:
# chi_sem_tidy <- tidy(sem_chicago) |> mutate(city = "Chicago", model = "SEM")
# den_sem_tidy <- tidy(sem_denver) |> mutate(city = "Denver", model = "SEM")
comparison <- bind_rows(chi_tidy, den_tidy) |>
select(city, model, term, estimate, std.error, p.value)
comparison |>
gt() |>
tab_header(title = "OLS Coefficient Comparison: Chicago vs. Denver") |>
fmt_number(columns = c(estimate, std.error, p.value), decimals = 3)
| OLS Coefficient Comparison: Chicago vs. Denver |
| city |
model |
term |
estimate |
std.error |
p.value |
| Chicago |
OLS |
(Intercept) |
0.033 |
0.007 |
0.000 |
| Chicago |
OLS |
redlining_z |
−0.054 |
0.007 |
0.000 |
| Chicago |
OLS |
home_value_z |
0.224 |
0.007 |
0.000 |
| Chicago |
OLS |
var3_z |
−0.016 |
0.007 |
0.019 |
| Denver |
OLS |
(Intercept) |
0.318 |
0.013 |
0.000 |
| Denver |
OLS |
redlining_z |
−0.056 |
0.019 |
0.004 |
| Denver |
OLS |
home_value_z |
0.114 |
0.016 |
0.000 |
| Denver |
OLS |
var3_z |
0.015 |
0.016 |
0.351 |
7. Cross-City
Comparison and Spatial Nonstationarity
Comparing Chicago and Denver reveals both similarities and
differences that speak directly to spatial nonstationarity — the idea
that the same underlying processes can operate with different strength,
and even different character, depending on where they unfold.
What’s similar across both cities: redlining and
home value are both statistically significant, correctly-signed
predictors of present-day ICE in Chicago and Denver alike, and
walkability is a weak-to-negligible predictor in both. Global Moran’s I
is significant in both cities, and residual spatial autocorrelation is
present in both OLS models, requiring a spatial error model in each
case. In that sense, this comparison confirms the premise laid out in
the assignment: redlining and housing markets are consistently related
to segregation across different urban contexts, even where their
strength differs.
Where the cities diverge, and why:
Strength and character of spatial clustering. Chicago’s
global Moran’s I (0.807) is nearly double Denver’s (0.427), and the LISA
maps show Chicago’s clusters as large, contiguous regions while Denver’s
are smaller and more scattered. This matches the background research:
Chicago is one of the cities where redlining practices were literally
developed, and decades of subsequent disinvestment in downgraded areas
hardened a segregation pattern that has changed relatively little
(Chicago Reporter, 2023; Federal Reserve Bank of Chicago, n.d.). Denver,
by contrast, has seen substantial gentrification in formerly redlined
neighborhoods like Five Points, where home values in some tracts now
exceed the citywide average despite the area’s redlined history
(Planetizen, 2018). This gentrification actively disrupts the tight
spatial correspondence between historical grade and present-day outcome
that persists more cleanly in Chicago, which is consistent with Denver’s
weaker, patchier spatial clustering.
How much of the home-value relationship is really “local.”
This is the most striking difference in the regression results. In
Chicago, correcting for spatial autocorrelation cut the home-value
coefficient by more than half (0.224 to 0.096) — meaning much of the
apparent relationship was really a story about broad regional zones (the
North Side vs. the center/south side) rather than a tract-by-tract
dynamic. In Denver, the home-value coefficient barely moved (0.114 to
0.107) after the same correction. Substantively, this suggests that in
Chicago, home value’s association with segregation is largely inherited
from the same large-scale historical geography that produced the
redlining pattern in the first place, while in Denver, home value
operates more as a genuinely local, tract-level sorting mechanism —
plausibly reflecting Denver’s more piecemeal, block-by-block
gentrification process rather than a single citywide divide.
Redlining’s relative strength. My hypothesis in Section 5
predicted a comparatively stronger redlining-ICE relationship in Chicago
than in Denver, based on Chicago’s status as the origin point of
HOLC-style grading and its longer, more uninterrupted disinvestment
trajectory. The results only partly support this: in the raw OLS models
the two cities’ redlining coefficients are nearly identical (Chicago
-0.054, Denver -0.056), and after correcting for spatial
autocorrelation, Denver’s redlining effect (-0.047) is actually slightly
larger than Chicago’s (-0.030). This is a meaningful revision
to my hypothesis — it suggests that even in a rapidly gentrifying city
like Denver, the historical redlining signal has not been fully erased
by contemporary housing-market change, and may in fact be more “locally”
detectable there once the broader spatial structure is accounted for,
rather than being diluted the way I initially expected.
Why walkability underperforms in both cities. Walkability
was a weak, largely non-significant predictor in both cities, but for
related reasons. In Chicago, dense walkable urban form exists in both
the wealthiest lakefront communities and the historically disinvested
South and West Side neighborhoods, so it doesn’t track cleanly with one
end of the ICE spectrum — exactly the “cuts both ways” pattern
hypothesized in Section 5. Denver’s rapid growth has produced a less
spatially concentrated pattern of walkable development, so walkability
doesn’t map onto segregation there either, though for a more structural
reason (newer, more dispersed urban form) rather than Chicago’s specific
double-sided history.
Spatial nonstationarity, summarized: the same two
“known” processes — redlining and housing markets — are present and
significant in both cities, exactly as the literature would predict, but
the mechanism through which they operate differs. In Chicago,
segregation is best understood as a large-scale, historically hardened
regional divide where local nuance from home value gets substantially
absorbed by that broader spatial structure. In Denver, segregation is
more genuinely local and patchwork, consistent with a city undergoing
active, uneven gentrification rather than one where a single historical
dividing line still dominates. This is a clear demonstration that the
same spatial processes can produce meaningfully different outcomes
depending on a city’s growth trajectory and history — the core idea of
spatial nonstationarity that this assignment set out to test.