library(glptools)
glp_load_packages()

To disaggregate the data and break down homeownership/cost-burden, need to use microdata.

acs_micro <- feather::read_feather("../microdata/acs_micro_FIPS_repwts.feather")

acs_micro %<>%
  group_by(year, SERIAL) %>%
  mutate(hh_members = n()) %>%
  ungroup() %>%
  filter(PERNUM == 1) %>%
  mutate(
    OWNCOST  = replace(OWNCOST, OWNCOST == 99999, NA),
    HHINCOME = replace(HHINCOME, HHINCOME == 99999, NA),
    OWNERSHP = replace(OWNERSHP, OWNERSHP == 0, NA),
    RENTGRS  = replace(RENTGRS, RENTGRS == 0 & OWNERSHP == 1, NA),

    homeownership = if_else(OWNERSHP == 1, T, F),

    hcost = if_else(homeownership == 1, OWNCOST, RENTGRS),
    cost_burden = if_else(hcost * 12 / HHINCOME > 0.3, T, F),
    severe_cost_burden = if_else(hcost * 12 / HHINCOME > 0.5, 1, 0),

    hh_type = case_when(
      homeownership  & !cost_burden ~ "noncb_homeowner",
      homeownership  & cost_burden  ~ "cb_homeowner",
      !homeownership & !cost_burden ~ "noncb_renter",
      !homeownership & cost_burden  ~ "cb_renter",
      TRUE ~ NA_character_),

    KITCHEN  = replace(KITCHEN, KITCHEN == 0, NA),
    ROOMS    = replace(ROOMS, ROOMS == 0, NA),
    PLUMBING = replace(PLUMBING, PLUMBING == 0, NA),

    severe_housing_problems = if_else(
      KITCHEN == 1 | PLUMBING == 10 | hh_members / ROOMS > 1 | severe_cost_burden, T, F))

# Homeownership and Cost-burden
housing_county1  <- survey_by_demog(acs_micro, "hh_type", "HHWT")
housing_county2  <- survey_by_demog(acs_micro, "homeownership", "HHWT")
housing_county3  <- survey_by_demog(acs_micro, "cost_burden", "HHWT")
housing_county <- bind_df(housing_county1, housing_county2, housing_county3)

housing_msa1  <- survey_by_demog(acs_micro, "hh_type", "HHWT", geog = "MSA")
housing_msa2  <- survey_by_demog(acs_micro, "homeownership", "HHWT", geog = "MSA")
housing_msa3  <- survey_by_demog(acs_micro, "cost_burden", "HHWT", geog = "MSA")
housing_msa_1yr <- bind_df(housing_msa1, housing_msa2, housing_msa3)

Use table B25106 for for tract and larger areas. B25106 crosses homeownership and cost burden.

housing_vars_05_5yr <- build_census_var_df("acs5", "B25106")
housing_map <- get_census(housing_vars_05_5yr, "tract") %>% filter(year == 2017)

housing_map %<>%
  mutate(
    homeownership_ = case_when(
      str_detect(label, "Renter") ~ F,
      str_detect(label, "Owner") ~ T),
    cost_burden_ = case_when(
      str_detect(label, "30 percent or more") ~ T,
      str_detect(label, "Zero or negative income") ~ T,
      str_detect(label, "No cash rent") ~ F,
      str_detect(label, "20 to 29 percent") ~ F,
      str_detect(label, "Less than 20 percent") ~ F),
    hh_type = case_when(
      homeownership_ & !cost_burden_  ~ "noncb_homeowner",
      homeownership_ & cost_burden_   ~ "cb_homeowner",
      !homeownership_ & !cost_burden_ ~ "noncb_renter",
      !homeownership_ & cost_burden_  ~ "cb_renter"))

housing_map1 <- glptools::process_census(housing_map, cat_var = "hh_type", output_name = "housing")
housing_map2 <- process_census(housing_map, cat_var = "homeownership_", output_name = "homeownership")
housing_map3 <- process_census(housing_map, cat_var = "cost_burden_", output_name = "cost_burden")

housing_map <- bind_df(housing_map1, housing_map2, housing_map3)

housing_map %>%
  process_map(cb_homeowner:cost_burden, return_name = "housing",
              maps = c("tract", "muw", "nh")) %>%
  list2env(.GlobalEnv)

B25106 is not available at the block group level, so use simpler tables for BG and district.

housing_vars_05_5yr <- build_census_var_df("acs5", "B25003")
housing_map <- get_census(filter(housing_vars_05_5yr, year >= 2013), "block_group")

housing_map %<>%
  mutate(
    homeownership_ = case_when(
      str_detect(label, "Renter") ~ "renter",
      str_detect(label, "Owner") ~ "homeowner"))

housing_map <- process_census(housing_map, cat_var = "homeownership_", output_name = "homeownership")

housing_map %>%
  process_map(homeowner:renter, 
              return_name = "housing",
              maps = c("bg", "district")) %>%
  list2env(.GlobalEnv)
# Severe Housing Problems
housing_problems_county <- survey_by_demog(acs_micro, "severe_housing_problems", "HHWT")
housing_problems_msa    <- survey_by_demog(acs_micro, "severe_housing_problems", "HHWT", geog = "MSA")

housing_county  %<>% bind_df(housing_problems_county)
housing_msa_1yr %<>% bind_df(housing_problems_msa)
usethis::use_data(housing_county, housing_msa_1yr, 
                  housing_tract, housing_nh, housing_muw, housing_district, housing_bg, overwrite = TRUE)

rm(acs_micro, housing_problems_county, housing_problems_msa,
   housing_county1, housing_county2, housing_county3,
   housing_msa1, housing_msa2, housing_msa3,
   housing_map1, housing_map2, housing_map3,
   housing_vars_05_5yr, housing_map)


greaterlouisvilleproject/glpdata documentation built on Nov. 2, 2023, 8:50 a.m.