As seen in the Analysis of Neighborhood Changes, Chandler is a unique city with many different neighborhoods. Gentrification may be changing those different neighborhoods, but are Community Land Trusts slowing the gentrification?
To evaluate Community Land Trusts, we will analyze neighborhoods that are not gentrifying in the City of Chandler and then specifically evaluate neighborhoods with Community Land Trusts.
We need to set up the data and analysis completed in the Analysis of Neighborhood Changes.
By analyzing specific 2000 census data, we can predict neighborhoods that won’t gentrify if given the opportunity. First we must establish what consists of a neighborhood that can be a candidate for gentrification using median income. By finding tracts that have a lower 2010 income than the 2000 income adjusted for inflation, we can speculate that the tract might have potential for gentrification.
Next, we need to establish which factors signify whether a neighborhood has been gentrified. The following variables were used for this process:
Less Uneducated: We look for neighborhoods that show a decrease in uneducated people as a signal for gentrification.
Less Poverty: We look at neighborhoods that show a decrease in poverty in the ten year span as an indicator for gentrification.
Less Poverty for Families with Children: We look at neighborhoods that show a decrease in family poverty in the ten year span as an indicator for gentrification.
Less Renters: We look at tracts that have a decrease in renters, singifying that people are more likely moving into housing units instead, showing possible gentrification.
Less Minority: We look at tracts that have a decrease in minority population, signifying that white individuals are moving in and displacing minority individuals.
To analyze gentrification, we need to determine which neighborhoods have the ability to gentrify and then determine which of those eligible neighborhoods did gentrify. These logic variables create a threshold for determining gentrification and then are used to filter for gentrified neighborhoods.
# education status
# poverty
# family poverty
# % renters
# % color
## tracts that did not gentrify
# proportion of college educated decreased
less.educated <- d$p.col.edu.change < 0
# proportion of poverty stayed the same or increased
more.poverty <- d$pov.change >= 0
# proportion of family poverty stayed the same or increased
more.fam.poverty <- d$pov.fam.change >= 0
# proportion of renters stayed the same or increased
more.renters <- d$p.rent.change >= 0
# proportion of minority stayed the same or increased
more.minority <- d$p.color.change >= 0
# Create logic variables that signify what were looking for
# income less than median
lower.income <- d$pay.00 > d$pay.10
g.flag <- lower.income & less.educated & more.poverty & more.fam.poverty & more.renters & more.minority
# Create subsets of the candidates and the gentrified tracts
d_candidates <- d[lower.income,]
d_nogentrified <- d[g.flag,]
d_nogentrified <- na.omit(d_nogentrified)
# Add up how many candidates and how many gentirfied tracts
num.candidates <- sum( lower.income, na.rm=T )
num.nogentrified <- sum( g.flag, na.rm=T )
Looking at a summary of the candidates for gentrification below, we can see the overall demographics of the neighborhoods. We see a high percentage of individuals who are white that decreases from 2000 to 2010, an increase in education, an increase in renters, and a decrease in pay.
d_candidates <- data.frame(d_candidates)
stargazer( d_candidates,
type="html",
digits=0,
summary.stat = c("min", "p25","median","mean","p75","max") )
Statistic | Min | Pctl(25) | Median | Mean | Pctl(75) | Max |
mhv.00 | 118,547 | 153,531 | 176,274 | 183,273 | 213,577 | 278,327 |
mhv.10 | 82,800 | 160,400 | 203,200 | 218,623 | 252,950 | 421,800 |
mhv.change | -35,747 | 11,089 | 26,952 | 35,350 | 57,004 | 188,057 |
mhv.growth | -30 | 7 | 15 | 18 | 28 | 80 |
p.white.00 | 32 | 69 | 72 | 69 | 77 | 97 |
p.black.00 | 1 | 3 | 3 | 4 | 4 | 7 |
p.hisp.00 | 2 | 11 | 15 | 21 | 23 | 61 |
p.asian.00 | 1 | 2 | 4 | 5 | 6 | 12 |
p.native.00 | 0 | 1 | 1 | 1 | 2 | 3 |
p.white.10 | 20 | 55 | 65 | 61 | 69 | 96 |
p.black.10 | 0 | 4 | 5 | 5 | 7 | 10 |
p.hisp.10 | 2 | 13 | 17 | 23 | 26 | 71 |
p.asian.10 | 1 | 5 | 7 | 9 | 11 | 53 |
p.native.10 | 0 | 1 | 1 | 2 | 2 | 3 |
p.color.00 | 3 | 23 | 28 | 31 | 31 | 68 |
p.color.10 | 4 | 31 | 35 | 39 | 45 | 80 |
p.col.edu.00 | 10 | 23 | 34 | 32 | 40 | 51 |
p.col.edu.10 | 8 | 28 | 36 | 36 | 46 | 61 |
pov.rate.00 | 0 | 2 | 4 | 6 | 7 | 22 |
pov.rate.10 | 0 | 5 | 8 | 12 | 11 | 85 |
pov.fam.00 | 0 | 1 | 2 | 4 | 5 | 15 |
pov.fam.10 | 0 | 0 | 4 | 6 | 7 | 28 |
p.rent.00 | 1 | 13 | 20 | 24 | 33 | 58 |
p.rent.10 | 6 | 22 | 33 | 35 | 45 | 83 |
pay.00 | 46,229 | 60,588 | 77,216 | 75,635 | 91,559 | 108,727 |
pay.10 | 37,784 | 49,621.5 | 62,964 | 64,969 | 78,661 | 104,559 |
pop.total.00 | 180,222 | 180,222 | 180,222 | 180,222 | 180,222 | 180,222 |
pop.total.10 | 241,278 | 241,278 | 241,278 | 241,278 | 241,278 | 241,278 |
pop.growth | 0 | 0 | 0 | 0 | 0 | 0 |
pay.change | -35,120 | -14,181 | -9,927 | -10,666 | -5,136 | -1,200 |
p.color.change | -3 | 6 | 10 | 10 | 12 | 39 |
pov.change | -7 | 1 | 3 | 5 | 7 | 82 |
pov.fam.change | -5 | -0 | 2 | 3 | 4 | 14 |
p.col.edu.change | -15 | -1 | 2 | 4 | 7 | 36 |
p.rent.change | -6 | 5 | 9 | 12 | 15 | 54 |
Looking at a summary of the neighborhoods that did not gentrify below, we can see the comparison to the candidate demographics. We see a higher percentage of minority change, higher rate of poverty, higher rate of family poverty, less education, and more renters - all indicators of gentrification not happening.
d_nogentrified <- data.frame(d_nogentrified)
stargazer( d_nogentrified,
type="html",
digits=0,
summary.stat = c("min", "p25","median","mean","p75","max") )
Statistic | Min | Pctl(25) | Median | Mean | Pctl(75) | Max |
mhv.00 | 118,547 | 148,505 | 176,274 | 170,299 | 188,257 | 215,832 |
mhv.10 | 82,800 | 159,100 | 195,100 | 189,964 | 218,750 | 259,500 |
mhv.change | -35,747 | 10,595 | 18,826 | 19,664 | 37,854 | 66,346 |
mhv.growth | -30 | 7 | 12 | 10 | 19 | 34 |
p.white.00 | 32 | 69 | 72 | 70 | 77 | 83 |
p.black.00 | 2 | 3 | 4 | 4 | 5 | 6 |
p.hisp.00 | 11 | 12 | 15 | 19 | 19 | 61 |
p.asian.00 | 1 | 3 | 4 | 5 | 6 | 10 |
p.native.00 | 1 | 1 | 1 | 1 | 2 | 2 |
p.white.10 | 20 | 55 | 65 | 58 | 67 | 71 |
p.black.10 | 5 | 5 | 7 | 6 | 8 | 8 |
p.hisp.10 | 13 | 16 | 21 | 25 | 25 | 71 |
p.asian.10 | 1 | 6 | 8 | 8 | 10 | 13 |
p.native.10 | 1 | 2 | 2 | 2 | 2 | 3 |
p.color.00 | 17 | 23 | 28 | 30 | 31 | 68 |
p.color.10 | 29 | 33 | 35 | 42 | 45 | 80 |
p.col.edu.00 | 10 | 26 | 35 | 33 | 40 | 51 |
p.col.edu.10 | 8 | 24 | 30 | 30 | 37 | 51 |
pov.rate.00 | 0 | 2 | 3 | 5 | 5 | 21 |
pov.rate.10 | 4 | 7 | 10 | 11 | 12 | 29 |
pov.fam.00 | 0 | 0 | 2 | 3 | 3 | 15 |
pov.fam.10 | 2 | 5 | 6 | 9 | 8 | 27 |
p.rent.00 | 1 | 13 | 30 | 26 | 36 | 50 |
p.rent.10 | 14 | 27 | 37 | 39 | 52 | 68 |
pay.00 | 46,229 | 64,686 | 72,481 | 72,360 | 81,963 | 91,760 |
pay.10 | 39,085 | 49,621.5 | 62,964 | 60,428 | 69,846 | 79,688 |
pop.total.00 | 180,222 | 180,222 | 180,222 | 180,222 | 180,222 | 180,222 |
pop.total.10 | 241,278 | 241,278 | 241,278 | 241,278 | 241,278 | 241,278 |
pop.growth | 0 | 0 | 0 | 0 | 0 | 0 |
pay.change | -27,662 | -14,129 | -10,573 | -11,932 | -7,030 | -3,591 |
p.color.change | 7 | 10 | 12 | 12 | 13 | 23 |
pov.change | 2 | 5 | 6 | 6 | 8 | 9 |
pov.fam.change | 2 | 3 | 4 | 6 | 7 | 12 |
p.col.edu.change | -6 | -4 | -2 | -3 | -1 | -0 |
p.rent.change | 3 | 7 | 13 | 13 | 16 | 37 |
There were 39 neighborhoods that were candidates for gentrification. Of these, 11 did not gentrify (approximately 28%).
## [1] 39
## [1] 0.2820513
We will now compare neighborhoods where Community Land Trust homes reside to the neighborhoods that did not gentrify to see if there is a correlation between the two groups by uploading the Community Land Trust data, merging, and sorting.
Looking at a summary of the tracts that contain Community Land Trust homes below, we can see the overall demographics of the neighborhoods. We see on average a 3% increase in educated invdividuals, a 5% increase in poverty, 4% increase in family poverty, 7% increase in renter, and a 9% increase in minorities. On average, the income from 2000 to 2010 decreases by $7,700.
d_clt <- filter(d_clt, Number.CLT.Houses > 0)
d_clt <- data.frame(d_clt)
stargazer( d_clt,
type="html",
digits=0,
summary.stat = c("min", "p25","median","mean","p75","max") )
Statistic | Min | Pctl(25) | Median | Mean | Pctl(75) | Max |
mhv.00 | 118,547 | 139,163 | 150,503 | 153,069 | 167,664 | 198,694 |
mhv.10 | 82,800 | 153,200 | 172,100 | 172,189 | 193,300 | 249,100 |
mhv.change | -35,747 | 13,535 | 16,914 | 19,121 | 27,115 | 78,320 |
mhv.growth | -30 | 9 | 12 | 12 | 18 | 46 |
p.white.00 | 32 | 53 | 71 | 63 | 76 | 80 |
p.black.00 | 2 | 3 | 4 | 4 | 4 | 7 |
p.hisp.00 | 11 | 14 | 21 | 27 | 40 | 61 |
p.asian.00 | 1 | 2 | 3 | 4 | 6 | 7 |
p.native.00 | 1 | 1 | 1 | 2 | 2 | 3 |
p.white.10 | 20 | 42 | 58 | 54 | 67 | 70 |
p.black.10 | 3 | 5 | 5 | 6 | 7 | 9 |
p.hisp.10 | 14 | 18 | 25 | 33 | 44 | 71 |
p.asian.10 | 1 | 4 | 6 | 6 | 7 | 11 |
p.native.10 | 1 | 1 | 2 | 2 | 2 | 3 |
p.color.00 | 20 | 24 | 29 | 37 | 47 | 68 |
p.color.10 | 30 | 33 | 42 | 46 | 58 | 80 |
p.col.edu.00 | 10 | 19 | 24 | 25 | 34 | 44 |
p.col.edu.10 | 8 | 20 | 28 | 28 | 33 | 46 |
pov.rate.00 | 1 | 4 | 6 | 9 | 14 | 22 |
pov.rate.10 | 3 | 8 | 10 | 14 | 19 | 34 |
pov.fam.00 | 0 | 2 | 4 | 6 | 8 | 15 |
pov.fam.10 | 2 | 4 | 6 | 10 | 12 | 28 |
p.rent.00 | 4 | 16 | 32 | 29 | 39 | 58 |
p.rent.10 | 14 | 28 | 34 | 36 | 49 | 57 |
pay.00 | 46,229 | 57,585 | 62,173 | 65,768 | 74,650 | 95,568 |
pay.10 | 39,085 | 47,106 | 56,929 | 58,068 | 64,019.5 | 95,673 |
pop.total.00 | 180,222 | 180,222 | 180,222 | 180,222 | 180,222 | 180,222 |
pop.total.10 | 241,278 | 241,278 | 241,278 | 241,278 | 241,278 | 241,278 |
pop.growth | 0 | 0 | 0 | 0 | 0 | 0 |
pay.change | -17,901 | -10,687 | -7,690 | -7,700 | -4,131 | 2,902 |
p.color.change | -3 | 7 | 10 | 9 | 12 | 16 |
pov.change | -0 | 2 | 5 | 5 | 8 | 13 |
pov.fam.change | -1 | 1 | 3 | 4 | 7 | 14 |
p.col.edu.change | -5 | -2 | 2 | 3 | 7 | 13 |
p.rent.change | -6 | 4 | 8 | 7 | 10 | 16 |
Census.Tract | 422,209 | 522,903.5 | 523,102 | 613,214 | 810,800 | 811,700 |
Number.CLT.Houses | 1 | 1 | 2 | 3 | 3.5 | 15 |
After merging the candidate tracts with the tracts that contain Community Land Trusts, 16 of the 19 tracts were both candidate tracts and contained Community Land Trust homes. We can take a closer look at those tracts displayed below.
Of the 16 census tracts that contain Community Land Trust homes and were candidates, 6 of the tracts were also identified as tracts that did not gentrify. Comparatively, 5 of the tracts that did not contain Community Land Trust homes did not gentrify.
Comparatively to the candidate tracts, non-gentrified tracts with Community Land Trusts had slightly more poverty but less renters. The home value is slightly lower in these non-gentrified tracts, but saw similar rates of growth. The percent of minorities is relatively the same, but the percent of uneducated is higher.
d_nogent_clt <- data.frame(nogent_clt)
stargazer( d_nogent_clt,
type="html",
digits=0,
summary.stat = c("min", "p25","median","mean","p75","max") )
Statistic | Min | Pctl(25) | Median | Mean | Pctl(75) | Max |
Census.Tract | 422,209 | 447,390 | 523,003 | 585,439 | 738,950.8 | 811,300 |
Number.CLT.Houses | 1 | 1 | 1.5 | 2 | 2.8 | 6 |
mhv.00 | 118,547 | 137,295 | 159,587 | 155,528 | 176,564 | 183,361 |
mhv.10 | 82,800 | 152,475 | 175,400 | 170,417 | 207,325 | 226,100 |
mhv.change | -35,747 | 13,593 | 17,400 | 14,889 | 30,761 | 42,739 |
mhv.growth | -30 | 9 | 11 | 7 | 18 | 23 |
p.white.00 | 32 | 68 | 72 | 67 | 77 | 80 |
p.black.00 | 3 | 4 | 4 | 4 | 4 | 6 |
p.hisp.00 | 12 | 13 | 15 | 23 | 20 | 61 |
p.asian.00 | 2 | 3 | 4 | 4 | 6 | 7 |
p.native.00 | 1 | 1 | 1 | 1 | 2 | 2 |
p.white.10 | 20 | 55 | 61 | 56 | 67 | 70 |
p.black.10 | 5 | 5 | 6 | 6 | 8 | 8 |
p.hisp.10 | 14 | 18 | 22 | 29 | 26 | 71 |
p.asian.10 | 1 | 4 | 8 | 7 | 9 | 11 |
p.native.10 | 1 | 2 | 2 | 2 | 2 | 3 |
p.color.00 | 20 | 23 | 28 | 33 | 32 | 68 |
p.color.10 | 30 | 33 | 39 | 44 | 45 | 80 |
p.col.edu.00 | 10 | 21 | 26 | 28 | 36 | 44 |
p.col.edu.10 | 8 | 20 | 24 | 25 | 32 | 39 |
pov.rate.00 | 1 | 2 | 4 | 6 | 5 | 21 |
pov.rate.10 | 6 | 9 | 11 | 13 | 12 | 29 |
pov.fam.00 | 0 | 1 | 2 | 4 | 2 | 15 |
pov.fam.10 | 4 | 6 | 7 | 10 | 8 | 27 |
p.rent.00 | 6 | 15 | 33 | 28 | 37 | 50 |
p.rent.10 | 14 | 26 | 43 | 38 | 49 | 54 |
pay.00 | 46,229 | 59,619 | 67,028 | 67,505 | 76,124 | 88,436 |
pay.10 | 39,085 | 52,026.2 | 59,946.5 | 59,719 | 69,222 | 77,634 |
pop.total.00 | 180,222 | 180,222 | 180,222 | 180,222 | 180,222 | 180,222 |
pop.total.10 | 241,278 | 241,278 | 241,278 | 241,278 | 241,278 | 241,278 |
pop.growth | 0 | 0 | 0 | 0 | 0 | 0 |
pay.change | -10,802 | -9,852 | -7,417 | -7,786 | -6,972 | -3,591 |
p.color.change | 7 | 10 | 12 | 11 | 13 | 13 |
pov.change | 5 | 6 | 7 | 7 | 8 | 9 |
pov.fam.change | 3 | 4 | 5 | 6 | 7 | 12 |
p.col.edu.change | -5 | -4 | -2 | -3 | -2 | -1 |
p.rent.change | 4 | 6 | 9 | 9 | 12 | 16 |
Comparatively to the candidate tracts, non-gentrified tracts with Community Land Trusts had slightly more poverty but less renters. The home value is slightly lower in these non-gentrified tracts, but saw similar rates of growth. The percent of minorities is relatively the same, but the percent of uneducated is higher.
We can evaluate the non-gentrified tracts without Community Land Trusts to the non-gentrified tracts with Community Land Trusts to see the impact of the Community Land Trusts in part. The home value change is higher in these non-gentrified tracts as well as the home growth. The poverty rate, family poverty rate, and education are all lower than tracts with Community Land Trusts. However, the proportion of renters and minorities are higher.
d_nogent_noclt <- data.frame(d_nogent_noclt)
stargazer( d_nogent_noclt,
type="html",
digits=0,
summary.stat = c("min", "p25","median","mean","p75","max") )
Statistic | Min | Pctl(25) | Median | Mean | Pctl(75) | Max |
mhv.00 | 154,111 | 165,708 | 193,154 | 188,025 | 211,322 | 215,832 |
mhv.10 | 162,500 | 188,000 | 200,300 | 213,420 | 256,800 | 259,500 |
mhv.change | -11,022 | 8,389 | 22,292 | 25,395 | 40,968 | 66,346 |
mhv.growth | -5 | 5 | 13 | 13 | 19 | 34 |
p.white.00 | 70 | 71 | 72 | 74 | 76 | 83 |
p.black.00 | 2 | 2 | 3 | 4 | 5 | 5 |
p.hisp.00 | 11 | 12 | 14 | 15 | 17 | 21 |
p.asian.00 | 1 | 4 | 5 | 5 | 5 | 10 |
p.native.00 | 1 | 1 | 1 | 2 | 2 | 2 |
p.white.10 | 48 | 59 | 65 | 62 | 66 | 71 |
p.black.10 | 5 | 5 | 7 | 6 | 7 | 8 |
p.hisp.10 | 13 | 16 | 19 | 21 | 22 | 35 |
p.asian.10 | 5 | 7 | 8 | 9 | 10 | 13 |
p.native.10 | 1 | 2 | 2 | 2 | 2 | 3 |
p.color.00 | 17 | 24 | 28 | 26 | 29 | 30 |
p.color.10 | 29 | 34 | 35 | 38 | 41 | 52 |
p.col.edu.00 | 31 | 35 | 39 | 39 | 40 | 51 |
p.col.edu.10 | 29 | 30 | 36 | 37 | 39 | 51 |
pov.rate.00 | 0 | 1 | 2 | 4 | 6 | 11 |
pov.rate.10 | 4 | 4 | 8 | 9 | 10 | 20 |
pov.fam.00 | 0 | 0 | 0 | 2 | 3.6 | 5 |
pov.fam.10 | 2 | 3 | 6 | 7 | 7 | 17 |
p.rent.00 | 1 | 17 | 18 | 23 | 30 | 50 |
p.rent.10 | 17 | 32 | 32 | 41 | 55 | 68 |
pay.00 | 62,817 | 72,481 | 78,946 | 78,186 | 84,927 | 91,760 |
pay.10 | 44,819 | 48,851 | 64,653 | 61,279 | 68,384 | 79,688 |
pop.total.00 | 180,222 | 180,222 | 180,222 | 180,222 | 180,222 | 180,222 |
pop.total.10 | 241,278 | 241,278 | 241,278 | 241,278 | 241,278 | 241,278 |
pop.growth | 0 | 0 | 0 | 0 | 0 | 0 |
pay.change | -27,662 | -23,376 | -14,293 | -16,907 | -13,966 | -5,239 |
p.color.change | 7 | 10 | 12 | 13 | 12 | 23 |
pov.change | 2 | 2 | 4 | 5 | 8 | 9 |
pov.fam.change | 2 | 2 | 3 | 5 | 7 | 12 |
p.col.edu.change | -6 | -3 | -1 | -2 | -1 | -0 |
p.rent.change | 3 | 15 | 16 | 18 | 18 | 37 |
To view the mapping, we must first upload a mapping package and merge with the selected Chandler data. To see the comparison, we can map the tracts that contain Community Land Trust homes, the non-gentrified tracts, and where the two overlap - the non-gentrified tracts that contain Community Land Trust homes.
# we have Maricopa County already packaged and on GitHub for easy load:
github.url <- "https://raw.githubusercontent.com/DS4PS/cpp-529-master/master/data/phx_dorling.geojson"
phx <- geojson_read( x=github.url, what="sp" )
clt_map <- readRDS( here("/data/rodeo/ChandlerCensusMap.rds" ))
data_map_clt <- clt_map
# create small dataframe for the merge
df1 <- data.frame( data_map_clt )
# create GEOID that matches GIS format
# create a geoID for merging by tract
df1$GEOID <- substr( df1$tractid, 6, 18 ) # extract codes
df1$GEOID <- gsub( "-", "", df1$GEOID ) # remove hyphens
clt_map <- merge( phx, df1, by.x="GEOID", by.y="GEOID" )
clt_map <- spTransform( clt_map, CRS("+init=epsg:3395") )
bb <- st_bbox( c( xmin = -12470000, xmax = -12431368,
ymax = 3925924, ymin = 3880074 ),
crs = st_crs("+init=epsg:3395"))
clt_map1 <-
tm_shape( clt_map, bbox=bb ) +
tm_polygons( col=c("CLT.Homes", "Not.Gentrified", "Nogent.CLT"),
n=2, ncol=2, style="quantile", palette="Spectral" ) +
tm_layout( "Dorling Cartogram", title.position=c("right","top"), legend.position = c("left", "bottom") )
clt_map1