coded_df <- readRDS("C:/Users/court/Google Drive/Research/SRHS/SRHS_coded.RDS")
coded_df <- coded_df %>%
  mutate_if(
        is.labelled,
        ~(as_factor(.)))
df <- coded_df %>% select(
   ll_finrole2,
   ll_size,
   ll_size2,
   ll_comm_unit,
   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_rent_raise_s_tax,
   bp_rent_raise_s_repair,
   bp_rent_raise_s_new,
   bp_rent_raise_s_market,
   bp_rent_raise_s_reg,
   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_comm_unit = relevel(as.factor(ll_comm_unit), ref="2 bedroom"),
  ll_finrole2 = as.factor(ll_finrole2)
)

df <- df %>% rename(
                    "Landlord_size_" = ll_size2,
                    "Financial_role_" = ll_finrole2,
                    "Common_unit_" = ll_comm_unit,
                    "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,
                    "Raised_rent_only_tax" = bp_rent_raise_s_tax,
                      "Raised_rent_only_repairs" =bp_rent_raise_s_repair,
                     "Raised_rent_only_newproperty" = bp_rent_raise_s_new,
                      "Raised_rent_only_market" =bp_rent_raise_s_market,
                      "Raised_rent_only_regulation" =bp_rent_raise_s_reg,
                     "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)
                   


# --------------------------

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 most common unit

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

What’s new from our last discussion:

  • landlord size now consists of 4 categories:
    • small single family homes
    • small non-single family homes
    • big single family homes
    • big non-single family homes
  • most common unit has been added to models
  • new business practices have been added that reflect those who raised rent exclusively due to one reason
    • note: “other” wasn’t considered a reason for raising rent (e.g. if landlord cited “taxes” and “other” as their reasons for raising rent, that landlord was considered to only have “taxes” as their sole reason. This is because a large proportion of landlords cited "other)

Cross tab of covariate variables:

df %>% 
  tbl_summary(
    by = Financial_role_,
    percent = "row",
    missing = "no",
    include = c(Landlord_size_),
    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
Other Primary Income
Landlord_size_, n (%) <0.001
small (single-fam) 1,639 (95%) 82 (4.8%)
small (non single-fam) 1,128 (93%) 87 (7.2%)
big (single-fam) 40 (74%) 14 (26%)
big (non single-fam) 554 (67%) 274 (33%)

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_, Common_unit_),
    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 (single-fam) 1,506 (87%) 221 (13%)
small (non single-fam) 1,097 (90%) 122 (10%)
big (single-fam) 50 (89%) 6 (11%)
big (non single-fam) 806 (97%) 28 (3.4%)
Financial_role_, n (%) <0.001
Other 2,997 (89%) 364 (11%)
Primary Income 445 (97%) 12 (2.6%)
Common_unit_, n (%) 0.018
2 bedroom 1,325 (92%) 117 (8.1%)
0 bedroom (studio/efficiency) 138 (93%) 10 (6.8%)
1 bedroom 805 (91%) 83 (9.3%)
3 bedroom 751 (89%) 95 (11%)
4 bedroom 192 (86%) 31 (14%)
5+ bedroom 65 (87%) 10 (13%)

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_ + Common_unit_,
          family=binomial(link="logit"), data=df)



tbl_regression(m1, exponentiate=TRUE)
Characteristic OR (95% CI)1 p-value
Landlord_size_
small (single-fam)
small (non single-fam) 0.76 (0.60 to 0.96) 0.020
big (single-fam) 0.82 (0.31 to 1.79) 0.65
big (non single-fam) 0.24 (0.16 to 0.35) <0.001

1 OR = Odds Ratio, CI = Confidence Interval

tbl_regression(m2, exponentiate = TRUE)
Characteristic OR (95% CI)1 p-value
Landlord_size_
small (single-fam)
small (non single-fam) 0.66 (0.49 to 0.87) 0.004
big (single-fam) 1.00 (0.38 to 2.21) >0.99
big (non single-fam) 0.26 (0.16 to 0.40) <0.001
Financial_role_
Other
Primary Income 0.32 (0.16 to 0.57) <0.001
Common_unit_
2 bedroom
0 bedroom (studio/efficiency) 1.38 (0.65 to 2.64) 0.37
1 bedroom 1.54 (1.13 to 2.09) 0.006
3 bedroom 1.08 (0.80 to 1.45) 0.62
4 bedroom 1.32 (0.84 to 2.02) 0.21
5+ bedroom 1.41 (0.66 to 2.73) 0.34

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_, Common_unit_),
    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
no yes
Landlord_size_, n (%) <0.001
small (single-fam) 1,096 (63%) 631 (37%)
small (non single-fam) 714 (59%) 505 (41%)
big (single-fam) 30 (54%) 26 (46%)
big (non single-fam) 403 (48%) 431 (52%)
Financial_role_, n (%) <0.001
Other 2,001 (60%) 1,360 (40%)
Primary Income 230 (50%) 227 (50%)
Common_unit_, n (%) 0.76
2 bedroom 839 (58%) 603 (42%)
0 bedroom (studio/efficiency) 83 (56%) 65 (44%)
1 bedroom 514 (58%) 374 (42%)
3 bedroom 497 (59%) 349 (41%)
4 bedroom 129 (58%) 94 (42%)
5+ bedroom 50 (67%) 25 (33%)

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_ + Common_unit_,
          family=binomial(link="logit"), data=df)



tbl_regression(m1, exponentiate=TRUE)
Characteristic OR (95% CI)1 p-value
Landlord_size_
small (single-fam)
small (non single-fam) 1.23 (1.06 to 1.43) 0.007
big (single-fam) 1.51 (0.88 to 2.57) 0.13
big (non single-fam) 1.86 (1.57 to 2.20) <0.001

1 OR = Odds Ratio, CI = Confidence Interval

tbl_regression(m2, exponentiate=TRUE)
Characteristic OR (95% CI)1 p-value
Landlord_size_
small (single-fam)
small (non single-fam) 1.40 (1.17 to 1.67) <0.001
big (single-fam) 1.43 (0.82 to 2.46) 0.20
big (non single-fam) 2.11 (1.73 to 2.59) <0.001
Financial_role_
Other
Primary Income 1.15 (0.93 to 1.43) 0.19
Common_unit_
2 bedroom
0 bedroom (studio/efficiency) 0.83 (0.58 to 1.18) 0.31
1 bedroom 0.87 (0.73 to 1.04) 0.13
3 bedroom 1.22 (1.01 to 1.47) 0.036
4 bedroom 1.29 (0.96 to 1.74) 0.091
5+ bedroom 0.85 (0.51 to 1.38) 0.51

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_, Common_unit_),
    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
disagree/neutral agree
Landlord_size_, n (%) 0.82
small (single-fam) 676 (43%) 907 (57%)
small (non single-fam) 474 (42%) 644 (58%)
big (single-fam) 19 (38%) 31 (62%)
big (non single-fam) 297 (41%) 426 (59%)
Financial_role_, n (%) 0.16
Other 1,311 (43%) 1,762 (57%)
Primary Income 149 (39%) 234 (61%)
Common_unit_, n (%) 0.63
2 bedroom 550 (42%) 763 (58%)
0 bedroom (studio/efficiency) 44 (34%) 84 (66%)
1 bedroom 343 (42%) 467 (58%)
3 bedroom 325 (43%) 432 (57%)
4 bedroom 88 (43%) 116 (57%)
5+ bedroom 29 (41%) 41 (59%)

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_ + Common_unit_,
          family=binomial(link="logit"), data=df)



tbl_regression(m1, exponentiate=TRUE)
Characteristic OR (95% CI)1 p-value
Landlord_size_
small (single-fam)
small (non single-fam) 1.01 (0.87 to 1.18) 0.87
big (single-fam) 1.22 (0.69 to 2.21) 0.51
big (non single-fam) 1.07 (0.89 to 1.28) 0.46

1 OR = Odds Ratio, CI = Confidence Interval

tbl_regression(m2, exponentiate=TRUE)
Characteristic OR (95% CI)1 p-value
Landlord_size_
small (single-fam)
small (non single-fam) 1.00 (0.83 to 1.19) 0.96
big (single-fam) 1.22 (0.68 to 2.26) 0.51
big (non single-fam) 0.99 (0.80 to 1.23) 0.95
Financial_role_
Other
Primary Income 1.14 (0.90 to 1.45) 0.27
Common_unit_
2 bedroom
0 bedroom (studio/efficiency) 1.36 (0.93 to 2.02) 0.12
1 bedroom 0.98 (0.82 to 1.17) 0.82
3 bedroom 0.95 (0.78 to 1.15) 0.59
4 bedroom 0.95 (0.70 to 1.29) 0.73
5+ bedroom 1.02 (0.62 to 1.68) 0.95

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_, Common_unit_),
    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 (single-fam) 502 (29%) 1,208 (71%)
small (non single-fam) 337 (28%) 867 (72%)
big (single-fam) 17 (31%) 38 (69%)
big (non single-fam) 162 (20%) 668 (80%)
Financial_role_, n (%) <0.001
Other 924 (28%) 2,403 (72%)
Primary Income 89 (20%) 365 (80%)
Common_unit_, n (%) 0.83
2 bedroom 369 (26%) 1,057 (74%)
0 bedroom (studio/efficiency) 39 (27%) 108 (73%)
1 bedroom 235 (27%) 650 (73%)
3 bedroom 233 (28%) 605 (72%)
4 bedroom 54 (24%) 167 (76%)
5+ bedroom 23 (31%) 52 (69%)

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_ + Common_unit_,
          family=binomial(link="logit"), data=df)



tbl_regression(m1, exponentiate=TRUE)
Characteristic OR (95% CI)1 p-value
Landlord_size_
small (single-fam)
small (non single-fam) 1.07 (0.91 to 1.26) 0.42
big (single-fam) 0.93 (0.53 to 1.70) 0.80
big (non single-fam) 1.71 (1.40 to 2.10) <0.001

1 OR = Odds Ratio, CI = Confidence Interval

