Summary

This data notebook provides evidence for information in The Blade package on evictions in the Toledo, Ohio area, specifically by Lucas Metropolitan Housing (LMH). For each line in the package that relied on original data analysis, this notebook includes the line from the story, a brief contextual discussion, and the R code that produced that finding and the code output.

Data loading, cleaning and transformation takes place in a supplementary document that also has additional details about data sources.

Load Libraries

Code to load necessary libraries. Click “Code” button to view.

Load Data

The LMH eviction filing database The Blade used in its reporting was created using three sources. First, a team of reporters gathered local eviction filings by LMH over the last five years across Toledo and Sylvania courts, the two cities in which LMH has housing communities in Ohio. Toledo’s documents are available for download online, and Sylvania’s were only available as hard copies housed in the suburb’s courthouse. Reporters then created data sets for each city using those documents while following the same rubric, and using court document language to create appropriate categories. Meanwhile digital reporters used Toledo’s online court database to gather information on every eviction filing in the city from 2015 onward. We then joined the two data sets together to create one comprehensive LMH eviction filing database.

In the below analyses, evictions filed in 2020 are filtered out. There are two reasons for this. First, only half a year’s worth of data was gathered for 2020 due to resources and time constraints. Second, this year’s coronavirus pandemic meant the U.S. saw unprecedented housing policy, as the CARES Act suspended evictions nationwide for several months and LMH passed emergency policies to extend that suspension locally. Therefore, our team felt in both cases that an analysis of 2020 may lead to erroneous conclusions.

Click “Code” button to view scripts to load data.

### Load scraped cases data
scraped_cases_toledo_2015_2020 <- read_csv("../data/input_data/scraped_court_records/sta_oh_toledo_2015_2020.csv") %>%
  mutate(plaintiff = tolower(plaintiff))

cleaned_scraped_cases_toledo_2015_2020_landlord_analysis <- read_csv("../data/input_data/scraped_court_records/cleaned_scraped_cases_toledo_2015_2020_landlord_analysis.csv") %>%
  mutate(plaintiff = tolower(plaintiff))

#Begin loading cases from Toledo Municipal Court documents
### Load manually-compiled case details from Toledo and Sylvania
lmha_manual_cases_2020 <- read_sheet("1TIMCQIiAofxFksrP8hXbg1YQ2s4nJGgLgaWBniBpnkw", sheet="2020") %>%
  select(-bedrooms, -`Defendant Attorney`, -`Monthly rent`, -`Net Monthly Rent`)

lmha_manual_cases_2019 <- read_sheet("1TIMCQIiAofxFksrP8hXbg1YQ2s4nJGgLgaWBniBpnkw", sheet="2019") %>%
  select(-bedrooms, -`Defendant Attorney`, -`Monthly rent`, -`Net Monthly Rent`)

lmha_manual_cases_2018 <- read_sheet("1TIMCQIiAofxFksrP8hXbg1YQ2s4nJGgLgaWBniBpnkw", sheet="2018") %>%
  select(-bedrooms, -`Defendant Attorney`, -`Monthly rent`, -`Net Monthly Rent`)

lmha_manual_cases_2017 <- read_sheet("1TIMCQIiAofxFksrP8hXbg1YQ2s4nJGgLgaWBniBpnkw", sheet="2017") %>%
  select(-bedrooms, -`Defendant Attorney`, -`Monthly rent`, -`Net Monthly Rent`)

lmha_manual_cases_2016 <- read_sheet("1TIMCQIiAofxFksrP8hXbg1YQ2s4nJGgLgaWBniBpnkw", sheet="2016") %>%
  select(-bedrooms, -`Defendant Attorney`, -`Monthly rent`, -`Net Monthly Rent`)

lmha_manual_cases_2015 <- read_sheet("1TIMCQIiAofxFksrP8hXbg1YQ2s4nJGgLgaWBniBpnkw", sheet="2015") %>%
  select(-bedrooms, -`Defendant Attorney`, -`Monthly rent`, -`Net Monthly Rent`)

#End loading cases from Toledo Municipal Court documents
#Begin loading cases from Sylvania Court documents

