# environment setup to run ordered logit properly
options(contrasts = rep("contr.treatment", 2))

This chunk loads all the packages to use

#packages for ordered logit
library(tidyverse) # package for data cleaning and plotting
library(readxl) # package for reading excel file
library(broom) # extracting model summary as data frame
library(modelsummary) # deriving model tables
library(scales) # label percent
library(lubridate) # working with dates
library(marginaleffects) #to calculate marginal effects

library(ordinal) # package for ordinal logit regression

Data Preparation

First, import the sampled and coded data set

#import the raw data file
socialcare_sk <- read_csv("data/cqc_sfc_cleaned.csv")
socialcare <- socialcare_sk %>% 
# recode legal form types to be more readable / easier to present
  mutate(inherited = ifelse(inherited == "Y", TRUE, FALSE),
         rating = recode(rating, 
                         "Insufficient evidence to rate" = "NA",
                         "Requires improvement" = "Req improv")) %>% 
  # set the order of the values in the factors 
  mutate(form = ordered(form, levels = c("FPO", "NPO", "GOV", "CIC", "IND")),
         
  # assume the order of the ratings as follows but need to double check with the source 
         rating = ordered(rating, levels = c("Inadequate","Req improv", "Good", "Outstanding"))) %>%
  
  # adding the rating data coded as numerical
  mutate(rating_num = case_when(rating == "Inadequate" ~ 1,
                                rating == "Req improv" ~ 2,
                                rating == "Good" ~ 3,
                                rating == "Outstanding" ~ 4)) %>% 
  
  mutate(category = case_when(primary_cat == "Community based adult social care services" ~ "community",
                              primary_cat == "Residential social care" ~ "residential",
                              TRUE ~ as.character(NA)),

         # deriving year column and dummy variable for before_covid
         year = year(publication_date),
         after_covid = ifelse(year >= 2020, TRUE, FALSE),
         before_covid = ifelse(year <= 2019, TRUE, FALSE)) %>%

  # converting the ordinal variable to numerical 
  mutate(rating_num = case_when(rating == "Inadequate" ~ 1,
                                rating == "Req improv" ~ 2,
                                rating == "Good" ~ 3,
                                rating == "Outstanding" ~ 4)) %>% 
  # derive the rating dummy
  mutate(rating_higher = ifelse(rating_num > 2, 1, 0))

Running OLS models

The OLS models and the ordered logit models can be written as follows

\(rating_{numerical} = \beta_0 + \beta_1form + \beta_2category+ \beta_3region + \beta_4inherited + u\)

\(log-odds(rating_{ordinal} \leq j) = \beta_{j0} + \beta_1form + \beta_2category+ \beta_3region + \beta_4inherited + u\)

In this section, we first run the OLS models. In the OLS models, we kind of “cheat” R by treating the four rating levels with orders as if they are numbers 1-4. There are the flowing reasons that we report the results from OLS models, even though the more suitable methods should be ordered logit models, about which we will discuss in a while.

  1. The purpose of fitting OLS models is to use them as benchmarks.
  2. Since there are issues like heteroscedasticity, the standard errors calculated are not reliable. But the correlation relationships between the independent variables and dependent variables are still true. So the results are still informative
  3. Plus, compared with the ordered logit models we run later, the results are more straightforward, and more easily give us intuition about how different legal forms of social care providers impact the service quality ratings.
  4. The OLS models are intended to be compared with the ordered logit models. As shown later, the results are generally consistent between the two model families, confirming that our model specification is robust between different models.

OLS with the sub-domain ratings one by one

# run the model loops with nest() method
models_ols <- socialcare %>% 
  group_by(domain) %>% 
  nest()%>% 
  mutate(ols_models = map(data, 
                          ~lm(rating_num ~ form + age + capacity +
                              category + region + inherited , 
                              data = .x))) %>% 
  mutate(results = map(ols_models, ~tidy(.x, conf.int = TRUE))) %>% 
  pull(ols_models, name = domain)