tbl_regression(m2, exponentiate=TRUE)
Characteristic OR (95% CI)1 p-value
Landlord_size_
small (single-fam)
small (non single-fam) 1.21 (1.00 to 1.46) 0.054
big (single-fam) 0.81 (0.46 to 1.50) 0.48
big (non single-fam) 1.77 (1.40 to 2.25) <0.001
Financial_role_
Other
Primary Income 1.39 (1.07 to 1.82) 0.015
Common_unit_
2 bedroom
0 bedroom (studio/efficiency) 0.76 (0.52 to 1.15) 0.18
1 bedroom 0.84 (0.69 to 1.03) 0.089
3 bedroom 1.05 (0.86 to 1.29) 0.63
4 bedroom 1.29 (0.92 to 1.82) 0.14
5+ bedroom 0.88 (0.54 to 1.50) 0.64

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_, Common_unit_),
    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.009
small (single-fam) 1,535 (92%) 136 (8.1%)
small (non single-fam) 1,084 (92%) 100 (8.4%)
big (single-fam) 50 (91%) 5 (9.1%)
big (non single-fam) 723 (88%) 100 (12%)
Financial_role_, n (%) <0.001
Other 2,998 (92%) 269 (8.2%)
Primary Income 379 (84%) 71 (16%)
Common_unit_, n (%) <0.001
2 bedroom 1,295 (92%) 113 (8.0%)
0 bedroom (studio/efficiency) 117 (80%) 30 (20%)
1 bedroom 786 (90%) 84 (9.7%)
3 bedroom 749 (92%) 66 (8.1%)
4 bedroom 200 (91%) 19 (8.7%)
5+ bedroom 61 (82%) 13 (18%)

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_ + Common_unit_,
          family=binomial(link="logit"), data=df)



tbl_regression(m1, exponentiate=TRUE)
Characteristic OR (95% CI)1 p-value
Landlord_size_
small (single-fam)
small (non single-fam) 1.04 (0.79 to 1.36) 0.77
big (single-fam) 1.13 (0.39 to 2.62) 0.80
big (non single-fam) 1.56 (1.19 to 2.05) 0.001

1 OR = Odds Ratio, CI = Confidence Interval

tbl_regression(m2, exponentiate=TRUE)
Characteristic OR (95% CI)1 p-value
Landlord_size_
small (single-fam)
small (non single-fam) 0.99 (0.72 to 1.36) 0.95
big (single-fam) 1.02 (0.35 to 2.40) 0.97
big (non single-fam) 1.21 (0.85 to 1.70) 0.28
Financial_role_
Other
Primary Income 1.83 (1.32 to 2.49) <0.001
Common_unit_
2 bedroom
0 bedroom (studio/efficiency) 2.54 (1.58 to 3.99) <0.001
1 bedroom 1.10 (0.81 to 1.50) 0.53
3 bedroom 1.09 (0.77 to 1.52) 0.62
4 bedroom 1.19 (0.69 to 1.98) 0.51
5+ bedroom 2.46 (1.25 to 4.55) 0.006

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_, Common_unit_),
    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
no, dk, missing yes
Landlord_size_, n (%) <0.001
small (single-fam) 1,589 (92%) 138 (8.0%)
small (non single-fam) 1,061 (87%) 158 (13%)
big (single-fam) 39 (70%) 17 (30%)
big (non single-fam) 404 (48%) 430 (52%)
Financial_role_, n (%) <0.001
Other 2,823 (84%) 538 (16%)
Primary Income 259 (57%) 198 (43%)
Common_unit_, n (%) <0.001
2 bedroom 1,165 (81%) 277 (19%)
0 bedroom (studio/efficiency) 98 (66%) 50 (34%)
1 bedroom 629 (71%) 259 (29%)
3 bedroom 746 (88%) 100 (12%)
4 bedroom 197 (88%) 26 (12%)
5+ bedroom 64 (85%) 11 (15%)

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_ + Common_unit_,
          family=binomial(link="logit"), data=df)



tbl_regression(m1, exponentiate=TRUE)
Characteristic OR (95% CI)1 p-value
Landlord_size_
small (single-fam)
small (non single-fam) 1.71 (1.35 to 2.18) <0.001
big (single-fam) 5.02 (2.70 to 8.96) <0.001
big (non single-fam) 12.3 (9.85 to 15.3) <0.001

1 OR = Odds Ratio, CI = Confidence Interval

tbl_regression(m2, exponentiate=TRUE)
Characteristic OR (95% CI)1 p-value
Landlord_size_
small (single-fam)
small (non single-fam) 1.93 (1.47 to 2.54) <0.001
big (single-fam) 4.76 (2.53 to 8.60) <0.001
big (non single-fam) 11.3 (8.64 to 14.8) <0.001
Financial_role_
Other
Primary Income 1.64 (1.28 to 2.09) <0.001
Common_unit_
2 bedroom
0 bedroom (studio/efficiency) 1.09 (0.72 to 1.63) 0.69
1 bedroom 1.12 (0.90 to 1.40) 0.32
3 bedroom 1.15 (0.86 to 1.54) 0.34
4 bedroom 1.25 (0.77 to 1.97) 0.36
5+ bedroom 1.35 (0.63 to 2.66) 0.41

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_, Common_unit_),
    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
no, dk, missing yes
Landlord_size_, n (%) <0.001
small (single-fam) 1,561 (90%) 166 (9.6%)
small (non single-fam) 1,089 (89%) 130 (11%)
big (single-fam) 43 (77%) 13 (23%)
big (non single-fam) 527 (63%) 307 (37%)
Financial_role_, n (%) <0.001
Other 2,923 (87%) 438 (13%)
Primary Income 286 (63%) 171 (37%)
Common_unit_, n (%) <0.001
2 bedroom 1,226 (85%) 216 (15%)
0 bedroom (studio/efficiency) 103 (70%) 45 (30%)
1 bedroom 699 (79%) 189 (21%)
3 bedroom 735 (87%) 111 (13%)
4 bedroom 198 (89%) 25 (11%)
5+ bedroom 63 (84%) 12 (16%)

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_ + Common_unit_,
          family=binomial(link="logit"), data=df)



tbl_regression(m1, exponentiate=TRUE)
Characteristic OR (95% CI)1 p-value
Landlord_size_
small (single-fam)
small (non single-fam) 1.12 (0.88 to 1.43) 0.35
big (single-fam) 2.84 (1.44 to 5.25) 0.001
big (non single-fam) 5.48 (4.43 to 6.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 (single-fam)
small (non single-fam) 1.30 (0.98 to 1.71) 0.067
big (single-fam) 2.51 (1.25 to 4.72) 0.006
big (non single-fam) 4.93 (3.77 to 6.47) <0.001
Financial_role_
Other
Primary Income 2.15 (1.69 to 2.73) <0.001
Common_unit_
2 bedroom
0 bedroom (studio/efficiency) 1.47 (0.97 to 2.22) 0.066
1 bedroom 1.04 (0.82 to 1.31) 0.75
3 bedroom 1.41 (1.07 to 1.87) 0.015
4 bedroom 1.24 (0.76 to 1.95) 0.37
5+ bedroom 1.57 (0.77 to 2.97) 0.19

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_, Common_unit_),
    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
no, dk, missing yes
Landlord_size_, n (%) <0.001
small (single-fam) 1,668 (97%) 59 (3.4%)
small (non single-fam) 1,134 (93%) 85 (7.0%)
big (single-fam) 50 (89%) 6 (11%)
big (non single-fam) 604 (72%) 230 (28%)
Financial_role_, n (%) <0.001
Other 3,098 (92%) 263 (7.8%)
Primary Income 343 (75%) 114 (25%)
Common_unit_, n (%) <0.001
2 bedroom 1,307 (91%) 135 (9.4%)
0 bedroom (studio/efficiency) 121 (82%) 27 (18%)
1 bedroom 756 (85%) 132 (15%)
3 bedroom 791 (93%) 55 (6.5%)
4 bedroom 211 (95%) 12 (5.4%)
5+ bedroom 74 (99%) 1 (1.3%)

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_ + Common_unit_,
          family=binomial(link="logit"), data=df)



tbl_regression(m1, exponentiate=TRUE)
Characteristic OR (95% CI)1 p-value
Landlord_size_
small (single-fam)
small (non single-fam) 2.12 (1.51 to 2.99) <0.001
big (single-fam) 3.39 (1.26 to 7.66) 0.007
big (non single-fam) 10.8 (8.02 to 14.7) <0.001

1 OR = Odds Ratio, CI = Confidence Interval

tbl_regression(m2, exponentiate=TRUE)
Characteristic OR (95% CI)1 p-value
Landlord_size_
small (single-fam)
small (non single-fam) 2.32 (1.57 to 3.43) <0.001
big (single-fam) 2.96 (1.09 to 6.77) 0.018
big (non single-fam) 10.5 (7.29 to 15.3) <0.001
Financial_role_
Other
Primary Income 1.83 (1.38 to 2.41) <0.001
Common_unit_
2 bedroom
0 bedroom (studio/efficiency) 1.09 (0.66 to 1.76) 0.72
1 bedroom 1.08 (0.82 to 1.42) 0.59
3 bedroom 1.59 (1.09 to 2.31) 0.016
4 bedroom 1.44 (0.72 to 2.68) 0.28
5+ bedroom 0.23 (0.01 to 1.09) 0.15

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_, Common_unit_),
    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 (%)
small (single-fam) 775 (57%) 341 (25%) 60 (4.4%) 38 (2.8%) 153 (11%)
small (non single-fam) 640 (62%) 228 (22%) 48 (4.6%) 26 (2.5%) 92 (8.9%)
big (single-fam) 25 (47%) 14 (26%) 3 (5.7%) 3 (5.7%) 8 (15%)
big (non single-fam) 359 (45%) 278 (35%) 66 (8.3%) 18 (2.3%) 78 (9.8%)
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%)
Common_unit_, n (%)
2 bedroom 697 (55%) 337 (27%) 76 (6.0%) 23 (1.8%) 127 (10%)
0 bedroom (studio/efficiency) 79 (61%) 27 (21%) 9 (6.9%) 3 (2.3%) 12 (9.2%)
1 bedroom 440 (56%) 202 (26%) 43 (5.5%) 22 (2.8%) 75 (9.6%)
3 bedroom 349 (51%) 198 (29%) 30 (4.4%) 27 (4.0%) 74 (11%)
4 bedroom 103 (55%) 48 (26%) 10 (5.4%) 4 (2.2%) 21 (11%)
5+ bedroom 35 (54%) 21 (32%) 1 (1.5%) 3 (4.6%) 5 (7.7%)

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_ + Common_unit_,
          family=gaussian(link="identity"), data=df)