lmha_manual_cases_sylvania <- read_sheet("1U65ybBOK3g7CHOgUqNtd4HdfNTyK4nNwDhGe8LHkSZs", sheet="original") %>%
  select(-bedrooms, -`Defendant Attorney`, -`Monthly rent`, -`Net Monthly Rent`) %>%
  clean_names() %>%
  #file year
  mutate(file_year = year(date_filed)) %>%
  select(file_year, everything()) %>%
  mutate(file_source = "sylvania") %>%
  select(-dob, -move_in_date) 

#End loading cases from Sylvania Court documents
#Begin binding together LMH c
  

lmha_manual_plus_scraped_cases_2015_2020 <- lmha_manual_cases_2020 %>%
  bind_rows(lmha_manual_cases_2019) %>%
  bind_rows(lmha_manual_cases_2018) %>%
  bind_rows(lmha_manual_cases_2017) %>%
  bind_rows(lmha_manual_cases_2016) %>%
  bind_rows(lmha_manual_cases_2015) %>%
  clean_names() %>%
  filter(!is.na(case_number)) %>%
  select(-dob, -move_in_date) %>%
  mutate(file_source =
           "toledo") %>%
  mutate(case_number = tolower(case_number)) %>%
  select(-address, -plaintiff_attorney) %>%
  left_join(scraped_cases_toledo_2015_2020, by=c("case_number")) %>%
  #select(defendant.x, defendant.y) %>%
  unite(defendant, defendant.y, defendant.x, na.rm = TRUE) %>%
  mutate(defendant = case_when(str_detect(defendant, "^NA_")~str_remove(defendant, "NA_"),
                               
                               TRUE~gsub("_.*","",defendant))) %>%
  unite(plaintiff, plaintiff.x, plaintiff.y, na.rm = TRUE) %>%
  mutate(plaintiff = case_when(str_detect(plaintiff, "_")~str_remove(plaintiff, "LUCAS METROPOLITAN HOUSING AUTHORITY_"),
                               
                               TRUE~gsub("_.*","",plaintiff))) %>%
  mutate(plaintiff = str_replace(plaintiff, "LUCAS METROPOLITAN HOUSING AUTHORITY", "lucas metropolitan housing authority")) %>%
  bind_rows(lmha_manual_cases_sylvania) %>%
  filter(!is.na(file_year)) %>%
  select(-reporter_contacted, -premises_address, -journal_activity_text, journal_document_available)
  

#Remove unneeded data frames
rm(lmha_manual_cases_2020, lmha_manual_cases_2019, lmha_manual_cases_2018, lmha_manual_cases_2017, lmha_manual_cases_2016, lmha_manual_cases_2015, lmha_manual_cases_sylvania)
#
#Join manually-gathered cases data frame to scraped cases data frame

Fact Check

Total LMH evictions

Story Text: A Blade investigation found the agency filed more than 2,200 evictions against its tenants in the past five years…

Discussion: Using our LMH eviction filing database, we were able to count the number of filings LMH has made throughout the Toledo area.

total_evictions_filed_by_lmha <- lmha_manual_plus_scraped_cases_2015_2020 %>%
  filter(!file_year == "2020") %>%
  summarise(total_evictions = n())

total_evictions_filed_by_lmha %>%
  kable() %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed", "responsive"), font_size = 14, fixed_thead = T) %>%
  scroll_box(width = "600px", height = "200px")
total_evictions
2257

Among most litigious landlords

Story Text [LMH is] one of Lucas County’s most litigious landlords.

Discussion: The term “most litigious” in this case is meant to reflect property management groups who file high numbers of evictions. However it does not account for a rate of eviction, as that would require determining the number of units owned by every property manager in the Toledo area over the five year time frame.

A ranking of highest eviction filers was created using the data gathered digitally from Lucas County’s eviction court website over five years for the city of Toledo, and centered on plaintiffs in each case. The data was first cleaned to account for minor misspellings, using address information to confirm properties were indeed connected. The data reporter then researched the biggest local property managers in the area to connect complexes to national property managers when the information was available, and to account as much as possible for managers who use multiple limited liability companies to administer eviction filings. However, due to the inherent lack of transparency in LLC filings, the margin of error is unknowable.

Using available information, the data reporter created an eviction breakdown by year of the biggest evictors in Toledo. A snapshot of each year was used rather than a sum of all five years to more accurately reflect the annual impact. This was because some landlords did not own property in all years but their annual rates later generated significant evictions.

