df <- readRDS("C:/Users/court/Google Drive/Research/SRHS/SRHS_coded.RDS")

NOTE Update on September 26, 2021. Variable ‘advertising’ was previously incorrect and was fixed.

BUSINESS PRACTICE CORRELATIONS

 df_corr <- df %>% select(
   bp_advert_b,
   bp_screen_b,
   bp_dec_flex_num,
   bp_dec_standard_num,
   bp_dec_offer_num,
   bp_vouch_b,
   bp_crim_b,
   bp_dis_b,
   bp_keep_pct_num,
   bp_keep_rsn,
   bp_install_b,
   bp_comm_unit_fee_app_b,
   bp_comm_unit_fee_sec_b,
   bp_comm_unit_fee_clean_b,
   bp_comm_unit_fee_park_b,
   bp_fair_b,
   bp_comm_unit_fee_incl_b,
   bp_comm_unit_deposit_b,
   bp_rent_raise_b,
   bp_rent_raise_num,
   bp_rent_raise_rising,
   bp_rent_raise_regulation,
   bp_rent_raise_market,
   bp_terminate_b,
   bp_terminate_num,
   bp_terminate_paylate,
   bp_terminate_pay,
   bp_court_b,
   bp_income_b,
   bp_income_num,
   ll_remain_1or5yr_scale,
   ll_remain_reg
   )


df_corr <- df_corr %>% rename(
                    "Advertising" = bp_advert_b,
                    "Screening" = bp_screen_b,
                    "Flexible decision" = bp_dec_flex_num,
                    "Standard criteria" = bp_dec_standard_num,
                    "Offers to nonstandard" = bp_dec_offer_num,
                    "Rent to vouchers" = bp_vouch_b,
                    "Rent to criminal" = bp_crim_b,
                    "Disability accom." = bp_dis_b,
                    "Deposit pct. kept" = bp_keep_pct_num,
                    "Depsoit kept reason" = bp_keep_rsn,
                    "Allow installments" = bp_install_b,
                    "Fair market price" = bp_fair_b,
                    "App fee"   =   bp_comm_unit_fee_app_b,
                    "Security deposit" =    bp_comm_unit_fee_sec_b,
                    "Cleaning fee"  =   bp_comm_unit_fee_clean_b,
                    "Parking fee"   =   bp_comm_unit_fee_park_b,
                    "Utilities included" = bp_comm_unit_fee_incl_b,
                    "Last month required" = bp_comm_unit_deposit_b,
                    "Raised rent" = bp_rent_raise_b,
                    "Raised rent pct." = bp_rent_raise_num,
                    "Raised rent - rising costs" = bp_rent_raise_rising,
                    "Raised rent - regulations" = bp_rent_raise_regulation,
                    "Raised rent - market" =  bp_rent_raise_market,
                     "Ever terminated" = bp_terminate_b,
                     "Num of terminations" = bp_terminate_num,
                     "Terminated - paid late" = bp_terminate_paylate,
                     "Terminated - non payment" = bp_terminate_pay,
                     "Terminated - use courts" = bp_court_b,
                     "Renter income - above avg. Seattle" = bp_income_b,
                     "Renter income estimate" = bp_income_num,
                     "Still be prop mngr in 1, 5 yrs" = ll_remain_1or5yr_scale,
                     "Stop being prop mngr burdensome regs" = ll_remain_reg)
                   


# --------------------------
# # Variable groups
# 
# 
# # group A
#                     "Advertising",
#                     "Screening",
#                     "Flexible decision",
#                     "Standard criteria",
#                     "Offers to nonstandard",
#                     "Rent to vouchers",
#                     "Rent to criminal",
#                     "Disability accom.",
#                     
# # group B
#                     "Deposit pct. kept",
#                     "Depsoit kept reason",
#                     "Allow installments",
#                     "Utilities included",
#                     "App fee",
#                     "Security deposit",
#                     "Cleaning fee",
#                     "Parking fee",
# # group C
# 
#                     
#                     "Fair market price",
#                     "Last month required",
#                     "Raised rent",
#                     "Raised rent pct.",
#                     "Raised rent - rising costs",
#                     "Raised rent - regulations",
#                     "Raised rent - market",
#                     
# # group D
#                      "Ever terminated",
#                      "Num of terminations",
#                      "Terminated - paid late",
#                      "Terminated - non payment",
#                      "Terminated - use courts",
#                     
# # group E
#                      "Renter income - above avg. Seattle",
#                      "Renter income estimate",
#                      "Still be prop mngr in 1, 5 yrs",
#                      "Stop being prop mngr burdensome regs"

                  
df_corr_AB <- df_corr %>%
   select("Advertising",
                    "Screening",
                    "Flexible decision",
                    "Standard criteria",
                    "Offers to nonstandard",
                    "Rent to vouchers",
                    "Rent to criminal",
                    "Disability accom.",
                     "Deposit pct. kept",
                    "Depsoit kept reason",
                    "Allow installments",
                    "Utilities included",
                    "App fee",
                    "Security deposit",
                    "Cleaning fee",
                    "Parking fee")