tbl_regression(m1)
Characteristic Beta (95% CI)1 p-value
Landlord_size_
small (single-fam)
small (non single-fam) -3.1 (-5.6 to -0.54) 0.018
big (single-fam) 7.1 (-1.6 to 16) 0.11
big (non single-fam) 2.6 (-0.19 to 5.3) 0.068

1 CI = Confidence Interval

tbl_regression(m2)
Characteristic Beta (95% CI)1 p-value
Landlord_size_
small (single-fam)
small (non single-fam) -2.4 (-5.3 to 0.57) 0.11
big (single-fam) 6.9 (-2.0 to 16) 0.13
big (non single-fam) 3.6 (0.34 to 7.0) 0.031
Financial_role_
Other
Primary Income 1.2 (-2.2 to 4.7) 0.48
Common_unit_
2 bedroom
0 bedroom (studio/efficiency) -2.3 (-8.1 to 3.5) 0.43
1 bedroom -0.86 (-3.8 to 2.0) 0.56
3 bedroom 2.4 (-0.72 to 5.6) 0.13
4 bedroom 1.0 (-4.0 to 6.1) 0.69
5+ bedroom -1.1 (-9.0 to 6.9) 0.79

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_, Common_unit_),
    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.055
small (single-fam) 429 (79%) 111 (21%)
small (non single-fam) 266 (81%) 63 (19%)
big (single-fam) 18 (78%) 5 (22%)
big (non single-fam) 261 (73%) 97 (27%)
Financial_role_, n (%) 0.049
Other 819 (79%) 220 (21%)
Primary Income 148 (73%) 56 (27%)
Common_unit_, n (%) 0.007
2 bedroom 364 (78%) 101 (22%)
0 bedroom (studio/efficiency) 25 (58%) 18 (42%)
1 bedroom 228 (78%) 64 (22%)
3 bedroom 234 (79%) 63 (21%)
4 bedroom 68 (87%) 10 (13%)
5+ bedroom 18 (67%) 9 (33%)

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_ + Common_unit_,
          family=binomial(link="logit"), data=df)



tbl_regression(m1, exponentiate=TRUE)
Characteristic OR (95% CI)1 p-value
Landlord_size_
small (single-fam)
small (non single-fam) 0.92 (0.65 to 1.29) 0.62
big (single-fam) 1.07 (0.35 to 2.76) 0.89
big (non single-fam) 1.44 (1.05 to 1.96) 0.023

1 OR = Odds Ratio, CI = Confidence Interval

tbl_regression(m2, exponentiate=TRUE)
Characteristic OR (95% CI)1 p-value
Landlord_size_
small (single-fam)
small (non single-fam) 0.84 (0.56 to 1.25) 0.40
big (single-fam) 1.21 (0.39 to 3.19) 0.71
big (non single-fam) 1.27 (0.85 to 1.89) 0.25
Financial_role_
Other
Primary Income 1.13 (0.77 to 1.65) 0.53
Common_unit_
2 bedroom
0 bedroom (studio/efficiency) 2.18 (1.10 to 4.25) 0.022
1 bedroom 0.93 (0.64 to 1.35) 0.72
3 bedroom 1.01 (0.68 to 1.48) 0.98
4 bedroom 0.54 (0.25 to 1.08) 0.10
5+ bedroom 1.84 (0.76 to 4.18) 0.16

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_, Common_unit_),
    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 (single-fam) 972 (60%) 661 (40%)
small (non single-fam) 640 (56%) 508 (44%)
big (single-fam) 21 (40%) 32 (60%)
big (non single-fam) 302 (37%) 510 (63%)
Financial_role_, n (%) <0.001
Other 1,742 (55%) 1,446 (45%)
Primary Income 186 (42%) 257 (58%)
Common_unit_, n (%) 0.008
2 bedroom 683 (49%) 700 (51%)
0 bedroom (studio/efficiency) 77 (55%) 63 (45%)
1 bedroom 455 (53%) 396 (47%)
3 bedroom 462 (57%) 342 (43%)
4 bedroom 120 (56%) 94 (44%)
5+ bedroom 33 (47%) 37 (53%)

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_ + Common_unit_,
          family=binomial(link="logit"), data=df)



tbl_regression(m1, exponentiate=TRUE)
Characteristic OR (95% CI)1 p-value
Landlord_size_
small (single-fam)
small (non single-fam) 1.17 (1.00 to 1.36) 0.047
big (single-fam) 2.24 (1.29 to 3.97) 0.005
big (non single-fam) 2.48 (2.09 to 2.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 (single-fam)
small (non single-fam) 1.31 (1.10 to 1.56) 0.003
big (single-fam) 2.46 (1.39 to 4.46) 0.002
big (non single-fam) 2.81 (2.28 to 3.47) <0.001
Financial_role_
Other
Primary Income 1.15 (0.92 to 1.44) 0.22
Common_unit_
2 bedroom
0 bedroom (studio/efficiency) 0.56 (0.39 to 0.81) 0.002
1 bedroom 0.68 (0.56 to 0.81) <0.001
3 bedroom 0.92 (0.76 to 1.11) 0.37
4 bedroom 0.98 (0.72 to 1.33) 0.90
5+ bedroom 1.40 (0.85 to 2.29) 0.18

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_, Common_unit_),
    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 (single-fam) 1,375 (81%) 329 (19%)
small (non single-fam) 386 (39%) 610 (61%)
big (single-fam) 46 (85%) 8 (15%)
big (non single-fam) 341 (42%) 475 (58%)
Financial_role_, n (%) 0.024
Other 1,900 (61%) 1,219 (39%)
Primary Income 241 (55%) 195 (45%)
Common_unit_, n (%) <0.001
2 bedroom 839 (59%) 582 (41%)
0 bedroom (studio/efficiency) 52 (36%) 91 (64%)
1 bedroom 299 (34%) 579 (66%)
3 bedroom 696 (84%) 135 (16%)
4 bedroom 202 (91%) 21 (9.4%)
5+ bedroom 60 (81%) 14 (19%)

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_ + Common_unit_,
          family=binomial(link="logit"), data=df)



tbl_regression(m1, exponentiate=TRUE)
Characteristic OR (95% CI)1 p-value
Landlord_size_
small (single-fam)
small (non single-fam) 6.60 (5.55 to 7.88) <0.001
big (single-fam) 0.73 (0.32 to 1.47) 0.41
big (non single-fam) 5.82 (4.85 to 7.00) <0.001

1 OR = Odds Ratio, CI = Confidence Interval

tbl_regression(m2, exponentiate=TRUE)
Characteristic OR (95% CI)1 p-value
Landlord_size_
small (single-fam)
small (non single-fam) 4.37 (3.62 to 5.29) <0.001
big (single-fam) 0.72 (0.29 to 1.57) 0.44
big (non single-fam) 3.48 (2.80 to 4.33) <0.001
Financial_role_
Other
Primary Income 0.66 (0.52 to 0.84) <0.001
Common_unit_
2 bedroom
0 bedroom (studio/efficiency) 1.62 (1.13 to 2.36) 0.010
1 bedroom 2.46 (2.05 to 2.97) <0.001
3 bedroom 0.45 (0.36 to 0.57) <0.001
4 bedroom 0.27 (0.16 to 0.42) <0.001
5+ bedroom 0.59 (0.31 to 1.06) 0.094

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_, Common_unit_),
    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 (single-fam) 994 (63%) 591 (37%)
small (non single-fam) 581 (61%) 378 (39%)
big (single-fam) 39 (75%) 13 (25%)
big (non single-fam) 564 (71%) 234 (29%)
Financial_role_, n (%) 0.016
Other 1,866 (63%) 1,080 (37%)
Primary Income 300 (69%) 133 (31%)
Common_unit_, n (%) <0.001
2 bedroom 824 (61%) 536 (39%)
0 bedroom (studio/efficiency) 105 (77%) 31 (23%)
1 bedroom 505 (60%) 333 (40%)
3 bedroom 585 (75%) 193 (25%)
4 bedroom 118 (56%) 93 (44%)
5+ bedroom 41 (58%) 30 (42%)

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_ + Common_unit_,
          family=binomial(link="logit"), data=df)



tbl_regression(m1, exponentiate=TRUE)
Characteristic OR (95% CI)1 p-value
Landlord_size_
small (single-fam)
small (non single-fam) 1.09 (0.93 to 1.29) 0.28
big (single-fam) 0.56 (0.29 to 1.03) 0.074
big (non single-fam) 0.70 (0.58 to 0.84) <0.001

1 OR = Odds Ratio, CI = Confidence Interval

tbl_regression(m2, exponentiate=TRUE)
Characteristic OR (95% CI)1 p-value
Landlord_size_
small (single-fam)
small (non single-fam) 0.90 (0.75 to 1.09) 0.28
big (single-fam) 0.54 (0.27 to 1.02) 0.070
big (non single-fam) 0.55 (0.44 to 0.69) <0.001
Financial_role_
Other
Primary Income 0.91 (0.72 to 1.15) 0.45
Common_unit_
2 bedroom
0 bedroom (studio/efficiency) 0.54 (0.35 to 0.82) 0.005
1 bedroom 1.14 (0.95 to 1.37) 0.16
3 bedroom 0.45 (0.36 to 0.55) <0.001
4 bedroom 1.06 (0.78 to 1.44) 0.70
5+ bedroom 1.01 (0.61 to 1.64) 0.97

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_, Common_unit_),
    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 (single-fam) 733 (67%) 362 (33%)
small (non single-fam) 429 (63%) 254 (37%)
big (single-fam) 17 (44%) 22 (56%)
big (non single-fam) 311 (48%) 334 (52%)
Financial_role_, n (%) <0.001
Other 1,322 (63%) 790 (37%)
Primary Income 162 (48%) 176 (52%)
Common_unit_, n (%) 0.023
2 bedroom 620 (62%) 380 (38%)
0 bedroom (studio/efficiency) 54 (52%) 49 (48%)
1 bedroom 350 (57%) 268 (43%)
3 bedroom 347 (63%) 206 (37%)
4 bedroom 96 (67%) 47 (33%)
5+ bedroom 23 (51%) 22 (49%)

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_ + Common_unit_,
          family=binomial(link="logit"), data=df)



