Updated with newly derived variables
# 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
library(here) # specifying directory
First, import the sampled and coded data set
#import the raw data file
cqc_skills <- read_rds(here("data","cleaned_sfc_ipw.rds"))
summary(cqc_skills[, c("turnover", "turnover0", "staff_level", "staff_level0")])
## turnover turnover0 staff_level staff_level0
## Min. : 0.000 Min. : 0.000 Min. : 0.000 Min. : 0.000
## 1st Qu.: 7.143 1st Qu.: 6.885 1st Qu.: 0.500 1st Qu.: 0.794
## Median : 18.868 Median : 18.182 Median : 0.808 Median : 1.273
## Mean : 31.132 Mean : 29.171 Mean : 1.204 Mean : 1.647
## 3rd Qu.: 38.298 3rd Qu.: 38.095 3rd Qu.: 1.357 3rd Qu.: 1.917
## Max. :4500.000 Max. :704.348 Max. :55.333 Max. :67.333
## NA's :10656 NA's :10644 NA's :5004 NA's :5004
model_order_weighted <- clm(rating ~ form + service_type_selected + region + during_covid,
data = filter(cqc_skills, domain == "Overall"),
link = "logit",
weights = ipw)
model_staff_weighted <- lm(staff_level ~ form + service_type_selected + region + during_covid,
data = filter(cqc_skills, domain == "Overall"),
weights = ipw)
staff_direct_order_weighted <- clm(rating ~ form + staff_level + service_type_selected + region + during_covid,
data = filter(cqc_skills, domain == "Overall"),
link = "logit",
weights = ipw)
model_turnover_weighted <- lm(turnover ~ form + service_type_selected+ region + during_covid,
data = filter(cqc_skills, domain == "Overall"),
weights = ipw)
turnover_direct_order_weighted <- clm(rating ~ form + turnover + service_type_selected + region + during_covid,
data = filter(cqc_skills, domain == "Overall"),
link = "logit",
weights = ipw)
model_staff_weighted0 <- lm(staff_level0 ~ form + service_type_selected + region + during_covid,
data = filter(cqc_skills, domain == "Overall"),
weights = ipw)
staff_direct_order_weighted0 <- clm(rating ~ form + staff_level0 + service_type_selected + region + during_covid,
data = filter(cqc_skills, domain == "Overall"),
link = "logit",
weights = ipw)
model_turnover_weighted0 <- lm(turnover0 ~ form + service_type_selected+ region + during_covid,
data = filter(cqc_skills, domain == "Overall"),
weights = ipw)
turnover_direct_order_weighted0 <- clm(rating ~ form + turnover0 + service_type_selected + region + during_covid,
data = filter(cqc_skills, domain == "Overall"),
link = "logit",
weights = ipw)
new_models <- modelsummary(list("full weighted" = model_order_weighted,
"staffing weighted"= model_staff_weighted,
"staff direct weighted" = staff_direct_order_weighted,
"turnover weighted"= model_turnover_weighted,
"turnover direct weighted" = turnover_direct_order_weighted),
coef_omit = "region", exponentiate = F,
statistic = "({p.value}) {stars}")
new_models
| full weighted | staffing weighted | staff direct weighted | turnover weighted | turnover direct weighted | |
|---|---|---|---|---|---|
| Inadequate|Req improv | -5.019 | -4.910 | -5.050 | ||
| (<0.001) *** | (<0.001) *** | (<0.001) *** | |||
| Req improv|Good | -2.167 | -2.065 | -2.127 | ||
| (<0.001) *** | (<0.001) *** | (<0.001) *** | |||
| Good|Outstanding | 3.076 | 3.187 | 3.150 | ||
| (<0.001) *** | (<0.001) *** | (<0.001) *** | |||
| formCIC | 0.257 | 0.492 | 0.127 | -12.767 | 0.172 |
| (0.393) | (0.049) * | (0.687) | (0.537) | (0.680) | |
| formGOV | 0.197 | 0.708 | 0.076 | -22.312 | 0.166 |
| (0.182) | (<0.001) *** | (0.616) | (0.003) ** | (0.270) | |
| formIND | -0.277 | -0.222 | -0.205 | -14.033 | -0.269 |
| (0.003) ** | (0.007) ** | (0.044) * | (0.011) * | (0.013) * | |
| formNPO | 0.315 | 0.418 | 0.237 | -9.565 | 0.310 |
| (<0.001) *** | (<0.001) *** | (0.001) ** | (0.018) * | (<0.001) *** | |
| service_type_selectedcare home w/o nursing | 0.134 | 0.316 | 0.145 | -8.578 | 0.120 |
| (0.027) * | (<0.001) *** | (0.024) * | (0.019) * | (0.089) + | |
| service_type_selectedDomicilary Care | 0.504 | -0.166 | 0.582 | 4.902 | 0.582 |
| (<0.001) *** | (0.005) ** | (<0.001) *** | (0.230) | (<0.001) *** | |
| service_type_selectedSupported Living | 0.513 | 1.390 | 0.511 | -8.269 | 0.527 |
| (<0.001) *** | (<0.001) *** | (<0.001) *** | (0.245) | (<0.001) *** | |
| during_covidTRUE | -1.787 | -0.119 | -1.758 | 5.839 | -1.737 |
| (<0.001) *** | (0.006) ** | (<0.001) *** | (0.057) + | (<0.001) *** | |
| (Intercept) | 1.006 | 43.991 | |||
| (<0.001) *** | (<0.001) *** | ||||
| staff_level | 0.082 | ||||
| (<0.001) *** | |||||
| turnover | 0.000 | ||||
| (0.509) | |||||
| Num.Obs. | 12521 | 5984 | 11143 | 5085 | 9500 |
| R2 | 0.075 | 0.011 | |||
| R2 Adj. | 0.073 | 0.008 | |||
| AIC | 15037.6 | 22009.7 | 13275.9 | 61048.2 | 11151.6 |
| BIC | 15178.9 | 22130.3 | 13422.2 | 61165.9 | 11294.7 |
| Log.Lik. | -10986.858 | -30506.119 | |||
| RMSE | 2.27 | 1.58 | 2.27 | 93.27 | 2.27 |
old_models <- modelsummary(list("full weighted" = model_order_weighted,
"staffing weighted"= model_staff_weighted0,
"staff direct weighted" = staff_direct_order_weighted0,
"turnover weighted"= model_turnover_weighted0,
"turnover direct weighted" = turnover_direct_order_weighted0),
coef_omit = "region", exponentiate = F,
statistic = "({p.value}) {stars}")
old_models
| full weighted | staffing weighted | staff direct weighted | turnover weighted | turnover direct weighted | |
|---|---|---|---|---|---|
| Inadequate|Req improv | -5.019 | -4.891 | -5.084 | ||
| (<0.001) *** | (<0.001) *** | (<0.001) *** | |||
| Req improv|Good | -2.167 | -2.047 | -2.159 | ||
| (<0.001) *** | (<0.001) *** | (<0.001) *** | |||
| Good|Outstanding | 3.076 | 3.201 | 3.119 | ||
| (<0.001) *** | (<0.001) *** | (<0.001) *** | |||
| formCIC | 0.257 | 0.499 | 0.137 | -7.604 | 0.168 |
| (0.393) | (0.095) + | (0.664) | (0.382) | (0.688) | |
| formGOV | 0.197 | 0.882 | 0.083 | -18.707 | 0.147 |
| (0.182) | (<0.001) *** | (0.582) | (<0.001) *** | (0.329) | |
| formIND | -0.277 | -0.152 | -0.215 | -11.676 | -0.280 |
| (0.003) ** | (0.121) | (0.035) * | (<0.001) *** | (0.010) ** | |
| formNPO | 0.315 | 0.499 | 0.242 | -6.739 | 0.305 |
| (<0.001) *** | (<0.001) *** | (<0.001) *** | (<0.001) *** | (<0.001) *** | |
| service_type_selectedcare home w/o nursing | 0.134 | 0.098 | 0.165 | -5.770 | 0.115 |
| (0.027) * | (0.116) | (0.010) * | (<0.001) *** | (0.103) | |
| service_type_selectedDomicilary Care | 0.504 | -0.589 | 0.604 | 3.380 | 0.584 |
| (<0.001) *** | (<0.001) *** | (<0.001) *** | (0.050) * | (<0.001) *** | |
| service_type_selectedSupported Living | 0.513 | 1.237 | 0.550 | -3.891 | 0.519 |
| (<0.001) *** | (<0.001) *** | (<0.001) *** | (0.194) | (<0.001) *** | |
| during_covidTRUE | -1.787 | -0.111 | -1.760 | 2.134 | -1.738 |
| (<0.001) *** | (0.034) * | (<0.001) *** | (0.098) + | (<0.001) *** | |
| (Intercept) | 1.687 | 33.743 | |||
| (<0.001) *** | (<0.001) *** | ||||
| staff_level0 | 0.059 | ||||
| (<0.001) *** | |||||
| turnover0 | -0.001 | ||||
| (0.174) | |||||
| Num.Obs. | 12521 | 5984 | 11143 | 5087 | 9503 |
| R2 | 0.073 | 0.029 | |||
| R2 Adj. | 0.071 | 0.026 | |||
| AIC | 15037.6 | 24161.1 | 13282.2 | 52275.9 | 11154.4 |
| BIC | 15178.9 | 24281.6 | 13428.6 | 52393.5 | 11297.6 |
| Log.Lik. | -12062.547 | -26119.933 | |||
| RMSE | 2.27 | 1.87 | 2.27 | 39.64 | 2.27 |