Overview

This document shows crosstabs between landlord size and policy attitudes or adaptations listed below:

  • Policy knowledge of
    • Limiting fees
    • Payment plans
    • First-in-time
    • Alternative sources of income
    • Protections for tenants with criminal record
  • How effective is
    • Limiting fees
    • Payment plans
    • First-in-time
    • Alternative sources of income
    • Protections for tenants with criminal record
  • Unreasonable burden of
    • Limiting fees
    • Payment plans
    • First-in-time
    • Alternative sources of income
    • Protections for tenants with criminal record

Then results are shown by all possible indicators for each policy type (yes, most of these are repeated from above for comparison):

  • Limiting fees
    • knowledge
    • effective
    • burden
  • Payment plans
    • knowledge
    • effective
    • burden
  • First-in-time
    • knowledge
    • effective
    • ability to judge tenants
    • ability to rent
    • burden
  • Alternative sources of income
    • knowledge
    • effective
    • ability to judge tenants
    • burden
  • Protections for tenants with criminal record
    • knowledge
    • effective
    • ability to judge tenants
    • burden
    • jeopardize safety

Finally, results for policy adaptations are shown:

  • Adopt strict requirements due to regulations
  • Intend to sell due to regulations
  • Landlord suggestions
    • What should city ordinances target?
    • Should city take landlord perspective into account?
#load processed survey data
coded_df <- readRDS("C:/Users/court/Google Drive/Research/Seattle Rental Housing Study/SRHS/SRHS_coded.RDS")
coded_df <- coded_df %>%
  mutate_if(
        is.labelled,
        ~(as_factor(.)))

POLICY ATTITUDES




Policy Knowledge

p1 <- coded_df %>%  ggplot(aes(x=ll_size,
                         fill=forcats::fct_rev(at_limitfees_know))) +
  geom_bar(position='fill') +
  labs(y = "",
       title = "Limit fees") +
  theme_classic()+
    theme(legend.title = element_blank(), legend.position = "bottom") +
  guides(fill = guide_legend(ncol = 1))

p2 <- coded_df %>%  ggplot(aes(x=ll_size,
                         fill=forcats::fct_rev(at_payplan_know))) +
  geom_bar(position='fill') +
  labs(y = "",
       title = "Payment plan") +
  theme_classic()+
    theme(legend.title = element_blank(), legend.position = "bottom") +
  guides(fill = guide_legend(ncol = 1))

p3 <- coded_df %>%  ggplot(aes(x=ll_size,
                         fill=forcats::fct_rev(at_first_know))) +
  geom_bar(position='fill') +
  labs(y = "",
       title = "First-in-time") +
  theme_classic()+
    theme(legend.title = element_blank(), legend.position = "bottom") +
  guides(fill = guide_legend(ncol = 1))

p4 <- coded_df %>%  ggplot(aes(x=ll_size,
                         fill=forcats::fct_rev(at_soi_know))) +
  geom_bar(position='fill') +
  labs(y = "",
     title = "Source of income") +
  theme_classic()+
    theme(legend.title = element_blank(), legend.position = "bottom") +
  guides(fill = guide_legend(ncol = 1))

p5 <- coded_df %>%  ggplot(aes(x=ll_size,
                         fill=forcats::fct_rev(at_crim_know))) +
  geom_bar(position='fill') +
  labs(y = "",
       title = "Crim record") +
  theme_classic()+
    theme(legend.title = element_blank(), legend.position = "bottom") +
  guides(fill = guide_legend(ncol = 1))


p1 + p2 + p3 + p4 + p5 + plot_layout(guides = "collect", nrow=2) + plot_annotation(title="Knowledge")