tbl_regression(m1, exponentiate=TRUE)
Characteristic OR (95% CI)1 p-value
Landlord_size_
small (single-fam)
small (non single-fam) 1.20 (0.98 to 1.46) 0.075
big (single-fam) 2.62 (1.38 to 5.06) 0.003
big (non single-fam) 2.17 (1.78 to 2.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 (single-fam)
small (non single-fam) 1.27 (1.01 to 1.58) 0.038
big (single-fam) 2.29 (1.18 to 4.50) 0.014
big (non single-fam) 2.10 (1.65 to 2.68) <0.001
Financial_role_
Other
Primary Income 1.34 (1.04 to 1.72) 0.022
Common_unit_
2 bedroom
0 bedroom (studio/efficiency) 1.13 (0.74 to 1.72) 0.58
1 bedroom 1.05 (0.85 to 1.29) 0.67
3 bedroom 1.21 (0.96 to 1.53) 0.11
4 bedroom 1.02 (0.69 to 1.50) 0.93
5+ bedroom 1.90 (1.02 to 3.51) 0.040

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_, Common_unit_),
    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.010
small (single-fam) 592 (72%) 234 (28%)
small (non single-fam) 378 (79%) 99 (21%)
big (single-fam) 19 (76%) 6 (24%)
big (non single-fam) 308 (78%) 87 (22%)
Financial_role_, n (%) 0.61
Other 1,139 (75%) 378 (25%)
Primary Income 152 (77%) 46 (23%)
Common_unit_, n (%) <0.001
2 bedroom 539 (78%) 155 (22%)
0 bedroom (studio/efficiency) 26 (50%) 26 (50%)
1 bedroom 353 (85%) 60 (15%)
3 bedroom 281 (70%) 123 (30%)
4 bedroom 66 (58%) 47 (42%)
5+ bedroom 32 (68%) 15 (32%)

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_ + Common_unit_,
          family=binomial(link="logit"), data=df)



tbl_regression(m1, exponentiate=TRUE)
Characteristic OR (95% CI)1 p-value
Landlord_size_
small (single-fam)
small (non single-fam) 0.66 (0.51 to 0.86) 0.003
big (single-fam) 0.80 (0.29 to 1.92) 0.64
big (non single-fam) 0.71 (0.54 to 0.94) 0.020

1 OR = Odds Ratio, CI = Confidence Interval

tbl_regression(m2, exponentiate=TRUE)
Characteristic OR (95% CI)1 p-value
Landlord_size_
small (single-fam)
small (non single-fam) 0.80 (0.59 to 1.08) 0.14
big (single-fam) 0.67 (0.24 to 1.66) 0.41
big (non single-fam) 0.93 (0.66 to 1.30) 0.67
Financial_role_
Other
Primary Income 1.02 (0.69 to 1.48) 0.94
Common_unit_
2 bedroom
0 bedroom (studio/efficiency) 3.67 (2.03 to 6.61) <0.001
1 bedroom 0.61 (0.43 to 0.84) 0.003
3 bedroom 1.46 (1.09 to 1.97) 0.012
4 bedroom 2.39 (1.54 to 3.69) <0.001
5+ bedroom 1.53 (0.78 to 2.88) 0.20

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_, Common_unit_),
    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 (single-fam) 193 (96%) 9 (4.5%)
small (non single-fam) 118 (85%) 21 (15%)
big (single-fam) 8 (89%) 1 (11%)
big (non single-fam) 150 (74%) 52 (26%)
Financial_role_, n (%) <0.001
Other 396 (89%) 50 (11%)
Primary Income 69 (68%) 33 (32%)
Common_unit_, n (%)
2 bedroom 190 (91%) 18 (8.7%)
0 bedroom (studio/efficiency) 20 (74%) 7 (26%)
1 bedroom 136 (71%) 56 (29%)
3 bedroom 87 (99%) 1 (1.1%)
4 bedroom 27 (96%) 1 (3.6%)
5+ bedroom 9 (100%) 0 (0%)

1 Fisher's exact test; 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_ + Common_unit_,
          family=binomial(link="logit"), data=df)



tbl_regression(m1, exponentiate=TRUE)
Characteristic OR (95% CI)1 p-value
Landlord_size_
small (single-fam)
small (non single-fam) 3.82 (1.74 to 9.03) 0.001
big (single-fam) 2.68 (0.14 to 17.1) 0.38
big (non single-fam) 7.43 (3.72 to 16.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 (single-fam)
small (non single-fam) 1.54 (0.65 to 3.91) 0.34
big (single-fam) 1.91 (0.09 to 15.5) 0.59
big (non single-fam) 1.91 (0.82 to 4.79) 0.15
Financial_role_
Other
Primary Income 2.12 (1.19 to 3.75) 0.010
Common_unit_
2 bedroom
0 bedroom (studio/efficiency) 2.56 (0.88 to 6.97) 0.072
1 bedroom 3.45 (1.92 to 6.45) <0.001
3 bedroom 0.17 (0.01 to 0.94) 0.10
4 bedroom 0.54 (0.03 to 3.20) 0.58
5+ bedroom 0.00 (NA to 1,518,902,281,235,844,825,128) 0.99

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_, Common_unit_),
    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 (single-fam) 1,132 (66%) 595 (34%)
small (non single-fam) 697 (57%) 522 (43%)
big (single-fam) 36 (64%) 20 (36%)
big (non single-fam) 671 (80%) 163 (20%)
Financial_role_, n (%) 0.073
Other 2,204 (66%) 1,157 (34%)
Primary Income 319 (70%) 138 (30%)
Common_unit_, n (%) <0.001
2 bedroom 1,252 (87%) 190 (13%)
0 bedroom (studio/efficiency) 60 (41%) 88 (59%)
1 bedroom 560 (63%) 328 (37%)
3 bedroom 488 (58%) 358 (42%)
4 bedroom 176 (79%) 47 (21%)
5+ bedroom 0 (0%) 75 (100%)

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_ + Common_unit_,
          family=binomial(link="logit"), data=df)



tbl_regression(m1, exponentiate=TRUE)
Characteristic OR (95% CI)1 p-value
Landlord_size_
small (single-fam)
small (non single-fam) 1.42 (1.23 to 1.66) <0.001
big (single-fam) 1.06 (0.60 to 1.82) 0.85
big (non single-fam) 0.46 (0.38 to 0.56) <0.001

1 OR = Odds Ratio, CI = Confidence Interval

tbl_regression(m2, exponentiate=TRUE)
Characteristic OR (95% CI)1 p-value
Landlord_size_
small (single-fam)
small (non single-fam) 0.83 (0.67 to 1.01) 0.065
big (single-fam) 1.02 (0.55 to 1.86) 0.94
big (non single-fam) 0.29 (0.22 to 0.38) <0.001
Financial_role_
Other
Primary Income 1.19 (0.91 to 1.55) 0.19
Common_unit_
2 bedroom
0 bedroom (studio/efficiency) 14.8 (10.1 to 22.0) <0.001
1 bedroom 4.96 (4.00 to 6.18) <0.001
3 bedroom 3.96 (3.20 to 4.92) <0.001
4 bedroom 1.41 (0.97 to 2.01) 0.068
5+ bedroom 91,212,350 (4,852 to 2,791,366,407,498,063,121,664,642,028,482,684,482,006,442,840,846,224) 0.95

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_, Common_unit_),
    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 (single-fam) 932 (55%) 773 (45%)
small (non single-fam) 587 (59%) 402 (41%)
big (single-fam) 38 (69%) 17 (31%)
big (non single-fam) 655 (80%) 164 (20%)
Financial_role_, n (%) <0.001
Other 1,866 (60%) 1,240 (40%)
Primary Income 334 (75%) 112 (25%)
Common_unit_, n (%) <0.001
2 bedroom 872 (61%) 549 (39%)
0 bedroom (studio/efficiency) 95 (68%) 45 (32%)
1 bedroom 622 (71%) 254 (29%)
3 bedroom 467 (56%) 368 (44%)
4 bedroom 119 (54%) 103 (46%)
5+ bedroom 37 (50%) 37 (50%)

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_ + Common_unit_,
          family=binomial(link="logit"), data=df)



tbl_regression(m1, exponentiate=TRUE)
Characteristic OR (95% CI)1 p-value
Landlord_size_
small (single-fam)
small (non single-fam) 0.83 (0.70 to 0.97) 0.018
big (single-fam) 0.54 (0.29 to 0.95) 0.037
big (non single-fam) 0.30 (0.25 to 0.37) <0.001

1 OR = Odds Ratio, CI = Confidence Interval

tbl_regression(m2, exponentiate=TRUE)
Characteristic OR (95% CI)1 p-value
Landlord_size_
small (single-fam)
small (non single-fam) 0.89 (0.75 to 1.06) 0.19
big (single-fam) 0.54 (0.29 to 0.97) 0.047
big (non single-fam) 0.36 (0.29 to 0.45) <0.001
Financial_role_
Other
Primary Income 0.79 (0.62 to 1.00) 0.056
Common_unit_
2 bedroom
0 bedroom (studio/efficiency) 1.04 (0.70 to 1.53) 0.84
1 bedroom 0.77 (0.64 to 0.93) 0.007
3 bedroom 1.04 (0.86 to 1.25) 0.71
4 bedroom 1.12 (0.83 to 1.50) 0.46
5+ bedroom 1.36 (0.84 to 2.20) 0.20

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_, Common_unit_),
    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 (single-fam) 779 (45%) 934 (55%)
small (non single-fam) 457 (38%) 732 (62%)
big (single-fam) 11 (20%) 43 (80%)
big (non single-fam) 111 (13%) 712 (87%)
Financial_role_, n (%) <0.001
Other 1,268 (38%) 2,042 (62%)
Primary Income 82 (18%) 369 (82%)
Common_unit_, n (%) <0.001
2 bedroom 496 (35%) 932 (65%)
0 bedroom (studio/efficiency) 35 (24%) 111 (76%)
1 bedroom 271 (31%) 608 (69%)
3 bedroom 343 (41%) 495 (59%)
4 bedroom 97 (44%) 125 (56%)
5+ bedroom 22 (29%) 53 (71%)

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_ + Common_unit_,
          family=binomial(link="logit"), data=df)



