1. Import Data Files

Data Sources

  1. PIT Surveys
  • Assessment Based Reports to pull the PIT Assessments completed for Rescue Mission, ARCH, FPGR, and CHRC clients
  • PIT paper surveys completed and then entered in HMIS for City of Roanoke, Turning Point, and TAP
  • The PIT surveys are collected from a subset of HMIS clients and people who are not HMIS.
  1. Profile Screen Reports
  • A report of shelter service use and program enrollment on the night of 1/26/22 for all shelter agencies.
  • These reports are used to provide a list of clients in HMIS who were homeless on the night of 1/26/22.
  • This list is not exhaustive because there are clients that are not in HMIS who were also homeless on the night of 1/26/22
  1. Annual Performance Review Reports
  • These reports provide detailed information about the clients such as head of household and chronically homeless status
  1. VI-SPDAT assessments (In Progress)
  • Assessment based reports to pull VI-SPDAT assessments completed in the last 6 months for clients in HMIS
  • Paper VI-SPDAT assessments completed and then entered into Excel for City of Roanoke, Turning Point, and TAP
# Libraries
library(tidyverse)
library(readxl)
library(janitor)

#### PIT Survey - Assessment based Reports ####

d_PIT_survey_ARCH <- read_excel("data/Assessment based report_arch_1-25 to 1-28.xlsx", 
                                                        sheet = "BRCoC - PIT 2022") |>
  clean_names()

d_PIT_survey_CHRC <- read_excel("data/Assessment based report_CHRC_1-25 to 1-28.xlsx", 
                                                        sheet = "BRCoC - PIT 2022")|>
  clean_names()

d_PIT_survey_city_of_roanoke <- read_excel("data/Assessment based report_city_1-25 to 1-28.xlsx", 
                                                        sheet = "BRCoC - PIT 2022")|>
  clean_names()|>
  mutate(program_name = "City of Roanoke")

d_PIT_survey_FPGR <- read_excel("data/Assessment based report_FPGR_1-25 to 1-28.xlsx", 
                                                        sheet = "BRCoC - PIT 2022")|>
  clean_names()

d_PIT_survey_RM <- read_excel("data/Assessment Based Report_RM Agency_Dates 1-26-22_1-27-22_BRCoC_PIT 2022_278.xlsx", 
                              sheet = "BRCoC - PIT 2022")|>
  clean_names()

d_PIT_survey_system <- read_excel("data/Assessment based report_system_1-25 to 1-28.xlsx", 
                                                          sheet = "BRCoC - PIT 2022")|>
  clean_names()

#### PIT Survey Data Not in HMIS (DV Shelters)####
PIT_DV_Shelters <- read_excel("data/PIT_DV_Shelters.xlsx")|>
  clean_names()|>
  mutate(approximate_date_homelessness_started = as.character(approximate_date_homelessness_started),
         total_months_homeless_in_the_past_three_years = 
           as.character(total_months_homeless_in_the_past_three_years),
         how_many_covid_vaccine_doses_have_you_recieved = as.character(how_many_covid_vaccine_doses_have_you_recieved),
         unique_id = c(1:5),
         unique_id = as.character(unique_id))

#### Profile screen Reports####

d_profile_screen_report_ARCH_families <- read_excel("data/profile_screen_report_shelter_service_based_ARCH_families_1-26.xlsx", 
    sheet = "Client Profile")|>
    clean_names()|>
  mutate(program_name = "ARCH families")

d_profile_screen_report_ARCH_vets <- read_excel("data/profile_screen_report_shelter_service_based_ARCH_vets_1-26.xlsx",
                                                sheet= "Client Profile")|>
  clean_names()|>
  mutate(program_name = "ARCH veterans")

  
d_profile_screen_report_CHRC <- read_excel("data/profile_screen_report_shelter_service_based_CHRC1-27.xlsx", 
                                                                   sheet = "Client Profile")|>
  clean_names()|>
  mutate(program_name = "CHRC")

d_profile_screen_report_FPGR <- read_excel("data/profile_screen_report_shelter_service_based_FPGR_1-26_1-27.xlsx", 
                                                                         sheet = "Client Profile")|>
  clean_names()|>
  mutate(program_name = "Family Promise")

d_profile_screen_report_RM_WCC <- read_excel("data/profile_screen_report_shelter_service_based_1-26_1-26_plus_tally_RM_womens.xlsx", 
    sheet = "Client Profile")|>
  clean_names()|>
  mutate(program_name = "RM WCC")