df_corr_AC <- df_corr %>% 
      select("Advertising",
                    "Screening",
                    "Flexible decision",
                    "Standard criteria",
                    "Offers to nonstandard",
                    "Rent to vouchers",
                    "Rent to criminal",
                    "Disability accom.",
             "Fair market price",
                    "Last month required",
                    "Raised rent",
                    "Raised rent pct.",
                    "Raised rent - rising costs",
                    "Raised rent - regulations",
                    "Raised rent - market")

df_corr_AD <- df_corr %>% 
      select("Advertising",
                    "Screening",
                    "Flexible decision",
                    "Standard criteria",
                    "Offers to nonstandard",
                    "Rent to vouchers",
                    "Rent to criminal",
                    "Disability accom.",
             "Ever terminated",
                     "Num of terminations",
                     "Terminated - paid late",
                     "Terminated - non payment",
                     "Terminated - use courts")

df_corr_AE <- df_corr %>% 
      select("Advertising",
                    "Screening",
                    "Flexible decision",
                    "Standard criteria",
                    "Offers to nonstandard",
                    "Rent to vouchers",
                    "Rent to criminal",
                    "Disability accom.",
             "Renter income - above avg. Seattle",
                     "Renter income estimate",
                     "Still be prop mngr in 1, 5 yrs",
                     "Stop being prop mngr burdensome regs")

df_corr_BC <- df_corr %>% 
   select("Deposit pct. kept",
                    "Depsoit kept reason",
                    "Allow installments",
                    "Utilities included",
                    "App fee",
                    "Security deposit",
                    "Cleaning fee",
                    "Parking fee",
              "Last month required",
                    "Raised rent",
                    "Raised rent pct.",
                    "Raised rent - rising costs",
                    "Raised rent - regulations",
                    "Raised rent - market")



df_corr_BD <- df_corr %>% 
   select("Deposit pct. kept",
                    "Depsoit kept reason",
                    "Allow installments",
                    "Utilities included",
                    "App fee",
                    "Security deposit",
                    "Cleaning fee",
                    "Parking fee",
                       "Ever terminated",
                     "Num of terminations",
                     "Terminated - paid late",
                     "Terminated - non payment",
                     "Terminated - use courts")


df_corr_BE <- df_corr %>% 
   select("Deposit pct. kept",
                    "Depsoit kept reason",
                    "Allow installments",
                    "Utilities included",
                    "App fee",
                    "Security deposit",
                    "Cleaning fee",
                    "Parking fee",
          "Renter income - above avg. Seattle",
                     "Renter income estimate",
                     "Still be prop mngr in 1, 5 yrs",
                     "Stop being prop mngr burdensome regs")


df_corr_CD <- df_corr %>% 
   select("Last month required",
                    "Raised rent",
                    "Raised rent pct.",
                    "Raised rent - rising costs",
                    "Raised rent - regulations",
                    "Raised rent - market",
                       "Ever terminated",
                     "Num of terminations",
                     "Terminated - paid late",
                     "Terminated - non payment",
                     "Terminated - use courts")



df_corr_CE <- df_corr %>%
   select("Last month required",
                    "Raised rent",
                    "Raised rent pct.",
                    "Raised rent - rising costs",
                    "Raised rent - regulations",
                    "Raised rent - market",
          "Renter income - above avg. Seattle",
                     "Renter income estimate",
                     "Still be prop mngr in 1, 5 yrs",
                     "Stop being prop mngr burdensome regs")