tbl_regression(m1, exponentiate=TRUE)
Characteristic OR (95% CI)1 p-value
Landlord_size_
small (single-fam)
small (non single-fam) 1.34 (1.15 to 1.55) <0.001
big (single-fam) 3.26 (1.73 to 6.69) <0.001
big (non single-fam) 5.35 (4.30 to 6.70) <0.001

1 OR = Odds Ratio, CI = Confidence Interval

tbl_regression(m2, exponentiate=TRUE)
Characteristic OR (95% CI)1 p-value
Landlord_size_
small (single-fam)
small (non single-fam) 1.54 (1.29 to 1.84) <0.001
big (single-fam) 2.86 (1.50 to 5.90) 0.002
big (non single-fam) 5.28 (4.12 to 6.82) <0.001
Financial_role_
Other
Primary Income 1.61 (1.23 to 2.13) <0.001
Common_unit_
2 bedroom
0 bedroom (studio/efficiency) 0.98 (0.65 to 1.52) 0.94
1 bedroom 0.87 (0.72 to 1.06) 0.16
3 bedroom 1.09 (0.90 to 1.31) 0.39
4 bedroom 0.99 (0.73 to 1.34) 0.94
5+ bedroom 1.75 (1.05 to 3.01) 0.035

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_, Common_unit_),
    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
0 3 7 13 20 30
Landlord_size_, n (%)
small (single-fam) 779 (45%) 503 (29%) 281 (16%) 61 (3.6%) 56 (3.3%) 33 (1.9%)
small (non single-fam) 457 (38%) 368 (31%) 259 (22%) 47 (4.0%) 37 (3.1%) 21 (1.8%)
big (single-fam) 11 (20%) 22 (41%) 16 (30%) 3 (5.6%) 1 (1.9%) 1 (1.9%)
big (non single-fam) 111 (13%) 316 (38%) 301 (37%) 64 (7.8%) 21 (2.6%) 10 (1.2%)
Financial_role_, n (%) <0.001
Other 1,268 (38%) 1,035 (31%) 704 (21%) 149 (4.5%) 97 (2.9%) 57 (1.7%)
Primary Income 82 (18%) 167 (37%) 151 (33%) 25 (5.5%) 18 (4.0%) 8 (1.8%)
Common_unit_, n (%)
2 bedroom 496 (35%) 469 (33%) 325 (23%) 61 (4.3%) 53 (3.7%) 24 (1.7%)
0 bedroom (studio/efficiency) 35 (24%) 46 (32%) 55 (38%) 9 (6.2%) 1 (0.7%) 0 (0%)
1 bedroom 271 (31%) 288 (33%) 235 (27%) 46 (5.2%) 24 (2.7%) 15 (1.7%)
3 bedroom 343 (41%) 252 (30%) 168 (20%) 36 (4.3%) 23 (2.7%) 16 (1.9%)
4 bedroom 97 (44%) 72 (32%) 34 (15%) 7 (3.2%) 7 (3.2%) 5 (2.3%)
5+ bedroom 22 (29%) 32 (43%) 12 (16%) 5 (6.7%) 3 (4.0%) 1 (1.3%)

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_ + Common_unit_,
          family=gaussian(link="identity"), data=df)



tbl_regression(m1)
Characteristic Beta (95% CI)1 p-value
Landlord_size_
small (single-fam)
small (non single-fam) 0.40 (-0.01 to 0.81) 0.059
big (single-fam) 1.2 (-0.28 to 2.7) 0.11
big (non single-fam) 1.9 (1.4 to 2.3) <0.001

1 CI = Confidence Interval

tbl_regression(m2)
Characteristic Beta (95% CI)1 p-value
Landlord_size_
small (single-fam)
small (non single-fam) 0.58 (0.10 to 1.1) 0.017
big (single-fam) 1.2 (-0.38 to 2.7) 0.14
big (non single-fam) 1.8 (1.3 to 2.4) <0.001
Financial_role_
Other
Primary Income 0.64 (0.05 to 1.2) 0.033
Common_unit_
2 bedroom
0 bedroom (studio/efficiency) -0.55 (-1.5 to 0.42) 0.27
1 bedroom -0.17 (-0.65 to 0.30) 0.47
3 bedroom 0.10 (-0.40 to 0.61) 0.69
4 bedroom -0.10 (-0.91 to 0.71) 0.81
5+ bedroom 0.49 (-0.81 to 1.8) 0.46

1 CI = Confidence Interval



Raised rent - rising costs

Outcome: raised rent due to rising costs of taxes, repairs (not exclusive)

  • 0: no
  • 1: yes


Crosstabs:

df %>% 
  tbl_summary(
    by = Raised_rent_rising_costs,
    percent = "row",
    missing = "no",
    include = c(Landlord_size_, Financial_role_, Common_unit_),
    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.47
small (single-fam) 160 (17%) 774 (83%)
small (non single-fam) 142 (19%) 590 (81%)
big (single-fam) 6 (14%) 37 (86%)
big (non single-fam) 119 (17%) 593 (83%)
Financial_role_, n (%) 0.45
Other 365 (18%) 1,677 (82%)
Primary Income 60 (16%) 309 (84%)
Common_unit_, n (%) 0.19
2 bedroom 145 (16%) 787 (84%)
0 bedroom (studio/efficiency) 25 (23%) 86 (77%)
1 bedroom 115 (19%) 493 (81%)
3 bedroom 93 (19%) 402 (81%)
4 bedroom 22 (18%) 103 (82%)
5+ bedroom 13 (25%) 40 (75%)

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_ + Common_unit_,
          family=binomial(link="logit"), data=df)



tbl_regression(m1, exponentiate=TRUE)
Characteristic OR (95% CI)1 p-value
Landlord_size_
small (single-fam)
small (non single-fam) 0.86 (0.67 to 1.10) 0.23
big (single-fam) 1.27 (0.57 to 3.40) 0.59
big (non single-fam) 1.03 (0.79 to 1.34) 0.82

1 OR = Odds Ratio, CI = Confidence Interval

tbl_regression(m2, exponentiate=TRUE)
Characteristic OR (95% CI)1 p-value
Landlord_size_
small (single-fam)
small (non single-fam) 0.78 (0.59 to 1.04) 0.094
big (single-fam) 1.46 (0.61 to 4.32) 0.44
big (non single-fam) 1.00 (0.73 to 1.38) >0.99
Financial_role_
Other
Primary Income 1.10 (0.80 to 1.53) 0.57
Common_unit_
2 bedroom
0 bedroom (studio/efficiency) 0.64 (0.40 to 1.06) 0.073
1 bedroom 0.79 (0.60 to 1.04) 0.088
3 bedroom 0.77 (0.56 to 1.04) 0.090
4 bedroom 0.81 (0.49 to 1.38) 0.42
5+ bedroom 0.53 (0.28 to 1.07) 0.064

1 OR = Odds Ratio, CI = Confidence Interval



Raised rent - regulations

Outcome: raised rent due to regulations (not exclusive)

  • 0: no
  • 1: yes


Crosstabs:

df %>% 
  tbl_summary(
    by = Raised_rent_regulations,
    percent = "row",
    missing = "no",
    include = c(Landlord_size_, Financial_role_, Common_unit_),
    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.001
small (single-fam) 762 (82%) 172 (18%)
small (non single-fam) 601 (82%) 131 (18%)
big (single-fam) 26 (60%) 17 (40%)
big (non single-fam) 503 (71%) 209 (29%)
Financial_role_, n (%) <0.001
Other 1,619 (79%) 423 (21%)
Primary Income 264 (72%) 105 (28%)
Common_unit_, n (%) 0.13
2 bedroom 726 (78%) 206 (22%)
0 bedroom (studio/efficiency) 84 (76%) 27 (24%)
1 bedroom 458 (75%) 150 (25%)
3 bedroom 407 (82%) 88 (18%)
4 bedroom 95 (76%) 30 (24%)
5+ bedroom 40 (75%) 13 (25%)

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_ + Common_unit_,
          family=binomial(link="logit"), data=df)



tbl_regression(m1, exponentiate=TRUE)
Characteristic OR (95% CI)1 p-value
Landlord_size_
small (single-fam)
small (non single-fam) 0.97 (0.75 to 1.24) 0.79
big (single-fam) 2.90 (1.51 to 5.42) <0.001
big (non single-fam) 1.84 (1.46 to 2.32) <0.001

1 OR = Odds Ratio, CI = Confidence Interval

tbl_regression(m2, exponentiate=TRUE)
Characteristic OR (95% CI)1 p-value
Landlord_size_
small (single-fam)
small (non single-fam) 0.97 (0.73 to 1.28) 0.82
big (single-fam) 2.76 (1.41 to 5.26) 0.002
big (non single-fam) 1.75 (1.32 to 2.33) <0.001
Financial_role_
Other
Primary Income 1.13 (0.86 to 1.49) 0.37
Common_unit_
2 bedroom
0 bedroom (studio/efficiency) 0.94 (0.58 to 1.50) 0.81
1 bedroom 1.01 (0.79 to 1.30) 0.92
3 bedroom 0.85 (0.63 to 1.14) 0.29
4 bedroom 1.22 (0.76 to 1.92) 0.39
5+ bedroom 1.28 (0.64 to 2.42) 0.46

1 OR = Odds Ratio, CI = Confidence Interval



Raised rent - market

Outcome: raised rent due to housing market (not exclusive)

  • 0: no
  • 1: yes


Crosstabs:

df %>% 
  tbl_summary(
    by = Raised_rent_market,
    percent = "row",
    missing = "no",
    include = c(Landlord_size_, Financial_role_, Common_unit_),
    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.47
small (single-fam) 641 (69%) 293 (31%)
small (non single-fam) 524 (72%) 208 (28%)
big (single-fam) 28 (65%) 15 (35%)
big (non single-fam) 488 (69%) 224 (31%)
Financial_role_, n (%) 0.28
Other 1,425 (70%) 617 (30%)
Primary Income 247 (67%) 122 (33%)
Common_unit_, n (%) 0.88
2 bedroom 645 (69%) 287 (31%)
0 bedroom (studio/efficiency) 71 (64%) 40 (36%)
1 bedroom 421 (69%) 187 (31%)
3 bedroom 348 (70%) 147 (30%)
4 bedroom 85 (68%) 40 (32%)
5+ bedroom 37 (70%) 16 (30%)

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_ + Common_unit_,
          family=binomial(link="logit"), data=df)