d_profile_screen_report_RM_men <- read_excel("data/profile_screen_report_shelter_service_based_1-26_1-26_RM_mens.xlsx", 
    sheet = "Client Profile")|>
  clean_names()|>
  mutate(program_name = "RM Men")


d_profile_screen_report_RM_CWS <- read_excel("data/profile_screen_report_shelter_service_based_1-26_1-27_plus_helens_list_RM_CWS.xlsx", 
    sheet = "Client Profile")|>
  clean_names()|>
  mutate(program_name = "RM CWS")

#### APR Data #### 

APR_ARCH_ES <- read_csv("data/APR_ARCH_ES.csv", skip = 1)|>
  clean_names()


APR_CHRC <- read_csv("data/APR_CHRC.csv", skip = 1)|>
  clean_names()

APR_FPGR <- read_csv("data/APR_FPGR.csv",skip = 1)|>
  clean_names()

APR_RM <- read_csv("data/APR_RM.csv", skip = 1)|>
  clean_names()

2. Merge Data Frames

# Need to update DV shelter variable names before I merge
# Merge the PIT Survey data frames together
d_PIT_survey_all <- bind_rows(d_PIT_survey_ARCH, d_PIT_survey_CHRC,
                              d_PIT_survey_city_of_roanoke,
                              d_PIT_survey_FPGR, d_PIT_survey_RM,
                              d_PIT_survey_system, PIT_DV_Shelters) |>
  mutate(unique_id = as.character(unique_id))|>
  group_by(unique_id)|>
  slice(1)|>
  ungroup()

# Merge profile screen report data frames
d_profile_screen_all <- bind_rows(d_profile_screen_report_ARCH_families,
                                  d_profile_screen_report_ARCH_vets,
                                  d_profile_screen_report_CHRC,
                                  d_profile_screen_report_FPGR,
                                  d_profile_screen_report_RM_CWS,
                                  d_profile_screen_report_RM_men,
                                  d_profile_screen_report_RM_WCC)|>
  mutate(unique_id = as.character(unique_id))|>
  group_by(unique_id)|>
  slice(1)|>
  ungroup()

d_profile_screen_NOT_WCC <- bind_rows(d_profile_screen_report_ARCH_families,
                                  d_profile_screen_report_ARCH_vets,
                                  d_profile_screen_report_CHRC,
                                  d_profile_screen_report_FPGR,
                                  d_profile_screen_report_RM_CWS,
                                  d_profile_screen_report_RM_men)|>
  mutate(unique_id = as.character(unique_id))|>
  group_by(unique_id)|>
  slice(1)|>
  ungroup()

d_WCC_semijoin <- semi_join(d_profile_screen_NOT_WCC,d_profile_screen_report_RM_WCC,
                        by = "unique_id") #3 clients with shelter services at WCC and CWS
# Merge APR report data frames
d_APR_all <- bind_rows(APR_ARCH_ES, APR_CHRC, APR_FPGR, APR_RM) |>
  mutate(relationship = relationship_to_ho_h)|>
  mutate(unique_id = as.character(unique_id))|>
  group_by(unique_id)|>
  slice(1)|>
  ungroup()

# Join all three data frames

# first join the PIT survey & profile reports to get an accurate list of  clients
d_both <- full_join(d_PIT_survey_all, d_profile_screen_all, 
                   by = "unique_id")


# then join in the APR data columns
d_all <- left_join(d_both , d_APR_all, 
                   by = "unique_id")|>
  mutate(program_name = coalesce(program_name.x, program_name.y),
         age = coalesce(age.x, age.y),
         race = coalesce(race.x, race.y),
         gender = coalesce(gender.x, gender.y))

A subset of the full data frame

d_example <- d_all |>
select(program_name, assessment_date, assessment_location, age)|>
  as_tibble()
print(head(d_example))
## # A tibble: 6 x 4
##   program_name   assessment_date assessment_location                      age
##   <chr>          <chr>           <chr>                                  <dbl>
## 1 RM Men         01/26/2022      402 4th St SE, Roanoke, VA 24013          62
## 2 ARCH families  01/26/2022      404 Elm Ave SW, Roanoke, VA 24016         39
## 3 Family Promise 01/26/2022      37 E Clay St, Salem, VA 24153             31
## 4 RM WCC         01/26/2022      651 Montrose Ave SE, Roanoke, VA 24013    73
## 5 RM WCC         01/26/2022      410 4th St SE, Roanoke, VA 24013          37
## 6 ARCH families  01/26/2022      404 Elm Ave SW, Roanoke, VA 24016         59

