read me

This analys use two levels of data, locations and the 6 provider-only organizations.

Setting up the R session and Loading packages

# 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(ordinal) # package for ordinal logit regression
library(brant) # brant test for the parallel assumption for ordered logit
library(MASS) # models that work with the brant test

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

Import the cleaned data

merged <- read_csv("D:/Archive/Socialcare UK/data/combined_spinout.csv")

Prepare the data for ordinal regression

#select relevant columns, rename and relabel 
merged_cleaned <- merged %>% 
  # 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"),
         date = ymd(publication_date)) %>% 
  
  # assign order in the rating levels
  mutate(rating = ordered(rating, levels = c("Inadequate","Req improv", "Good", "Outstanding")),
         form_spinout = case_when(form == "GOV" ~ "GOV",
                           form == "CIC" & spin_out == "TRUE" ~ "SP_CIC",
                           form == "CIC" & spin_out == "FALSE" ~ "NSP_CIC"),
         socialcare = ifelse(type == "Social Care Org", TRUE, FALSE)) %>% 
  
  # creating a new dummy variable for facility category
  mutate(year = year(date),
         during_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)) 
# show first several rows of the data set derived 
head(merged_cleaned)
## # A tibble: 6 × 22
##   project_id provider_name   location_name type  primary_cat form  region domain
##   <chr>      <chr>           <chr>         <chr> <chr>       <chr> <chr>  <chr> 
## 1 location1  Solihull Metro… Bluebell Cen… Soci… Community … GOV   West … Safe  
## 2 location2  Solihull Metro… Bluebell Cen… Soci… Community … GOV   West … Effec…
## 3 location3  Solihull Metro… Bluebell Cen… Soci… Community … GOV   West … Caring
## 4 location4  Solihull Metro… Bluebell Cen… Soci… Community … GOV   West … Respo…
## 5 location5  Solihull Metro… Bluebell Cen… Soci… Community … GOV   West … Well-…
## 6 location6  Solihull Metro… Bluebell Cen… Soci… Community … GOV   West … Overa…
## # ℹ 14 more variables: rating <ord>, publication_date <dttm>,
## #   report_type <chr>, inherited <lgl>, std_name <chr>, level <chr>,
## #   spin_out <lgl>, date <date>, form_spinout <chr>, socialcare <lgl>,
## #   year <dbl>, during_covid <lgl>, before_covid <lgl>, rating_num <dbl>

drop GOV providers in extra primary_cad

cic_cats <- merged_cleaned %>%
  filter(form == "CIC") %>%
  distinct(primary_cat) %>% 
  pull(primary_cat)
merged_short <- merged_cleaned %>% 
  filter(primary_cat %in% cic_cats)
nrow(merged_cleaned)
## [1] 20171
nrow(merged_short)
## [1] 7047

Comparison table on Primary Inspection Category

datasummary(primary_cat ~ form, data = merged_cleaned, fmt = 0)
primary_cat CIC GOV
Acute hospital - NHS non-specialist 0 11948
Acute hospital - NHS specialist 0 944
Ambulance service 0 173
Community based adult social care services 402 2214
Community health - NHS & Independent 199 277
Community substance misuse 12 24
Dentists 0 12
GP Practices 470 492
Hospice services 6 18
Independent consulting doctors 47 0
Mental health - community & hospital - independent 132 0
Mental health - community & residential - NHS 0 47
Out of hours 72 12
Remote clinical advice 18 6
Residential social care 120 2490
Urgent care services & mobile doctors 24 12
datasummary(primary_cat ~ form_spinout, data = merged_cleaned, fmt = 0)
primary_cat GOV NSP_CIC SP_CIC
Acute hospital - NHS non-specialist 11948 0 0
Acute hospital - NHS specialist 944 0 0
Ambulance service 173 0 0
Community based adult social care services 2214 282 120
Community health - NHS & Independent 277 0 199
Community substance misuse 24 0 12
Dentists 12 0 0
GP Practices 492 338 132
Hospice services 18 0 6
Independent consulting doctors 0 47 0
Mental health - community & hospital - independent 0 0 132
Mental health - community & residential - NHS 47 0 0
Out of hours 12 72 0
Remote clinical advice 6 18 0
Residential social care 2490 60 60
Urgent care services & mobile doctors 12 12 12