tbl_regression(m1, exponentiate=TRUE)
Characteristic OR (95% CI)1 p-value
Landlord_size_
small (single-fam)
small (non single-fam) 0.87 (0.70 to 1.07) 0.19
big (single-fam) 1.17 (0.60 to 2.20) 0.63
big (non single-fam) 1.00 (0.81 to 1.24) 0.97

1 OR = Odds Ratio, CI = Confidence Interval

tbl_regression(m2, exponentiate=TRUE)
Characteristic OR (95% CI)1 p-value
Landlord_size_
small (single-fam)
small (non single-fam) 0.85 (0.67 to 1.09) 0.20
big (single-fam) 1.23 (0.63 to 2.34) 0.53
big (non single-fam) 0.91 (0.70 to 1.17) 0.46
Financial_role_
Other
Primary Income 1.12 (0.86 to 1.44) 0.40
Common_unit_
2 bedroom
0 bedroom (studio/efficiency) 1.29 (0.84 to 1.96) 0.24
1 bedroom 1.00 (0.80 to 1.26) 0.98
3 bedroom 0.91 (0.70 to 1.17) 0.45
4 bedroom 0.99 (0.65 to 1.49) 0.96
5+ bedroom 0.91 (0.48 to 1.65) 0.77

1 OR = Odds Ratio, CI = Confidence Interval



Raised rent - only taxes

Outcome: raised rent ONLY due to increased property taxes

  • 0: no
  • 1: yes


Crosstabs:

df %>% 
  tbl_summary(
    by = Raised_rent_only_tax,
    percent = "row",
    missing = "no",
    include = c(Landlord_size_, Financial_role_, Common_unit_),
    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 only due to taxes**")
Characteristic Raised rent only due to taxes p-value1
0 1
Landlord_size_, n (%) <0.001
small (single-fam) 628 (67%) 306 (33%)
small (non single-fam) 525 (72%) 207 (28%)
big (single-fam) 39 (91%) 4 (9.3%)
big (non single-fam) 575 (81%) 137 (19%)
Financial_role_, n (%) 0.18
Other 1,481 (73%) 561 (27%)
Primary Income 280 (76%) 89 (24%)
Common_unit_, n (%) 0.044
2 bedroom 678 (73%) 254 (27%)
0 bedroom (studio/efficiency) 84 (76%) 27 (24%)
1 bedroom 463 (76%) 145 (24%)
3 bedroom 337 (68%) 158 (32%)
4 bedroom 90 (72%) 35 (28%)
5+ bedroom 43 (81%) 10 (19%)

1 Pearson's Chi-squared test


Models:

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

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



tbl_regression(m1, exponentiate=TRUE)
Characteristic OR (95% CI)1 p-value
Landlord_size_
small (single-fam)
small (non single-fam) 0.81 (0.65 to 1.00) 0.049
big (single-fam) 0.21 (0.06 to 0.53) 0.003
big (non single-fam) 0.49 (0.39 to 0.61) <0.001

1 OR = Odds Ratio, CI = Confidence Interval

tbl_regression(m2, exponentiate=TRUE)
Characteristic OR (95% CI)1 p-value
Landlord_size_
small (single-fam)
small (non single-fam) 0.80 (0.63 to 1.02) 0.077
big (single-fam) 0.21 (0.06 to 0.54) 0.004
big (non single-fam) 0.46 (0.35 to 0.61) <0.001
Financial_role_
Other
Primary Income 1.18 (0.88 to 1.57) 0.26
Common_unit_
2 bedroom
0 bedroom (studio/efficiency) 1.06 (0.65 to 1.67) 0.81
1 bedroom 0.96 (0.75 to 1.23) 0.77
3 bedroom 1.04 (0.80 to 1.34) 0.77
4 bedroom 0.88 (0.57 to 1.35) 0.58
5+ bedroom 0.50 (0.23 to 0.98) 0.057

1 OR = Odds Ratio, CI = Confidence Interval



Raised rent - only repairs

Outcome: raised rent ONLY due to increased cost of repairs

  • 0: no
  • 1: yes


Crosstabs:

df %>% 
  tbl_summary(
    by = Raised_rent_only_repairs,
    percent = "row",
    missing = "no",
    include = c(Landlord_size_, Financial_role_, Common_unit_),
    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 only due to repairs**")
Characteristic Raised rent only due to repairs p-value1
0 1
Landlord_size_, n (%) 0.22
small (single-fam) 914 (98%) 20 (2.1%)
small (non single-fam) 718 (98%) 14 (1.9%)
big (single-fam) 42 (98%) 1 (2.3%)
big (non single-fam) 705 (99%) 7 (1.0%)
Financial_role_, n (%) 0.14
Other 2,003 (98%) 39 (1.9%)
Primary Income 366 (99%) 3 (0.8%)
Common_unit_, n (%) 0.57
2 bedroom 917 (98%) 15 (1.6%)
0 bedroom (studio/efficiency) 111 (100%) 0 (0%)
1 bedroom 594 (98%) 14 (2.3%)
3 bedroom 486 (98%) 9 (1.8%)
4 bedroom 122 (98%) 3 (2.4%)
5+ bedroom 53 (100%) 0 (0%)

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


Models:

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

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



tbl_regression(m1, exponentiate=TRUE)
Characteristic OR (95% CI)1 p-value
Landlord_size_
small (single-fam)
small (non single-fam) 0.89 (0.44 to 1.76) 0.74
big (single-fam) 1.09 (0.06 to 5.42) 0.94
big (non single-fam) 0.45 (0.18 to 1.03) 0.074

1 OR = Odds Ratio, CI = Confidence Interval

tbl_regression(m2, exponentiate=TRUE)
Characteristic OR (95% CI)1 p-value
Landlord_size_
small (single-fam)
small (non single-fam) 0.85 (0.39 to 1.82) 0.68
big (single-fam) 1.16 (0.06 to 5.92) 0.88
big (non single-fam) 0.44 (0.15 to 1.13) 0.10
Financial_role_
Other
Primary Income 0.55 (0.13 to 1.65) 0.35
Common_unit_
2 bedroom
0 bedroom (studio/efficiency) 0.00 (0.00 to 77,847,770,599,214) 0.99
1 bedroom 1.79 (0.83 to 3.84) 0.13
3 bedroom 0.92 (0.37 to 2.17) 0.85
4 bedroom 1.18 (0.27 to 3.81) 0.80
5+ bedroom 0.00 (0.00 to 116,787,813,358,625,468,976,866) >0.99

1 OR = Odds Ratio, CI = Confidence Interval



Raised rent - only new

Outcome: raised rent ONLY due to new propoerty or new ownership

  • 0: no
  • 1: yes


Crosstabs:

df %>% 
  tbl_summary(
    by = Raised_rent_only_newproperty,
    percent = "row",
    missing = "no",
    include = c(Landlord_size_, Financial_role_, Common_unit_),
    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 only due to new property**")
Characteristic Raised rent only due to new property p-value1
0 1
Landlord_size_, n (%) 0.29
small (single-fam) 932 (100%) 2 (0.2%)
small (non single-fam) 727 (99%) 5 (0.7%)
big (single-fam) 43 (100%) 0 (0%)
big (non single-fam) 706 (99%) 6 (0.8%)
Financial_role_, n (%) >0.99
Other 2,031 (99%) 11 (0.5%)
Primary Income 367 (99%) 2 (0.5%)
Common_unit_, n (%) 0.25
2 bedroom 928 (100%) 4 (0.4%)
0 bedroom (studio/efficiency) 109 (98%) 2 (1.8%)
1 bedroom 603 (99%) 5 (0.8%)
3 bedroom 494 (100%) 1 (0.2%)
4 bedroom 124 (99%) 1 (0.8%)
5+ bedroom 53 (100%) 0 (0%)

1 Fisher's exact test


Models:

This model doesn’t have enough cases with the outcome=1, hence the messy results.

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

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



tbl_regression(m1, exponentiate=TRUE)
Characteristic OR (95% CI)1 p-value
Landlord_size_
small (single-fam)
small (non single-fam) 3.20 (0.69 to 22.4) 0.16
big (single-fam) 0.00 (NA to 705,970,280,972,727,745,122,408,442) >0.99
big (non single-fam) 3.96 (0.91 to 27.1) 0.092

1 OR = Odds Ratio, CI = Confidence Interval

tbl_regression(m2, exponentiate=TRUE)
Characteristic OR (95% CI)1 p-value
Landlord_size_
small (single-fam)
small (non single-fam) 3.20 (0.57 to 25.8) 0.21
big (single-fam) 0.00 (NA to 128,447,357,876,125,552,880,428,264,644,846,228,488,004,048,064) >0.99
big (non single-fam) 3.56 (0.60 to 30.6) 0.19
Financial_role_
Other
Primary Income 0.64 (0.09 to 2.70) 0.58
Common_unit_
2 bedroom
0 bedroom (studio/efficiency) 3.29 (0.44 to 17.7) 0.18
1 bedroom 1.65 (0.43 to 6.84) 0.46
3 bedroom 0.78 (0.04 to 5.96) 0.84
4 bedroom 3.41 (0.16 to 27.4) 0.30
5+ bedroom 0.00 (NA to 115,759,794,265,682,191,952,884,604,684,088,644,426,466) >0.99

1 OR = Odds Ratio, CI = Confidence Interval



Raised rent - only market

Outcome: raised rent ONLY due to changes in local housing market

  • 0: no
  • 1: yes


Crosstabs:

df %>% 
  tbl_summary(
    by = Raised_rent_only_market,
    percent = "row",
    missing = "no",
    include = c(Landlord_size_, Financial_role_, Common_unit_),
    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 only due to market**")
Characteristic Raised rent only due to market p-value1
0 1
Landlord_size_, n (%) 0.30
small (single-fam) 847 (91%) 87 (9.3%)
small (non single-fam) 672 (92%) 60 (8.2%)
big (single-fam) 42 (98%) 1 (2.3%)
big (non single-fam) 659 (93%) 53 (7.4%)
Financial_role_, n (%) 0.46
Other 1,869 (92%) 173 (8.5%)
Primary Income 342 (93%) 27 (7.3%)
Common_unit_, n (%) 0.92
2 bedroom 859 (92%) 73 (7.8%)
0 bedroom (studio/efficiency) 101 (91%) 10 (9.0%)
1 bedroom 555 (91%) 53 (8.7%)
3 bedroom 449 (91%) 46 (9.3%)
4 bedroom 116 (93%) 9 (7.2%)
5+ bedroom 48 (91%) 5 (9.4%)

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


Models:

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

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



tbl_regression(m1, exponentiate=TRUE)
Characteristic OR (95% CI)1 p-value
Landlord_size_
small (single-fam)
small (non single-fam) 0.87 (0.61 to 1.22) 0.42
big (single-fam) 0.23 (0.01 to 1.08) 0.15
big (non single-fam) 0.78 (0.55 to 1.11) 0.18

1 OR = Odds Ratio, CI = Confidence Interval

tbl_regression(m2, exponentiate=TRUE)
Characteristic OR (95% CI)1 p-value
Landlord_size_
small (single-fam)
small (non single-fam) 0.90 (0.61 to 1.32) 0.59
big (single-fam) 0.25 (0.01 to 1.17) 0.17
big (non single-fam) 0.75 (0.48 to 1.16) 0.21
Financial_role_
Other
Primary Income 0.93 (0.58 to 1.45) 0.75
Common_unit_
2 bedroom
0 bedroom (studio/efficiency) 1.28 (0.60 to 2.50) 0.50
1 bedroom 1.18 (0.80 to 1.73) 0.40
3 bedroom 1.13 (0.74 to 1.70) 0.57
4 bedroom 0.86 (0.39 to 1.72) 0.69
5+ bedroom 1.12 (0.38 to 2.70) 0.81

1 OR = Odds Ratio, CI = Confidence Interval



Raised rent - only regulations

Outcome: raised rent ONLY due to new regulations

  • 0: no
  • 1: yes


Crosstabs:

df %>% 
  tbl_summary(
    by = Raised_rent_only_regulation,
    percent = "row",
    missing = "no",
    include = c(Landlord_size_, Financial_role_, Common_unit_),
    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 only due to new regulations**")
Characteristic Raised rent only due to new regulations p-value1
0 1
Landlord_size_, n (%) 0.080
small (single-fam) 920 (99%) 14 (1.5%)
small (non single-fam) 723 (99%) 9 (1.2%)
big (single-fam) 40 (93%) 3 (7.0%)
big (non single-fam) 700 (98%) 12 (1.7%)
Financial_role_, n (%) 0.22
Other 2,008 (98%) 34 (1.7%)
Primary Income 366 (99%) 3 (0.8%)
Common_unit_, n (%) 0.18
2 bedroom 919 (99%) 13 (1.4%)
0 bedroom (studio/efficiency) 109 (98%) 2 (1.8%)
1 bedroom 603 (99%) 5 (0.8%)
3 bedroom 484 (98%) 11 (2.2%)
4 bedroom 121 (97%) 4 (3.2%)
5+ bedroom 52 (98%) 1 (1.9%)

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


Models:

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

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



tbl_regression(m1, exponentiate=TRUE)
Characteristic OR (95% CI)1 p-value
Landlord_size_
small (single-fam)
small (non single-fam) 0.81 (0.65 to 1.00) 0.049
big (single-fam) 0.21 (0.06 to 0.53) 0.003
big (non single-fam) 0.49 (0.39 to 0.61) <0.001

1 OR = Odds Ratio, CI = Confidence Interval

tbl_regression(m2, exponentiate=TRUE)
Characteristic OR (95% CI)1 p-value
Landlord_size_
small (single-fam)
small (non single-fam) 0.80 (0.63 to 1.02) 0.077
big (single-fam) 0.21 (0.06 to 0.54) 0.004
big (non single-fam) 0.46 (0.35 to 0.61) <0.001
Financial_role_
Other
Primary Income 1.18 (0.88 to 1.57) 0.26
Common_unit_
2 bedroom
0 bedroom (studio/efficiency) 1.06 (0.65 to 1.67) 0.81
1 bedroom 0.96 (0.75 to 1.23) 0.77
3 bedroom 1.04 (0.80 to 1.34) 0.77
4 bedroom 0.88 (0.57 to 1.35) 0.58
5+ bedroom 0.50 (0.23 to 0.98) 0.057

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_, Common_unit_),
    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
none 1 or more/dk
Landlord_size_, n (%) <0.001
small (single-fam) 1,601 (93%) 123 (7.1%)
small (non single-fam) 1,104 (92%) 97 (8.1%)
big (single-fam) 40 (73%) 15 (27%)
big (non single-fam) 608 (73%) 221 (27%)
Financial_role_, n (%) <0.001
Other 2,999 (90%) 337 (10%)
Primary Income 342 (75%) 114 (25%)
Common_unit_, n (%) <0.001
2 bedroom 1,267 (88%) 173 (12%)
0 bedroom (studio/efficiency) 107 (73%) 40 (27%)
1 bedroom 753 (85%) 130 (15%)
3 bedroom 785 (93%) 58 (6.9%)
4 bedroom 198 (89%) 25 (11%)
5+ bedroom 64 (85%) 11 (15%)

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_ + Common_unit_,
          family=binomial(link="logit"), data=df)



tbl_regression(m1, exponentiate=TRUE)
Characteristic OR (95% CI)1 p-value
Landlord_size_
small (single-fam)
small (non single-fam) 1.14 (0.87 to 1.51) 0.34
big (single-fam) 4.88 (2.55 to 8.90) <0.001
big (non single-fam) 4.73 (3.73 to 6.02) <0.001

1 OR = Odds Ratio, CI = Confidence Interval

tbl_regression(m2, exponentiate=TRUE)
Characteristic OR (95% CI)1 p-value
Landlord_size_
small (single-fam)
small (non single-fam) 1.02 (0.74 to 1.41) 0.88
big (single-fam) 4.67 (2.41 to 8.64) <0.001
big (non single-fam) 3.79 (2.82 to 5.11) <0.001
Financial_role_
Other
Primary Income 1.58 (1.20 to 2.06) <0.001
Common_unit_
2 bedroom
0 bedroom (studio/efficiency) 1.86 (1.21 to 2.84) 0.004
1 bedroom 0.92 (0.71 to 1.20) 0.54
3 bedroom 0.75 (0.53 to 1.05) 0.094
4 bedroom 1.31 (0.80 to 2.08) 0.27
5+ bedroom 1.66 (0.79 to 3.19) 0.15

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_, Common_unit_),
    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.59
small (single-fam) 104 (98%) 2 (1.9%) 0 (0%) 0 (0%)
small (non single-fam) 81 (95%) 3 (3.5%) 0 (0%) 1 (1.2%)
big (single-fam) 15 (100%) 0 (0%) 0 (0%) 0 (0%)
big (non single-fam) 189 (92%) 9 (4.4%) 5 (2.4%) 3 (1.5%)
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%)
Common_unit_, n (%)
2 bedroom 154 (97%) 4 (2.5%) 0 (0%) 0 (0%)
0 bedroom (studio/efficiency) 33 (87%) 2 (5.3%) 3 (7.9%) 0 (0%)
1 bedroom 104 (90%) 6 (5.2%) 2 (1.7%) 3 (2.6%)
3 bedroom 51 (94%) 2 (3.7%) 0 (0%) 1 (1.9%)
4 bedroom 21 (100%) 0 (0%) 0 (0%) 0 (0%)
5+ bedroom 10 (100%) 0 (0%) 0 (0%) 0 (0%)

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_ + Common_unit_,
          family=gaussian(link="identity"), data=df)