3. Clean Data

library(tidyverse)
library(lubridate)
library(forcats)

d_all <- d_all |>
    mutate(sheltered = case_when(program_name == "City of Roanoke" ~ "Unsheltered",
                               TRUE ~ "Sheltered"))|>
  mutate(program = coalesce(program, program_name))|>
  mutate(location_sleep = where_did_you_sleep_on_the_night_of_the_pit_count)|>
  mutate(location_sleep  = case_when(location_sleep == ", , WI" ~ "402 4th St SE, Roanoke, VA 24013",
                   location_sleep == ", Roanoke, VA" ~ "Roanoke, VA",
                   TRUE ~ (as.character(location_sleep))))|>
  mutate(location_sleep_f = factor(location_sleep))|>
  mutate(location_sleep_fc = fct_collapse(location_sleep_f,
                                          "Rescue Mission" = c("402 4th St SE, Roanoke, VA 24013",
                                                               "404 Elm Ave SW, Roanoke, VA 24016",
                                                               "410 4th St SE, Roanoke, VA 24013",
                                                               "510 4th St SE, Roanoke, VA 24013"),
                                          "Trust House" = "404 Elm Ave SW, Roanoke, VA 24016",
                                          "The Least of These Ministry" = "422 Luck Ave SW, Roanoke, VA 24016",
                                          "Unsheltered or Place Not Meant for Habitation" = c("Roanoke, VA",
                                                                              "11th St NW, Roanoke, VA 24012",
                                                                              "1219 Jamison Ave SE, Roanoke, VA 24013",
                                                                              "1618 Wiley Dr SW, Roanoke, VA 24015",
                                                                              "19th St SE, Roanoke, VA 24013",
                                                                              "4th St SE, Roanoke, VA 24013",
                                                                              "651 Montrose Ave SE, Roanoke, VA 24013"),
                                          "Private Residence" = c("708 Conway St NE, Roanoke, VA 24012",
                                                                  "710 Conway St NE, Roanoke, VA 24012")))|>
  mutate(locality_other_f = factor(in_what_locality_if_other))|>
  mutate(locality_other_fc = fct_collapse(locality_other_f,
                                          "Other VA Locality" = c("Bristoll, VA",
                                                                  "Charlottesville, VA",
                                                                  "covington, va",
                                                                  "Floyd County",
                                                                  "Danville",
                                                                  "Franklin County",
                                                                  "Gretna, VA",
                                                                  "King George County, VA",
                                                                  "Newport News",
                                                                  "lynchburg",
                                                                  "Martinsville, Virginia",
                                                                  "Montgomery County, VA",
                                                                  "Norfolk, Virginia",
                                                                  "Radford, Virginia",
                                                                  "Richmond, VA",
                                                                  "Rocky Mount",
                                                                  "Suffolk, VA",
                                                                  "Woodlawn",
                                                                  "winchester, va"),
                                          "NC, SC, or WV" = c("charlottt, nc", "kayhog NC",
                                                              "South Carolina", "Welch"),
                                          "Other US Locality" = c("chicago, IL", "Galveston, TX",
                                                                  "los angeles ca", "Minneapolis, MN",
                                                                  "Minnesota", "New York", "Oakland, MD"
                                                                  ))) |>
  mutate(age_f = case_when(age < 18 ~ "Under 18", 
                 age >= 18 & age <= 24 ~ "18 - 24",
                 age > 24  ~ "Over 24",
                 TRUE ~ "Unknown")) |>
  mutate(age_f = as_factor(age_f))|>
  mutate(age_fc = fct_relevel(age_f, "Under 18", "18 - 24", "Over 24", "Unknown"))|>
  mutate(youth_hh = case_when(youth_household_type == "Youth Household without children" ~ "Yes",
                              NA ~ "No",
                              TRUE ~ "No")) |>
  mutate(mh_dx = case_when(mental_health_disorder == "Yes" | 
                           mental_health_disorder_47 == "Yes" ~ "Yes",
                           TRUE ~ "No"))|>
  mutate(alc_dx = case_when(substance_use_disorder ==  "Alcohol use disorder" | 
                            substance_use_disorder_48 == "Alcohol use disorder" ~ "Yes",
                            TRUE ~ "No"))|>
  mutate(drug_dx = case_when(substance_use_disorder == "Drug use disorder" | 
                             substance_use_disorder_48 =="Drug use disorder" ~ "Yes",
                             TRUE ~ "No")) |>
  mutate(both_dx = case_when(substance_use_disorder == "Both alcohol and drug use disorders" |
                             substance_use_disorder_48 == "Both alcohol and drug use disorders" ~ "Yes",
                             TRUE ~ "No")) |>
  mutate(sud_dx =case_when(drug_dx == "Yes" | alc_dx == "Yes" |both_dx == "Yes" ~ "Yes",
                           TRUE ~ "No"))|>
  mutate(dev_dx = case_when(developmental_disability == "Yes" | 
                             developmental_disability_51 == "Yes" ~ "Yes",
                             TRUE ~ "No"))|>
  mutate(hiv_dx = case_when(hiv_aids_50 == "Yes" | hiv_aids == "Yes" ~ "Yes",
                            TRUE ~ "No"))|>
  mutate(chronic_dx = case_when (chronic_health_condition == "Yes" | 
                                 chronic_health_condition_49 == "Yes" ~ "Yes",
                                 TRUE ~ "No"))|>
  mutate(physical_dx = case_when(physical_disability == "Yes" | 
                                 physical_disability_52 == "Yes" ~ "Yes",
                                 TRUE ~ "No"))|>
  mutate(disabling_condition = case_when(mh_dx == "Yes"| alc_dx == "Yes" ~ "Yes",
                                         drug_dx == "Yes" | both_dx == "Yes" ~ "Yes",
                                         dev_dx == "Yes" | hiv_dx == "Yes" ~ "Yes",
                                         chronic_dx == "Yes"| physical_dx == "Yes" ~ "Yes",
                                         TRUE ~ "No"))|>
  mutate(household_type = coalesce(household_type.x, household_type.y))|>
  mutate(relationship = coalesce(relationship.x, relationship.y))|>
  mutate(hoh_na = replace_na(household_type, "Unknown"))|>
  mutate(relationship_new = case_when(hoh_na == "Unknown" & age < 18 ~ "Head of household’s child",
                                      hoh_na == "Unknown" & age >= 18 ~ "Self (head of household)"))|>
  mutate(relationship = (coalesce(relationship, relationship_new)))|>
  mutate(hoh_type = case_when(relationship == "Head of household’s child" ~ "Not HoH",
                              household_type == "Without children" &
                                  relationship == "Self (head of household)" ~ "HoH Without Children",
                                household_type == "With at least one adult and one child" &
                                  relationship == "Self (head of household)" ~ "HoH With Adult(s) and Child(ren)",
                                household_type == "Without children" &
                                  relationship == "Head of household's spouse or partner" ~ "Not HoH",
                                household_type == "With at least one adult and one child" &
                                  relationship == "Head of household's spouse or partner" ~ "Not HoH",
                                household_type == "With at least one adult and one child" &
                                  relationship == "Head of household’s child" ~ "Not HoH",
                              household_type == "Unknown" ~ "HoH Without Children",
                                TRUE ~ "HoH Without Children")) |>
  mutate(hh_count = case_when(hoh_type == "HoH Without Children" |
                                hoh_type == "HoH With Adult(s) and Child(ren)" ~ 1,
                              hoh_type == "HoH With Only Children" ~ 1,
                              TRUE ~ 0))|>
  mutate(vet_hh = case_when(veteran_status == "Yes" & hoh_type == "HoH Without Children" ~ "Vet HoH Without Children",
                            veteran_status == "Yes" & hoh_type == "HoH With Adult(s) and Child(ren)" ~ "Vet HoH With Children",
                            veteran_status == "No" ~ "Not Vet HH",
                            TRUE ~ "Not Vet HH"))|>
  mutate(dv = case_when(victim_of_domestic_violence == "Yes" | dv_history == "Yes" ~ "Yes",
                        TRUE ~ "No"))|>
  mutate(dv_na = replace_na (dv, "No")) |>
  mutate(total_mo_hx_12 = case_when(total_months_homeless_in_the_past_three_years == "More than 12 Months" |
                                       total_months_homeless_in_the_past_three_years == "Twelve Months" 
                                     ~ "Yes",
                                     TRUE ~ "No"))|>
  mutate(approximate_date_homelessness_started = as.character(approximate_date_homelessness_started))|>
  mutate(approx_date_mdy = mdy(approximate_date_homelessness_started),
         approx_date_ymd = ymd (approximate_date_homelessness_started))|>
  mutate(approx_date = coalesce(approx_date_mdy,
                                approx_date_ymd))|>
  mutate(today = today())|>
  mutate(interval_obj = interval(approx_date, today)) |>
  mutate(approx_months_hx = time_length(interval_obj, unit = "month"))|>
  mutate(chronic_hx = case_when(total_mo_hx_12 == "Yes" & disabling_condition == "Yes" &
                                hh_count == 1 ~ "Yes",
                                chronically_homeless_status == "Chronically_Homeless" ~ "Yes",
                                TRUE ~ "No")) |>
  mutate(unacc_youth = case_when(age <= 24 & hh_count == 1 ~ "Yes",
                                 TRUE ~ "No"))