# WEIGHTED tables for KNOLWEDGE OF POLICY ATTITUDES
svydesign(ids = ~ 1, data = coded_df, weights = coded_df$rrio_wt) %>%
  tbl_svysummary(
    by = ll_size,
    percent = "col",
    missing = "no",
    include = c(at_limitfees_know,
                at_payplan_know,
                at_first_know,
                at_soi_know,
                at_crim_know,
                temp_N, ll_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
  add_overall(col_label = "**Overall**", last = TRUE) %>%
  modify_spanning_header(starts_with("stat_") ~ "**Policy knowledge by landlord size (weighted)**")
Characteristic Policy knowledge by landlord size (weighted) p-value2
small1 big1 Overall1
Limit fees: knowledge <0.001
    Extremely familiar 506 (16%) 215 (36%) 721 (19%)
    Very familiar 1,094 (34%) 135 (22%) 1,229 (32%)
    Moderately familiar 215 (6.7%) 8 (1.3%) 223 (5.8%)
    Slightly familiar 14 (0.4%) 2 (0.4%) 16 (0.4%)
    Not familiar at all 428 (13%) 28 (4.7%) 456 (12%)
    Refused 978 (30%) 213 (35%) 1,191 (31%)
Payment plan: knowledge <0.001
    Extremely familiar 538 (17%) 227 (38%) 765 (20%)
    Very familiar 944 (29%) 120 (20%) 1,064 (28%)
    Moderately familiar 479 (15%) 21 (3.4%) 500 (13%)
    Slightly familiar 20 (0.6%) 2 (0.3%) 22 (0.6%)
    Not familiar at all 421 (13%) 25 (4.1%) 446 (12%)
    Refused 833 (26%) 206 (34%) 1,039 (27%)
First in time: knowledge <0.001
    Extremely familiar 838 (26%) 295 (49%) 1,133 (30%)
    Very familiar 795 (25%) 69 (11%) 864 (23%)
    Moderately familiar 247 (7.6%) 12 (1.9%) 259 (6.8%)
    Slightly familiar 20 (0.6%) 2 (0.3%) 21 (0.6%)
    Not familiar at all 265 (8.2%) 9 (1.6%) 274 (7.2%)
    Refused 1,071 (33%) 214 (36%) 1,285 (34%)
Source of income protections: knowledge <0.001
    Extremely familiar 353 (11%) 157 (26%) 510 (13%)
    Very familiar 941 (29%) 176 (29%) 1,117 (29%)
    Moderately familiar 805 (25%) 56 (9.3%) 861 (22%)
    Slightly familiar 18 (0.6%) 1 (0.1%) 19 (0.5%)
    Not familiar at all 630 (19%) 64 (11%) 694 (18%)
    Refused 489 (15%) 147 (24%) 636 (17%)
Limit crim record: knowledge <0.001
    Extremely familiar 497 (15%) 216 (36%) 713 (19%)
    Very familiar 935 (29%) 128 (21%) 1,064 (28%)
    Moderately familiar 630 (19%) 24 (4.0%) 654 (17%)
    Slightly familiar 23 (0.7%) 2 (0.4%) 25 (0.7%)
    Not familiar at all 501 (16%) 40 (6.7%) 542 (14%)
    Refused 649 (20%) 190 (32%) 839 (22%)
temp_N 3,235 (100%) 601 (100%) 3,836 (100%)
1 n (%)
2 chi-squared test with Rao & Scott's second-order correction

Policy Efficacy

p1 <- coded_df %>%  ggplot(aes(x=ll_size,
                         fill=forcats::fct_rev(at_limitfees_effect))) +
  geom_bar(position='fill') +
  labs(y = "",
       title = "Limit fees") +
  theme_classic()+
    theme(legend.title = element_blank()) +
  guides(fill = guide_legend(ncol = 1))

p2 <- coded_df %>%  ggplot(aes(x=ll_size,
                         fill=forcats::fct_rev(at_payplan_effect))) +
  geom_bar(position='fill') +
  labs(y = "",
       title = "Payment plan") +
  theme_classic()+
    theme(legend.title = element_blank()) +
  guides(fill = guide_legend(ncol = 1))

p3 <- coded_df %>%  ggplot(aes(x=ll_size,
                         fill=forcats::fct_rev(at_first_effect))) +
  geom_bar(position='fill') +
  labs(y = "",
       title = "First-in-time") +
  theme_classic()+
    theme(legend.title = element_blank()) +
  guides(fill = guide_legend(ncol = 1))

p4 <- coded_df %>%  ggplot(aes(x=ll_size,
                         fill=forcats::fct_rev(at_soi_effect))) +
  geom_bar(position='fill') +
  labs(y = "",
       title = "Source of income") +
  theme_classic()+
    theme(legend.title = element_blank()) +
  guides(fill = guide_legend(ncol = 1))

p5 <- coded_df %>%  ggplot(aes(x=ll_size,
                         fill=forcats::fct_rev(at_crim_effect))) +
  geom_bar(position='fill') +
  labs(title = "Crim record") +
  theme_classic()+
    theme(legend.title = element_blank()) +
  guides(fill = guide_legend(ncol = 1))


p1 + p2 + p3 + p4 + p5 + plot_layout(guides = "collect", nrow=2) + plot_annotation(title="Effective?")

# WEIGHTED tables for landlord size and policy adaptation
svydesign(ids = ~ 1, data = coded_df, weights = coded_df$rrio_wt) %>%
  tbl_svysummary(
    by = ll_size,
    percent = "col",
    missing = "no",
    include = c(at_limitfees_effect,
                at_payplan_effect,
                at_first_effect,
                at_soi_effect,
                at_crim_effect,
                temp_N, ll_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
  add_overall(col_label = "**Overall**", last = TRUE) %>%
  modify_spanning_header(starts_with("stat_") ~ "**Policy attitudes on effectiveness (weighted)**")
Characteristic Policy attitudes on effectiveness (weighted) p-value2
small1 big1 Overall1
Limit fees: effective? <0.001
    Very effective 563 (17%) 69 (11%) 631 (16%)
    Effective 398 (12%) 19 (3.2%) 417 (11%)
    Neither effective nor ineffective 758 (23%) 171 (29%) 930 (24%)
    Ineffective 867 (27%) 159 (26%) 1,026 (27%)
    Very ineffective 19 (0.6%) 4 (0.7%) 24 (0.6%)
    I dont know enough 58 (1.8%) 5 (0.9%) 63 (1.6%)
    Refused 573 (18%) 173 (29%) 746 (19%)
Payment plan: effective? <0.001
    Very effective 959 (30%) 153 (25%) 1,112 (29%)
    Effective 299 (9.2%) 11 (1.9%) 311 (8.1%)
    Neither effective nor ineffective 577 (18%) 123 (20%) 699 (18%)
    Ineffective 832 (26%) 152 (25%) 983 (26%)
    Very ineffective 21 (0.7%) 3 (0.5%) 25 (0.6%)
    I dont know enough 107 (3.3%) 16 (2.7%) 123 (3.2%)
    Refused 440 (14%) 143 (24%) 582 (15%)
First in time: effective? <0.001
    Very effective 341 (11%) 45 (7.5%) 386 (10%)
    Effective 209 (6.5%) 8 (1.3%) 217 (5.7%)
    Neither effective nor ineffective 842 (26%) 148 (25%) 990 (26%)
    Ineffective 861 (27%) 158 (26%) 1,019 (27%)
    Very ineffective 20 (0.6%) 3 (0.5%) 23 (0.6%)
    I dont know enough 37 (1.1%) 6 (1.0%) 43 (1.1%)
    Refused 924 (29%) 233 (39%) 1,157 (30%)
Source of income protections: effective? <0.001
    Very effective 675 (21%) 121 (20%) 797 (21%)
    Effective 817 (25%) 70 (12%) 888 (23%)
    Neither effective nor ineffective 425 (13%) 104 (17%) 529 (14%)
    Ineffective 945 (29%) 204 (34%) 1,149 (30%)
    Very ineffective 29 (0.9%) 4 (0.6%) 32 (0.8%)
    I dont know enough 47 (1.5%) 16 (2.6%) 63 (1.6%)
    Refused 297 (9.2%) 81 (14%) 378 (9.9%)
Limit crim record: effective? <0.001
    Very effective 724 (22%) 122 (20%) 845 (22%)
    Effective 525 (16%) 34 (5.7%) 559 (15%)
    Neither effective nor ineffective 549 (17%) 122 (20%) 671 (17%)
    Ineffective 874 (27%) 172 (29%) 1,045 (27%)
    Very ineffective 35 (1.1%) 3 (0.5%) 38 (1.0%)
    I dont know enough 60 (1.9%) 15 (2.5%) 75 (2.0%)
    Refused 469 (14%) 133 (22%) 602 (16%)
temp_N 3,235 (100%) 601 (100%) 3,836 (100%)
1 n (%)
2 chi-squared test with Rao & Scott's second-order correction

Policy Burden

p1 <- coded_df %>%  ggplot(aes(x=ll_size,
                         fill=forcats::fct_rev(at_limitfees_burden))) +
  geom_bar(position='fill') +
  labs(y = "",
       title = "Limit fees") +
  theme_classic()+
    theme(legend.title = element_blank()) +
  guides(fill = guide_legend(ncol = 1))

p2 <- coded_df %>%  ggplot(aes(x=ll_size,
                         fill=forcats::fct_rev(at_payplan_burden))) +
  geom_bar(position='fill') +
  labs(y = "",
       title = "Payment plan") +
  theme_classic()+
    theme(legend.title = element_blank()) +
  guides(fill = guide_legend(ncol = 1))

p3 <- coded_df %>%  ggplot(aes(x=ll_size,
                         fill=forcats::fct_rev(at_first_burden))) +
  geom_bar(position='fill') +
  labs(y = "",
       title = "First-in-time") +
  theme_classic()+
    theme(legend.title = element_blank()) +
  guides(fill = guide_legend(ncol = 1))

p4 <- coded_df %>%  ggplot(aes(x=ll_size,
                         fill=forcats::fct_rev(at_soi_burden))) +
  geom_bar(position='fill') +
  labs(y = "",
       title = "Source of income") +
  theme_classic()+
    theme(legend.title = element_blank()) +
  guides(fill = guide_legend(ncol = 1))

p5 <- coded_df %>%  ggplot(aes(x=ll_size,
                         fill=forcats::fct_rev(at_crim_burden))) +
  geom_bar(position='fill') +
  labs(y = "",
       title = "Crim record") +
  theme_classic()+
    theme(legend.title = element_blank()) +
  guides(fill = guide_legend(ncol = 1))


p1 + p2 + p3 + p4 + p5 + plot_layout(guides = "collect", nrow=2) + plot_annotation(title="Burden")

# WEIGHTED tables for landlord size and policy attitude
svydesign(ids = ~ 1, data = coded_df, weights = coded_df$rrio_wt) %>%
  tbl_svysummary(
    by = ll_size,
    percent = "col",
    missing = "no",
    include = c(at_limitfees_burden,
                at_payplan_burden,
                at_first_burden,
                at_soi_burden,
                at_crim_burden,
                temp_N, ll_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
  add_overall(col_label = "**Overall**", last = TRUE) %>%
  modify_spanning_header(starts_with("stat_") ~ "**Policy attitudes on burden by LL size (weighted)**")
Characteristic Policy attitudes on burden by LL size (weighted) p-value2
small1 big1 Overall1
Limit fees: a burden? <0.001
    Strongly agree 885 (27%) 167 (28%) 1,052 (27%)
    Agree 431 (13%) 38 (6.3%) 469 (12%)
    Neither agree nor disagree 158 (4.9%) 4 (0.6%) 162 (4.2%)
    Disagree 605 (19%) 95 (16%) 700 (18%)
    Strongly disagree 14 (0.4%) 1 (0.2%) 15 (0.4%)
    I dont know enough 1,033 (32%) 280 (47%) 1,313 (34%)
    Refused 109 (3.4%) 15 (2.5%) 124 (3.2%)
Payment plan: a burden? <0.001
    Strongly agree 827 (26%) 146 (24%) 974 (25%)
    Agree 522 (16%) 67 (11%) 588 (15%)
    Neither agree nor disagree 142 (4.4%) 2 (0.3%) 144 (3.8%)
    Disagree 564 (17%) 88 (15%) 653 (17%)
    Strongly disagree 14 (0.4%) 2 (0.3%) 16 (0.4%)
    I dont know enough 1,012 (31%) 275 (46%) 1,287 (34%)
    Refused 154 (4.8%) 20 (3.4%) 174 (4.5%)
First in time: a burden? <0.001
    Strongly agree 806 (25%) 101 (17%) 907 (24%)
    Agree 144 (4.5%) 37 (6.2%) 182 (4.7%)
    Neither agree nor disagree 145 (4.5%) 5 (0.8%) 150 (3.9%)
    Disagree 360 (11%) 60 (10.0%) 420 (11%)
    Strongly disagree 17 (0.5%) 3 (0.4%) 19 (0.5%)
    I dont know enough 1,725 (53%) 382 (64%) 2,106 (55%)
    Refused 38 (1.2%) 13 (2.2%) 52 (1.3%)
Source of income protections: a burden? <0.001
    Strongly agree 644 (20%) 139 (23%) 783 (20%)
    Agree 268 (8.3%) 43 (7.1%) 311 (8.1%)
    Neither agree nor disagree 678 (21%) 49 (8.2%) 727 (19%)
    Disagree 695 (21%) 138 (23%) 834 (22%)
    Strongly disagree 41 (1.3%) 4 (0.7%) 45 (1.2%)
    I dont know enough 858 (27%) 215 (36%) 1,073 (28%)
    Refused 52 (1.6%) 12 (1.9%) 63 (1.6%)
Limit crim record: a burden? <0.001
    Strongly agree 658 (20%) 105 (17%) 763 (20%)
    Agree 152 (4.7%) 14 (2.4%) 166 (4.3%)
    Neither agree nor disagree 361 (11%) 17 (2.9%) 378 (9.9%)
    Disagree 339 (10%) 52 (8.6%) 391 (10%)
    Strongly disagree 28 (0.9%) 5 (0.8%) 32 (0.8%)
    I dont know enough 1,652 (51%) 404 (67%) 2,055 (54%)
    Refused 46 (1.4%) 4 (0.7%) 50 (1.3%)
temp_N 3,235 (100%) 601 (100%) 3,836 (100%)
1 n (%)
2 chi-squared test with Rao & Scott's second-order correction

Policy: Limit fees

Questions:

  • In 2016, the City of Seattle passed an ordinance that limits move-in fees and security deposits (effective January 15, 2017). How familiar are you with this set of rules?
  • In general, how effective or ineffective do you think the limit on move-in fees/security deposits will be for increasing access to housing for more people in Seattle?
  • “Please indicate how strongly you agree or disagree with this statement: Limiting move-in fees/security deposits places an unreasonable burden on Seattle landlords.
# WEIGHTED tables for landlord size and policy adaptation
svydesign(ids = ~ 1, data = coded_df, weights = coded_df$rrio_wt) %>%
  tbl_svysummary(
    by = ll_size,
    percent = "col",
    missing = "no",
    include = c(at_limitfees_know,
                at_limitfees_effect,
                at_limitfees_burden,
                temp_N, ll_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
  add_overall(col_label = "**Overall**", last = TRUE) %>%
  modify_spanning_header(starts_with("stat_") ~ "**Policy attitudes on limiting fees (weighted)**")
Characteristic Policy attitudes on limiting fees (weighted) p-value2
small1 big1 Overall1
Limit fees: knowledge <0.001
    Extremely familiar 506 (16%) 215 (36%) 721 (19%)
    Very familiar 1,094 (34%) 135 (22%) 1,229 (32%)
    Moderately familiar 215 (6.7%) 8 (1.3%) 223 (5.8%)
    Slightly familiar 14 (0.4%) 2 (0.4%) 16 (0.4%)
    Not familiar at all 428 (13%) 28 (4.7%) 456 (12%)
    Refused 978 (30%) 213 (35%) 1,191 (31%)
Limit fees: effective? <0.001
    Very effective 563 (17%) 69 (11%) 631 (16%)
    Effective 398 (12%) 19 (3.2%) 417 (11%)
    Neither effective nor ineffective 758 (23%) 171 (29%) 930 (24%)
    Ineffective 867 (27%) 159 (26%) 1,026 (27%)
    Very ineffective 19 (0.6%) 4 (0.7%) 24 (0.6%)
    I dont know enough 58 (1.8%) 5 (0.9%) 63 (1.6%)
    Refused 573 (18%) 173 (29%) 746 (19%)
Limit fees: a burden? <0.001
    Strongly agree 885 (27%) 167 (28%) 1,052 (27%)
    Agree 431 (13%) 38 (6.3%) 469 (12%)
    Neither agree nor disagree 158 (4.9%) 4 (0.6%) 162 (4.2%)
    Disagree 605 (19%) 95 (16%) 700 (18%)
    Strongly disagree 14 (0.4%) 1 (0.2%) 15 (0.4%)
    I dont know enough 1,033 (32%) 280 (47%) 1,313 (34%)
    Refused 109 (3.4%) 15 (2.5%) 124 (3.2%)
temp_N 3,235 (100%) 601 (100%) 3,836 (100%)
1 n (%)
2 chi-squared test with Rao & Scott's second-order correction

Policy: Payment plan

Questions:

  • The 2016 ordinance limiting move-in fees/security deposits also requires Seattle landlords to accept payment plans for move-in fees/security deposits if a tenant requests this (effective January 15, 2017). How familiar are you with this set of rules?
  • In general, how effective or ineffective do you think the requirement mentioned above (allowing payment plans for move-in fees/security deposits) will be for increasing access to housing for more people in Seattle?
  • Please indicate how strongly you agree or disagree with this statement: Requiring landlords to accept payment plans for move-in fees/security deposits places an unreasonable burden on Seattle landlords.
# WEIGHTED tables for landlord size and policy adaptation
svydesign(ids = ~ 1, data = coded_df, weights = coded_df$rrio_wt) %>%
  tbl_svysummary(
    by = ll_size,
    percent = "col",
    missing = "no",
    include = c(at_payplan_know,
                at_payplan_effect,
                at_payplan_burden,
                temp_N, ll_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
  add_overall(col_label = "**Overall**", last = TRUE) %>%
  modify_spanning_header(starts_with("stat_") ~ "**Policy attitudes on payment plans (weighted)**")
Characteristic Policy attitudes on payment plans (weighted) p-value2
small1 big1 Overall1
Payment plan: knowledge <0.001
    Extremely familiar 538 (17%) 227 (38%) 765 (20%)
    Very familiar 944 (29%) 120 (20%) 1,064 (28%)
    Moderately familiar 479 (15%) 21 (3.4%) 500 (13%)
    Slightly familiar 20 (0.6%) 2 (0.3%) 22 (0.6%)
    Not familiar at all 421 (13%) 25 (4.1%) 446 (12%)
    Refused 833 (26%) 206 (34%) 1,039 (27%)
Payment plan: effective? <0.001
    Very effective 959 (30%) 153 (25%) 1,112 (29%)
    Effective 299 (9.2%) 11 (1.9%) 311 (8.1%)
    Neither effective nor ineffective 577 (18%) 123 (20%) 699 (18%)
    Ineffective 832 (26%) 152 (25%) 983 (26%)
    Very ineffective 21 (0.7%) 3 (0.5%) 25 (0.6%)
    I dont know enough 107 (3.3%) 16 (2.7%) 123 (3.2%)
    Refused 440 (14%) 143 (24%) 582 (15%)
Payment plan: a burden? <0.001
    Strongly agree 827 (26%) 146 (24%) 974 (25%)
    Agree 522 (16%) 67 (11%) 588 (15%)
    Neither agree nor disagree 142 (4.4%) 2 (0.3%) 144 (3.8%)
    Disagree 564 (17%) 88 (15%) 653 (17%)
    Strongly disagree 14 (0.4%) 2 (0.3%) 16 (0.4%)
    I dont know enough 1,012 (31%) 275 (46%) 1,287 (34%)
    Refused 154 (4.8%) 20 (3.4%) 174 (4.5%)
temp_N 3,235 (100%) 601 (100%) 3,836 (100%)
1 n (%)
2 chi-squared test with Rao & Scott's second-order correction

Policy: First-in-time

Questions:

  • In 2016, the City of Seattle passed an ordinance that requires Seattle landlords to rent to the first qualified tenant who applies for an available unit (also known as “First in Time,” effective July 1, 2017). How familiar are you with this regulation?
  • In general, how effective or ineffective do you think First in Time will be for increasing access to housing for more people in Seattle?
  • First in Time has reduced my ability to use my judgement in deciding who to rent to.
  • First in Time has reduced the likelihood that I will be able to rent to applicants with few resources or who might not meet some of my standard rental requirements.
  • First in Time places an unreasonable burden on Seattle landlords.
# WEIGHTED tables for landlord size and policy adaptation
svydesign(ids = ~ 1, data = coded_df, weights = coded_df$rrio_wt) %>%
  tbl_svysummary(
    by = ll_size,
    percent = "col",
    missing = "no",
    include = c(at_first_know,
                at_first_effect,
                at_first_ability_judge,
                at_first_ability_rent,
                at_first_burden,
                temp_N, ll_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
  add_overall(col_label = "**Overall**", last = TRUE) %>%
  modify_spanning_header(starts_with("stat_") ~ "**Policy attitudes on first-in-time (weighted)**")
Characteristic Policy attitudes on first-in-time (weighted) p-value2
small1 big1 Overall1
First in time: knowledge <0.001
    Extremely familiar 838 (26%) 295 (49%) 1,133 (30%)
    Very familiar 795 (25%) 69 (11%) 864 (23%)
    Moderately familiar 247 (7.6%) 12 (1.9%) 259 (6.8%)
    Slightly familiar 20 (0.6%) 2 (0.3%) 21 (0.6%)
    Not familiar at all 265 (8.2%) 9 (1.6%) 274 (7.2%)
    Refused 1,071 (33%) 214 (36%) 1,285 (34%)
First in time: effective? <0.001
    Very effective 341 (11%) 45 (7.5%) 386 (10%)
    Effective 209 (6.5%) 8 (1.3%) 217 (5.7%)
    Neither effective nor ineffective 842 (26%) 148 (25%) 990 (26%)
    Ineffective 861 (27%) 158 (26%) 1,019 (27%)
    Very ineffective 20 (0.6%) 3 (0.5%) 23 (0.6%)
    I dont know enough 37 (1.1%) 6 (1.0%) 43 (1.1%)
    Refused 924 (29%) 233 (39%) 1,157 (30%)
First in time: judge tenants? <0.001
    Strongly agree 801 (25%) 111 (18%) 912 (24%)
    Agree 116 (3.6%) 33 (5.6%) 149 (3.9%)
    Neither agree nor disagree 170 (5.3%) 8 (1.3%) 178 (4.6%)
    Disagree 363 (11%) 82 (14%) 445 (12%)
    Strongly disagree 23 (0.7%) 2 (0.3%) 25 (0.6%)
    I dont know enough 1,716 (53%) 343 (57%) 2,059 (54%)
    Refused 46 (1.4%) 22 (3.7%) 69 (1.8%)
First in time: ability to rent? <0.001
    Strongly agree 811 (25%) 137 (23%) 948 (25%)
    Agree 207 (6.4%) 37 (6.1%) 244 (6.4%)
    Neither agree nor disagree 232 (7.2%) 10 (1.7%) 242 (6.3%)
    Disagree 810 (25%) 127 (21%) 937 (24%)
    Strongly disagree 36 (1.1%) 6 (1.0%) 42 (1.1%)
    I dont know enough 1,069 (33%) 263 (44%) 1,332 (35%)
    Refused 70 (2.2%) 20 (3.3%) 90 (2.4%)
First in time: a burden? <0.001
    Strongly agree 806 (25%) 101 (17%) 907 (24%)
    Agree 144 (4.5%) 37 (6.2%) 182 (4.7%)
    Neither agree nor disagree 145 (4.5%) 5 (0.8%) 150 (3.9%)
    Disagree 360 (11%) 60 (10.0%) 420 (11%)
    Strongly disagree 17 (0.5%) 3 (0.4%) 19 (0.5%)
    I dont know enough 1,725 (53%) 382 (64%) 2,106 (55%)
    Refused 38 (1.2%) 13 (2.2%) 52 (1.3%)
temp_N 3,235 (100%) 601 (100%) 3,836 (100%)
1 n (%)
2 chi-squared test with Rao & Scott's second-order correction

Policy: Alternative sources of income

Questions:

  • The 2016 ordinance that includes First in Time also expands protections for tenants using alternative sources of income and subsidies to cover housing costs (effective September 19, 2016). How familiar are you with this set of rules?
  • In general, how effective or ineffective do you think the expanded sourceof- income protections will be for increasing access to housing for more people in Seattle?
  • The expanded source-of-income regulation has reduced my ability to use my judgement in deciding who to rent to.
  • The expanded source-of-income regulation places an unreasonable burden on Seattle landlords.
# WEIGHTED tables for landlord size and policy adaptation
svydesign(ids = ~ 1, data = coded_df, weights = coded_df$rrio_wt) %>%
  tbl_svysummary(
    by = ll_size,
    percent = "col",
    missing = "no",
    include = c(at_soi_know,
                at_soi_effect,
                at_soi_ability_judge,
                at_soi_burden,
                temp_N, ll_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
  add_overall(col_label = "**Overall**", last = TRUE) %>%
  modify_spanning_header(starts_with("stat_") ~ "**Policy attitudes on sources of income (weighted)**")
Characteristic Policy attitudes on sources of income (weighted) p-value2
small1 big1 Overall1
Source of income protections: knowledge <0.001
    Extremely familiar 353 (11%) 157 (26%) 510 (13%)
    Very familiar 941 (29%) 176 (29%) 1,117 (29%)
    Moderately familiar 805 (25%) 56 (9.3%) 861 (22%)
    Slightly familiar 18 (0.6%) 1 (0.1%) 19 (0.5%)
    Not familiar at all 630 (19%) 64 (11%) 694 (18%)
    Refused 489 (15%) 147 (24%) 636 (17%)
Source of income protections: effective? <0.001
    Very effective 675 (21%) 121 (20%) 797 (21%)
    Effective 817 (25%) 70 (12%) 888 (23%)
    Neither effective nor ineffective 425 (13%) 104 (17%) 529 (14%)
    Ineffective 945 (29%) 204 (34%) 1,149 (30%)
    Very ineffective 29 (0.9%) 4 (0.6%) 32 (0.8%)
    I dont know enough 47 (1.5%) 16 (2.6%) 63 (1.6%)
    Refused 297 (9.2%) 81 (14%) 378 (9.9%)
Source of income protections: judge tenant? <0.001
    Strongly agree 662 (20%) 128 (21%) 790 (21%)
    Agree 251 (7.7%) 45 (7.5%) 296 (7.7%)
    Neither agree nor disagree 725 (22%) 56 (9.3%) 781 (20%)
    Disagree 779 (24%) 175 (29%) 954 (25%)
    Strongly disagree 33 (1.0%) 4 (0.6%) 37 (1.0%)
    I dont know enough 740 (23%) 175 (29%) 915 (24%)
    Refused 46 (1.4%) 17 (2.9%) 63 (1.6%)
Source of income protections: a burden? <0.001
    Strongly agree 644 (20%) 139 (23%) 783 (20%)
    Agree 268 (8.3%) 43 (7.1%) 311 (8.1%)
    Neither agree nor disagree 678 (21%) 49 (8.2%) 727 (19%)
    Disagree 695 (21%) 138 (23%) 834 (22%)
    Strongly disagree 41 (1.3%) 4 (0.7%) 45 (1.2%)
    I dont know enough 858 (27%) 215 (36%) 1,073 (28%)
    Refused 52 (1.6%) 12 (1.9%) 63 (1.6%)
temp_N 3,235 (100%) 601 (100%) 3,836 (100%)
1 n (%)
2 chi-squared test with Rao & Scott's second-order correction

Policy: Criminal record

Questions:

  • In 2017, the City of Seattle passed an ordinance that adds protections for tenants with criminal records and limits the extent to which criminal records can be used as criteria for tenant eligibility/selection (effective February 19, 2018).
  • How familiar are you with this ordinance?
  • In general, how effective or ineffective do you think the ordinance mentioned above (regarding screening prospective tenants based on criminal records) will be for increasing access to housing for more people in Seattle?
  • The ordinance governing screening tenant applications based on criminal records has reduced or will reduce my ability to use my judgement in deciding who to rent to.
  • The ordinance governing screening tenant applications based on criminal records places an unreasonable burden on Seattle landlords.
  • The ordinance governing screening tenant applications based on criminal records is likely to jeopardize the safety of other residents.
# WEIGHTED tables for landlord size and policy adaptation
svydesign(ids = ~ 1, data = coded_df, weights = coded_df$rrio_wt) %>%
  tbl_svysummary(
    by = ll_size,
    percent = "col",
    missing = "no",
    include = c(at_crim_know,
                at_crim_effect,
                at_crim_ability_judge,
                at_crim_burden,
                at_crim_safety,
                temp_N, ll_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
  add_overall(col_label = "**Overall**", last = TRUE) %>%
  modify_spanning_header(starts_with("stat_") ~ "**Policy attitudes on crim record (weighted)**")
Characteristic Policy attitudes on crim record (weighted) p-value2
small1 big1 Overall1
Limit crim record: knowledge <0.001
    Extremely familiar 497 (15%) 216 (36%) 713 (19%)
    Very familiar 935 (29%) 128 (21%) 1,064 (28%)
    Moderately familiar 630 (19%) 24 (4.0%) 654 (17%)
    Slightly familiar 23 (0.7%) 2 (0.4%) 25 (0.7%)
    Not familiar at all 501 (16%) 40 (6.7%) 542 (14%)
    Refused 649 (20%) 190 (32%) 839 (22%)
Limit crim record: effective? <0.001
    Very effective 724 (22%) 122 (20%) 845 (22%)
    Effective 525 (16%) 34 (5.7%) 559 (15%)
    Neither effective nor ineffective 549 (17%) 122 (20%) 671 (17%)
    Ineffective 874 (27%) 172 (29%) 1,045 (27%)
    Very ineffective 35 (1.1%) 3 (0.5%) 38 (1.0%)
    I dont know enough 60 (1.9%) 15 (2.5%) 75 (2.0%)
    Refused 469 (14%) 133 (22%) 602 (16%)
Limit crim record: ability to judge <0.001
    Strongly agree 828 (26%) 127 (21%) 955 (25%)
    Agree 120 (3.7%) 21 (3.5%) 141 (3.7%)
    Neither agree nor disagree 365 (11%) 20 (3.4%) 386 (10%)
    Disagree 294 (9.1%) 54 (9.0%) 349 (9.1%)
    Strongly disagree 26 (0.8%) 4 (0.7%) 30 (0.8%)
    I dont know enough 1,566 (48%) 369 (61%) 1,935 (50%)
    Refused 36 (1.1%) 5 (0.9%) 41 (1.1%)
Limit crim record: a burden? <0.001
    Strongly agree 658 (20%) 105 (17%) 763 (20%)
    Agree 152 (4.7%) 14 (2.4%) 166 (4.3%)
    Neither agree nor disagree 361 (11%) 17 (2.9%) 378 (9.9%)
    Disagree 339 (10%) 52 (8.6%) 391 (10%)
    Strongly disagree 28 (0.9%) 5 (0.8%) 32 (0.8%)
    I dont know enough 1,652 (51%) 404 (67%) 2,055 (54%)
    Refused 46 (1.4%) 4 (0.7%) 50 (1.3%)
Limit crim record: jeopardize safety <0.001
    Strongly agree 759 (23%) 141 (23%) 899 (23%)
    Agree 179 (5.5%) 15 (2.5%) 194 (5.1%)
    Neither agree nor disagree 343 (11%) 22 (3.7%) 366 (9.5%)
    Disagree 656 (20%) 70 (12%) 726 (19%)
    Strongly disagree 29 (0.9%) 5 (0.8%) 34 (0.9%)
    I dont know enough 1,225 (38%) 344 (57%) 1,570 (41%)
    Refused 44 (1.4%) 4 (0.6%) 48 (1.2%)
temp_N 3,235 (100%) 601 (100%) 3,836 (100%)
1 n (%)
2 chi-squared test with Rao & Scott's second-order correction

POLICY ADAPTATION

Adopt more or strict requirements

  • Have the rental regulations discussed above led you or your company to adopt more strict rental requirements for your applicants?
  • Which regulatory changes have led you or will lead you to adopt more strict rental requirements for your applicants? (please check all that apply)
    • Limiting move-in fees/security deposits
    • Allowing payment plans for move-in fees/security deposits
    • First in Time
    • Expanded source-of-income protections
    • Limiting the use of criminal records in tenant screenings
# WEIGHTED tables for landlord size and policy adaptation
svydesign(ids = ~ 1, data = coded_df, weights = coded_df$rrio_wt) %>%
  tbl_svysummary(
    by = ll_size,
    percent = "col",
    missing = "no",
    include = c(at_adopt,
                at_adopt1,
                at_adopt2,
                at_adopt3,
                at_adopt4,
                at_adopt5,
                temp_N, ll_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
  add_overall(col_label = "**Overall**", last = TRUE) %>%
  modify_spanning_header(starts_with("stat_") ~ "**Policy attitudes on adopting requirements (weighted)**")
Characteristic Policy attitudes on adopting requirements (weighted) p-value2
small1 big1 Overall1
Regulations make you adopt strict requirements <0.001
    Yes, already adopted 711 (22%) 110 (18%) 821 (21%)
    No, but plan to 857 (26%) 92 (15%) 950 (25%)
    No, no plans 524 (16%) 48 (7.9%) 572 (15%)
    Not sure 48 (1.5%) 7 (1.2%) 55 (1.4%)
    Refused 1,095 (34%) 344 (57%) 1,439 (38%)
Adopt because of limiting fees 0.16
    Limiting move-in fees/security deposits 1,073 (98%) 264 (99%) 1,337 (98%)
    Refused 25 (2.3%) 3 (1.1%) 28 (2.1%)
Adopt becasue of payment plans 0.11
    Allowing payment plans for move-in fees/ security deposits 895 (97%) 243 (99%) 1,138 (98%)
    Refused 25 (2.7%) 3 (1.2%) 28 (2.4%)
Adopt because of first in time 0.25
    First in Time 1,706 (99%) 368 (99%) 2,074 (99%)
    Refused 25 (1.5%) 3 (0.8%) 28 (1.3%)
Adopt because of source of income 0.17
    Expanded source-of-income protections 804 (97%) 195 (99%) 999 (97%)
    Refused 25 (3.0%) 3 (1.5%) 28 (2.7%)
Adopt because of crim record 0.18
    Limiting the use of criminal records in tenant screenings 1,451 (98%) 345 (99%) 1,795 (98%)
    Refused 25 (1.7%) 3 (0.8%) 28 (1.5%)
temp_N 3,235 (100%) 601 (100%) 3,836 (100%)
1 n (%)
2 chi-squared test with Rao & Scott's second-order correction

Intend to sell

  • Have you or the owner of the units you have managed sold, or intend to sell, any Seattle-based rental units because of the burden of the recent rental regulations discussed above, or because of a fear of new regulations?
  • Please specify whether existing and/or possible new regulatory changes have led or will lead you to sell some/all of your Seattle-based rental units.
    • Limiting move-in fees/security deposits
    • Allowing payment plans for move-in fees/security deposits
    • First in Time
    • Expanded source-of-income protections
    • Limiting the use of criminal records in tenant screenings
    • Fear of new regulations (please describe) [NOT SHOWN]
# WEIGHTED tables for landlord size and policy adaptation
svydesign(ids = ~ 1, data = coded_df, weights = coded_df$rrio_wt) %>%
  tbl_svysummary(
    by = ll_size,
    percent = "col",
    missing = "no",
    include = c(at_sell,
                at_sell1,
                at_sell2,
                at_sell3,
                at_sell4,
                at_sell5,
                at_sell6,
                temp_N, ll_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
  add_overall(col_label = "**Overall**", last = TRUE) %>%
  modify_spanning_header(starts_with("stat_") ~ "**Policy attitudes on intention to sell (weighted)**")
Characteristic Policy attitudes on intention to sell (weighted) p-value2
small1 big1 Overall1
Sell because of regulations <0.001
    Definitely yes 597 (18%) 66 (11%) 663 (17%)
    Probably yes 478 (15%) 159 (26%) 637 (17%)
    Unsure 711 (22%) 124 (21%) 835 (22%)
    Probably not 710 (22%) 137 (23%) 847 (22%)
    Definitely not 19 (0.6%) 0 (<0.1%) 20 (0.5%)
    Refused 719 (22%) 115 (19%) 834 (22%)
Sell because of limiting fees 0.93
    Limiting move-in fees/security deposits 676 (99%) 172 (99%) 848 (99%)
    Refused 9 (1.4%) 3 (1.4%) 12 (1.4%)
Sell because of payment plans >0.99
    Allowing payment plans for move-in fees/ security deposits 552 (98%) 148 (98%) 700 (98%)
    Refused 9 (1.7%) 3 (1.7%) 12 (1.7%)
Sell because of first in time 0.83
    First in Time 1,010 (99%) 237 (99%) 1,247 (99%)
    Refused 9 (0.9%) 3 (1.1%) 12 (0.9%)
Sell because of source of income 0.89
    Expanded source-of-income protections 514 (98%) 127 (98%) 641 (98%)
    Refused 9 (1.8%) 3 (1.9%) 12 (1.8%)
Sell because of crim record 0.95
    Limiting the use of criminal records in tenant screenings 956 (99%) 248 (99%) 1,205 (99%)
    Refused 9 (1.0%) 3 (1.0%) 12 (1.0%)
Sell because fear new regs. 0.82
    Fear of new regulations (please describe) 683 (99%) 215 (99%) 898 (99%)
    Refused 9 (1.3%) 3 (1.2%) 12 (1.3%)
temp_N 3,235 (100%) 601 (100%) 3,836 (100%)
1 n (%)
2 chi-squared test with Rao & Scott's second-order correction

Landlord suggestions

  • How strongly do you agree or disagree with this statement: The City of Seattle should continue to pass ordinances to regulate the rental housing market in Seattle?
  • What should the City of Seattle’s ordinances target? (please check all that apply)
    • Increasing the overall supply of rental units
    • Increasing the supply of low-cost/affordable housing
    • Increasing access to affordable housing for protected classes
    • Making it easier for landlords to end a lease
    • Reducing financial risk to landlords providing affordable housing
    • Other (please specify) [NOT SHOWN]
  • How strongly do you agree or disagree with this statement: Seattle city officials take landlords’ perspectives into consideration when making policy?
# WEIGHTED tables for landlord size and policy adaptation
svydesign(ids = ~ 1, data = coded_df, weights = coded_df$rrio_wt) %>%
  tbl_svysummary(
    by = ll_size,
    percent = "col",
    missing = "no",
    include = c(at_city_continue,
                at_target1,
                at_target2,
                at_target3,
                at_target4,
                at_target5,
                at_target6,
                at_city_consider,
                temp_N, ll_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
  add_overall(col_label = "**Overall**", last = TRUE) %>%
  modify_spanning_header(starts_with("stat_") ~ "**Opinion on city regulations (weighted)**")
Characteristic Opinion on city regulations (weighted) p-value2
small1 big1 Overall1
City should continue to regulate <0.001
    Strongly agree 337 (10%) 26 (4.3%) 363 (9.5%)
    Agree 669 (21%) 114 (19%) 783 (20%)
    Neither agree nor disagree 158 (4.9%) 14 (2.3%) 172 (4.5%)
    Disagree 591 (18%) 51 (8.5%) 642 (17%)
    Strongly disagree 18 (0.5%) 2 (0.3%) 19 (0.5%)
    I dont know enough 101 (3.1%) 15 (2.5%) 117 (3.0%)
    Refused 1,361 (42%) 379 (63%) 1,740 (45%)
City target increase all supply 0.68
    Increasing the overall supply of rental units 212 (99%) 18 (100%) 230 (99%)
    Refused 2 (0.9%) 0 (0%) 2 (0.8%)
City target increase low income supply 0.67
    Increasing the supply of low-cost/affordable housing 368 (99%) 33 (100%) 401 (100%)
    Refused 2 (0.5%) 0 (0%) 2 (0.5%)
City target access to affordable housing 0.72
    Increasing access to affordable housing for protected classes 259 (99%) 17 (100%) 276 (99%)
    Refused 2 (0.7%) 0 (0%) 2 (0.7%)
City target ease for LL to end lease 0.68
    Making it easier for landlords to end a lease 107 (98%) 9 (100%) 116 (98%)
    Refused 2 (1.7%) 0 (0%) 2 (1.6%)
City target reducing risk for LL affordable housing 0.69
    Reducing financial risk to landlords providing affordable housing 255 (99%) 20 (100%) 275 (99%)
    Refused 2 (0.7%) 0 (0%) 2 (0.7%)
City target other 0.58
    Other 47 (96%) 7 (100%) 54 (97%)
    Refused 2 (3.9%) 0 (0%) 2 (3.4%)
City should consider LL perspective <0.001
    Strongly agree 236 (7.3%) 19 (3.2%) 255 (6.6%)
    Agree 747 (23%) 111 (19%) 859 (22%)
    Neither agree nor disagree 263 (8.1%) 19 (3.1%) 282 (7.3%)
    Disagree 342 (11%) 33 (5.6%) 375 (9.8%)
    Strongly disagree 14 (0.4%) 0 (<0.1%) 15 (0.4%)
    I dont know enough 150 (4.6%) 22 (3.6%) 172 (4.5%)
    Refused 1,483 (46%) 396 (66%) 1,879 (49%)
temp_N 3,235 (100%) 601 (100%) 3,836 (100%)
1 n (%)
2 chi-squared test with Rao & Scott's second-order correction