tbl_regression(m1)
Characteristic Beta (95% CI)1 p-value
Landlord_size_
small (single-fam)
small (non single-fam) 0.32 (-0.41 to 1.1) 0.39
big (single-fam) -0.08 (-1.5 to 1.3) 0.92
big (non single-fam) 0.71 (0.10 to 1.3) 0.022

1 CI = Confidence Interval

tbl_regression(m2)
Characteristic Beta (95% CI)1 p-value
Landlord_size_
small (single-fam)
small (non single-fam) 0.51 (-0.36 to 1.4) 0.25
big (single-fam) -0.08 (-1.5 to 1.4) 0.92
big (non single-fam) 0.51 (-0.28 to 1.3) 0.21
Financial_role_
Other
Primary Income 0.49 (-0.16 to 1.1) 0.14
Common_unit_
2 bedroom
0 bedroom (studio/efficiency) 0.79 (-0.18 to 1.8) 0.11
1 bedroom 0.74 (0.08 to 1.4) 0.028
3 bedroom 0.69 (-0.21 to 1.6) 0.13
4 bedroom 0.29 (-1.0 to 1.6) 0.66
5+ bedroom 0.12 (-1.6 to 1.9) 0.89

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_, Common_unit_),
    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.029
small (single-fam) 5 (19%) 22 (81%)
small (non single-fam) 8 (27%) 22 (73%)
big (single-fam) 1 (14%) 6 (86%)
big (non single-fam) 3 (5.3%) 54 (95%)
Financial_role_, n (%) 0.35
Other 15 (16%) 77 (84%)
Primary Income 2 (7.1%) 26 (93%)
Common_unit_, n (%) 0.70
2 bedroom 6 (13%) 40 (87%)
0 bedroom (studio/efficiency) 0 (0%) 14 (100%)
1 bedroom 5 (16%) 26 (84%)
3 bedroom 2 (14%) 12 (86%)
4 bedroom 1 (17%) 5 (83%)
5+ bedroom 0 (0%) 2 (100%)

1 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_ + Common_unit_,
          family=binomial(link="logit"), data=df)



tbl_regression(m1, exponentiate=TRUE)
Characteristic OR (95% CI)1 p-value
Landlord_size_
small (single-fam)
small (non single-fam) 0.62 (0.17 to 2.17) 0.47
big (single-fam) 1.36 (0.17 to 28.7) 0.79
big (non single-fam) 4.09 (0.93 to 21.4) 0.068

1 OR = Odds Ratio, CI = Confidence Interval

tbl_regression(m2, exponentiate=TRUE)
Characteristic OR (95% CI)1 p-value
Landlord_size_
small (single-fam)
small (non single-fam) 0.86 (0.18 to 4.00) 0.85
big (single-fam) 1.42 (0.17 to 30.8) 0.77
big (non single-fam) 3.67 (0.67 to 23.7) 0.14
Financial_role_
Other
Primary Income 1.11 (0.21 to 8.64) 0.91
Common_unit_
2 bedroom
0 bedroom (studio/efficiency) 8,833,860 (0.00 to NA) >0.99
1 bedroom 0.69 (0.18 to 2.76) 0.59
3 bedroom 1.16 (0.19 to 9.66) 0.88
4 bedroom 1.17 (0.13 to 26.1) 0.90
5+ bedroom 26,815,835 (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_, Common_unit_),
    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 (single-fam) 5 (14%) 32 (86%)