A subset of the cleaned data frame

d_clean <- d_all|>
  select(age, age_f, location_sleep, location_sleep_fc, approximate_date_homelessness_started, approx_months_hx,
         household_type, relationship, hoh_type)|>
  as_tibble()
print(head(d_clean))
## # A tibble: 6 x 9
##     age age_f  location_sleep location_sleep_~ approximate_dat~ approx_months_hx
##   <dbl> <fct>  <chr>          <fct>            <chr>                       <dbl>
## 1    62 Over ~ 402 4th St SE~ Rescue Mission   08/21/2021                   8.37
## 2    39 Over ~ 404 Elm Ave S~ Trust House      10/26/2021                   6.2 
## 3    31 Over ~ 708 Conway St~ Private Residen~ 10/09/2021                   6.77
## 4    73 Over ~ 651 Montrose ~ Unsheltered or ~ 06/11/2020                  22.7 
## 5    37 Over ~ 410 4th St SE~ Rescue Mission   11/21/2021                   5.37
## 6    59 Over ~ 404 Elm Ave S~ Trust House      12/14/2021                   4.6 
## # ... with 3 more variables: household_type <chr>, relationship <chr>,
## #   hoh_type <chr>

4. Summary Tables

These tables were designed to follow the format used by HUD. ## PIT Count By CoC Program