# run the model loops with nest() method
# add before_covid as control
# add also interaction term
table_ols <- modelsummary(models_ols, statistic = "({p.value}) {stars}")
## Warning in !is.null(rmarkdown::metadata$output) && rmarkdown::metadata$output
## %in% : 'length(x) = 3 > 1' in coercion to 'logical(1)'
table_ols
Safe Effective Caring Responsive Well-led Overall
(Intercept) 2.813*** 2.903*** 3.009*** 2.950*** 2.826*** 2.891***
(0.000) *** (0.000) *** (0.000) *** (0.000) *** (0.000) *** (0.000) ***
formNPO 0.071*** 0.029** 0.021* 0.047*** 0.073*** 0.055***
(0.000) *** (0.003) ** (0.024) * (0.000) *** (0.000) *** (0.000) ***
formGOV 0.072*** 0.030+ 0.008 0.026 0.044 0.039
(0.001) *** (0.085) + (0.613) (0.195) (0.105) (0.112)
formCIC 0.053 −0.005 0.075+ −0.008 0.141* 0.084
(0.340) (0.906) (0.074) + (0.884) (0.044) * (0.182)
formIND 0.002 −0.018 0.021 0.031 −0.027 −0.007
(0.945) (0.348) (0.259) (0.172) (0.378) (0.815)
age 0.006*** 0.003*** 0.004*** 0.006*** 0.010*** 0.008***
(0.000) *** (0.001) *** (0.000) *** (0.000) *** (0.000) *** (0.000) ***
capacity −0.001*** −0.001*** 0.000+ −0.001*** −0.001*** −0.001***
(0.000) *** (0.000) *** (0.066) + (0.000) *** (0.000) *** (0.000) ***
categoryresidential −0.048*** −0.025** −0.054*** −0.028* −0.081*** −0.070***
(0.000) *** (0.008) ** (0.000) *** (0.010) * (0.000) *** (0.000) ***
regionEast of England −0.008 0.018 0.000 0.014 −0.037 −0.023
(0.714) (0.307) (0.992) (0.483) (0.173) (0.348)
regionLondon −0.002 0.024 −0.016 −0.024 −0.030 −0.026
(0.915) (0.192) (0.374) (0.276) (0.309) (0.328)
regionNorth East 0.073** 0.085*** 0.072*** 0.064* 0.141*** 0.109***
(0.009) ** (0.000) *** (0.001) *** (0.013) * (0.000) *** (0.001) ***
regionNorth West 0.022 0.053** 0.023 0.032 0.035 0.023
(0.295) (0.002) ** (0.157) (0.102) (0.184) (0.351)
regionSouth East 0.043* 0.024 0.019 0.023 0.006 0.000
(0.030) * (0.123) (0.204) (0.211) (0.804) (0.992)
regionSouth West 0.068** 0.056*** 0.084*** 0.076*** 0.094*** 0.087***
(0.001) ** (0.001) *** (0.000) *** (0.000) *** (0.000) *** (0.000) ***
regionWest Midlands −0.011 0.018 −0.015 0.001 −0.077** −0.045+
(0.627) (0.294) (0.353) (0.979) (0.005) ** (0.068) +
regionYorkshire and The Humber −0.032 0.023 0.024 0.000 −0.065* −0.052*
(0.152) (0.199) (0.157) (0.988) (0.021) * (0.043) *
Num.Obs. 6513 6516 6507 6523 6510 6504
R2 0.034 0.014 0.024 0.019 0.038 0.033
R2 Adj. 0.031 0.012 0.022 0.017 0.036 0.031
AIC 6388.7 3428.8 2583.8 5474.0 9302.1 8015.0
BIC 6503.9 3544.1 2699.1 5589.3 9417.4 8130.2
Log.Lik. −3177.325 −1697.416 −1274.897 −2719.994 −4634.039 −3990.492
RMSE 0.39 0.31 0.29 0.37 0.49 0.45
# run the model loops with nest() method
# add after_covid as control
models_ols_covid <- socialcare %>% 
  group_by(domain) %>% 
  nest()%>% 
  mutate(ols_models = map(data, 
                          ~lm(rating_num ~ form + after_covid + age + capacity +
                              category + region + inherited, 
                              data = .x))) %>% 
  mutate(results = map(ols_models, ~tidy(.x, conf.int = TRUE))) %>% 
  pull(ols_models, name = domain) 