whole model without control

model_order_overall <- clm(rating ~ form_spinout  + socialcare + region + inherited,
                data = filter(merged_short, domain == "Overall"),
                link = "logit")


model_order_safe <- clm(rating ~ form_spinout  + socialcare + region + inherited,
                data = filter(merged_short, domain == "Safe"),
                link = "logit")
model_order_effective <- clm(rating ~ form_spinout  + socialcare + region + inherited,
                data = filter(merged_short, domain == "Effective"),
                link = "logit")
model_order_caring <- clm(rating ~ form_spinout  + socialcare + region + inherited,
                data = filter(merged_short, domain == "Caring"),
                link = "logit")
model_order_well_led <- clm(rating ~ form_spinout + socialcare + region + inherited,
                data = filter(merged_short, domain == "Well-led"),
                link = "logit")
model_order_responsive <- clm(rating ~ form_spinout + socialcare + region + inherited,
                data = filter(merged_short, 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 -6.659 -5.739 -5.370
(<0.001) *** (<0.001) *** (<0.001) ***
Req improv|Good -2.305 -1.463 -2.332 -3.690 -1.893 -3.083
(<0.001) *** (<0.001) *** (<0.001) *** (<0.001) *** (<0.001) *** (<0.001) ***
Good|Outstanding 2.783 5.173 4.048 3.368 2.789 2.864
(<0.001) *** (<0.001) *** (<0.001) *** (<0.001) *** (<0.001) *** (<0.001) ***
form_spinoutNSP_CIC 0.289 0.364 -0.214 0.623 0.486 0.363
(0.164) (0.283) (0.553) (0.071) + (0.081) + (0.258)
form_spinoutSP_CIC 0.658 0.216 0.433 1.322 0.246 0.554
(0.007) ** (0.546) (0.301) (<0.001) *** (0.420) (0.116)
socialcareTRUE -0.328 0.384 -0.187 -0.253 -0.480 -0.308
(0.037) * (0.103) (0.504) (0.348) (0.020) * (0.212)
inheritedTRUE -0.770 -0.329 -0.656 -0.413 -0.194 -0.609
(<0.001) *** (0.280) (0.058) + (0.326) (0.473) (0.088) +
Num.Obs. 1567 1095 1091 1092 1097 1094
AIC 1765.4 949.6 819.8 753.4 1412.2 948.6
BIC 1845.8 1024.6 889.8 823.4 1487.2 1018.6
RMSE 2.34 2.13 1.19 1.32 2.32 1.34
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.001 0.003 0.005
(<0.001) *** (<0.001) *** (<0.001) ***
Req improv|Good 0.100 0.232 0.097 0.025 0.151 0.046
(<0.001) *** (<0.001) *** (<0.001) *** (<0.001) *** (<0.001) *** (<0.001) ***
Good|Outstanding 16.170 176.373 57.288 29.017 16.260 17.526
(<0.001) *** (<0.001) *** (<0.001) *** (<0.001) *** (<0.001) *** (<0.001) ***
form_spinoutNSP_CIC 1.335 1.440 0.807 1.865 1.626 1.437
(0.164) (0.283) (0.553) (0.071) + (0.081) + (0.258)
form_spinoutSP_CIC 1.931 1.241 1.542 3.750 1.279 1.740
(0.007) ** (0.546) (0.301) (<0.001) *** (0.420) (0.116)
socialcareTRUE 0.721 1.469 0.829 0.776 0.619 0.735
(0.037) * (0.103) (0.504) (0.348) (0.020) * (0.212)
inheritedTRUE 0.463 0.720 0.519 0.662 0.823 0.544
(<0.001) *** (0.280) (0.058) + (0.326) (0.473) (0.088) +
Num.Obs. 1567 1095 1091 1092 1097 1094
AIC 1765.4 949.6 819.8 753.4 1412.2 948.6
BIC 1845.8 1024.6 889.8 823.4 1487.2 1018.6
RMSE 2.34 2.13 1.19 1.32 2.32 1.34

whole model with control

model_order_overall_covid <- clm(rating ~ form_spinout  + during_covid +
                                  socialcare + region + inherited,
                data = filter(merged_short, domain == "Overall"),
                link = "logit")

model_order_safe_covid <- clm(rating ~ form_spinout  + during_covid + socialcare + region + inherited,
                data = filter(merged_short, domain == "Safe"),
                link = "logit")
model_order_effective_covid <- clm(rating ~ form_spinout  + during_covid + socialcare + region + inherited,
                data = filter(merged_short, domain == "Effective"),
                link = "logit")
model_order_caring_covid <- clm(rating ~ form_spinout  + during_covid + socialcare + region + inherited,
                data = filter(merged_short, domain == "Caring"),
                link = "logit")
model_order_well_led_covid <- clm(rating ~ form_spinout + during_covid + socialcare + region + inherited,
                data = filter(merged_short, domain == "Well-led"),
                link = "logit")
model_order_responsive_covid <- clm(rating ~ form_spinout + during_covid + socialcare + region + inherited,
                data = filter(merged_short, domain == "Responsive"),
                link = "logit")
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 -7.316 -5.993 -5.660
(<0.001) *** (<0.001) *** (<0.001) ***
Req improv|Good -2.852 -1.682 -2.461 -3.748 -2.130 -3.180
(<0.001) *** (<0.001) *** (<0.001) *** (<0.001) *** (<0.001) *** (<0.001) ***
Good|Outstanding 2.565 5.105 3.986 3.325 2.688 2.799
(<0.001) *** (<0.001) *** (<0.001) *** (<0.001) *** (<0.001) *** (<0.001) ***
form_spinoutNSP_CIC 0.368 0.547 -0.102 0.660 0.627 0.426
(0.076) + (0.114) (0.778) (0.056) + (0.024) * (0.183)
form_spinoutSP_CIC 0.662 0.158 0.421 1.308 0.239 0.533
(0.008) ** (0.663) (0.313) (<0.001) *** (0.435) (0.130)
during_covidTRUE -1.701 -1.061 -0.727 -0.349 -1.091 -0.525
(<0.001) *** (<0.001) *** (0.005) ** (0.238) (<0.001) *** (0.043) *
socialcareTRUE -0.222 0.463 -0.160 -0.242 -0.429 -0.291
(0.166) (0.053) + (0.568) (0.371) (0.038) * (0.237)
inheritedTRUE -1.031 -0.501 -0.758 -0.460 -0.321 -0.677
(<0.001) *** (0.107) (0.030) * (0.276) (0.243) (0.059) +
Num.Obs. 1567 1095 1091 1092 1097 1094
AIC 1681.5 926.7 814.3 754.0 1380.2 946.4
BIC 1767.3 1006.7 889.2 828.9 1460.2 1021.4
RMSE 2.33 2.12 1.19 1.32 2.32 1.34
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.001 0.002 0.003
(<0.001) *** (<0.001) *** (<0.001) ***
Req improv|Good 0.058 0.186 0.085 0.024 0.119 0.042
(<0.001) *** (<0.001) *** (<0.001) *** (<0.001) *** (<0.001) *** (<0.001) ***
Good|Outstanding 12.994 164.814 53.821 27.793 14.704 16.424
(<0.001) *** (<0.001) *** (<0.001) *** (<0.001) *** (<0.001) *** (<0.001) ***
form_spinoutNSP_CIC 1.444 1.728 0.903 1.934 1.871 1.532
(0.076) + (0.114) (0.778) (0.056) + (0.024) * (0.183)
form_spinoutSP_CIC 1.939 1.171 1.524 3.699 1.270 1.703
(0.008) ** (0.663) (0.313) (<0.001) *** (0.435) (0.130)
during_covidTRUE 0.183 0.346 0.484 0.705 0.336 0.591
(<0.001) *** (<0.001) *** (0.005) ** (0.238) (<0.001) *** (0.043) *
socialcareTRUE 0.801 1.588 0.852 0.785 0.651 0.747
(0.166) (0.053) + (0.568) (0.371) (0.038) * (0.237)
inheritedTRUE 0.357 0.606 0.468 0.631 0.725 0.508
(<0.001) *** (0.107) (0.030) * (0.276) (0.243) (0.059) +
Num.Obs. 1567 1095 1091 1092 1097 1094
AIC 1681.5 926.7 814.3 754.0 1380.2 946.4
BIC 1767.3 1006.7 889.2 828.9 1460.2 1021.4
RMSE 2.33 2.12 1.19 1.32 2.32 1.34

Below is additional analysis added 8/16/2023

Additional Analysis for Covid - The CIC subgroup regression, with short/comparable data

model_cic_overall_covid <- clm(rating ~ during_covid,
                data = filter(merged_short, domain == "Overall" & form == "CIC"),
                link = "logit")

model_cic_safe_covid <- clm(rating ~ during_covid,
                data = filter(merged_short, domain == "Safe" & form == "CIC"),
                link = "logit")
model_cic_effective_covid <- clm(rating ~ during_covid,
                data = filter(merged_short, domain == "Effective" & form == "CIC"),
                link = "logit")
model_cic_caring_covid <- clm(rating ~ during_covid,
                data = filter(merged_short, domain == "Caring" & form == "CIC"),
                link = "logit")
model_cic_well_led_covid <- clm(rating ~ during_covid,
                data = filter(merged_short, domain == "Well-led" & form == "CIC"),
                link = "logit")
model_cic_responsive_covid <- clm(rating ~ during_covid,
                data = filter(merged_short, domain == "Responsive" & form == "CIC"),
                link = "logit")
cic_models_covid <-
  modelsummary(
    list(
      "overall" = model_cic_overall_covid,
      "safe" = model_cic_safe_covid,
      "effective" = model_cic_effective_covid,
      "caring" = model_cic_caring_covid,
      "well-led" = model_cic_well_led_covid,
      "responsive" = model_cic_responsive_covid
    ),
    coef_omit = "region",
    exponentiate = F,
    statistic = "({p.value}) {stars}"
  )
cic_models_covid
overall safe effective caring well-led responsive
Inadequate|Req improv -6.639 -5.142 -5.032
(<0.001) *** (<0.001) *** (<0.001) ***
Req improv|Good -3.223 -2.350 -2.962 -4.228 -2.311 -4.043
(<0.001) *** (<0.001) *** (<0.001) *** (<0.001) *** (<0.001) *** (<0.001) ***
Good|Outstanding 1.415 3.197 2.540 1.479 1.631 1.702
(<0.001) *** (<0.001) *** (<0.001) *** (<0.001) *** (<0.001) *** (<0.001) ***
during_covidTRUE -2.913 -1.347 -1.523 -0.938 -1.101 -1.984
(<0.001) *** (0.001) ** (0.002) ** (0.073) + (0.004) ** (0.001) **
Num.Obs. 433 213 213 213 214 213
AIC 596.9 233.7 210.1 230.9 336.9 220.6
BIC 613.2 247.2 220.1 241.0 350.3 230.7
RMSE 2.54 2.20 1.30 1.57 2.50 1.48

Additional Analysis for Covid - The CIC subgroup regression, with altogether data

model_cic_overall_covid2 <- clm(rating ~ during_covid,
                data = filter(merged_cleaned, domain == "Overall" & form == "CIC"),
                link = "logit")

model_cic_safe_covid2 <- clm(rating ~ during_covid,
                data = filter(merged_cleaned, domain == "Safe" & form == "CIC"),
                link = "logit")
model_cic_effective_covid2 <- clm(rating ~ during_covid,
                data = filter(merged_cleaned, domain == "Effective" & form == "CIC"),
                link = "logit")
model_cic_caring_covid2 <- clm(rating ~ during_covid,
                data = filter(merged_cleaned, domain == "Caring" & form == "CIC"),
                link = "logit")
model_cic_well_led_covid2 <- clm(rating ~ during_covid,
                data = filter(merged_cleaned, domain == "Well-led" & form == "CIC"),
                link = "logit")
model_cic_responsive_covid2 <- clm(rating ~ during_covid,
                data = filter(merged_cleaned, domain == "Responsive" & form == "CIC"),
                link = "logit")
cic_models_covid2 <-
  modelsummary(
    list(
      "overall" = model_cic_overall_covid2,
      "safe" = model_cic_safe_covid2,
      "effective" = model_cic_effective_covid2,
      "caring" = model_cic_caring_covid2,
      "well-led" = model_cic_well_led_covid2,
      "responsive" = model_cic_responsive_covid2
    ),
    coef_omit = "region",
    exponentiate = F,
    statistic = "({p.value}) {stars}"
  )
cic_models_covid2
overall safe effective caring well-led responsive
Inadequate|Req improv -6.639 -5.142 -5.032
(<0.001) *** (<0.001) *** (<0.001) ***
Req improv|Good -3.223 -2.350 -2.962 -4.228 -2.311 -4.043
(<0.001) *** (<0.001) *** (<0.001) *** (<0.001) *** (<0.001) *** (<0.001) ***
Good|Outstanding 1.415 3.197 2.540 1.479 1.631 1.702
(<0.001) *** (<0.001) *** (<0.001) *** (<0.001) *** (<0.001) *** (<0.001) ***
during_covidTRUE -2.913 -1.347 -1.523 -0.938 -1.101 -1.984
(<0.001) *** (0.001) ** (0.002) ** (0.073) + (0.004) ** (0.001) **
Num.Obs. 433 213 213 213 214 213
AIC 596.9 233.7 210.1 230.9 336.9 220.6
BIC 613.2 247.2 220.1 241.0 350.3 230.7
RMSE 2.54 2.20 1.30 1.57 2.50 1.48

Additional Analysis for Covid - The Gov subgroup regression , with short/comparable data

model_gov_overall_covid <- clm(rating ~ during_covid,
                data = filter(merged_short, domain == "Overall" & form == "GOV"),
                link = "logit")

model_gov_safe_covid <- clm(rating ~ during_covid,
                data = filter(merged_short, domain == "Safe" & form == "GOV"),
                link = "logit")
model_gov_effective_covid <- clm(rating ~ during_covid,
                data = filter(merged_short, domain == "Effective" & form == "GOV"),
                link = "logit")
model_gov_caring_covid <- clm(rating ~ during_covid,
                data = filter(merged_short, domain == "Caring" & form == "GOV"),
                link = "logit")
model_gov_well_led_covid <- clm(rating ~ during_covid,
                data = filter(merged_short, domain == "Well-led" & form == "GOV"),
                link = "logit")
model_gov_responsive_covid <- clm(rating ~ during_covid,
                data = filter(merged_short, domain == "Responsive" & form == "GOV"),
                link = "logit")
gov_models_covid <-
  modelsummary(
    list(
      "overall" = model_gov_overall_covid,
      "safe" = model_gov_safe_covid,
      "effective" = model_gov_effective_covid,
      "caring" = model_gov_caring_covid,
      "well-led" = model_gov_well_led_covid,
      "responsive" = model_gov_responsive_covid
    ),
    coef_omit = "region",
    exponentiate = F,
    statistic = "({p.value}) {stars}"
  )
gov_models_covid
overall safe effective caring well-led responsive
Req improv|Good -2.688 -2.279 -2.811 -4.067 -2.175 -3.220
(<0.001) *** (<0.001) *** (<0.001) *** (<0.001) *** (<0.001) *** (<0.001) ***
Good|Outstanding 2.782 5.047 3.658 2.817 2.699 2.611
(<0.001) *** (<0.001) *** (<0.001) *** (<0.001) *** (<0.001) *** (<0.001) ***
during_covidTRUE -1.166 -0.828 -0.343 -0.080 -1.017 -0.029
(<0.001) *** (<0.001) *** (0.269) (0.820) (<0.001) *** (0.920)
Inadequate|Req improv -5.982
(<0.001) ***
Num.Obs. 1134 882 878 879 883 881
AIC 1081.8 673.9 600.8 534.2 1052.8 727.3
BIC 1096.9 688.2 615.1 548.6 1072.0 741.7
RMSE 1.27 1.11 1.16 1.25 2.28 1.31

Additional Analysis for Covid - The Gov subgroup regression , with altogether data

model_gov_overall_covid2 <- clm(rating ~ during_covid,
                data = filter(merged_cleaned, domain == "Overall" & form == "GOV"),
                link = "logit")

model_gov_safe_covid2 <- clm(rating ~ during_covid,
                data = filter(merged_cleaned, domain == "Safe" & form == "GOV"),
                link = "logit")
model_gov_effective_covid2 <- clm(rating ~ during_covid,
                data = filter(merged_cleaned, domain == "Effective" & form == "GOV"),
                link = "logit")
model_gov_caring_covid2 <- clm(rating ~ during_covid,
                data = filter(merged_cleaned, domain == "Caring" & form == "GOV"),
                link = "logit")
model_gov_well_led_covid2 <- clm(rating ~ during_covid,
                data = filter(merged_cleaned, domain == "Well-led" & form == "GOV"),
                link = "logit")
model_gov_responsive_covid2 <- clm(rating ~ during_covid,
                data = filter(merged_cleaned, domain == "Responsive" & form == "GOV"),
                link = "logit")
gov_models_covid2 <-
  modelsummary(
    list(
      "overall" = model_gov_overall_covid2,
      "safe" = model_gov_safe_covid2,
      "effective" = model_gov_effective_covid2,
      "caring" = model_gov_caring_covid2,
      "well-led" = model_gov_well_led_covid2,
      "responsive" = model_gov_responsive_covid2
    ),
    coef_omit = "region",
    exponentiate = F,
    statistic = "({p.value}) {stars}"
  )
gov_models_covid2
overall safe effective caring well-led responsive
Inadequate|Req improv -4.534 -4.101 -5.032 -7.507 -4.253 -4.871
(<0.001) *** (<0.001) *** (<0.001) *** (<0.001) *** (<0.001) *** (<0.001) ***
Req improv|Good -1.645 -1.128 -2.009 -4.229 -1.609 -1.573
(<0.001) *** (<0.001) *** (<0.001) *** (<0.001) *** (<0.001) *** (<0.001) ***
Good|Outstanding 2.319 4.736 2.928 1.920 2.274 2.405
(<0.001) *** (<0.001) *** (<0.001) *** (<0.001) *** (<0.001) *** (<0.001) ***
during_covidTRUE -1.266 -1.183 -0.813 -0.713 -1.149 -0.737
(<0.001) *** (<0.001) *** (<0.001) *** (<0.001) *** (<0.001) *** (<0.001) ***
Num.Obs. 3373 3089 2747 3069 3087 3076
AIC 5358.3 4370.9 3330.9 2731.8 5051.1 4755.8
BIC 5382.8 4395.0 3354.6 2755.9 5075.3 4779.9
RMSE 2.35 2.14 2.25 2.40 2.36 2.35

Additional analysis with form vs. COVID with cross-tab, with short/comparable data

datasummary_crosstab(form_spinout * during_covid ~ rating, data = merged_short)
form_spinout during_covid Inadequate Req improv Good Outstanding All
GOV FALSE N 0 256 4072 190 4526
% row 0.0 5.7 90.0 4.2 100.0
TRUE N 3 151 813 52 1019
% row 0.3 14.8 79.8 5.1 100.0
NSP_CIC FALSE N 0 27 498 88 614
% row 0.0 4.4 81.1 14.3 100.0
TRUE N 3 43 158 11 215
% row 1.4 20.0 73.5 5.1 100.0
SP_CIC FALSE N 0 28 476 85 591
% row 0.0 4.7 80.5 14.4 100.0
TRUE N 3 19 59 1 82
% row 3.7 23.2 72.0 1.2 100.0
All N 9 524 6076 427 7047
% row 0.1 7.4 86.2 6.1 100.0

Additional analysis with form vs. COVID with cross-tab, with altogether data

datasummary_crosstab(form_spinout * during_covid ~ rating, data = merged_cleaned)
form_spinout during_covid Inadequate Req improv Good Outstanding All
GOV FALSE N 58 2083 11600 1085 15033
% row 0.4 13.9 77.2 7.2 100.0
TRUE N 180 988 2283 164 3636
% row 5.0 27.2 62.8 4.5 100.0
NSP_CIC FALSE N 0 27 498 88 614
% row 0.0 4.4 81.1 14.3 100.0
TRUE N 3 43 158 11 215
% row 1.4 20.0 73.5 5.1 100.0
SP_CIC FALSE N 0 28 476 85 591
% row 0.0 4.7 80.5 14.4 100.0
TRUE N 3 19 59 1 82
% row 3.7 23.2 72.0 1.2 100.0
All N 244 3188 15074 1434 20171
% row 1.2 15.8 74.7 7.1 100.0

The cross-tab shows that before COVID, CICs preform better, but during COVID, GOVs perform better.