library(gtsummary)
library(writexl)

# Demographics by Program

#City of Roanoke / Unsheltered
d_sum_program_unsheltered <- d_all|>
  select(hh_count, age_fc, gender, ethnicity, race, 
         chronic_hx, veteran_status, program_name, sheltered )|>
  filter(program_name == "City of Roanoke")|>
  tbl_summary(
    statistic = all_categorical() ~ "{n}",
    sort = list(c(gender, ethnicity, race, chronic_hx, veteran_status, hh_count ) ~ "frequency"),
    label = list(hh_count ~ "Total Number of Households",
                 age_fc ~ "Age Categories",
                 race ~ "Race",
                 ethnicity ~ "Ethnicity",
                 gender ~ "Gender",
                 veteran_status ~ "Veteran Status",
                 chronic_hx ~ "Chronically Homeless")
              )|>
  bold_labels()|>
  modify_caption("**All Households - Unsheltered** (N = {N})")|>
  modify_header(label ~ "**Total Number of Persons (Adults and Children)**")

d_sum_program_unsheltered
All Households - Unsheltered (N = 20)
Total Number of Persons (Adults and Children) N = 201
Total Number of Households 20
Age Categories
Under 18 0
18 - 24 1
Over 24 19
Unknown 0
Gender
Male 14
Female 6
Ethnicity 0
Unknown 20
Race
White 13
Black, African American, or African 6
American Indian, Alaska Native, or Indigenous 1
Chronically Homeless 11
Veteran Status
No 2
Unknown 18
program_name
City of Roanoke 20
sheltered
Unsheltered 20

1 n