This analysis showed LMH ranks as one of the top three evictors in the area every year from 2015 through 2019.

biggest_evictors_toledo <- cleaned_scraped_cases_toledo_2015_2020_landlord_analysis %>%
  select(file_year, plaintiff) %>%
  mutate(evictions_served = plaintiff) %>%
  group_by(plaintiff, file_year) %>%
  summarise(evictions_served = n()) %>%
  pivot_wider(names_from = file_year, values_from = evictions_served)

monarch_property_evictions <- biggest_evictors_toledo %>%
  filter(str_detect(plaintiff,"abbey run") | str_detect(plaintiff,"commodore") | str_detect(plaintiff,"country club") | str_detect(plaintiff,"georgetown village") | str_detect(plaintiff,"hunters ridge") | str_detect(plaintiff,"miracle manor") | str_detect(plaintiff,"sunnydale") | str_detect(plaintiff,"valley stream") | str_detect(plaintiff,"whispering timbers"))

larchmont_contour_evictors <- biggest_evictors_toledo %>%
  filter(str_detect(plaintiff,"larchmont") | str_detect(plaintiff,"contour"))

Reasons for evictions

Story Text: LMH officials said evictions are a necessary tool for removing tenants who commit crimes or disturb their neighbors. But an analysis of housing court data revealed 91 percent of their cases were for past-due rent.

Discussion: When inputting court document information into our LMH eviction filing database, reporters developed standardized language using the complaint language to mark each case in a category — similar to LMH’s internal database of court filings.

reasons_for_lmh_evections <- lmha_manual_plus_scraped_cases_2015_2020 %>%
  filter(file_year != "2020") %>%
  group_by(reason) %>%
  count() %>%
  arrange(desc(n)) %>%
  ungroup() %>%
  mutate(total_cases = sum(n)) %>%
  mutate(percent_of_cases = n / total_cases * 100) 

reasons_for_lmh_evections %>%
  kable() %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed", "responsive"), font_size = 14, fixed_thead = T) %>%
  scroll_box(width = "600px", height = "200px")
reason n total_cases percent_of_cases
nonpayment of rent 2055 2257 91.0500665
criminal activity 72 2257 3.1900753
recertification issue 39 2257 1.7279575
failure to maintain utility service 31 2257 1.3735047
other/unknown 23 2257 1.0190518
overhoused 13 2257 0.5759858
sanitation issue 9 2257 0.3987594
pet violation 8 2257 0.3544528
multiple issues 6 2257 0.2658396
violated mediation agreement 1 2257 0.0443066

Less than $100

Story Text: What’s more, 37 percent of the nonpayment cases were filed for less than $100 owed — less than it costs to file an eviction in court.

Discussion: We analyzed the amount of rent owed and the amount of fees owed in eviction filings marked nonpayment of rent cases. We combined these amounts to assess the total money at stake in each eviction case, including rent owed, late fees, and other fees assessed by LMH.

percent_of_evictions_involving_less_100_dollars <- lmha_manual_plus_scraped_cases_2015_2020 %>%
  filter(file_year != "2020") %>%
  filter(str_detect(reason, "rent")) %>%
  mutate(total_money_owed_bucket = case_when(total_money_owed<100 ~ "less_than_100",
                                           TRUE ~ "more_than_100")) %>%
  select(total_money_owed_bucket) %>%
  group_by(total_money_owed_bucket) %>%
  summarise(total_people = n()) %>%
  pivot_wider(names_from = total_money_owed_bucket, values_from = total_people) %>%
  mutate(total_people = less_than_100 + more_than_100) %>%
  mutate(pct_less_than_100 = less_than_100 / total_people*100)

percent_of_evictions_involving_less_100_dollars %>%
  kable() %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed", "responsive"), font_size = 14, fixed_thead = T) %>%
  scroll_box(width = "600px", height = "200px")
less_than_100 more_than_100 total_people pct_less_than_100
768 1287 2055 37.37226

Small-sum cases

Story Text: And for all that paperwork, The Blade found LMH stood to collect less than $50,000 in past-due rent and fees from those small-sum cases. That’s less than 9 percent of the nearly $560,000 in total past-due amounts LMH aimed to collect through evictions in those five years.