df_corr_DE <- df_corr %>% 
   select("Ever terminated",
                     "Num of terminations",
                     "Terminated - paid late",
                     "Terminated - non payment",
                     "Terminated - use courts",
          "Renter income - above avg. Seattle",
                     "Renter income estimate",
                     "Still be prop mngr in 1, 5 yrs",
                     "Stop being prop mngr burdensome regs")



# 
# library(ggcorrplot)
# model.matrix(~0+., data=df_corr) %>% 
#   cor(use="pairwise.complete.obs") %>% 
#   ggcorrplot(
#     show.diag = F, 
#     type="upper", 
#     lab=TRUE, 
#     lab_size=1) +
#   theme(axis.text.x = element_text(angle=90, size = 6)) +
#   theme(axis.text.y = element_text(size = 6) )
# 

Variable info

The business practice variables are grouped into 5 categories and combinations of two categories are correlated at a time to make the correlation plots more readable. ALL variable were forced to be binary or numeric.

Categories:

  1. Leasing
  2. Fees
  3. Rent
  4. Terminations
  5. Renter Profile, Future

See below for the list of variables in each category and how they are coded:

Leasing

  • Advertising - types of advertising
    • 0: non word-of-mouth
    • 1: word-of-mouth
  • Screening - use of third party screening service
    • 0: no
    • 1: yes
  • Flexible decision - criteria used to make leasing decisions is flexible
    • 5: strongly agree
    • 4: agree
    • 3: neither agree nor disagree
    • 2: disagree
    • 1: strongly disagree
  • Standard criteria - decisions based on a standard set of criteria
    • 5: strongly agree
    • 4: agree
    • 3: neither agree nor disagree
    • 2: disagree
    • 1: strongly disagree
  • Offers to nonstandard - how often offer tenancy to low-resource applicants who do not meet standard requirements
    • 5: nearly always
    • 4: very often
    • 3: sometimes
    • 2: rarely
    • 1: never
  • Rent to vouchers - ever rented to tenant using vouchers
    • 0: no
    • 1: yes
  • Rent to criminal - ever rented to tenant you knew had criminal record
    • 0: no
    • 1: yes
  • Disability accom. - ever had tenant request disability accomodations
    • 0: no
    • 1: yes

Fees

  • Deposit pct. kept - what percentage of security/pet deposits did you retain
    • 0: 0%
    • 25: less than 25%
    • 50: about 50%
    • 75: more than 75%
    • 100: 100%
  • Deposit kept reason - why did you retain some or all of deposit
    • 0: cover damages
    • 1: cover unpaid rent or fees
  • Allow installments - prior to 2017, allow fees or deposits in installments
    • 0: no
    • 1: yes
  • Utilities included - do you include utilities in rent for most common unit size
    • 0: no
    • 1: yes (any)
  • Security deposit - average security deposit fee for most common unit size
    • 0: below or equal to the median fee by most common unit size
    • 1: above the median fee by most common unit size
  • App fee - average application fee for most common unit size
    • 0: below or equal to the median fee by most common unit size
    • 1: above the median fee by most common unit size
  • Cleaning fee - average cleaning fee for most common unit size
    • 0: below or equal to the median fee by most common unit size
    • 1: above the median fee by most common unit size
  • Parking fee - average parking fee for most common unit size
    • 0: below or equal to the median fee by most common unit size
    • 1: above the median fee by most common unit size

Rent

  • Fair market price - average monthly rent for most common unit size above or below fair market price
    • 0: below or equal to fair market price
    • 1: above fair market price
    • note: here are 2018 king county fair market prices
      • 1br=$1,108
      • 2br=$1,243
      • 3br=$1,527
      • 4br=$2,211
      • 5br=$2,617
  • Last month required require last month’s rent before move in for most common unit size
    • 0: no
    • 1: yes
  • Raised rent - raised rent in past year
    • 0: no
    • 1: yes
  • Raised rent pct. - raised rent by how much percent
    • 0: have not raised rent
    • 1: 1-5%
    • 6: 6-10%
    • 11: 11-15%
    • 16: 16-25%
    • 26: more than 25%
  • Raised rent - rising costs - raised rent due to rising costs of taxes, repairs
    • 0: no
    • 1: yes
  • Raised rent - regulations - raised rent due to regulations
    • 0: no
    • 1: yes
  • Raised rent - market - raised rent due to housing market
    • 0: no
    • 1: yes