table_ols_covid <- modelsummary(models_ols_covid, statistic = "({p.value}) {stars}")
table_ols_covid
Safe Effective Caring Responsive Well-led Overall
(Intercept) 2.894*** 2.933*** 3.027*** 2.972*** 2.932*** 2.993***
(0.000) *** (0.000) *** (0.000) *** (0.000) *** (0.000) *** (0.000) ***
formNPO 0.055*** 0.024* 0.018+ 0.043*** 0.051*** 0.033*
(0.000) *** (0.017) * (0.051) + (0.000) *** (0.001) *** (0.015) *
formGOV 0.055** 0.026 0.006 0.024 0.022 0.019
(0.009) ** (0.133) (0.704) (0.242) (0.405) (0.426)
formCIC 0.036 −0.006 0.075+ −0.008 0.118+ 0.062
(0.507) (0.891) (0.070) + (0.883) (0.081) + (0.305)
formIND −0.022 −0.029 0.015 0.024 −0.058+ −0.036
(0.351) (0.135) (0.410) (0.294) (0.052) + (0.185)
after_covidTRUE −0.224*** −0.113*** −0.071*** −0.082*** −0.297*** −0.289***
(0.000) *** (0.000) *** (0.000) *** (0.000) *** (0.000) *** (0.000) ***
age 0.004*** 0.002** 0.004*** 0.005*** 0.008*** 0.006***
(0.000) *** (0.008) ** (0.000) *** (0.000) *** (0.000) *** (0.000) ***
capacity −0.001*** −0.001*** 0.000+ −0.001*** −0.001*** −0.001***
(0.000) *** (0.000) *** (0.098) + (0.000) *** (0.000) *** (0.000) ***
categoryresidential −0.047*** −0.024** −0.054*** −0.028* −0.080*** −0.067***
(0.000) *** (0.009) ** (0.000) *** (0.011) * (0.000) *** (0.000) ***
regionEast of England −0.009 0.018 0.000 0.015 −0.038 −0.023
(0.674) (0.286) (0.988) (0.454) (0.150) (0.319)
regionLondon −0.007 0.023 −0.017 −0.024 −0.035 −0.031
(0.750) (0.216) (0.326) (0.263) (0.222) (0.229)
regionNorth East 0.085** 0.093*** 0.076*** 0.070** 0.157*** 0.127***
(0.002) ** (0.000) *** (0.000) *** (0.007) ** (0.000) *** (0.000) ***
regionNorth West 0.019 0.052** 0.021 0.031 0.031 0.018
(0.363) (0.002) ** (0.192) (0.121) (0.225) (0.436)
regionSouth East 0.039* 0.025 0.019 0.024 0.002 −0.004
(0.042) * (0.104) (0.197) (0.189) (0.934) (0.866)
regionSouth West 0.062** 0.057*** 0.083*** 0.076*** 0.088*** 0.081***
(0.002) ** (0.001) *** (0.000) *** (0.000) *** (0.001) *** (0.000) ***
regionWest Midlands −0.017 0.018 −0.015 0.000 −0.085** −0.053*
(0.416) (0.294) (0.341) (0.987) (0.001) ** (0.025) *
regionYorkshire and The Humber −0.035 0.024 0.024 0.000 −0.068* −0.055*
(0.108) (0.180) (0.159) (0.989) (0.012) * (0.026) *
Num.Obs. 6513 6516 6507 6523 6510 6504
R2 0.094 0.035 0.033 0.027 0.106 0.112
R2 Adj. 0.092 0.032 0.030 0.025 0.104 0.110
AIC 5970.1 3291.3 2526.6 5424.3 8828.5 7463.7
BIC 6092.2 3413.4 2648.6 5546.4 8950.5 7585.7
Log.Lik. −2967.074 −1627.666 −1245.281 −2694.140 −4396.231 −3713.826
RMSE 0.38 0.31 0.29 0.37 0.48 0.43

ordered logit models

whole model without control

model_order_overall <- clm(rating ~ form + category + region + inherited + age + capacity,
                data = filter(socialcare, domain == "Overall"),
                link = "logit")
model_order_safe <- clm(rating ~ form + category + region + inherited + age + capacity,
                data = filter(socialcare, domain == "Safe"),
                link = "logit")
model_order_effective <- clm(rating ~ form + category + region + inherited + age + capacity,
                data = filter(socialcare, domain == "Effective"),
                link = "logit")
model_order_caring <- clm(rating ~ form + category + region + inherited + age + capacity,
                data = filter(socialcare, domain == "Caring"),
                link = "logit")
model_order_well_led <- clm(rating ~ form + category + region + inherited + age + capacity,
                data = filter(socialcare, domain == "Well-led"),
                link = "logit")
model_order_responsive <- clm(rating ~ form + category + region + inherited + age + capacity,
                data = filter(socialcare, domain == "Responsive"),
                link = "logit")
