coded_df <- readRDS("C:/Users/court/Google Drive/Research/SRHS/SRHS_coded.RDS")
df <- coded_df %>% select(
   ll_finrole2,
   ll_size,
   bp_advert_b,
   bp_screen_b,
   bp_dec_flex_b,
   bp_dec_standard_b,
   bp_dec_offer_b,
   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_b,
   ll_remain_reg
   )

df <- df %>% mutate(
  ll_size = relevel(as.factor(ll_size), ref="small"),
  ll_finrole2 = as.factor(ll_finrole2)
)

df <- df %>% rename(
                    "Landlord_size_" = ll_size,
                    "Financial_role_" = ll_finrole2,
                    "Advertising" = bp_advert_b,
                    "Screening" = bp_screen_b,
                    "Flexible_decision" = bp_dec_flex_b,
                    "Standard_criteria" = bp_dec_standard_b,
                    "Offers_to_nonstandard" = bp_dec_offer_b,
                    "Rent_to_vouchers" = bp_vouch_b,
                    "Rent_to_criminal" = bp_crim_b,
                    "Disability_accom." = bp_dis_b,
                    "Deposit_pct_kept" = bp_keep_pct_num,
                    "Deposit_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,
                     "Renterincome_above_avg_Seattle" = bp_income_b,
                     "Renter_income_estimate" = bp_income_num,
                     "Still_mngr_1_5yrs" = ll_remain_1or5yr_b,
                     "Stop_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"

Business practices, landlord size, and financial role

This document shows simple crosstabs and models for:

  • each business practice and landlord size
  • each business practice, landlord size, financial role, and interaction between size*financial

Most variables were forced into a binary (likert scale included) and odds ratios are presented. Where possible, numbers were left numeric.

Cross tab of interaction variables:

df %>% 
  tbl_summary(
    by = Landlord_size_,
    percent = "row",
    missing = "no",
    include = c(Financial_role_),
    statistic = list(all_categorical() ~ "{n} ({p}%)")) %>%
  add_p() %>%
  bold_labels() %>%
  modify_header(update = all_stat_cols() ~ "**{level}**") %>% # Remove the Ns from the header row
modify_spanning_header(starts_with("stat_") ~ "**Landlord size & financial role**")
Characteristic Landlord size & financial role p-value1
small big
Financial_role_, n (%) <0.001
Other 2,767 (82%) 594 (18%)
Primary Income 169 (37%) 288 (63%)

1 Pearson's Chi-squared test

Leasing

Advertising

Outcome:

  • 0: word-of-mouth
  • 1: non word-of-mouth


Crosstabs:

df %>% 
  tbl_summary(
    by = Advertising,
    percent = "row",
    missing = "no",
    include = c(Landlord_size_, Financial_role_),
    statistic = list(all_categorical() ~ "{n} ({p}%)")) %>%
  add_p() %>%
  bold_labels() %>%
  modify_header(update = all_stat_cols() ~ "**{level}**") %>% # Remove the Ns from the header row
modify_spanning_header(starts_with("stat_") ~ "**Advertising**")
Characteristic Advertising p-value1
0 1
Landlord_size_, n (%) <0.001
small 2,603 (88%) 343 (12%)
big 856 (96%) 34 (3.8%)
Financial_role_, n (%) <0.001
Other 2,997 (89%) 364 (11%)
Primary Income 445 (97%) 12 (2.6%)

1 Pearson's Chi-squared test


Models:

m1 <- glm(Advertising~1 + Landlord_size_,
          family=binomial(link="logit"), data=df)

m2 <- glm(Advertising~1 + Landlord_size_ + Financial_role_ +
            (Landlord_size_ * Financial_role_),
          family=binomial(link="logit"), data=df)



tbl_regression(m1, exponentiate=TRUE)
Characteristic OR (95% CI)1 p-value
Landlord_size_
small
big 0.30 (0.21 to 0.43) <0.001

1 OR = Odds Ratio, CI = Confidence Interval

tbl_regression(m2, exponentiate = TRUE)
Characteristic OR (95% CI)1 p-value
Landlord_size_
small
big 0.39 (0.26 to 0.56) <0.001
Financial_role_
Other
Primary Income 0.36 (0.16 to 0.70) 0.006
Landlord_size_ * Financial_role_
big * Primary Income 0.73 (0.18 to 2.52) 0.63

1 OR = Odds Ratio, CI = Confidence Interval



Screening

Outcome: use of third party screening service

  • 0: no
  • 1: yes


Crosstabs:

df %>% 
  tbl_summary(
    by = Screening,
    percent = "row",
    missing = "no",
    include = c(Landlord_size_, Financial_role_),
    statistic = list(all_categorical() ~ "{n} ({p}%)")) %>%
  add_p() %>%
  bold_labels() %>%
  modify_header(update = all_stat_cols() ~ "**{level}**") %>% # Remove the Ns from the header row
modify_spanning_header(starts_with("stat_") ~ "**Screening**")
Characteristic Screening p-value1
0 1
Landlord_size_, n (%) <0.001
small 1,810 (61%) 1,136 (39%)
big 433 (49%) 457 (51%)
Financial_role_, n (%) <0.001
Other 2,001 (60%) 1,360 (40%)
Primary Income 230 (50%) 227 (50%)

1 Pearson's Chi-squared test


Models:

m1 <- glm(Screening~1 + Landlord_size_,
          family=binomial(link="logit"), data=df)

m2 <- glm(Screening~1 + Landlord_size_ + Financial_role_ +
            (Landlord_size_ * Financial_role_),
          family=binomial(link="logit"), data=df)



tbl_regression(m1, exponentiate=TRUE)
Characteristic OR (95% CI)1 p-value
Landlord_size_
small
big 1.68 (1.45 to 1.96) <0.001

1 OR = Odds Ratio, CI = Confidence Interval

tbl_regression(m2, exponentiate=TRUE)
Characteristic OR (95% CI)1 p-value
Landlord_size_
small
big 1.60 (1.34 to 1.92) <0.001
Financial_role_
Other
Primary Income 1.13 (0.82 to 1.55) 0.44
Landlord_size_ * Financial_role_
big * Primary Income 1.06 (0.69 to 1.62) 0.80

1 OR = Odds Ratio, CI = Confidence Interval



Flexible decision

Outcome: criteria used to make leasing decisions is flexible

  • 1: agree
  • 0: disagree or neutral


Crosstabs:

df %>% 
  tbl_summary(
    by = Flexible_decision,
    percent = "row",
    missing = "no",
    include = c(Landlord_size_, Financial_role_),
    statistic = list(all_categorical() ~ "{n} ({p}%)")) %>%
  add_p() %>%
  bold_labels() %>%
  modify_header(update = all_stat_cols() ~ "**{level}**") %>% # Remove the Ns from the header row
modify_spanning_header(starts_with("stat_") ~ "**Flexible decision**")
Characteristic Flexible decision p-value1
0 1
Landlord_size_, n (%) 0.40
small 1,150 (43%) 1,551 (57%)
big 316 (41%) 457 (59%)
Financial_role_, n (%) 0.16
Other 1,311 (43%) 1,762 (57%)
Primary Income 149 (39%) 234 (61%)

1 Pearson's Chi-squared test


Models:

m1 <- glm(Flexible_decision~1 + Landlord_size_,
          family=binomial(link="logit"), data=df)

m2 <- glm(Flexible_decision~1 + Landlord_size_ + Financial_role_ +
            (Landlord_size_ * Financial_role_),
          family=binomial(link="logit"), data=df)



tbl_regression(m1, exponentiate=TRUE)
Characteristic OR (95% CI)1 p-value
Landlord_size_
small
big 1.07 (0.91 to 1.26) 0.40

1 OR = Odds Ratio, CI = Confidence Interval

tbl_regression(m2, exponentiate=TRUE)
Characteristic OR (95% CI)1 p-value
Landlord_size_
small
big 1.11 (0.91 to 1.34) 0.30
Financial_role_
Other
Primary Income 1.42 (1.01 to 2.03) 0.047
Landlord_size_ * Financial_role_
big * Primary Income 0.68 (0.42 to 1.08) 0.10

1 OR = Odds Ratio, CI = Confidence Interval



Standard criteria

Outcome: decisions based on a standard set of criteria

  • 1: agree
  • 0: disagree or neutral


Crosstabs:

df %>% 
  tbl_summary(
    by = Standard_criteria,
    percent = "row",
    missing = "no",
    include = c(Landlord_size_, Financial_role_),
    statistic = list(all_categorical() ~ "{n} ({p}%)")) %>%
  add_p() %>%
  bold_labels() %>%
  modify_header(update = all_stat_cols() ~ "**{level}**") %>% # Remove the Ns from the header row
modify_spanning_header(starts_with("stat_") ~ "**Standard criteria**")
Characteristic Standard criteria p-value1
0 1
Landlord_size_, n (%) <0.001
small 839 (29%) 2,075 (71%)
big 179 (20%) 706 (80%)
Financial_role_, n (%) <0.001
Other 924 (28%) 2,403 (72%)
Primary Income 89 (20%) 365 (80%)

1 Pearson's Chi-squared test


Models:

m1 <- glm(Standard_criteria~1 + Landlord_size_,
          family=binomial(link="logit"), data=df)

m2 <- glm(Standard_criteria~1 + Landlord_size_ +
            Financial_role_ + (Landlord_size_ * Financial_role_),
          family=binomial(link="logit"), data=df)



tbl_regression(m1, exponentiate=TRUE)
Characteristic OR (95% CI)1 p-value
Landlord_size_
small
big 1.59 (1.33 to 1.92) <0.001

1 OR = Odds Ratio, CI = Confidence Interval

tbl_regression(m2, exponentiate=TRUE)
Characteristic OR (95% CI)1 p-value
Landlord_size_
small
big 1.37 (1.11 to 1.69) 0.003
Financial_role_
Other
Primary Income 1.07 (0.76 to 1.54) 0.69
Landlord_size_ * Financial_role_
big * Primary Income 1.56 (0.93 to 2.61) 0.091

1 OR = Odds Ratio, CI = Confidence Interval



Offers to nonstandard

Outcome: how often offer tenancy to low-resource applicants who do not meet standard requirements

  • 1: always or often
  • 0: sometimes or rarely


Crosstabs:

df %>% 
  tbl_summary(
    by = Offers_to_nonstandard,
    percent = "row",
    missing = "no",
    include = c(Landlord_size_, Financial_role_),
    statistic = list(all_categorical() ~ "{n} ({p}%)")) %>%
  add_p() %>%
  bold_labels() %>%
  modify_header(update = all_stat_cols() ~ "**{level}**") %>% # Remove the Ns from the header row
modify_spanning_header(starts_with("stat_") ~ "**Offers to nonstandard**")
Characteristic Offers to nonstandard p-value1
0 1
Landlord_size_, n (%) <0.001
small 2,619 (92%) 236 (8.3%)
big 773 (88%) 105 (12%)
Financial_role_, n (%) <0.001
Other 2,998 (92%) 269 (8.2%)
Primary Income 379 (84%) 71 (16%)

1 Pearson's Chi-squared test


Models:

m1 <- glm(Offers_to_nonstandard~1 + Landlord_size_,
          family=binomial(link="logit"), data=df)

m2 <- glm(Offers_to_nonstandard~1 + Landlord_size_ +
            Financial_role_ + (Landlord_size_ * Financial_role_),
          family=binomial(link="logit"), data=df)



tbl_regression(m1, exponentiate=TRUE)
Characteristic OR (95% CI)1 p-value
Landlord_size_
small
big 1.51 (1.18 to 1.92) <0.001

1 OR = Odds Ratio, CI = Confidence Interval

tbl_regression(m2, exponentiate=TRUE)
Characteristic OR (95% CI)1 p-value
Landlord_size_
small
big 1.38 (1.02 to 1.85) 0.035
Financial_role_
Other
Primary Income 2.41 (1.54 to 3.66) <0.001
Landlord_size_ * Financial_role_
big * Primary Income 0.64 (0.35 to 1.17) 0.14

1 OR = Odds Ratio, CI = Confidence Interval



Rent to vouchers

Outomce: ever rented to tenant using vouchers

  • 0: no
  • 1: yes


Crosstabs:

df %>% 
  tbl_summary(
    by = Rent_to_vouchers,
    percent = "row",
    missing = "no",
    include = c(Landlord_size_, Financial_role_),
    statistic = list(all_categorical() ~ "{n} ({p}%)")) %>%
  add_p() %>%
  bold_labels() %>%
  modify_header(update = all_stat_cols() ~ "**{level}**") %>% # Remove the Ns from the header row
modify_spanning_header(starts_with("stat_") ~ "**Rent to vouchers**")
Characteristic Rent to vouchers p-value1
0 1
Landlord_size_, n (%) <0.001
small 2,650 (90%) 296 (10%)
big 443 (50%) 447 (50%)
Financial_role_, n (%) <0.001
Other 2,823 (84%) 538 (16%)
Primary Income 259 (57%) 198 (43%)

1 Pearson's Chi-squared test


Models:

m1 <- glm(Rent_to_vouchers~1 + Landlord_size_,
          family=binomial(link="logit"), data=df)

m2 <- glm(Rent_to_vouchers~1 + Landlord_size_ +
            Financial_role_ + (Landlord_size_ * Financial_role_),
          family=binomial(link="logit"), data=df)



tbl_regression(m1, exponentiate=TRUE)
Characteristic OR (95% CI)1 p-value
Landlord_size_
small
big 9.03 (7.57 to 10.8) <0.001

1 OR = Odds Ratio, CI = Confidence Interval

tbl_regression(m2, exponentiate=TRUE)
Characteristic OR (95% CI)1 p-value
Landlord_size_
small
big 8.12 (6.62 to 9.97) <0.001
Financial_role_
Other
Primary Income 1.88 (1.21 to 2.84) 0.004
Landlord_size_ * Financial_role_
big * Primary Income 0.89 (0.54 to 1.51) 0.67

1 OR = Odds Ratio, CI = Confidence Interval



Rent to criminal

Outcome: ever rented to tenant you knew had criminal record

  • 0: no
  • 1: yes


Crosstabs:

df %>% 
  tbl_summary(
    by = Rent_to_criminal,
    percent = "row",
    missing = "no",
    include = c(Landlord_size_, Financial_role_),
    statistic = list(all_categorical() ~ "{n} ({p}%)")) %>%
  add_p() %>%
  bold_labels() %>%
  modify_header(update = all_stat_cols() ~ "**{level}**") %>% # Remove the Ns from the header row
modify_spanning_header(starts_with("stat_") ~ "**Rents to criminal hx**")
Characteristic Rents to criminal hx p-value1
0 1
Landlord_size_, n (%) <0.001
small 2,650 (90%) 296 (10%)
big 570 (64%) 320 (36%)
Financial_role_, n (%) <0.001
Other 2,923 (87%) 438 (13%)
Primary Income 286 (63%) 171 (37%)

1 Pearson's Chi-squared test


Models:

m1 <- glm(Rent_to_criminal~1 + Landlord_size_,
          family=binomial(link="logit"), data=df)

m2 <- glm(Rent_to_criminal~1 + Landlord_size_ +
            Financial_role_ + (Landlord_size_ * Financial_role_),
          family=binomial(link="logit"), data=df)



tbl_regression(m1, exponentiate=TRUE)
Characteristic OR (95% CI)1 p-value
Landlord_size_
small
big 5.03 (4.19 to 6.03) <0.001

1 OR = Odds Ratio, CI = Confidence Interval

tbl_regression(m2, exponentiate=TRUE)
Characteristic OR (95% CI)1 p-value
Landlord_size_
small
big 4.13 (3.32 to 5.12) <0.001
Financial_role_
Other
Primary Income 2.43 (1.61 to 3.57) <0.001
Landlord_size_ * Financial_role_
big * Primary Income 0.87 (0.54 to 1.44) 0.59

1 OR = Odds Ratio, CI = Confidence Interval



Disability accomodations

Outcome: ever had tenant request disability accomodations

  • 0: no
  • 1: yes


Crosstabs:

df %>% 
  tbl_summary(
    by = Disability_accom.,
    percent = "row",
    missing = "no",
    include = c(Landlord_size_, Financial_role_),
    statistic = list(all_categorical() ~ "{n} ({p}%)")) %>%
  add_p() %>%
  bold_labels() %>%
  modify_header(update = all_stat_cols() ~ "**{level}**") %>% # Remove the Ns from the header row
modify_spanning_header(starts_with("stat_") ~ "**Disability accommodations**")
Characteristic Disability accommodations p-value1
0 1
Landlord_size_, n (%) <0.001
small 2,802 (95%) 144 (4.9%)
big 654 (73%) 236 (27%)
Financial_role_, n (%) <0.001
Other 3,098 (92%) 263 (7.8%)
Primary Income 343 (75%) 114 (25%)

1 Pearson's Chi-squared test


Models:

m1 <- glm(Disability_accom.~1 + Landlord_size_,
          family=binomial(link="logit"), data=df)

m2 <- glm(Disability_accom.~1 + Landlord_size_ +
            Financial_role_ + (Landlord_size_ * Financial_role_),
          family=binomial(link="logit"), data=df)



tbl_regression(m1, exponentiate=TRUE)
Characteristic OR (95% CI)1 p-value
Landlord_size_
small
big 7.02 (5.62 to 8.80) <0.001

1 OR = Odds Ratio, CI = Confidence Interval

tbl_regression(m2, exponentiate=TRUE)
Characteristic OR (95% CI)1 p-value
Landlord_size_
small
big 6.40 (4.93 to 8.32) <0.001
Financial_role_
Other
Primary Income 2.68 (1.56 to 4.36) <0.001
Landlord_size_ * Financial_role_
big * Primary Income 0.61 (0.34 to 1.13) 0.10

1 OR = Odds Ratio, CI = Confidence Interval



Fees

Deposit pct. kept

Outcome: what percentage of security/pet deposits did you retain

  • 0: 0%
  • 25: less than 25%
  • 50: about 50%
  • 75: more than 75%
  • 100: 100%


Crosstabs:

df %>% 
  tbl_summary(
    by = Deposit_pct_kept,
    percent = "row",
    missing = "no",
    include = c(Landlord_size_, Financial_role_),
    statistic = list(all_categorical() ~ "{n} ({p}%)")) %>%
  add_p() %>%
  bold_labels() %>%
  modify_header(update = all_stat_cols() ~ "**{level}**") %>% # Remove the Ns from the header row
modify_spanning_header(starts_with("stat_") ~ "**Deposit pct kept**")
Characteristic Deposit pct kept p-value1
0 25 50 75 100
Landlord_size_, n (%) <0.001
small 1,415 (59%) 569 (24%) 108 (4.5%) 64 (2.7%) 245 (10%)
big 384 (45%) 292 (34%) 69 (8.1%) 21 (2.5%) 86 (10%)
Financial_role_, n (%) <0.001
Other 1,611 (57%) 699 (25%) 138 (4.9%) 71 (2.5%) 293 (10%)
Primary Income 185 (43%) 157 (37%) 36 (8.4%) 14 (3.3%) 35 (8.2%)

1 Pearson's Chi-squared test


Models:

m1 <- glm(Deposit_pct_kept~1 + Landlord_size_,
          family=gaussian(link="identity"), data=df)

m2 <- glm(Deposit_pct_kept~1 + Landlord_size_ +
            Financial_role_ + (Landlord_size_ * Financial_role_),
          family=gaussian(link="identity"), data=df)



tbl_regression(m1, exponentiate=TRUE)
Characteristic exp(Beta) (95% CI)1 p-value
Landlord_size_
small
big 65.6 (5.52 to 778) <0.001

1 CI = Confidence Interval

tbl_regression(m2, exponentiate=TRUE)
Characteristic exp(Beta) (95% CI)1 p-value
Landlord_size_
small
big 26.4 (1.44 to 485) 0.027
Financial_role_
Other
Primary Income 0.78 (0.00 to 140) 0.92
Landlord_size_ * Financial_role_
big * Primary Income 18.8 (0.02 to 18,730) 0.41

1 CI = Confidence Interval



Deposit kept reason

Outcome: why did you retain some or all of deposit

  • 0: cover damages
  • 1: cover unpaid rent or fees


Crosstabs:

df %>% 
  tbl_summary(
    by = Deposit_kept_reason,
    percent = "row",
    missing = "no",
    include = c(Landlord_size_, Financial_role_),
    statistic = list(all_categorical() ~ "{n} ({p}%)")) %>%
  add_p() %>%
  bold_labels() %>%
  modify_header(update = all_stat_cols() ~ "**{level}**") %>% # Remove the Ns from the header row
modify_spanning_header(starts_with("stat_") ~ "**Deposit kept reason**")
Characteristic Deposit kept reason p-value1
0 1
Landlord_size_, n (%) 0.008
small 695 (80%) 174 (20%)
big 279 (73%) 102 (27%)
Financial_role_, n (%) 0.049
Other 819 (79%) 220 (21%)
Primary Income 148 (73%) 56 (27%)

1 Pearson's Chi-squared test


Models:

m1 <- glm(Deposit_kept_reason~1 + Landlord_size_,
          family=binomial(link="logit"), data=df)

m2 <- glm(Deposit_kept_reason~1 + Landlord_size_ +
            Financial_role_ + (Landlord_size_ * Financial_role_),
          family=binomial(link="logit"), data=df)



tbl_regression(m1, exponentiate=TRUE)
Characteristic OR (95% CI)1 p-value
Landlord_size_
small
big 1.46 (1.10 to 1.93) 0.008

1 OR = Odds Ratio, CI = Confidence Interval

tbl_regression(m2, exponentiate=TRUE)
Characteristic OR (95% CI)1 p-value
Landlord_size_
small
big 1.31 (0.93 to 1.84) 0.12
Financial_role_
Other
Primary Income 1.01 (0.52 to 1.85) 0.97
Landlord_size_ * Financial_role_
big * Primary Income 1.33 (0.62 to 2.98) 0.48

1 OR = Odds Ratio, CI = Confidence Interval



Allow installments

Outcome: prior to 2017, allow fees or deposits in installments

  • 0: no
  • 1: yes


Crosstabs:

df %>% 
  tbl_summary(
    by = Allow_installments,
    percent = "row",
    missing = "no",
    include = c(Landlord_size_, Financial_role_),
    statistic = list(all_categorical() ~ "{n} ({p}%)")) %>%
  add_p() %>%
  bold_labels() %>%
  modify_header(update = all_stat_cols() ~ "**{level}**") %>% # Remove the Ns from the header row
modify_spanning_header(starts_with("stat_") ~ "**Allow installments**")
Characteristic Allow installments p-value1
0 1
Landlord_size_, n (%) <0.001
small 1,612 (58%) 1,169 (42%)
big 323 (37%) 542 (63%)
Financial_role_, n (%) <0.001
Other 1,742 (55%) 1,446 (45%)
Primary Income 186 (42%) 257 (58%)

1 Pearson's Chi-squared test


Models:

m1 <- glm(Allow_installments~1 + Landlord_size_,
          family=binomial(link="logit"), data=df)

m2 <- glm(Allow_installments~1 + Landlord_size_ +
            Financial_role_ + (Landlord_size_ * Financial_role_),
          family=binomial(link="logit"), data=df)



tbl_regression(m1, exponentiate=TRUE)
Characteristic OR (95% CI)1 p-value
Landlord_size_
small
big 2.31 (1.98 to 2.71) <0.001

1 OR = Odds Ratio, CI = Confidence Interval

tbl_regression(m2, exponentiate=TRUE)
Characteristic OR (95% CI)1 p-value
Landlord_size_
small
big 2.67 (2.21 to 3.23) <0.001
Financial_role_
Other
Primary Income 2.06 (1.50 to 2.85) <0.001
Landlord_size_ * Financial_role_
big * Primary Income 0.35 (0.23 to 0.55) <0.001

1 OR = Odds Ratio, CI = Confidence Interval



Utilities included

Outcome: do you include utilities in rent for most common unit size

  • 0: no
  • 1: yes (any)


Crosstabs:

df %>% 
  tbl_summary(
    by = Utilities_included,
    percent = "row",
    missing = "no",
    include = c(Landlord_size_, Financial_role_),
    statistic = list(all_categorical() ~ "{n} ({p}%)")) %>%
  add_p() %>%
  bold_labels() %>%
  modify_header(update = all_stat_cols() ~ "**{level}**") %>% # Remove the Ns from the header row
 modify_spanning_header(starts_with("stat_") ~ "**Utilities included**")
Characteristic Utilities included p-value1
0 1
Landlord_size_, n (%) <0.001
small 1,761 (65%) 939 (35%)
big 387 (44%) 483 (56%)
Financial_role_, n (%) 0.024
Other 1,900 (61%) 1,219 (39%)
Primary Income 241 (55%) 195 (45%)

1 Pearson's Chi-squared test


Models:

m1 <- glm(Utilities_included~1 + Landlord_size_,
          family=binomial(link="logit"), data=df)

m2 <- glm(Utilities_included~1 + Landlord_size_ +
            Financial_role_ + (Landlord_size_ * Financial_role_),
          family=binomial(link="logit"), data=df)



tbl_regression(m1, exponentiate=TRUE)
Characteristic OR (95% CI)1 p-value
Landlord_size_
small
big 2.34 (2.00 to 2.74) <0.001

1 OR = Odds Ratio, CI = Confidence Interval

tbl_regression(m2, exponentiate=TRUE)
Characteristic OR (95% CI)1 p-value
Landlord_size_
small
big 2.54 (2.11 to 3.05) <0.001
Financial_role_
Other
Primary Income 0.93 (0.66 to 1.31) 0.70
Landlord_size_ * Financial_role_
big * Primary Income 0.82 (0.53 to 1.29) 0.39

1 OR = Odds Ratio, CI = Confidence Interval



Security deposit

Outcome: 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


Crosstabs:

df %>% 
  tbl_summary(
    by = Security_deposit,
    percent = "row",
    missing = "no",
    include = c(Landlord_size_, Financial_role_),
    statistic = list(all_categorical() ~ "{n} ({p}%)")) %>%
  add_p() %>%
  bold_labels() %>%
  modify_header(update = all_stat_cols() ~ "**{level}**") %>% # Remove the Ns from the header row
  modify_spanning_header(starts_with("stat_") ~ "**Security deposit**")
Characteristic Security deposit p-value1
0 1
Landlord_size_, n (%) <0.001
small 1,575 (62%) 969 (38%)
big 603 (71%) 247 (29%)
Financial_role_, n (%) 0.016
Other 1,866 (63%) 1,080 (37%)
Primary Income 300 (69%) 133 (31%)

1 Pearson's Chi-squared test


Models:

m1 <- glm(Security_deposit~1 + Landlord_size_,
          family=binomial(link="logit"), data=df)

m2 <- glm(Security_deposit~1 + Landlord_size_ +
            Financial_role_ + (Landlord_size_ * Financial_role_),
          family=binomial(link="logit"), data=df)



tbl_regression(m1, exponentiate=TRUE)
Characteristic OR (95% CI)1 p-value
Landlord_size_
small
big 0.67 (0.56 to 0.79) <0.001

1 OR = Odds Ratio, CI = Confidence Interval

tbl_regression(m2, exponentiate=TRUE)
Characteristic OR (95% CI)1 p-value
Landlord_size_
small
big 0.73 (0.60 to 0.89) 0.002
Financial_role_
Other
Primary Income 1.13 (0.81 to 1.57) 0.47
Landlord_size_ * Financial_role_
big * Primary Income 0.66 (0.42 to 1.06) 0.083

1 OR = Odds Ratio, CI = Confidence Interval



App fee

Outcome: 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


Crosstabs:

df %>% 
  tbl_summary(
    by = App_fee,
    percent = "row",
    missing = "no",
    include = c(Landlord_size_, Financial_role_),
    statistic = list(all_categorical() ~ "{n} ({p}%)")) %>%
  add_p() %>%
  bold_labels() %>%
  modify_header(update = all_stat_cols() ~ "**{level}**") %>% # Remove the Ns from the header row
modify_spanning_header(starts_with("stat_") ~ "**App fee**")
Characteristic App fee p-value1
0 1
Landlord_size_, n (%) <0.001
small 1,162 (65%) 616 (35%)
big 328 (48%) 356 (52%)
Financial_role_, n (%) <0.001
Other 1,322 (63%) 790 (37%)
Primary Income 162 (48%) 176 (52%)

1 Pearson's Chi-squared test


Models:

m1 <- glm(App_fee~1 + Landlord_size_,
          family=binomial(link="logit"), data=df)

m2 <- glm(App_fee~1 + Landlord_size_ +
            Financial_role_ + (Landlord_size_ * Financial_role_),
          family=binomial(link="logit"), data=df)



tbl_regression(m1, exponentiate=TRUE)
Characteristic OR (95% CI)1 p-value
Landlord_size_
small
big 2.05 (1.71 to 2.45) <0.001

1 OR = Odds Ratio, CI = Confidence Interval

tbl_regression(m2, exponentiate=TRUE)
Characteristic OR (95% CI)1 p-value
Landlord_size_
small
big 1.71 (1.39 to 2.12) <0.001
Financial_role_
Other
Primary Income 1.05 (0.69 to 1.58) 0.81
Landlord_size_ * Financial_role_
big * Primary Income 1.53 (0.91 to 2.59) 0.11

1 OR = Odds Ratio, CI = Confidence Interval



Cleaning fee

Outcome: 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


Crosstabs:

df %>% 
  tbl_summary(
    by = Cleaning_fee,
    percent = "row",
    missing = "no",
    include = c(Landlord_size_, Financial_role_),
    statistic = list(all_categorical() ~ "{n} ({p}%)")) %>%
  add_p() %>%
  bold_labels() %>%
  modify_header(update = all_stat_cols() ~ "**{level}**") %>% # Remove the Ns from the header row
modify_spanning_header(starts_with("stat_") ~ "**Cleaning fee**")
Characteristic Cleaning fee p-value1
0 1
Landlord_size_, n (%) 0.16
small 970 (74%) 333 (26%)
big 327 (78%) 93 (22%)
Financial_role_, n (%) 0.61
Other 1,139 (75%) 378 (25%)
Primary Income 152 (77%) 46 (23%)

1 Pearson's Chi-squared test


Models:

m1 <- glm(Cleaning_fee~1 + Landlord_size_,
          family=binomial(link="logit"), data=df)

m2 <- glm(Cleaning_fee~1 + Landlord_size_ +
            Financial_role_ + (Landlord_size_ * Financial_role_),
          family=binomial(link="logit"), data=df)



tbl_regression(m1, exponentiate=TRUE)
Characteristic OR (95% CI)1 p-value
Landlord_size_
small
big 0.83 (0.64 to 1.07) 0.16

1 OR = Odds Ratio, CI = Confidence Interval

tbl_regression(m2, exponentiate=TRUE)
Characteristic OR (95% CI)1 p-value
Landlord_size_
small
big 0.82 (0.60 to 1.11) 0.20
Financial_role_
Other
Primary Income 0.95 (0.54 to 1.59) 0.85
Landlord_size_ * Financial_role_
big * Primary Income 1.07 (0.51 to 2.25) 0.86

1 OR = Odds Ratio, CI = Confidence Interval



Parking fee

Outcome: 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


Crosstabs:

df %>% 
  tbl_summary(
    by = Parking_fee,
    percent = "row",
    missing = "no",
    include = c(Landlord_size_, Financial_role_),
    statistic = list(all_categorical() ~ "{n} ({p}%)")) %>%
  add_p() %>%
  bold_labels() %>%
  modify_header(update = all_stat_cols() ~ "**{level}**") %>% # Remove the Ns from the header row
modify_spanning_header(starts_with("stat_") ~ "**Parking fee**")
Characteristic Parking fee p-value1
0 1
Landlord_size_, n (%) <0.001
small 311 (91%) 30 (8.8%)
big 158 (75%) 53 (25%)
Financial_role_, n (%) <0.001
Other 396 (89%) 50 (11%)
Primary Income 69 (68%) 33 (32%)

1 Pearson's Chi-squared test


Models:

m1 <- glm(Parking_fee~1 + Landlord_size_,
          family=binomial(link="logit"), data=df)

m2 <- glm(Parking_fee~1 + Landlord_size_ +
            Financial_role_ + (Landlord_size_ * Financial_role_),
          family=binomial(link="logit"), data=df)



tbl_regression(m1, exponentiate=TRUE)
Characteristic OR (95% CI)1 p-value
Landlord_size_
small
big 3.48 (2.15 to 5.71) <0.001

1 OR = Odds Ratio, CI = Confidence Interval

tbl_regression(m2, exponentiate=TRUE)
Characteristic OR (95% CI)1 p-value
Landlord_size_
small
big 2.30 (1.26 to 4.19) 0.006
Financial_role_
Other
Primary Income 1.53 (0.35 to 4.81) 0.51
Landlord_size_ * Financial_role_
big * Primary Income 1.90 (0.51 to 9.44) 0.38

1 OR = Odds Ratio, CI = Confidence Interval



Rent

Fair market price

Outcome: 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


Crosstabs:

df %>% 
  tbl_summary(
    by = Fair_market_price,
    percent = "row",
    missing = "no",
    include = c(Landlord_size_, Financial_role_),
    statistic = list(all_categorical() ~ "{n} ({p}%)")) %>%
  add_p() %>%
  bold_labels() %>%
  modify_header(update = all_stat_cols() ~ "**{level}**") %>% # Remove the Ns from the header row
modify_spanning_header(starts_with("stat_") ~ "**Fair market price**")
Characteristic Fair market price p-value1
0 1
Landlord_size_, n (%) <0.001
small 1,829 (67%) 911 (33%)
big 707 (80%) 175 (20%)
Financial_role_, n (%) 0.50
Other 2,204 (70%) 954 (30%)
Primary Income 319 (71%) 128 (29%)

1 Pearson's Chi-squared test


Models:

m1 <- glm(Fair_market_price~1 + Landlord_size_,
          family=binomial(link="logit"), data=df)

m2 <- glm(Fair_market_price~1 + Landlord_size_ +
            Financial_role_ + (Landlord_size_ * Financial_role_),
          family=binomial(link="logit"), data=df)



tbl_regression(m1, exponentiate=TRUE)
Characteristic OR (95% CI)1 p-value
Landlord_size_
small
big 0.50 (0.41 to 0.60) <0.001

1 OR = Odds Ratio, CI = Confidence Interval

tbl_regression(m2, exponentiate=TRUE)
Characteristic OR (95% CI)1 p-value
Landlord_size_
small
big 0.43 (0.34 to 0.53) <0.001
Financial_role_
Other
Primary Income 1.13 (0.80 to 1.57) 0.48
Landlord_size_ * Financial_role_
big * Primary Income 1.38 (0.85 to 2.23) 0.19

1 OR = Odds Ratio, CI = Confidence Interval



Last month required

Outcome: require last month’s rent before move in for most common unit size

  • 0: no
  • 1: yes


Crosstabs:

df %>% 
  tbl_summary(
    by = Last_month_required,
    percent = "row",
    missing = "no",
    include = c(Landlord_size_, Financial_role_),
    statistic = list(all_categorical() ~ "{n} ({p}%)")) %>%
  add_p() %>%
  bold_labels() %>%
  modify_header(update = all_stat_cols() ~ "**{level}**") %>% # Remove the Ns from the header row
modify_spanning_header(starts_with("stat_") ~ "**Last month required**")
Characteristic Last month required p-value1
0 1
Landlord_size_, n (%) <0.001
small 1,519 (56%) 1,175 (44%)
big 693 (79%) 181 (21%)
Financial_role_, n (%) <0.001
Other 1,866 (60%) 1,240 (40%)
Primary Income 334 (75%) 112 (25%)

1 Pearson's Chi-squared test


Models:

m1 <- glm(Last_month_required~1 + Landlord_size_,
          family=binomial(link="logit"), data=df)

m2 <- glm(Last_month_required~1 + Landlord_size_ +
            Financial_role_ + (Landlord_size_ * Financial_role_),
          family=binomial(link="logit"), data=df)



tbl_regression(m1, exponentiate=TRUE)
Characteristic OR (95% CI)1 p-value
Landlord_size_
small
big 0.34 (0.28 to 0.40) <0.001

1 OR = Odds Ratio, CI = Confidence Interval

tbl_regression(m2, exponentiate=TRUE)
Characteristic OR (95% CI)1 p-value
Landlord_size_
small
big 0.37 (0.30 to 0.45) <0.001
Financial_role_
Other
Primary Income 0.82 (0.59 to 1.13) 0.22
Landlord_size_ * Financial_role_
big * Primary Income 0.89 (0.55 to 1.45) 0.65

1 OR = Odds Ratio, CI = Confidence Interval



Raised rent

Outcome: raised rent in past year

  • 0: no
  • 1: yes


Crosstabs:

df %>% 
  tbl_summary(
    by = Raised_rent,
    percent = "row",
    missing = "no",
    include = c(Landlord_size_, Financial_role_),
    statistic = list(all_categorical() ~ "{n} ({p}%)")) %>%
  add_p() %>%
  bold_labels() %>%
  modify_header(update = all_stat_cols() ~ "**{level}**") %>% # Remove the Ns from the header row
modify_spanning_header(starts_with("stat_") ~ "**Raised rent**")
Characteristic Raised rent p-value1
0 1
Landlord_size_, n (%) <0.001
small 1,236 (43%) 1,666 (57%)
big 122 (14%) 755 (86%)
Financial_role_, n (%) <0.001
Other 1,268 (38%) 2,042 (62%)
Primary Income 82 (18%) 369 (82%)

1 Pearson's Chi-squared test


Models:

m1 <- glm(Raised_rent~1 + Landlord_size_,
          family=binomial(link="logit"), data=df)

m2 <- glm(Raised_rent~1 + Landlord_size_ +
            Financial_role_ + (Landlord_size_ * Financial_role_),
          family=binomial(link="logit"), data=df)



tbl_regression(m1, exponentiate=TRUE)
Characteristic OR (95% CI)1 p-value
Landlord_size_
small
big 4.59 (3.75 to 5.66) <0.001

1 OR = Odds Ratio, CI = Confidence Interval

tbl_regression(m2, exponentiate=TRUE)
Characteristic OR (95% CI)1 p-value
Landlord_size_
small
big 3.64 (2.91 to 4.59) <0.001
Financial_role_
Other
Primary Income 1.30 (0.95 to 1.81) 0.11
Landlord_size_ * Financial_role_
big * Primary Income 1.98 (1.11 to 3.63) 0.023

1 OR = Odds Ratio, CI = Confidence Interval



Raised rent pct.

Outcome: raised rent by how much percent

  • 0: have not raised rent
  • 3: 1-5%
  • 7: 6-10%
  • 13: 11-15%
  • 20: 16-25%
  • 30: more than 25%


Crosstabs:

df %>% 
  tbl_summary(
    by = Raised_rent_pct,
    percent = "row",
    missing = "no",
    include = c(Landlord_size_, Financial_role_),
    statistic = list(all_categorical() ~ "{n} ({p}%)")) %>%
  add_p() %>%
  bold_labels() %>%
  modify_header(update = all_stat_cols() ~ "**{level}**") %>% # Remove the Ns from the header row
modify_spanning_header(starts_with("stat_") ~ "**Raised rent pct**")
Characteristic Raised rent pct p-value1
3 7 13 20 30
Landlord_size_, n (%) <0.001
small 871 (52%) 540 (32%) 108 (6.5%) 93 (5.6%) 54 (3.2%)
big 338 (45%) 317 (42%) 67 (8.9%) 22 (2.9%) 11 (1.5%)
Financial_role_, n (%) 0.19
Other 1,035 (51%) 704 (34%) 149 (7.3%) 97 (4.8%) 57 (2.8%)
Primary Income 167 (45%) 151 (41%) 25 (6.8%) 18 (4.9%) 8 (2.2%)

1 Pearson's Chi-squared test


Models:

m1 <- glm(Raised_rent_pct~1 + Landlord_size_,
          family=gaussian(link="identity"), data=df)

m2 <- glm(Raised_rent_pct~1 + Landlord_size_ +
            Financial_role_ + (Landlord_size_ * Financial_role_),
          family=gaussian(link="identity"), data=df)



tbl_regression(m1, exponentiate=TRUE)
Characteristic exp(Beta) (95% CI)1 p-value
Landlord_size_
small
big 0.73 (0.45 to 1.20) 0.21

1 CI = Confidence Interval

tbl_regression(m2, exponentiate=TRUE)
Characteristic exp(Beta) (95% CI)1 p-value
Landlord_size_
small
big 0.82 (0.46 to 1.46) 0.50
Financial_role_
Other
Primary Income 2.47 (0.80 to 7.62) 0.12
Landlord_size_ * Financial_role_
big * Primary Income 0.35 (0.08 to 1.44) 0.15

1 CI = Confidence Interval



Raised rent - rising costs

Outcome: raised rent due to rising costs of taxes, repairs

  • 0: no
  • 1: yes


Crosstabs:

df %>% 
  tbl_summary(
    by = Raised_rent_rising_costs,
    percent = "row",
    missing = "no",
    include = c(Landlord_size_, Financial_role_),
    statistic = list(all_categorical() ~ "{n} ({p}%)")) %>%
  add_p() %>%
  bold_labels() %>%
  modify_header(update = all_stat_cols() ~ "**{level}**") %>% # Remove the Ns from the header row
modify_spanning_header(starts_with("stat_") ~ "**Raised rent rising costs**")
Characteristic Raised rent rising costs p-value1
0 1
Landlord_size_, n (%) 0.69
small 190 (12%) 1,364 (88%)
big 83 (12%) 630 (88%)
Financial_role_, n (%) 0.51
Other 233 (12%) 1,677 (88%)
Primary Income 38 (11%) 309 (89%)

1 Pearson's Chi-squared test


Models:

m1 <- glm(Raised_rent_rising_costs~1 + Landlord_size_,
          family=binomial(link="logit"), data=df)

m2 <- glm(Raised_rent_rising_costs~1 + Landlord_size_ +
            Financial_role_ + (Landlord_size_ * Financial_role_),
          family=binomial(link="logit"), data=df)



tbl_regression(m1, exponentiate=TRUE)
Characteristic OR (95% CI)1 p-value
Landlord_size_
small
big 1.06 (0.81 to 1.40) 0.69

1 OR = Odds Ratio, CI = Confidence Interval

tbl_regression(m2, exponentiate=TRUE)
Characteristic OR (95% CI)1 p-value
Landlord_size_
small
big 1.18 (0.85 to 1.66) 0.33
Financial_role_
Other
Primary Income 1.92 (0.94 to 4.61) 0.10
Landlord_size_ * Financial_role_
big * Primary Income 0.44 (0.17 to 1.06) 0.083

1 OR = Odds Ratio, CI = Confidence Interval



Raised rent - regulations

Outcome: raised rent due to regulations

  • 0: no
  • 1: yes


Crosstabs:

df %>% 
  tbl_summary(
    by = Raised_rent_regulations,
    percent = "row",
    missing = "no",
    include = c(Landlord_size_, Financial_role_),
    statistic = list(all_categorical() ~ "{n} ({p}%)")) %>%
  add_p() %>%
  bold_labels() %>%
  modify_header(update = all_stat_cols() ~ "**{level}**") %>% # Remove the Ns from the header row
modify_spanning_header(starts_with("stat_") ~ "**Raised rent regulations**")
Characteristic Raised rent regulations p-value1
0 1
Landlord_size_, n (%) 0.28
small 1,531 (99%) 23 (1.5%)
big 698 (98%) 15 (2.1%)
Financial_role_, n (%) 0.22
Other 1,876 (98%) 34 (1.8%)
Primary Income 344 (99%) 3 (0.9%)

1 Pearson's Chi-squared test


Models:

m1 <- glm(Raised_rent_regulations~1 + Landlord_size_,
          family=binomial(link="logit"), data=df)

m2 <- glm(Raised_rent_regulations~1 + Landlord_size_ +
            Financial_role_ + (Landlord_size_ * Financial_role_),
          family=binomial(link="logit"), data=df)



tbl_regression(m1, exponentiate=TRUE)
Characteristic OR (95% CI)1 p-value
Landlord_size_
small
big 1.43 (0.73 to 2.73) 0.29

1 OR = Odds Ratio, CI = Confidence Interval

tbl_regression(m2, exponentiate=TRUE)
Characteristic OR (95% CI)1 p-value
Landlord_size_
small
big 1.98 (0.96 to 3.95) 0.055
Financial_role_
Other
Primary Income 1.39 (0.22 to 4.83) 0.66
Landlord_size_ * Financial_role_
big * Primary Income 0.10 (0.00 to 1.17) 0.073

1 OR = Odds Ratio, CI = Confidence Interval



Raised rent - market

Outcome: raised rent due to housing market

  • 0: no
  • 1: yes


Crosstabs:

df %>% 
  tbl_summary(
    by = Raised_rent_market,
    percent = "row",
    missing = "no",
    include = c(Landlord_size_, Financial_role_),
    statistic = list(all_categorical() ~ "{n} ({p}%)")) %>%
  add_p() %>%
  bold_labels() %>%
  modify_header(update = all_stat_cols() ~ "**{level}**") %>% # Remove the Ns from the header row
modify_spanning_header(starts_with("stat_") ~ "**Raised rent market**")
Characteristic Raised rent market p-value1
0 1
Landlord_size_, n (%) 0.23
small 1,396 (90%) 158 (10%)
big 652 (91%) 61 (8.6%)
Financial_role_, n (%) 0.76
Other 1,724 (90%) 186 (9.7%)
Primary Income 315 (91%) 32 (9.2%)

1 Pearson's Chi-squared test


Models:

m1 <- glm(Raised_rent_market~1 + Landlord_size_,
          family=binomial(link="logit"), data=df)

m2 <- glm(Raised_rent_market~1 + Landlord_size_ +
            Financial_role_ + (Landlord_size_ * Financial_role_),
          family=binomial(link="logit"), data=df)



tbl_regression(m1, exponentiate=TRUE)
Characteristic OR (95% CI)1 p-value
Landlord_size_
small
big 0.83 (0.60 to 1.12) 0.23

1 OR = Odds Ratio, CI = Confidence Interval

tbl_regression(m2, exponentiate=TRUE)
Characteristic OR (95% CI)1 p-value
Landlord_size_
small
big 0.66 (0.44 to 0.96) 0.036
Financial_role_
Other
Primary Income 0.45 (0.16 to 1.01) 0.084
Landlord_size_ * Financial_role_
big * Primary Income 3.55 (1.32 to 11.4) 0.019

1 OR = Odds Ratio, CI = Confidence Interval



Terminations

Ever terminated

Outcome: in 2017, did you terminate tenancies

  • 0: none
  • 1: 1 or more


Crosstabs:

df %>% 
  tbl_summary(
    by = Ever_terminated,
    percent = "row",
    missing = "no",
    include = c(Landlord_size_, Financial_role_),
    statistic = list(all_categorical() ~ "{n} ({p}%)")) %>%
  add_p() %>%
  bold_labels() %>%
  modify_header(update = all_stat_cols() ~ "**{level}**") %>% # Remove the Ns from the header row
modify_spanning_header(starts_with("stat_") ~ "**Ever terminated**")
Characteristic Ever terminated p-value1
0 1
Landlord_size_, n (%) <0.001
small 2,705 (92%) 220 (7.5%)
big 648 (73%) 236 (27%)
Financial_role_, n (%) <0.001
Other 2,999 (90%) 337 (10%)
Primary Income 342 (75%) 114 (25%)

1 Pearson's Chi-squared test


Models:

m1 <- glm(Ever_terminated~1 + Landlord_size_,
          family=binomial(link="logit"), data=df)

m2 <- glm(Ever_terminated~1 + Landlord_size_ +
            Financial_role_ + (Landlord_size_ * Financial_role_),
          family=binomial(link="logit"), data=df)



tbl_regression(m1, exponentiate=TRUE)
Characteristic OR (95% CI)1 p-value
Landlord_size_
small
big 4.48 (3.66 to 5.49) <0.001

1 OR = Odds Ratio, CI = Confidence Interval

tbl_regression(m2, exponentiate=TRUE)
Characteristic OR (95% CI)1 p-value
Landlord_size_
small
big 3.86 (3.03 to 4.90) <0.001
Financial_role_
Other
Primary Income 1.61 (0.95 to 2.59) 0.060
Landlord_size_ * Financial_role_
big * Primary Income 1.01 (0.57 to 1.86) 0.97

1 OR = Odds Ratio, CI = Confidence Interval



Num of terminations

Ouctome: in 2017, how many tenancies did you terminate

  • 3: 1-5
  • 7: 6-10
  • 13: 11-20
  • 25: more than 20


Crosstabs:

df %>% 
  tbl_summary(
    by = Num_of_terminations,
    percent = "row",
    missing = "no",
    include = c(Landlord_size_, Financial_role_),
    statistic = list(all_categorical() ~ "{n} ({p}%)")) %>%
  add_p() %>%
  bold_labels() %>%
  modify_header(update = all_stat_cols() ~ "**{level}**") %>% # Remove the Ns from the header row
modify_spanning_header(starts_with("stat_") ~ "**Number of terminations**")
Characteristic Number of terminations p-value1
3 7 15 25
Landlord_size_, n (%) 0.11
small 185 (97%) 5 (2.6%) 0 (0%) 1 (0.5%)
big 204 (92%) 9 (4.1%) 5 (2.3%) 3 (1.4%)
Financial_role_, n (%) 0.002
Other 289 (96%) 7 (2.3%) 5 (1.7%) 0 (0%)
Primary Income 96 (91%) 6 (5.7%) 0 (0%) 4 (3.8%)

1 Fisher's exact test


Models:

m1 <- glm(Num_of_terminations~1 + Landlord_size_,
          family=gaussian(link="identity"), data=df)

m2 <- glm(Num_of_terminations~1 + Landlord_size_ +
            Financial_role_ + (Landlord_size_ * Financial_role_),
          family=gaussian(link="identity"), data=df)



tbl_regression(m1, exponentiate=TRUE)
Characteristic exp(Beta) (95% CI)1 p-value
Landlord_size_
small
big 1.67 (1.01 to 2.76) 0.046

1 CI = Confidence Interval

tbl_regression(m2, exponentiate=TRUE)
Characteristic exp(Beta) (95% CI)1 p-value
Landlord_size_
small
big 1.69 (0.94 to 3.05) 0.083
Financial_role_
Other
Primary Income 4.31 (1.19 to 15.6) 0.027
Landlord_size_ * Financial_role_
big * Primary Income 0.34 (0.08 to 1.46) 0.15

1 CI = Confidence Interval



Terminated - paid late

Outcome: any terminated due to late payment

  • 0: no
  • 1: yes


Crosstabs:

df %>% 
  tbl_summary(
    by = Terminated_paid_late,
    percent = "row",
    missing = "no",
    include = c(Landlord_size_, Financial_role_),
    statistic = list(all_categorical() ~ "{n} ({p}%)")) %>%
  add_p() %>%
  bold_labels() %>%
  modify_header(update = all_stat_cols() ~ "**{level}**") %>% # Remove the Ns from the header row
modify_spanning_header(starts_with("stat_") ~ "**Terminated - paid late**")
Characteristic Terminated - paid late p-value1
0 1
Landlord_size_, n (%) 0.009
small 13 (23%) 44 (77%)
big 4 (6.2%) 60 (94%)
Financial_role_, n (%) 0.35
Other 15 (16%) 77 (84%)
Primary Income 2 (7.1%) 26 (93%)

1 Pearson's Chi-squared test; Fisher's exact test


Models:

m1 <- glm(Terminated_paid_late~1 + Landlord_size_,
          family=binomial(link="logit"), data=df)

m2 <- glm(Terminated_paid_late~1 + Landlord_size_ +
            Financial_role_ + (Landlord_size_ * Financial_role_),
          family=binomial(link="logit"), data=df)



tbl_regression(m1, exponentiate=TRUE)
Characteristic OR (95% CI)1 p-value
Landlord_size_
small
big 4.43 (1.46 to 16.6) 0.014

1 OR = Odds Ratio, CI = Confidence Interval

tbl_regression(m2, exponentiate=TRUE)
Characteristic OR (95% CI)1 p-value
Landlord_size_
small
big 2.29 (0.71 to 8.85) 0.19
Financial_role_
Other
Primary Income 0.26 (0.03 to 2.38) 0.20
Landlord_size_ * Financial_role_
big * Primary Income 50,464,928 (0.00 to NA) 0.99

1 OR = Odds Ratio, CI = Confidence Interval



Terminated - non payment

Outcome: any terminated due to late payment

  • 0: no
  • 1: yes


Crosstabs:

df %>% 
  tbl_summary(
    by = Terminated_non_payment,
    percent = "row",
    missing = "no",
    include = c(Landlord_size_, Financial_role_),
    statistic = list(all_categorical() ~ "{n} ({p}%)")) %>%
  add_p() %>%
  bold_labels() %>%
  modify_header(update = all_stat_cols() ~ "**{level}**") %>% # Remove the Ns from the header row
modify_spanning_header(starts_with("stat_") ~ "**Terminated - non payment**")
Characteristic Terminated - non payment p-value1
0 1
Landlord_size_, n (%) <0.001
small 13 (18%) 60 (82%)
big 4 (2.7%) 144 (97%)
Financial_role_, n (%) 0.037
Other 15 (11%) 127 (89%)
Primary Income 2 (2.6%) 74 (97%)

1 Pearson's Chi-squared test


Models:

m1 <- glm(Terminated_non_payment~1 + Landlord_size_,
          family=binomial(link="logit"), data=df)

m2 <- glm(Terminated_non_payment~1 + Landlord_size_ +
            Financial_role_ + (Landlord_size_ * Financial_role_),
          family=binomial(link="logit"), data=df)



tbl_regression(m1, exponentiate=TRUE)
Characteristic OR (95% CI)1 p-value
Landlord_size_
small
big 7.80 (2.64 to 28.6) <0.001

1 OR = Odds Ratio, CI = Confidence Interval

tbl_regression(m2, exponentiate=TRUE)
Characteristic OR (95% CI)1 p-value
Landlord_size_
small
big 3.38 (1.09 to 12.7) 0.046
Financial_role_
Other
Primary Income 0.19 (0.02 to 1.74) 0.12
Landlord_size_ * Financial_role_
big * Primary Income 93,085,001 (0.00 to NA) 0.99

1 OR = Odds Ratio, CI = Confidence Interval



Terminated - use courts

Ouctome: of the terminations, were these handled with the courts

  • 0: always or usually handle with tenants
  • 1: always or usually handle with the courts


Crosstabs:

df %>% 
  tbl_summary(
    by = Terminated_use_courts,
    percent = "row",
    missing = "no",
    include = c(Landlord_size_, Financial_role_),
    statistic = list(all_categorical() ~ "{n} ({p}%)")) %>%
  add_p() %>%
  bold_labels() %>%
  modify_header(update = all_stat_cols() ~ "**{level}**") %>% # Remove the Ns from the header row
modify_spanning_header(starts_with("stat_") ~ "**Terminated - use of courts**")
Characteristic Terminated - use of courts p-value1
0 1
Landlord_size_, n (%) <0.001
small 22 (0.8%) 2,903 (99%)
big 66 (7.4%) 820 (93%)
Financial_role_, n (%) <0.001
Other 52 (1.6%) 3,289 (98%)
Primary Income 35 (7.7%) 417 (92%)

1 Pearson's Chi-squared test


Models:


m1 <- glm(Terminated_use_courts~1 + Landlord_size_,
          family=binomial(link="logit"), data=df)

m2 <- glm(Terminated_use_courts~1 + Landlord_size_ +
            Financial_role_ + (Landlord_size_ * Financial_role_),
          family=binomial(link="logit"), data=df)



tbl_regression(m1, exponentiate=TRUE)
tbl_regression(m2, exponentiate=TRUE)



Renter Profile, Future

Renter income estimate

Outcome: average income of renter by most common unit size (used midpoints)

  • 13: less than 25,000
  • 37: 25,000-50,000
  • 62: 50,000-75,000
  • 100: 75,000-150,000
  • 200: more than 150,000


Crosstabs:

df %>% 
  tbl_summary(
    by = Renter_income_estimate,
    percent = "row",
    missing = "no",
    include = c(Landlord_size_, Financial_role_),
    statistic = list(all_categorical() ~ "{n} ({p}%)")) %>%
  add_p() %>%
  bold_labels() %>%
  modify_header(update = all_stat_cols() ~ "**{level}**") %>% # Remove the Ns from the header row
modify_spanning_header(starts_with("stat_") ~ "**Renter income estimate (unit=1000)**")
Characteristic Renter income estimate (unit=1000) p-value1
13 37 62 100 200
Landlord_size_, n (%) <0.001
small 124 (4.6%) 518 (19%) 755 (28%) 1,041 (38%) 276 (10%)
big 44 (5.4%) 296 (36%) 319 (39%) 149 (18%) 11 (1.3%)
Financial_role_, n (%) <0.001
Other 130 (4.2%) 685 (22%) 919 (30%) 1,085 (35%) 274 (8.9%)
Primary Income 33 (7.8%) 127 (30%) 150 (35%) 100 (24%) 13 (3.1%)

1 Pearson's Chi-squared test


Models:

m1 <- glm(Renter_income_estimate~1 + Landlord_size_,
          family=gaussian(link="identity"), data=df)

m2 <- glm(Renter_income_estimate~1 + Landlord_size_ +
            Financial_role_ + (Landlord_size_ * Financial_role_),
          family=gaussian(link="identity"), data=df)



tbl_regression(m1, exponentiate=TRUE)
Characteristic exp(Beta) (95% CI)1 p-value
Landlord_size_
small
big 0.00 (0.00 to 0.00) <0.001

1 CI = Confidence Interval

tbl_regression(m2, exponentiate=TRUE)
Characteristic exp(Beta) (95% CI)1 p-value
Landlord_size_
small
big 0.00 (0.00 to 0.00) <0.001
Financial_role_
Other
Primary Income 0.00 (0.00 to 0.00) <0.001
Landlord_size_ * Financial_role_
big * Primary Income 1,298,911 (92.2 to 18,295,749,646) 0.004

1 CI = Confidence Interval



Still be prop mngr in 1, 5 yr

Outcome: 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


Crosstabs:

df %>% 
  tbl_summary(
    by = Still_mngr_1_5yrs,
    percent = "row",
    missing = "no",
    include = c(Landlord_size_, Financial_role_),
    statistic = list(all_categorical() ~ "{n} ({p}%)")) %>%
  add_p() %>%
  bold_labels() %>%
  modify_header(update = all_stat_cols() ~ "**{level}**") %>% # Remove the Ns from the header row
modify_spanning_header(starts_with("stat_") ~ "**Still be manager in 1 or 5 yrs**")
Characteristic Still be manager in 1 or 5 yrs p-value1
0 1
Landlord_size_, n (%) 0.24
small 2,369 (81%) 554 (19%)
big 731 (83%) 152 (17%)
Financial_role_, n (%) 0.87
Other 2,714 (81%) 618 (19%)
Primary Income 370 (81%) 86 (19%)

1 Pearson's Chi-squared test


Models:

m1 <- glm(Still_mngr_1_5yrs~1 + Landlord_size_,
          family=binomial(link="logit"), data=df)

m2 <- glm(Still_mngr_1_5yrs~1 + Landlord_size_ +
            Financial_role_ + (Landlord_size_ * Financial_role_),
          family=binomial(link="logit"), data=df)



tbl_regression(m1, exponentiate=TRUE)
Characteristic OR (95% CI)1 p-value
Landlord_size_
small
big 0.89 (0.73 to 1.08) 0.24

1 OR = Odds Ratio, CI = Confidence Interval

tbl_regression(m2, exponentiate=TRUE)
Characteristic OR (95% CI)1 p-value
Landlord_size_
small
big 0.97 (0.77 to 1.22) 0.81
Financial_role_
Other
Primary Income 1.40 (0.96 to 2.00) 0.071
Landlord_size_ * Financial_role_
big * Primary Income 0.60 (0.35 to 1.01) 0.055

1 OR = Odds Ratio, CI = Confidence Interval



Stop being prop mngr burdensome regs

Outcome: why might you stop being property manager

  • 0: other reasons
  • 1: burdensome regulatory environment


Crosstabs:

df %>% 
  tbl_summary(
    by = Stop_mngr_burdensome_regs,
    percent = "row",
    missing = "no",
    include = c(Landlord_size_, Financial_role_),
    statistic = list(all_categorical() ~ "{n} ({p}%)")) %>%
  add_p() %>%
  bold_labels() %>%
  modify_header(update = all_stat_cols() ~ "**{level}**") %>% # Remove the Ns from the header row
modify_spanning_header(starts_with("stat_") ~ "**Stop managing due to regulations**")
Characteristic Stop managing due to regulations p-value1
0 1
Landlord_size_, n (%) 0.69
small 2,525 (86%) 421 (14%)
big 758 (85%) 132 (15%)
Financial_role_, n (%) 0.16
Other 2,885 (86%) 476 (14%)
Primary Income 381 (83%) 76 (17%)

1 Pearson's Chi-squared test


Models:

m1 <- glm(Stop_mngr_burdensome_regs~1 + Landlord_size_,
          family=binomial(link="logit"), data=df)

m2 <- glm(Stop_mngr_burdensome_regs~1 + Landlord_size_ +
            Financial_role_ + (Landlord_size_ * Financial_role_),
          family=binomial(link="logit"), data=df)



tbl_regression(m1, exponentiate=TRUE)
Characteristic OR (95% CI)1 p-value
Landlord_size_
small
big 1.04 (0.84 to 1.29) 0.69

1 OR = Odds Ratio, CI = Confidence Interval

tbl_regression(m2, exponentiate=TRUE)
Characteristic OR (95% CI)1 p-value
Landlord_size_
small
big 1.19 (0.93 to 1.52) 0.16
Financial_role_
Other
Primary Income 1.88 (1.28 to 2.70) <0.001
Landlord_size_ * Financial_role_
big * Primary Income 0.41 (0.24 to 0.72) 0.002

1 OR = Odds Ratio, CI = Confidence Interval