Terminations

  • Ever terminated - in 2017, did you terminate tenancies
    • 0: none
    • 1: 1 or more
  • Num of terminations - in 2017, how many tenancies did you terminate
    • 0: 0
    • 1: 1-5
    • 6: 6-10
    • 11: 11-20
    • 20: more than 20
  • Terminated - paid late - any terminated due to late payment
    • 0: no
    • 1: yes
  • Terminated - non payment - any terminated due to late payment
    • 0: no
    • 1: yes
  • Terminated - use courts - of the terminations, were these handled with the courts
    • 0: always or usually handle with tenants
    • 1: always or usually handle with the courts

Renter Profile, Future

  • Renter income - above avg. Seattle - average income of renter by most common unit size compared to average Seattle income
    • 0: <= $50,000
    • 1: > 50,000
  • Renter income estimate average income of renter by most common unit size
    • 0: less than 25,000
    • 25: 25,000-50,000
    • 50: 50,000-75,000
    • 75: 75,000-150,000
    • 150: more than 150,000
  • Still be prop mngr in 1, 5 yrs - do you expect to remain a property manager
    • 0: unsure, definitely or propably not in 1 or 5 yrs
    • 1: definitely or probably in 1 or 5 yrs
  • Stop being prop mngr burdensome regs - why might you stop being property manager
    • 0: other reasons
    • 1: burdensome regulatory environment

Leasing & Fees

library(ggcorrplot)
model.matrix(~0+., data=df_corr_AB) %>% 
  cor(use="pairwise.complete.obs") %>% 
  ggcorrplot(
    show.diag = F, 
    type="upper", 
    lab=TRUE, 
    lab_size=2.5) +
  theme(axis.text.x = element_text(angle=90, size = 9)) +
  theme(axis.text.y = element_text(size = 9) )

Leasing & Rent

library(ggcorrplot)
model.matrix(~0+., data=df_corr_AC) %>% 
  cor(use="pairwise.complete.obs") %>% 
  ggcorrplot(
    show.diag = F, 
    type="upper", 
    lab=TRUE, 
    lab_size=2.3) +
  theme(axis.text.x = element_text(angle=90, size = 9)) +
  theme(axis.text.y = element_text(size = 9) )

Leasing & Terminations

library(ggcorrplot)
model.matrix(~0+., data=df_corr_AD) %>% 
  cor(use="pairwise.complete.obs") %>% 
  ggcorrplot(
    show.diag = F, 
    type="upper", 
    lab=TRUE, 
    lab_size=2.5) +
  theme(axis.text.x = element_text(angle=90, size = 9)) +
  theme(axis.text.y = element_text(size = 9) )

Leasing & Renter profile, Future

library(ggcorrplot)
model.matrix(~0+., data=df_corr_AE) %>% 
  cor(use="pairwise.complete.obs") %>% 
  ggcorrplot(
    show.diag = F, 
    type="upper", 
    lab=TRUE, 
    lab_size=2.1) +
  theme(axis.text.x = element_text(angle=90, size = 9)) +
  theme(axis.text.y = element_text(size = 9) )

Fees & Rent

library(ggcorrplot)
model.matrix(~0+., data=df_corr_BC) %>% 
  cor(use="pairwise.complete.obs") %>% 
  ggcorrplot(
    show.diag = F, 
    type="upper", 
    lab=TRUE, 
    lab_size=2.1) +
  theme(axis.text.x = element_text(angle=90, size = 9)) +
  theme(axis.text.y = element_text(size = 9) )

Fees & Terminations

library(ggcorrplot)
model.matrix(~0+., data=df_corr_BD) %>% 
  cor(use="pairwise.complete.obs") %>% 
  ggcorrplot(
    show.diag = F, 
    type="upper", 
    lab=TRUE, 
    lab_size=2.5) +
  theme(axis.text.x = element_text(angle=90, size = 9)) +
  theme(axis.text.y = element_text(size = 9) )

Fees & Renter profile, Future

library(ggcorrplot)
model.matrix(~0+., data=df_corr_BE) %>% 
  cor(use="pairwise.complete.obs") %>% 
  ggcorrplot(
    show.diag = F, 
    type="upper", 
    lab=TRUE, 
    lab_size=2.5) +
  theme(axis.text.x = element_text(angle=90, size = 9)) +
  theme(axis.text.y = element_text(size = 9) )