ordinal_models <- modelsummary(list("overall" = model_order_overall, "safe" = model_order_safe, 
                                    "effective" = model_order_effective, "caring"= model_order_caring, 
                                    "well-led" = model_order_well_led, "responsive" = model_order_responsive),
                               coef_omit = "region", exponentiate = F,
                               statistic = "({p.value}) {stars}")
ordinal_models
overall safe effective caring well-led responsive
Inadequate|Req improv −4.706*** −4.501*** −6.362*** −7.936*** −4.289*** −6.803***
(0.000) *** (0.000) *** (0.000) *** (0.000) *** (0.000) *** (0.000) ***
Req improv|Good −1.845*** −1.612*** −2.190*** −3.372*** −1.422*** −2.296***
(0.000) *** (0.000) *** (0.000) *** (0.000) *** (0.000) *** (0.000) ***
Good|Outstanding 3.051*** 5.721*** 4.338*** 3.161*** 3.135*** 3.099***
(0.000) *** (0.000) *** (0.000) *** (0.000) *** (0.000) *** (0.000) ***
formNPO 0.315*** 0.576*** 0.339** 0.241* 0.363*** 0.371***
(0.000) *** (0.000) *** (0.002) ** (0.029) * (0.000) *** (0.000) ***
formGOV 0.187 0.516** 0.317 0.096 0.191 0.209
(0.194) (0.004) ** (0.109) (0.619) (0.154) (0.195)
formCIC 0.491 0.376 −0.065 0.738+ 0.712* −0.059
(0.189) (0.409) (0.891) (0.076) + (0.049) * (0.888)
formIND −0.061 −0.018 −0.195 0.248 −0.147 0.249
(0.702) (0.912) (0.321) (0.254) (0.304) (0.172)
categoryresidential −0.416*** −0.409*** −0.313** −0.636*** −0.408*** −0.218*
(0.000) *** (0.000) *** (0.002) ** (0.000) *** (0.000) *** (0.012) *
age 0.048*** 0.038*** 0.027** 0.048*** 0.047*** 0.047***
(0.000) *** (0.000) *** (0.002) ** (0.000) *** (0.000) *** (0.000) ***
capacity −0.007*** −0.009*** −0.007*** −0.003+ −0.005*** −0.006***
(0.000) *** (0.000) *** (0.000) *** (0.092) + (0.000) *** (0.000) ***
Num.Obs. 6504 6513 6516 6507 6510 6523
AIC 7987.7 6171.2 4896.4 4532.1 9094.0 6351.7
BIC 8109.7 6293.3 5018.5 4654.2 9216.1 6473.8
RMSE 2.28 2.11 2.13 2.24 2.28 2.30
ordinal_models_exp <- modelsummary(list("overall" = model_order_overall, "safe" = model_order_safe, 
                                    "effective" = model_order_effective, "caring"= model_order_caring, 
                                    "well-led" = model_order_well_led, "responsive" = model_order_responsive),
                               coef_omit = "region", exponentiate = T,
                               statistic = "({p.value}) {stars}")
ordinal_models_exp
overall safe effective caring well-led responsive
Inadequate|Req improv 0.009*** 0.011*** 0.002*** 0.000*** 0.014*** 0.001***
(0.000) *** (0.000) *** (0.000) *** (0.000) *** (0.000) *** (0.000) ***
Req improv|Good 0.158*** 0.200*** 0.112*** 0.034*** 0.241*** 0.101***
(0.000) *** (0.000) *** (0.000) *** (0.000) *** (0.000) *** (0.000) ***
Good|Outstanding 21.131*** 305.345*** 76.534*** 23.589*** 22.989*** 22.168***
(0.000) *** (0.000) *** (0.000) *** (0.000) *** (0.000) *** (0.000) ***
formNPO 1.371*** 1.779*** 1.404** 1.272* 1.438*** 1.450***
(0.000) *** (0.000) *** (0.002) ** (0.029) * (0.000) *** (0.000) ***
formGOV 1.206 1.675** 1.373 1.101 1.211 1.233
(0.194) (0.004) ** (0.109) (0.619) (0.154) (0.195)
formCIC 1.634 1.457 0.937 2.093+ 2.038* 0.943
(0.189) (0.409) (0.891) (0.076) + (0.049) * (0.888)
formIND 0.941 0.982 0.823 1.282 0.863 1.283
(0.702) (0.912) (0.321) (0.254) (0.304) (0.172)
categoryresidential 0.660*** 0.664*** 0.731** 0.530*** 0.665*** 0.804*
(0.000) *** (0.000) *** (0.002) ** (0.000) *** (0.000) *** (0.012) *
age 1.049*** 1.039*** 1.027** 1.049*** 1.048*** 1.048***
(0.000) *** (0.000) *** (0.002) ** (0.000) *** (0.000) *** (0.000) ***
capacity 0.993*** 0.991*** 0.993*** 0.997+ 0.995*** 0.994***
(0.000) *** (0.000) *** (0.000) *** (0.092) + (0.000) *** (0.000) ***
Num.Obs. 6504 6513 6516 6507 6510 6523
AIC 7987.7 6171.2 4896.4 4532.1 9094.0 6351.7
BIC 8109.7 6293.3 5018.5 4654.2 9216.1 6473.8
RMSE 2.28 2.11 2.13 2.24 2.28 2.30