# All other programs / Sheltered
d_sum_program_sheltered <- d_all|>
  select(hh_count, age_fc, gender, ethnicity, race, 
         chronic_hx, veteran_status, program_name, program )|>
  filter(program_name != "City of Roanoke")|>
  tbl_summary(
    by = program_name,
    statistic = all_categorical() ~ "{n}",
    sort = list(c(gender, ethnicity, race, chronic_hx, veteran_status, hh_count ) ~ "frequency"),
    label = list(hh_count ~ "Total Number of Households",
                 age_fc ~ "Age Categories",
                 race ~ "Race",
                 ethnicity ~ "Ethnicity",
                 gender ~ "Gender",
                 veteran_status ~ "Veteran Status",
                 chronic_hx ~ "Chronically Homeless")
              )|>
  bold_labels()|>
  modify_caption("**All Households - Unsheltered** (N = {N})")|>
  modify_header(label ~ "**Total Number of Persons (Adults and Children)**")

d_sum_program_sheltered
All Households - Unsheltered (N = 167)
Total Number of Persons (Adults and Children) ARCH families, N = 91 ARCH veterans, N = 91 CHRC, N = 191 Family Promise, N = 81 RM CWS, N = 431 RM Men, N = 211 RM WCC, N = 531 Safehomes, N = 11 Salvation Army, N = 41
Total Number of Households 9 9 19 3 43 21 47 1 4
Age Categories
Under 18 0 0 0 5 0 0 6 0 0
18 - 24 0 0 1 0 1 0 5 0 0
Over 24 9 9 18 3 42 21 42 0 0
Unknown 0 0 0 0 0 0 0 1 4
Gender
Male 4 9 13 5 38 21 6 0 0
Female 4 0 6 3 4 0 47 1 4
Transgender 1 0 0 0 1 0 0 0 0
Ethnicity
Non-Hispanic/Non-Latin(a)(o)(x) 8 9 19 8 15 20 26 0 0
Data not collected 1 0 0 0 0 0 0 0 0
Unknown 0 0 0 0 28 1 27 1 4
Race
White 6 5 16 0 20 13 33 1 3
Black, African American, or African 2 4 2 3 20 8 17 0 0
Asian or Asian American 1 0 0 5 0 0 0 0 0
Multiple races 0 0 1 0 1 0 2 0 0
Data not collected 0 0 0 0 1 0 1 0 0
Black or African-American 0 0 0 0 0 0 0 0 1
Client Doesn't know / Refused 0 0 0 0 1 0 0 0 0
Chronically Homeless 5 3 0 0 2 4 11 0 0
Veteran Status
No 9 0 19 4 36 20 49 0 0
Yes 0 9 0 0 5 1 2 0 0
Data not collected 0 0 0 0 2 0 0 0 0
Unknown 0 0 0 4 0 0 2 1 4
program
ARCH - ES - Families and Single Women 9 0 0 0 0 0 0 0 0
ARCH - ES - Veteran Housing (Contract) 0 9 0 0 0 0 0 0 0
CHRC - DHCD - CHERP - COVID Quarantine Hotel 0 0 19 0 0 0 1 0 0
Family Promise - Housing for Families with Children (FPGR) 0 0 0 8 0 0 0 0 0
RM CWS 0 0 0 0 28 0 0 0 0
RM Men 0 0 0 0 0 1 0 0 0
RM WCC 0 0 0 0 0 0 27 0 0
Roanoke Rescue Mission - Cold Weather Shelter 0 0 0 0 7 0 0 0 0
Roanoke Rescue Mission - Men's Shelter 0 0 0 0 7 20 0 0 0
Roanoke Rescue Mission - WCC 0 0 0 0 1 0 25 0 0
Safehomes 0 0 0 0 0 0 0 1 0
Salvation Army 0 0 0 0 0 0 0 0 4

1 n

Overall Demographics

# Overall Demographics    
d_sum_demo <- d_all |>
  select(hh_count, sheltered, age_fc, gender, ethnicity, race, chronic_hx, veteran_status)|>
  tbl_summary(
    by = sheltered,
    statistic = hh_count ~ "{n}",
    sort = list(c(gender, ethnicity, race, chronic_hx, veteran_status, hh_count ) ~ "frequency"),
    label = list(hh_count ~ "Total Number of Households",
                 age_fc ~ "Age Categories",
                 race ~ "Race",
                 ethnicity ~ "Ethnicity",
                 gender ~ "Gender",
                 veteran_status ~ "Veteran Status",
                 chronic_hx ~ "Chronically Homeless")
              )|>
  bold_labels()|>
  modify_caption("**All Households - Demographics** (N = {N})")|>
  modify_header(label ~ "**Total Number of Persons (Adults and Children)**")