Rent & Terminations

library(ggcorrplot)
model.matrix(~0+., data=df_corr_CD) %>% 
  cor(use="pairwise.complete.obs") %>% 
  ggcorrplot(
    show.diag = F, 
    type="upper", 
    lab=TRUE, 
    lab_size=2.8) +
  theme(axis.text.x = element_text(angle=90, size = 9)) +
  theme(axis.text.y = element_text(size = 9) )

Rent & Renter profile, Future

library(ggcorrplot)
model.matrix(~0+., data=df_corr_CE) %>% 
  cor(use="pairwise.complete.obs") %>% 
  ggcorrplot(
    show.diag = F, 
    type="upper", 
    lab=TRUE, 
        lab_size=2.5) +
  theme(axis.text.x = element_text(angle=90, size = 9)) +
  theme(axis.text.y = element_text(size = 9) )

Terminations & Renter profile, Future

library(ggcorrplot)
model.matrix(~0+., data=df_corr_CE) %>% 
  cor(use="pairwise.complete.obs") %>% 
  ggcorrplot(
    show.diag = F, 
    type="upper", 
    lab=TRUE, 
    lab_size=2.5) +
  theme(axis.text.x = element_text(angle=90, size = 9)) +
  theme(axis.text.y = element_text(size = 9) )

STRONGEST CORRELATIONS

NOTE numbers may be slightly different than plots above

NOTE Update on September 26, 2021: Now these included any correlations above 0.2 (or below -0.2)

Top positive correlations

cor(df_corr,
        use="pairwise.complete.obs") %>%
  as.data.frame() %>%
  mutate(var1 = rownames(.)) %>%
  gather(var2, value, -var1) %>%
  arrange(desc(value)) %>%
  group_by(value) %>%
  filter(row_number()==1) %>%
  filter(value >=0.20 & value<1.00) %>%
  rename(correlation = value) %>%
  kbl() %>%
  kable_styling(bootstrap_options = c("striped", "hover"))
var1 var2 correlation
Raised rent pct. Raised rent 0.9997291
Renter income estimate Renter income - above avg. Seattle 0.6707352
Num of terminations Ever terminated 0.5161096
Terminated - non payment Rent to vouchers 0.3685769
Offers to nonstandard Flexible decision 0.3581552
Renter income estimate Fair market price 0.3291559
Rent to criminal Rent to vouchers 0.3102654
Fair market price Security deposit 0.3064137
Terminated - non payment Depsoit kept reason 0.2822975
Fair market price Parking fee 0.2818606
Disability accom. Rent to vouchers 0.2790958
Renter income estimate Security deposit 0.2687971
Standard criteria Screening 0.2361623
Depsoit kept reason Deposit pct. kept 0.2334017
Ever terminated Rent to vouchers 0.2236422
Terminated - non payment Rent to criminal 0.2199996
Disability accom. Rent to criminal 0.2138545
Ever terminated Depsoit kept reason 0.2079277
Terminated - non payment Disability accom. 0.2005175

Top negative correlations

cor(df_corr,
        use="pairwise.complete.obs") %>%
  as.data.frame() %>%
  mutate(var1 = rownames(.)) %>%
  gather(var2, value, -var1) %>%
  arrange((value)) %>%
  group_by(value) %>%
  filter(row_number()==1) %>%
  filter(value <=-0.20 & value>-1.00) %>%
  rename(correlation = value) %>%
  kbl() %>%
  kable_styling(bootstrap_options = c("striped", "hover"))
var1 var2 correlation
Raised rent - market Raised rent - rising costs -0.8837681
Stop being prop mngr burdensome regs Still be prop mngr in 1, 5 yrs -0.6833430
Terminated - use courts Ever terminated -0.4303814
Raised rent - regulations Raised rent - rising costs -0.3528727
Terminated - use courts Terminated - non payment -0.3341441
Terminated - use courts Num of terminations -0.3146813
Standard criteria Flexible decision -0.3137977
Renter income estimate Rent to vouchers -0.2553159
Renter income estimate Terminated - non payment -0.2444974
Renter income - above avg. Seattle Rent to vouchers -0.2354861
Standard criteria Advertising -0.2227897
Terminated - use courts Rent to vouchers -0.2078241
Renter income estimate Allow installments -0.2056145
Screening Advertising -0.2000281