whole model with control

model_order_overall_covid <- clm(rating ~ form + after_covid + age + capacity + 
                                   category + region + inherited,
                data = filter(socialcare, domain == "Overall"),
                link = "logit")
## Warning: Using formula(x) is deprecated when x is a character vector of length > 1.
##   Consider formula(paste(x, collapse = " ")) instead.
model_order_safe_covid <- clm(rating ~ form + after_covid + age + capacity + 
                                category + region + inherited,
                data = filter(socialcare, domain == "Safe"),
                link = "logit")
## Warning: Using formula(x) is deprecated when x is a character vector of length > 1.
##   Consider formula(paste(x, collapse = " ")) instead.
model_order_effective_covid <- clm(rating ~ form + after_covid + age + capacity + 
                                     category + region + inherited,
                data = filter(socialcare, domain == "Effective"),
                link = "logit")
## Warning: Using formula(x) is deprecated when x is a character vector of length > 1.
##   Consider formula(paste(x, collapse = " ")) instead.
model_order_caring_covid <- clm(rating ~ form + after_covid + age + capacity + 
                                  category + region + inherited,
                data = filter(socialcare, domain == "Caring"),
                link = "logit")
## Warning: Using formula(x) is deprecated when x is a character vector of length > 1.
##   Consider formula(paste(x, collapse = " ")) instead.
model_order_well_led_covid <- clm(rating ~ form + after_covid + age + capacity + 
                                    category + region + inherited,
                data = filter(socialcare, domain == "Well-led"),
                link = "logit")
## Warning: Using formula(x) is deprecated when x is a character vector of length > 1.
##   Consider formula(paste(x, collapse = " ")) instead.
model_order_responsive_covid <- clm(rating ~ form + after_covid + age + capacity + 
                                      category + region + inherited,
                data = filter(socialcare, domain == "Responsive"),
                link = "logit")
## Warning: Using formula(x) is deprecated when x is a character vector of length > 1.
##   Consider formula(paste(x, collapse = " ")) instead.
ordinal_models_covid <- modelsummary(list("overall" = model_order_overall_covid, "safe" = model_order_safe_covid, 
                                    "effective" = model_order_effective_covid, "caring"= model_order_caring_covid, 
                                    "well-led" = model_order_well_led_covid, "responsive" = model_order_responsive_covid),
                               coef_omit = "region", exponentiate = F,
                               statistic = "({p.value}) {stars}")