Discussion: We compared the amount of rent at stake in all nonpayment of rent cases to those nonpayment of rent cases that involved less than $100 owed in total.

lmha_total_money_owed <- lmha_manual_plus_scraped_cases_2015_2020 %>%
  select(file_year, total_money_owed, reason) %>%
  filter(file_year != "2020") %>%
  filter(reason == "nonpayment of rent") %>%
  filter(!is.na(total_money_owed)) %>%
  group_by(reason) %>%
  summarise(total_money_owed = sum(total_money_owed))

lmh_less_than_100_owed <- lmha_manual_plus_scraped_cases_2015_2020 %>%
  filter(file_year != "2020") %>%
  filter(!is.na(total_money_owed)) %>%
  filter(str_detect(reason, "rent")) %>%
  mutate(total_money_owed_bucket = case_when(total_money_owed<100 ~ "less than 100",
                                           TRUE ~ "100 or more")) %>%
  filter(total_money_owed_bucket == "less than 100") %>%
  select(total_money_owed, reason) %>%
  group_by(reason) %>%
  summarise(total_money_owed_less_than_100 = sum(total_money_owed)) %>%
  inner_join(lmha_total_money_owed, by=c("reason")) %>%
  mutate(percent_of_cases_less_than_100 = total_money_owed_less_than_100 / total_money_owed * 100)

sheet_write(lmh_less_than_100_owed, ss='https://docs.google.com/spreadsheets/d/1---OumlB3aHqY9QU1edwE1lt2Vx-kJxFOosFkM9QNOs/edit#gid=599942720', sheet = 'lmh_less_than_100_owed')

lmh_less_than_100_owed %>%
  kable() %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed", "responsive"), font_size = 14, fixed_thead = T) %>%
  scroll_box(width = "600px", height = "200px")
reason total_money_owed_less_than_100 total_money_owed percent_of_cases_less_than_100
nonpayment of rent 49804.21 558602.2 8.915864

Eviction filings decreasing

Story Text: Yet records show the agency filed eviction cases against tenants more than 300 times last year – and that’s down from 2016, when they topped 600.

Discussion: Using the LMH eviction filing database, in which court filings are identified by year, we sorted when cases were filed.

lmh_cases_per_year <- lmha_manual_plus_scraped_cases_2015_2020 %>%
  filter(file_year != "2020") %>%
  group_by(file_year) %>%
  count()

lmh_cases_per_year %>%
  kable() %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed", "responsive"), font_size = 14, fixed_thead = T) %>%
  scroll_box(width = "600px", height = "200px")
file_year n
2015 579
2016 618
2017 394
2018 339
2019 327

LMH wins evictions

Story Text: Housing court data also show LMH won eviction orders in 68 percent of the cases it filed in the past five years.

Discussion: Using our LMH eviction filing database, we searched for those cases in which a Writ of Restitution for Set Out was issued by the court.

The chief deputy clerk of Lucas County Common Pleas Court provided a list of definitions of rulings to our reporter. Eviction court orders often leave it ambiguous what the ultimate outcome is once the court is no longer involved, as landlords may not remove a tenant from the premises at all, even though the eviction has not been dismissed, or they may not need court assistance for a removal — the tenant might leave voluntarily. Additionally, LMH officials do not routinely track how many evictions filings result in a tenant being removed from a dwelling.

A writ is issued when the court rules in favor of the plaintiff, LMH, and gives permission for the tenant to be removed. This does not guarantee a removal.

A writ is not issued when the case is dismissed. Dismissals include cases in which tenants moved out before their hearing date or reached last-minute settlements at the courthouse to maintain residence.

writ_issued_in_lmh_evection <- lmha_manual_plus_scraped_cases_2015_2020 %>%
  filter(file_year != "2020") %>%
  group_by(writ_filed_y_n) %>%
  count() %>%
  pivot_wider(names_from = writ_filed_y_n, values_from = n) %>%
  mutate(total_cases = y+n) %>%
  mutate(percent_yes = y / total_cases * 100) %>%
  mutate(percent_no = n / total_cases * 100)

writ_issued_in_lmh_evection %>%
  kable() %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed", "responsive"), font_size = 14, fixed_thead = T) %>%
  scroll_box(width = "600px", height = "200px")
n y total_cases percent_yes percent_no
720 1537 2257 68.09925 31.90075