small (non single-fam) 8 (22%) 28 (78%)
big (single-fam) 1 (14%) 6 (86%)
big (non single-fam) 3 (2.1%) 138 (98%)
Financial_role_, n (%) 0.037
Other 15 (11%) 127 (89%)
Primary Income 2 (2.6%) 74 (97%)
Common_unit_, n (%) 0.43
2 bedroom 6 (8.5%) 65 (92%)
0 bedroom (studio/efficiency) 0 (0%) 32 (100%)
1 bedroom 5 (6.7%) 70 (93%)
3 bedroom 2 (8.0%) 23 (92%)
4 bedroom 1 (14%) 6 (86%)
5+ bedroom 0 (0%) 4 (100%)

1 Fisher's exact test; 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_ + Common_unit_,
          family=binomial(link="logit"), data=df)



tbl_regression(m1, exponentiate=TRUE)
Characteristic OR (95% CI)1 p-value
Landlord_size_
small (single-fam)
small (non single-fam) 0.55 (0.15 to 1.83) 0.34
big (single-fam) 0.94 (0.12 to 19.6) 0.96
big (non single-fam) 7.19 (1.68 to 36.5) 0.009

1 OR = Odds Ratio, CI = Confidence Interval

tbl_regression(m2, exponentiate=TRUE)
Characteristic OR (95% CI)1 p-value
Landlord_size_
small (single-fam)
small (non single-fam) 0.94 (0.21 to 4.12) 0.94
big (single-fam) 0.98 (0.12 to 20.9) 0.99
big (non single-fam) 6.98 (1.32 to 45.1) 0.027
Financial_role_
Other
Primary Income 1.29 (0.24 to 9.86) 0.78
Common_unit_
2 bedroom
0 bedroom (studio/efficiency) 11,134,000 (0.00 to 153,429,362,178,518,012,976,266,608,028,224,042,482,820,240,642,668,086,282,620,684,062,044,822,224,680,680,220,046,226,202,400,222,480,680,080,600,622,042,206,826,608,440,424,086,600,266,826,480,228,686,606,228,888,082,466,226,402,480,886,686,806,084,468,068,224,604,642,042,606,080,046,866,002,222,288,646,226,222,604,442,648,224) >0.99
1 bedroom 0.83 (0.22 to 3.25) 0.79
3 bedroom 1.67 (0.31 to 13.1) 0.57
4 bedroom 1.05 (0.13 to 22.7) 0.97
5+ bedroom 47,354,877 (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_, Common_unit_),
    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.97
small (single-fam) 10 (62%) 6 (38%)
small (non single-fam) 12 (60%) 8 (40%)
big (single-fam) 3 (50%) 3 (50%)
big (non single-fam) 63 (60%) 42 (40%)
Financial_role_, n (%) 0.99
Other 52 (60%) 34 (40%)
Primary Income 35 (60%) 23 (40%)
Common_unit_, n (%) 0.92
2 bedroom 31 (60%) 21 (40%)
0 bedroom (studio/efficiency) 14 (61%) 9 (39%)
1 bedroom 29 (59%) 20 (41%)
3 bedroom 6 (46%) 7 (54%)
4 bedroom 3 (75%) 1 (25%)
5+ bedroom 1 (100%) 0 (0%)

1 Fisher's exact test; 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_ + Common_unit_,
          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_, Common_unit_),
    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 (%)
small (single-fam) 64 (4.0%) 254 (16%) 396 (25%) 677 (42%) 204 (13%)
small (non single-fam) 60 (5.4%) 264 (24%) 359 (32%) 364 (33%) 72 (6.4%)
big (single-fam) 2 (4.1%) 6 (12%) 22 (45%) 16 (33%) 3 (6.1%)
big (non single-fam) 42 (5.5%) 290 (38%) 297 (39%) 133 (17%) 8 (1.0%)
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%)
Common_unit_, n (%)
2 bedroom 37 (2.8%) 281 (21%) 443 (33%) 490 (37%) 83 (6.2%)
0 bedroom (studio/efficiency) 19 (13%) 65 (45%) 40 (28%) 19 (13%) 1 (0.7%)
1 bedroom 32 (3.9%) 265 (33%) 284 (35%) 199 (25%) 31 (3.8%)
3 bedroom 24 (3.1%) 117 (15%) 206 (26%) 332 (42%) 103 (13%)
4 bedroom 11 (5.3%) 34 (16%) 33 (16%) 77 (37%) 52 (25%)
5+ bedroom 25 (37%) 12 (18%) 11 (16%) 11 (16%) 9 (13%)

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_ + Common_unit_,
          family=gaussian(link="identity"), data=df)



tbl_regression(m1)
Characteristic Beta (95% CI)1 p-value
Landlord_size_
small (single-fam)
small (non single-fam) -15 (-18 to -12) <0.001
big (single-fam) -12 (-24 to 0.31) 0.056
big (non single-fam) -32 (-36 to -28) <0.001

1 CI = Confidence Interval

tbl_regression(m2)
Characteristic Beta (95% CI)1 p-value
Landlord_size_
small (single-fam)
small (non single-fam) -7.8 (-12 to -4.0) <0.001
big (single-fam) -14 (-27 to -1.7) 0.026
big (non single-fam) -23 (-27 to -18) <0.001
Financial_role_
Other
Primary Income -3.1 (-7.8 to 1.6) 0.20
Common_unit_
2 bedroom
0 bedroom (studio/efficiency) -20 (-27 to -12) <0.001
1 bedroom -7.0 (-11 to -3.2) <0.001
3 bedroom 7.4 (3.4 to 11) <0.001
4 bedroom 20 (13 to 26) <0.001
5+ bedroom -19 (-30 to -8.5) <0.001

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_, Common_unit_),
    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.70
small (single-fam) 1,398 (81%) 326 (19%)
small (non single-fam) 971 (81%) 228 (19%)
big (single-fam) 47 (84%) 9 (16%)
big (non single-fam) 684 (83%) 143 (17%)
Financial_role_, n (%) 0.87
Other 2,714 (81%) 618 (19%)
Primary Income 370 (81%) 86 (19%)
Common_unit_, n (%) 0.14
2 bedroom 1,160 (81%) 276 (19%)
0 bedroom (studio/efficiency) 125 (85%) 22 (15%)
1 bedroom 738 (83%) 148 (17%)
3 bedroom 674 (80%) 170 (20%)
4 bedroom 184 (83%) 39 (17%)
5+ bedroom 67 (89%) 8 (11%)

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_ + Common_unit_,
          family=binomial(link="logit"), data=df)



tbl_regression(m1, exponentiate=TRUE)
Characteristic OR (95% CI)1 p-value
Landlord_size_
small (single-fam)
small (non single-fam) 1.01 (0.83 to 1.21) 0.94
big (single-fam) 0.82 (0.37 to 1.61) 0.59
big (non single-fam) 0.90 (0.72 to 1.11) 0.32

1 OR = Odds Ratio, CI = Confidence Interval

tbl_regression(m2, exponentiate=TRUE)
Characteristic OR (95% CI)1 p-value
Landlord_size_
small (single-fam)
small (non single-fam) 1.01 (0.81 to 1.25) 0.95
big (single-fam) 0.84 (0.38 to 1.66) 0.63
big (non single-fam) 0.93 (0.71 to 1.20) 0.56
Financial_role_
Other
Primary Income 1.12 (0.85 to 1.47) 0.41
Common_unit_
2 bedroom
0 bedroom (studio/efficiency) 0.74 (0.45 to 1.17) 0.21
1 bedroom 0.85 (0.68 to 1.06) 0.15
3 bedroom 1.05 (0.83 to 1.31) 0.70
4 bedroom 0.89 (0.60 to 1.29) 0.54
5+ bedroom 0.49 (0.22 to 0.98) 0.064

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_, Common_unit_),
    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.97
small (single-fam) 1,481 (86%) 246 (14%)
small (non single-fam) 1,044 (86%) 175 (14%)
big (single-fam) 47 (84%) 9 (16%)
big (non single-fam) 711 (85%) 123 (15%)
Financial_role_, n (%) 0.16
Other 2,885 (86%) 476 (14%)
Primary Income 381 (83%) 76 (17%)
Common_unit_, n (%) 0.11
2 bedroom 1,224 (85%) 218 (15%)
0 bedroom (studio/efficiency) 135 (91%) 13 (8.8%)
1 bedroom 767 (86%) 121 (14%)
3 bedroom 713 (84%) 133 (16%)
4 bedroom 194 (87%) 29 (13%)
5+ bedroom 69 (92%) 6 (8.0%)

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_ + Common_unit_,
          family=binomial(link="logit"), data=df)



tbl_regression(m1, exponentiate=TRUE)
Characteristic OR (95% CI)1 p-value
Landlord_size_
small (single-fam)
small (non single-fam) 1.01 (0.82 to 1.24) 0.93
big (single-fam) 1.15 (0.52 to 2.27) 0.70
big (non single-fam) 1.04 (0.82 to 1.31) 0.73

1 OR = Odds Ratio, CI = Confidence Interval

tbl_regression(m2, exponentiate=TRUE)
Characteristic OR (95% CI)1 p-value
Landlord_size_
small (single-fam)
small (non single-fam) 1.05 (0.82 to 1.34) 0.68
big (single-fam) 1.15 (0.52 to 2.29) 0.70
big (non single-fam) 1.09 (0.83 to 1.45) 0.53
Financial_role_
Other
Primary Income 1.24 (0.92 to 1.65) 0.15
Common_unit_
2 bedroom
0 bedroom (studio/efficiency) 0.50 (0.27 to 0.88) 0.024
1 bedroom 0.86 (0.67 to 1.09) 0.22
3 bedroom 1.08 (0.84 to 1.39) 0.54
4 bedroom 0.87 (0.56 to 1.32) 0.53
5+ bedroom 0.49 (0.19 to 1.07) 0.11

1 OR = Odds Ratio, CI = Confidence Interval