ordinal_models_covid
overall safe effective caring well-led responsive
Inadequate|Req improv −5.580*** −5.179*** −6.739*** −8.239*** −4.965*** −7.015***
(0.000) *** (0.000) *** (0.000) *** (0.000) *** (0.000) *** (0.000) ***
Req improv|Good −2.599*** −2.207*** −2.537*** −3.661*** −1.993*** −2.494***
(0.000) *** (0.000) *** (0.000) *** (0.000) *** (0.000) *** (0.000) ***
Good|Outstanding 2.675*** 5.385*** 4.147*** 2.988*** 2.800*** 2.959***
(0.000) *** (0.000) *** (0.000) *** (0.000) *** (0.000) *** (0.000) ***
formNPO 0.210* 0.485*** 0.283* 0.211+ 0.281*** 0.345***
(0.014) * (0.000) *** (0.012) * (0.057) + (0.000) *** (0.000) ***
formGOV 0.077 0.424* 0.275 0.076 0.085 0.188
(0.602) (0.019) * (0.168) (0.697) (0.534) (0.245)
formCIC 0.360 0.251 −0.060 0.730+ 0.625+ −0.064
(0.347) (0.587) (0.899) (0.082) + (0.087) + (0.877)
formIND −0.238 −0.193 −0.316 0.187 −0.303* 0.192
(0.147) (0.262) (0.113) (0.391) (0.040) * (0.294)
after_covidTRUE −1.642*** −1.339*** −1.055*** −0.909*** −1.350*** −0.660***
(0.000) *** (0.000) *** (0.000) *** (0.000) *** (0.000) *** (0.000) ***
age 0.036*** 0.028*** 0.021* 0.043*** 0.037*** 0.043***
(0.000) *** (0.000) *** (0.017) * (0.000) *** (0.000) *** (0.000) ***
capacity −0.005*** −0.007*** −0.006*** −0.003 −0.004*** −0.006***
(0.000) *** (0.000) *** (0.000) *** (0.133) (0.001) *** (0.000) ***
categoryresidential −0.428*** −0.415*** −0.306** −0.636*** −0.423*** −0.216*
(0.000) *** (0.000) *** (0.003) ** (0.000) *** (0.000) *** (0.013) *
Num.Obs. 6504 6513 6516 6507 6510 6523
AIC 7483.0 5842.0 4775.8 4474.8 8677.5 6302.2
BIC 7611.9 5970.9 4904.7 4603.6 8806.4 6431.0
RMSE 2.27 2.10 2.13 2.24 2.27 2.30
ordinal_models_covid_exp <- modelsummary(list("overall" = model_order_overall_covid, "safe" = model_order_safe_covid, 
                                    "effective" = model_order_effective_covid, "caring"= model_order_caring_covid, 
                                    "well-led" = model_order_well_led_covid, "responsive" = model_order_responsive_covid),
                               coef_omit = "region", exponentiate = T,
                               statistic = "({p.value}) {stars}")
ordinal_models_covid_exp
overall safe effective caring well-led responsive
Inadequate|Req improv 0.004*** 0.006*** 0.001*** 0.000*** 0.007*** 0.001***
(0.000) *** (0.000) *** (0.000) *** (0.000) *** (0.000) *** (0.000) ***
Req improv|Good 0.074*** 0.110*** 0.079*** 0.026*** 0.136*** 0.083***
(0.000) *** (0.000) *** (0.000) *** (0.000) *** (0.000) *** (0.000) ***
Good|Outstanding 14.518*** 218.189*** 63.253*** 19.843*** 16.437*** 19.279***
(0.000) *** (0.000) *** (0.000) *** (0.000) *** (0.000) *** (0.000) ***
formNPO 1.233* 1.624*** 1.328* 1.235+ 1.325*** 1.412***
(0.014) * (0.000) *** (0.012) * (0.057) + (0.000) *** (0.000) ***
formGOV 1.080 1.528* 1.317 1.079 1.089 1.207
(0.602) (0.019) * (0.168) (0.697) (0.534) (0.245)
formCIC 1.433 1.286 0.941 2.076+ 1.869+ 0.938
(0.347) (0.587) (0.899) (0.082) + (0.087) + (0.877)
formIND 0.788 0.824 0.729 1.206 0.739* 1.212
(0.147) (0.262) (0.113) (0.391) (0.040) * (0.294)
after_covidTRUE 0.194*** 0.262*** 0.348*** 0.403*** 0.259*** 0.517***
(0.000) *** (0.000) *** (0.000) *** (0.000) *** (0.000) *** (0.000) ***
age 1.037*** 1.029*** 1.021* 1.044*** 1.038*** 1.044***
(0.000) *** (0.000) *** (0.017) * (0.000) *** (0.000) *** (0.000) ***
capacity 0.995*** 0.993*** 0.994*** 0.997 0.996*** 0.994***
(0.000) *** (0.000) *** (0.000) *** (0.133) (0.001) *** (0.000) ***
categoryresidential 0.652*** 0.661*** 0.736** 0.530*** 0.655*** 0.806*
(0.000) *** (0.000) *** (0.003) ** (0.000) *** (0.000) *** (0.013) *
Num.Obs. 6504 6513 6516 6507 6510 6523
AIC 7483.0 5842.0 4775.8 4474.8 8677.5 6302.2
BIC 7611.9 5970.9 4904.7 4603.6 8806.4 6431.0
RMSE 2.27 2.10 2.13 2.24 2.27 2.30