d_sum_demo
All Households - Demographics (N = 202)
Total Number of Persons (Adults and Children) Sheltered, N = 1821 Unsheltered, N = 201
Total Number of Households 171 20
Age Categories
Under 18 11 (6.0%) 0 (0%)
18 - 24 7 (3.8%) 1 (5.0%)
Over 24 159 (87%) 19 (95%)
Unknown 5 (2.7%) 0 (0%)
Gender
Male 111 (61%) 14 (70%)
Female 69 (38%) 6 (30%)
Transgender 2 (1.1%) 0 (0%)
Ethnicity
Non-Hispanic/Non-Latin(a)(o)(x) 105 (99%) 0 (NA%)
Data not collected 1 (0.9%) 0 (NA%)
Unknown 76 20
Race
White 108 (59%) 13 (65%)
Black, African American, or African 60 (33%) 6 (30%)
Asian or Asian American 6 (3.3%) 0 (0%)
Multiple races 4 (2.2%) 0 (0%)
Data not collected 2 (1.1%) 0 (0%)
American Indian, Alaska Native, or Indigenous 0 (0%) 1 (5.0%)
Black or African-American 1 (0.5%) 0 (0%)
Client Doesn't know / Refused 1 (0.5%) 0 (0%)
Chronically Homeless 32 (18%) 11 (55%)
Veteran Status
No 137 (88%) 2 (100%)
Yes 17 (11%) 0 (0%)
Data not collected 2 (1.3%) 0 (0%)
Unknown 26 18

1 n; n (%)

Homeless Population Household Types

# Households with adults and children
d_sum_hh_adult_and_child <- d_all |>
  select(hh_count, sheltered, age_fc, gender, ethnicity, race, chronic_hx, veteran_status, hoh_type, household_type)|>
  filter(household_type == "With at least one adult and one child")|>
  tbl_summary(
    by = sheltered,
    statistic = all_categorical() ~ "{n}",
    sort = list(c(gender, ethnicity, race, chronic_hx, veteran_status, hh_count ) ~ "frequency"),
    label = list(hh_count ~ "Total Number of Households With Adults and Children",
                 age_fc ~ "Age Categories",
                 race ~ "Race",
                 ethnicity ~ "Ethnicity",
                 gender ~ "Gender",
                 veteran_status ~ "Veteran Status",
                 chronic_hx ~ "Chronically Homeless")
              )|>
  bold_labels()|>
  modify_caption("**Homeless Population** (N = {N})")|>
  modify_header(label ~ " ")

d_sum_hh_adult_and_child
Homeless Population (N = 11)
Sheltered, N = 111
Total Number of Households With Adults and Children 5
Age Categories
Under 18 6
18 - 24 1
Over 24 4
Unknown 0
Gender
Male 6
Female 5
Ethnicity
Non-Hispanic/Non-Latin(a)(o)(x) 11
Race
Black, African American, or African 6
Asian or Asian American 5
Chronically Homeless
No 11
Veteran Status
No 7
Unknown 4
hoh_type
HoH With Adult(s) and Child(ren) 4
HoH Without Children 1
Not HoH 6
household_type
With at least one adult and one child 11

1 n

# Households without children
d_sum_hh_without_children <- d_all |>
  select(hh_count, sheltered, age_fc, gender, ethnicity, race, chronic_hx, veteran_status, hoh_type, household_type)|>
  filter(household_type == "Without children")|>
  tbl_summary(
    by = sheltered,
    statistic = all_categorical() ~ "{n}",
    sort = list(c(gender, ethnicity, race, chronic_hx, veteran_status, hh_count ) ~ "frequency"),
    label = list(hh_count ~ "Total Number of Households Without Children",
                 age_fc ~ "Age Categories",
                 race ~ "Race",
                 ethnicity ~ "Ethnicity",
                 gender ~ "Gender",
                 veteran_status ~ "Veteran Status",
                 chronic_hx ~ "Chronically Homeless")
              )|>
  bold_labels()|>
  modify_caption("**Homeless Population** (N = {N})")|>
  modify_header(label ~ " ")

d_sum_hh_without_children
Homeless Population (N = 94)
Sheltered, N = 941
Total Number of Households Without Children 94
Age Categories
Under 18 0
18 - 24 2
Over 24 92
Unknown 0
Gender
Male 58
Female 35
Transgender 1
Ethnicity
Non-Hispanic/Non-Latin(a)(o)(x) 93
Data not collected 1
Race
White 61
Black, African American, or African 28
Multiple races 3
Asian or Asian American 1
Client Doesn't know / Refused 1
Chronically Homeless 19
Veteran Status
No 81
Yes 12
Data not collected 1
hoh_type
HoH Without Children 94
household_type
Without children 94

1 n

Veteran Households

# Veteran Households
d_sum_vet_hh <- d_all |>
  select(hh_count, sheltered, gender, ethnicity, race, chronic_hx, veteran_status)|>
  filter(veteran_status == "Yes")|>
  tbl_summary(
    by = sheltered,
    statistic = all_categorical() ~ "{n}",
    sort = list(c(hh_count, gender, ethnicity, race, chronic_hx ) ~ "frequency"),
    label = list(hh_count ~ "Total Number of Veteran Households",
                 race ~ "Race",
                 ethnicity ~ "Ethnicity",
                 gender ~ "Gender",
                 chronic_hx ~ "Chronically Homeless")
              )|>
  bold_labels()|>
  modify_header(label ~ "**Total Number of Persons (Adults and Children)**")

d_sum_vet_hh
Total Number of Persons (Adults and Children) Sheltered, N = 171
Total Number of Veteran Households 17
Gender
Male 15
Female 2
Ethnicity
Non-Hispanic/Non-Latin(a)(o)(x) 12
Unknown 5
Race
White 11
Black, African American, or African 4
Client Doesn't know / Refused 1
Multiple races 1
Chronically Homeless 4
veteran_status
Yes 17

1 n

Unaccompanied Youth

# Unaccompanied Youth

d_sum_unacc_youth <- d_all|>
  select(hh_count, sheltered, age_fc, gender, ethnicity, race, chronic_hx, veteran_status, unacc_youth)|>
  filter(unacc_youth == "Yes")|>
  tbl_summary(
    by = sheltered,
    statistic = all_categorical() ~ "{n}",
    sort = list(c(gender, ethnicity, race, chronic_hx, veteran_status, hh_count ) ~ "frequency"),
    label = list(hh_count ~ "Total Number of Households",
                 age_fc ~ "Age Categories",
                 race ~ "Race",
                 ethnicity ~ "Ethnicity",
                 gender ~ "Gender",
                 veteran_status ~ "Veteran Status",
                 chronic_hx ~ "Chronically Homeless")
              )|>
  bold_labels()|>
  modify_caption("**Unaccompanied Youth**")|>
  modify_header(label ~ "**Total Number of Persons**")

d_sum_unacc_youth
Unaccompanied Youth
Total Number of Persons Sheltered, N = 71 Unsheltered, N = 11
Total Number of Households 7 1
Age Categories
Under 18 0 0
18 - 24 7 1
Over 24 0 0
Unknown 0 0
Gender
Female 4 0
Male 3 1
Ethnicity
Non-Hispanic/Non-Latin(a)(o)(x) 3 0
Unknown 4 1
Race
Black, African American, or African 4 1
White 3 0
Chronically Homeless 1 0
Veteran Status
No 7 0
Unknown 0 1
unacc_youth
Yes 7 1

1 n

Subpopulations

# Subpopulations
d_sum_subpop <- d_all |>
  select(sheltered, mh_dx, sud_dx, hiv_dx, dv)|>
  tbl_summary(
    by = sheltered,
    sort = all_categorical() ~ "frequency",
    label = list(mh_dx ~ "Mental Health Disorder",
                 hiv_dx ~ "HIV/AIDS",
                 sud_dx ~ "Substance Use Disorder",
                 dv ~ "Victims of Domestic Violence")
    )|>
  bold_labels()|>
    modify_caption("**Homeless Subpopulations**")|>
  modify_header(label ~ "**Total Number of Persons (Adults and Children)**")

d_sum_subpop
Homeless Subpopulations
Total Number of Persons (Adults and Children) Sheltered, N = 1821 Unsheltered, N = 201
Mental Health Disorder 58 (32%) 14 (70%)
Substance Use Disorder 27 (15%) 7 (35%)
HIV/AIDS 1 (0.5%) 1 (5.0%)
Victims of Domestic Violence 38 (21%) 8 (40%)

1 n (%)