Read Me

This is the data analysis RMarkdown file for the QCQ data in preparation for ISIRC 2022. Please read the subtitles and notes added as normal text in this document. Blocks with darker backgrounds are code chunks, mostly with their outputs. I tried to add #comments within the chunck just before the code line to explain the purpose of the code line. Meanwhile I explain the purpose of the section in the texts, so that is where to find information to give you fuller pictures.

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

This chunk loads all the packages to use

library(tidyverse) # package for data cleaning and plotting
library(ordinal) # package for ordinal logit regression
library(MetBrewer) # package for nice color scale
library(modelsummary) # package for derive the model comparison tables
library(kableExtra) # model for saving outputs as tabkes 
library(brant) # brant test for the parallel assumption for ordered logit
library(MASS) # models that work with the brant test

Data Preparation

First, import the sampled and coded data set

#import the raw data file
socialcare_raw <- read_csv("data/sample_new_cleaned.csv")

Assign orders to the ordinal level variables and name the organizational form in a reader-friendly way.

#select relevant columns, rename and relabel 
socialcare <- socialcare_raw %>% 
# recode legal form types to be more readable / easier to present
  mutate(location_id = factor(location_id),
         form = case_when(form_num == 1 ~ "FPO",
                          form_num == 2 ~ "NPO",
                          form_num == 3 ~ "GOV",
                          form_num == 4 ~ "CIC",
                          form_num == 5 ~ "IND",
                          TRUE ~ NA_character_),
         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"))) 

# show first several rows of the data set derived 
head(socialcare)
## # A tibble: 6 × 34
##    ...1 locati…¹ Locat…² Locat…³ Care …⁴ prima…⁵ Locat…⁶ Locat…⁷ Locat…⁸ Locat…⁹
##   <dbl> <fct>    <chr>   <chr>   <chr>   <chr>   <chr>   <chr>   <chr>   <chr>  
## 1     1 1-10000… VNH4P   69 Ten… N       Commun… 69 Ten… Warmsw… Doncas… DN4 9PE
## 2     2 1-10000… VNH4P   69 Ten… N       Commun… 69 Ten… Warmsw… Doncas… DN4 9PE
## 3     3 1-10000… VNH4P   69 Ten… N       Commun… 69 Ten… Warmsw… Doncas… DN4 9PE
## 4     4 1-10000… VNH4P   69 Ten… N       Commun… 69 Ten… Warmsw… Doncas… DN4 9PE
## 5     5 1-10000… VNH4P   69 Ten… N       Commun… 69 Ten… Warmsw… Doncas… DN4 9PE
## 6     6 1-10000… VNH4P   69 Ten… N       Commun… 69 Ten… Warmsw… Doncas… DN4 9PE
## # … with 24 more variables: `Location Local Authority` <chr>, region <chr>,
## #   `Location NHS Region` <chr>, `Location ONSPD CCG Code` <chr>,
## #   `Location ONSPD CCG` <chr>, `Location Commissioning CCG Code` <lgl>,
## #   `Location Commissioning CCG Name` <lgl>,
## #   `Service / Population Group` <chr>, domain <chr>, rating <ord>,
## #   publication_date <chr>, `Report Type` <chr>, inherited <lgl>, URL <chr>,
## #   `Provider ID` <chr>, location_type <chr>, form_num <dbl>, …

The chunk below groups data by location, and check the distribution of different forms for all locations

location_count <-socialcare %>% 
  group_by(location_id) %>% 
  summarise(locatoion_id = first(location_id),
            form_num = first(form_num),
            form = first(form)) %>% 
  count(form_num, form)

The chunk below groups data by organization and check the distribution of different forms for all organizations

provider_count <-socialcare %>% 
  group_by(provider_name) %>% 
  summarise(provider_name = first(provider_name),
            form_num = first(form_num),
            form = first(form)) %>% 
  count(form_num, form)

The chunk below checks that the nomial variable for legal form corresponds to the numerical form, and those coded with form_num of “6” and “8” will be NA in the variable form

socialcare %>% 
  count(form_num, form)
## # A tibble: 8 × 3
##   form_num form      n
##      <dbl> <ord> <int>
## 1        1 FPO   64187
## 2        2 NPO   12399
## 3        3 GOV    2431
## 4        4 CIC     504
## 5        5 IND    5153
## 6        6 <NA>      6
## 7        8 <NA>      1
## 8       NA <NA>     30

I check here the region and primary_cat variables, since the total number of categories are not too large, I decide to first include region in the model. But the primary_cat’s distribution is actually two main categories – community based and residential (divided by 6 rating domains, there are only 1 or 2 facilities in other categories).I will only keep the data for these two categories.

The distribution of these variables will also be added to the slide for introducing control variables.

table(socialcare$region) %>% 
  kable()
Var1 Freq
East Midlands 8132
East of England 9378
London 9141
North East 3654
North West 10619
South East 15609
South West 10460
West Midlands 9660
Yorkshire and The Humber 8058
table(socialcare$primary_cat) %>% 
  kable()
Var1 Freq
Community based adult social care services 28201
Community health - NHS & Independent 6
Community substance misuse 12
Mental health - community & hospital - independent 12
Residential social care 56480
# creating a new dummy variable for facility category
socialcare <- socialcare %>% 
  mutate(category = case_when(primary_cat == "Community based adult social care services" ~ "community",
                              primary_cat == "Residential social care" ~ "residential",
                              TRUE ~ as.character(NA)))
table(socialcare$category) %>% 
  kable()
Var1 Freq
community 28201
residential 56480
table(socialcare$inherited) %>% 
  kable()
Var1 Freq
FALSE 79873
TRUE 4838

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.
# converting the ordinal variable to numerical 
socialcare_num <- socialcare %>% 
  mutate(rating_num = case_when(rating == "Inadequate" ~ 1,
                                rating == "Req improv" ~ 2,
                                rating == "Good" ~ 3,
                                rating == "Outstanding" ~ 4))

OLS with the sub-domain ratings one by one

# run the ols model with control on different domains
model_ols_overall <- lm(rating_num ~ form + category + region + inherited,
                data = filter(socialcare_num, domain == "Overall"))

model_ols_safe <- lm(rating_num ~ form + category + region + inherited,
                data = filter(socialcare_num, domain == "Safe"))

model_ols_effective <- lm(rating_num ~ form + category + region + inherited,
                data = filter(socialcare_num, domain == "Effective"))

model_ols_caring <- lm(rating_num ~ form + category + region + inherited,
                data = filter(socialcare_num, domain == "Caring"))

model_ols_well_led <- lm(rating_num ~ form + category + region + inherited,
                data = filter(socialcare_num, domain == "Well-led"))

model_ols_responsive <- lm(rating_num ~ form + category + region + inherited,
                data = filter(socialcare_num, domain == "Responsive"))

camparing models

models_ols <- modelsummary(list("overall" = model_ols_overall, "safe" = model_ols_safe, 
                  "effective" = model_ols_effective, "caring"= model_ols_caring, 
                  "well-led" = model_ols_well_led, "responsive" = model_ols_responsive),
             statistic = "({p.value}) {stars}")
models_ols
overall safe effective caring well-led responsive
(Intercept) 2.873*** 2.789*** 2.892*** 3.016*** 2.814*** 2.961***
(0.000) *** (0.000) *** (0.000) *** (0.000) *** (0.000) *** (0.000) ***
formNPO 0.082*** 0.082*** 0.040*** 0.027*** 0.100*** 0.064***
(0.000) *** (0.000) *** (0.000) *** (0.000) *** (0.000) *** (0.000) ***
formGOV 0.081*** 0.097*** 0.039* 0.029+ 0.097*** 0.053**
(0.001) *** (0.000) *** (0.023) * (0.061) + (0.000) *** (0.006) **
formCIC 0.104* 0.100* 0.019 0.079* 0.109+ 0.039
(0.043) * (0.030) * (0.604) (0.014) * (0.055) + (0.339)
formIND −0.036* −0.019 −0.033** −0.004 −0.040* −0.007
(0.035) * (0.214) (0.007) ** (0.712) (0.033) * (0.621)
categoryresidential −0.070*** −0.064*** −0.037*** −0.047*** −0.067*** −0.030***
(0.000) *** (0.000) *** (0.000) *** (0.000) *** (0.000) *** (0.000) ***
regionEast of England 0.043* 0.047** 0.041** 0.015 0.030 0.035*
(0.017) * (0.004) ** (0.002) ** (0.189) (0.132) (0.016) *
regionLondon 0.019 0.048** 0.054*** 0.003 0.025 −0.003
(0.308) (0.004) ** (0.000) *** (0.807) (0.206) (0.820)
regionNorth East 0.133*** 0.123*** 0.095*** 0.069*** 0.155*** 0.082***
(0.000) *** (0.000) *** (0.000) *** (0.000) *** (0.000) *** (0.000) ***
regionNorth West 0.052** 0.067*** 0.064*** 0.022* 0.052** 0.040**
(0.003) ** (0.000) *** (0.000) *** (0.050) * (0.007) ** (0.004) **
regionSouth East 0.062*** 0.098*** 0.049*** 0.040*** 0.057** 0.051***
(0.000) *** (0.000) *** (0.000) *** (0.000) *** (0.002) ** (0.000) ***
regionSouth West 0.142*** 0.124*** 0.094*** 0.085*** 0.144*** 0.091***
(0.000) *** (0.000) *** (0.000) *** (0.000) *** (0.000) *** (0.000) ***
regionWest Midlands −0.030+ 0.019 0.020 −0.015 −0.075*** 0.000
(0.092) + (0.233) (0.114) (0.173) (0.000) *** (0.982)
regionYorkshire and The Humber −0.025 −0.012 0.031* 0.036** −0.033 0.008
(0.186) (0.467) (0.020) * (0.002) ** (0.115) (0.576)
inheritedTRUE −0.020 −0.018 −0.032** −0.032** −0.018 −0.032*
(0.260) (0.248) (0.008) ** (0.003) ** (0.346) (0.020) *
Num.Obs. 12942 12966 12931 12927 12964 12953
R2 0.023 0.023 0.013 0.017 0.025 0.013
R2 Adj. 0.022 0.021 0.012 0.016 0.024 0.012
AIC 16998.2 14402.5 8181.6 5099.3 19530.8 11037.1
BIC 17117.7 14522.0 8301.1 5218.8 19650.3 11156.6
Log.Lik. −8483.091 −7185.242 −4074.798 −2533.650 −9749.405 −5502.563
RMSE 0.47 0.42 0.33 0.29 0.51 0.37

Running ordered logit models

I find this reference regarding understanding ordered logit models useful. https://stats.oarc.ucla.edu/r/dae/ordinal-logistic-regression/

# derive output table
model_order_overall <- clm(rating ~ form + category + region + inherited,
                data = filter(socialcare, domain == "Overall"),
                link = "logit")
summary(model_order_overall)
## formula: rating ~ form + category + region + inherited
## data:    filter(socialcare, domain == "Overall")
## 
##  link  threshold nobs  logLik   AIC      niter max.grad cond.H 
##  logit flexible  12942 -8287.40 16608.79 7(0)  3.57e-08 2.6e+02
## 
## Coefficients:
##                                Estimate Std. Error z value Pr(>|z|)    
## formNPO                         0.45717    0.06438   7.101 1.24e-12 ***
## formGOV                         0.42904    0.13436   3.193 0.001407 ** 
## formCIC                         0.58629    0.29244   2.005 0.044981 *  
## formIND                        -0.18331    0.08752  -2.095 0.036207 *  
## categoryresidential            -0.38747    0.04824  -8.032 9.58e-16 ***
## regionEast of England           0.24520    0.09601   2.554 0.010656 *  
## regionLondon                    0.10356    0.09573   1.082 0.279353    
## regionNorth East                0.76090    0.13380   5.687 1.30e-08 ***
## regionNorth West                0.29293    0.09374   3.125 0.001779 ** 
## regionSouth East                0.32171    0.08625   3.730 0.000191 ***
## regionSouth West                0.83636    0.09756   8.573  < 2e-16 ***
## regionWest Midlands            -0.15592    0.09189  -1.697 0.089747 .  
## regionYorkshire and The Humber -0.12130    0.09631  -1.260 0.207843    
## inheritedTRUE                  -0.10766    0.09132  -1.179 0.238431    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Threshold coefficients:
##                       Estimate Std. Error z value
## Inadequate|Req improv -4.44907    0.11032  -40.33
## Req improv|Good       -1.70234    0.07845  -21.70
## Good|Outstanding       3.14414    0.08622   36.47
## (1176 observations deleted due to missingness)

I will ran the models but only show the results in the comparing table

# run the ordered logit model with control
model_order_safe <- clm(rating ~ form + category + region + inherited,
                data = filter(socialcare, domain == "Safe"),
                link = "logit")
model_order_effective <- clm(rating ~ form + category + region + inherited,
                data = filter(socialcare, domain == "Effective"),
                link = "logit")
model_order_caring <- clm(rating ~ form + category + region + inherited,
                data = filter(socialcare, domain == "Caring"),
                link = "logit")
model_order_well_led <- clm(rating ~ form + category + region + inherited,
                data = filter(socialcare, domain == "Well-led"),
                link = "logit")
model_order_responsive <- clm(rating ~ form + category + region + inherited,
                data = filter(socialcare, domain == "Responsive"),
                link = "logit")

Brant test

The Brant test tests whether the parallel regression assumption (proportional odds assumption) holds. I searched resources explaining this like https://medium.com/evangelinelee/brant-test-for-proportional-odds-in-r-b0b373a93aa2. My own more natal language understanding is that, the models uses the same coefficients (log-odds) for IVs, e.g. NPO, CIC, to estimate their effects on the odds of above Outstanding vs. Good | Good vs. Require improvement | Require improvement vs. Inadequate. In other words, there are three comparison pairs here, that is three logit regression combined together, yet the methods force each logit have the same slope/coefs for each IV. The benefits of doing this is increasing power and have smaller standard errors.

The polr from the {MASS} package is used because it works with the brant() function. But I used clm() function from the {ordinal} package to run the models, because that one gives you the standard errors and p-values. The good thing is, as is shown, using results from the two models are the same (expect for small rounding differences).

We gladly see that all the tests say the parallel regression assumption holds, I think the warning of ~400 missing combinations is negligiable because our number of observations is 84,711. The missing points should be due to some locations don’t have ratings for all domains.

Below I print out all the models and test results out just to share how these tests go. But they are quite repetitive, so feel free to scroll down to the model summary tables.

model_order_overall_mass <- polr(rating ~ form + category + region + inherited,
                data = filter(socialcare, domain == "Overall"),
                Hess = TRUE)
summary(model_order_overall_mass)
## Call:
## polr(formula = rating ~ form + category + region + inherited, 
##     data = filter(socialcare, domain == "Overall"), Hess = TRUE)
## 
## Coefficients:
##                                  Value Std. Error t value
## formNPO                         0.4571    0.06438   7.100
## formGOV                         0.4288    0.13436   3.191
## formCIC                         0.5862    0.29244   2.005
## formIND                        -0.1835    0.08751  -2.097
## categoryresidential            -0.3875    0.04824  -8.032
## regionEast of England           0.2451    0.09602   2.553
## regionLondon                    0.1035    0.09574   1.081
## regionNorth East                0.7608    0.13381   5.686
## regionNorth West                0.2929    0.09374   3.124
## regionSouth East                0.3217    0.08625   3.729
## regionSouth West                0.8363    0.09756   8.572
## regionWest Midlands            -0.1560    0.09190  -1.697
## regionYorkshire and The Humber -0.1213    0.09631  -1.260
## inheritedTRUE                  -0.1078    0.09132  -1.181
## 
## Intercepts:
##                       Value    Std. Error t value 
## Inadequate|Req improv  -4.4492   0.1103   -40.3297
## Req improv|Good        -1.7025   0.0785   -21.7009
## Good|Outstanding        3.1441   0.0862    36.4649
## 
## Residual Deviance: 16574.79 
## AIC: 16608.79 
## (1176 observations deleted due to missingness)
brant(model_order_overall_mass)
## -------------------------------------------------------------------- 
## Test for             X2  df  probability 
## -------------------------------------------------------------------- 
## Omnibus                  77.75   28  0
## formNPO                  16.57   2   0
## formGOV                  2.66    2   0.26
## formCIC                  0.27    2   0.87
## formIND                  4.86    2   0.09
## categoryresidential          9.92    2   0.01
## regionEast of England            1.41    2   0.49
## regionLondon             22.44   2   0
## regionNorth East         5.03    2   0.08
## regionNorth West         12.75   2   0
## regionSouth East         16.44   2   0
## regionSouth West         8.61    2   0.01
## regionWest Midlands          9.56    2   0.01
## regionYorkshire and The Humber   6.78    2   0.03
## inheritedTRUE                1.79    2   0.41
## -------------------------------------------------------------------- 
## 
## H0: Parallel Regression Assumption holds
## Warning in brant(model_order_overall_mass): 364 combinations in table(dv,ivs) do
## not occur. Because of that, the test results might be invalid.
model_order_safe_mass <- polr(rating ~ form + category + region + inherited,
                data = filter(socialcare, domain == "Safe"),
                Hess = TRUE)
summary(model_order_safe_mass)
## Call:
## polr(formula = rating ~ form + category + region + inherited, 
##     data = filter(socialcare, domain == "Safe"), Hess = TRUE)
## 
## Coefficients:
##                                   Value Std. Error t value
## formNPO                         0.57955    0.07460  7.7683
## formGOV                         0.68506    0.16623  4.1212
## formCIC                         0.79650    0.38820  2.0518
## formIND                        -0.11706    0.09062 -1.2917
## categoryresidential            -0.42317    0.05241 -8.0737
## regionEast of England           0.27416    0.09604  2.8545
## regionLondon                    0.25956    0.09760  2.6593
## regionNorth East                0.82783    0.14949  5.5377
## regionNorth West                0.42044    0.09581  4.3880
## regionSouth East                0.59711    0.08920  6.6943
## regionSouth West                0.84112    0.10341  8.1339
## regionWest Midlands             0.10125    0.09313  1.0872
## regionYorkshire and The Humber -0.06824    0.09532 -0.7159
## inheritedTRUE                  -0.14001    0.09634 -1.4533
## 
## Intercepts:
##                       Value    Std. Error t value 
## Inadequate|Req improv  -4.2534   0.1083   -39.2888
## Req improv|Good        -1.4443   0.0785   -18.4062
## Good|Outstanding        5.8556   0.1627    35.9944
## 
## Residual Deviance: 13406.48 
## AIC: 13440.48 
## (1153 observations deleted due to missingness)
brant(model_order_safe_mass)
## -------------------------------------------------------------------- 
## Test for             X2  df  probability 
## -------------------------------------------------------------------- 
## Omnibus                  35.6    28  0.15
## formNPO                  2.31    2   0.32
## formGOV                  0   2   1
## formCIC                  1.86    2   0.39
## formIND                  0.37    2   0.83
## categoryresidential          0.85    2   0.65
## regionEast of England            4.99    2   0.08
## regionLondon             7.99    2   0.02
## regionNorth East         5.64    2   0.06
## regionNorth West         8.07    2   0.02
## regionSouth East         8.32    2   0.02
## regionSouth West         9.21    2   0.01
## regionWest Midlands          7.01    2   0.03
## regionYorkshire and The Humber   4.04    2   0.13
## inheritedTRUE                1.38    2   0.5
## -------------------------------------------------------------------- 
## 
## H0: Parallel Regression Assumption holds
## Warning in brant(model_order_safe_mass): 418 combinations in table(dv,ivs) do
## not occur. Because of that, the test results might be invalid.
model_order_effective_mass <- polr(rating ~ form + category + region + inherited,
                data = filter(socialcare, domain == "Effective"),
                Hess = TRUE)
summary(model_order_effective_mass)
## Call:
## polr(formula = rating ~ form + category + region + inherited, 
##     data = filter(socialcare, domain == "Effective"), Hess = TRUE)
## 
## Coefficients:
##                                  Value Std. Error t value
## formNPO                         0.4132    0.08547  4.8346
## formGOV                         0.3966    0.18109  2.1898
## formCIC                         0.1878    0.38125  0.4926
## formIND                        -0.2747    0.10739 -2.5575
## categoryresidential            -0.3740    0.06289 -5.9464
## regionEast of England           0.3505    0.11561  3.0316
## regionLondon                    0.4824    0.12028  4.0105
## regionNorth East                0.9481    0.17414  5.4446
## regionNorth West                0.5825    0.11664  4.9937
## regionSouth East                0.4160    0.10362  4.0147
## regionSouth West                0.9320    0.12227  7.6221
## regionWest Midlands             0.1683    0.11139  1.5107
## regionYorkshire and The Humber  0.2809    0.11955  2.3499
## inheritedTRUE                  -0.2884    0.11119 -2.5937
## 
## Intercepts:
##                       Value    Std. Error t value 
## Inadequate|Req improv  -5.9316   0.2061   -28.7806
## Req improv|Good        -2.0790   0.0942   -22.0816
## Good|Outstanding        4.3955   0.1151    38.1915
## 
## Residual Deviance: 10331.18 
## AIC: 10365.18 
## (1187 observations deleted due to missingness)
brant(model_order_effective_mass)
## -------------------------------------------------------------------- 
## Test for             X2  df  probability 
## -------------------------------------------------------------------- 
## Omnibus                  42.67   28  0.04
## formNPO                  4.84    2   0.09
## formGOV                  0.44    2   0.8
## formCIC                  0.08    2   0.96
## formIND                  4.44    2   0.11
## categoryresidential          8.61    2   0.01
## regionEast of England            3.61    2   0.16
## regionLondon             7.03    2   0.03
## regionNorth East         1.06    2   0.59
## regionNorth West         0   2   1
## regionSouth East         0.65    2   0.72
## regionSouth West         2.53    2   0.28
## regionWest Midlands          6.36    2   0.04
## regionYorkshire and The Humber   2.16    2   0.34
## inheritedTRUE                0.59    2   0.75
## -------------------------------------------------------------------- 
## 
## H0: Parallel Regression Assumption holds
## Warning in brant(model_order_effective_mass): 418 combinations in table(dv,ivs)
## do not occur. Because of that, the test results might be invalid.
model_order_caring_mass <- polr(rating ~ form + category + region + inherited,
                data = filter(socialcare, domain == "Caring"),
                Hess = TRUE)
summary(model_order_caring_mass)
## Call:
## polr(formula = rating ~ form + category + region + inherited, 
##     data = filter(socialcare, domain == "Caring"), Hess = TRUE)
## 
## Coefficients:
##                                   Value Std. Error t value
## formNPO                         0.31621    0.08701  3.6343
## formGOV                         0.32815    0.17877  1.8356
## formCIC                         0.81934    0.32841  2.4949
## formIND                        -0.04976    0.13362 -0.3724
## categoryresidential            -0.57419    0.06834 -8.4013
## regionEast of England           0.20752    0.14329  1.4482
## regionLondon                    0.03723    0.14475  0.2572
## regionNorth East                0.86390    0.17957  4.8110
## regionNorth West                0.28595    0.13982  2.0451
## regionSouth East                0.50497    0.12898  3.9150
## regionSouth West                1.03022    0.13580  7.5865
## regionWest Midlands            -0.20455    0.14079 -1.4529
## regionYorkshire and The Humber  0.45029    0.14794  3.0437
## inheritedTRUE                  -0.39689    0.13252 -2.9949
## 
## Intercepts:
##                       Value    Std. Error t value 
## Inadequate|Req improv  -7.0940   0.3098   -22.8992
## Req improv|Good        -3.4307   0.1218   -28.1595
## Good|Outstanding        3.0235   0.1192    25.3586
## 
## Residual Deviance: 8935.047 
## AIC: 8969.047 
## (1190 observations deleted due to missingness)
brant(model_order_caring_mass)
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## -------------------------------------------------------------------- 
## Test for             X2  df  probability 
## -------------------------------------------------------------------- 
## Omnibus                  63.07   28  0
## formNPO                  11.8    2   0
## formGOV                  3.4 2   0.18
## formCIC                  1.03    2   0.6
## formIND                  5.31    2   0.07
## categoryresidential          13.3    2   0
## regionEast of England            0.26    2   0.88
## regionLondon             12.8    2   0
## regionNorth East         2.11    2   0.35
## regionNorth West         4.55    2   0.1
## regionSouth East         5.37    2   0.07
## regionSouth West         0.4 2   0.82
## regionWest Midlands          0.99    2   0.61
## regionYorkshire and The Humber   8.44    2   0.01
## inheritedTRUE                0.07    2   0.97
## -------------------------------------------------------------------- 
## 
## H0: Parallel Regression Assumption holds
## Warning in brant(model_order_caring_mass): 424 combinations in table(dv,ivs) do
## not occur. Because of that, the test results might be invalid.
model_order_well_led_mass <- polr(rating ~ form + category + region + inherited,
                data = filter(socialcare, domain == "Well-led"),
                Hess = TRUE)
summary(model_order_well_led_mass)
## Call:
## polr(formula = rating ~ form + category + region + inherited, 
##     data = filter(socialcare, domain == "Well-led"), Hess = TRUE)
## 
## Coefficients:
##                                   Value Std. Error t value
## formNPO                         0.47490    0.05958   7.971
## formGOV                         0.44546    0.12536   3.553
## formCIC                         0.47781    0.27763   1.721
## formIND                        -0.16189    0.08095  -2.000
## categoryresidential            -0.30197    0.04414  -6.842
## regionEast of England           0.13262    0.08847   1.499
## regionLondon                    0.13230    0.08910   1.485
## regionNorth East                0.74895    0.12462   6.010
## regionNorth West                0.25723    0.08681   2.963
## regionSouth East                0.23484    0.07968   2.947
## regionSouth West                0.71156    0.09011   7.896
## regionWest Midlands            -0.33072    0.08471  -3.904
## regionYorkshire and The Humber -0.14441    0.08949  -1.614
## inheritedTRUE                  -0.07573    0.08480  -0.893
## 
## Intercepts:
##                       Value    Std. Error t value 
## Inadequate|Req improv  -4.1017   0.0973   -42.1342
## Req improv|Good        -1.3337   0.0724   -18.4323
## Good|Outstanding        3.1785   0.0818    38.8350
## 
## Residual Deviance: 18864.49 
## AIC: 18898.49 
## (1157 observations deleted due to missingness)
brant(model_order_well_led_mass)
## -------------------------------------------------------------------- 
## Test for             X2  df  probability 
## -------------------------------------------------------------------- 
## Omnibus                  98.49   28  0
## formNPO                  11.01   2   0
## formGOV                  1.95    2   0.38
## formCIC                  6.57    2   0.04
## formIND                  6.36    2   0.04
## categoryresidential          0.74    2   0.69
## regionEast of England            0.02    2   0.99
## regionLondon             23.1    2   0
## regionNorth East         5.38    2   0.07
## regionNorth West         14.18   2   0
## regionSouth East         19.61   2   0
## regionSouth West         13.03   2   0
## regionWest Midlands          5.16    2   0.08
## regionYorkshire and The Humber   7.64    2   0.02
## inheritedTRUE                3.93    2   0.14
## -------------------------------------------------------------------- 
## 
## H0: Parallel Regression Assumption holds
## Warning in brant(model_order_well_led_mass): 345 combinations in table(dv,ivs)
## do not occur. Because of that, the test results might be invalid.
model_order_responsive_mass <- polr(rating ~ form + category + region + inherited,
                data = filter(socialcare, domain == "Responsive"),
                Hess = TRUE)
summary(model_order_responsive_mass)
## Call:
## polr(formula = rating ~ form + category + region + inherited, 
##     data = filter(socialcare, domain == "Responsive"), Hess = TRUE)
## 
## Coefficients:
##                                    Value Std. Error  t value
## formNPO                         0.506885    0.07251  6.99082
## formGOV                         0.414927    0.15029  2.76077
## formCIC                         0.305849    0.32039  0.95460
## formIND                        -0.056738    0.10613 -0.53461
## categoryresidential            -0.236602    0.05527 -4.28090
## regionEast of England           0.279675    0.11344  2.46532
## regionLondon                   -0.029464    0.11258 -0.26172
## regionNorth East                0.644790    0.14872  4.33547
## regionNorth West                0.323772    0.11060  2.92745
## regionSouth East                0.404234    0.10197  3.96420
## regionSouth West                0.721171    0.11073  6.51263
## regionWest Midlands            -0.001995    0.11050 -0.01806
## regionYorkshire and The Humber  0.069080    0.11669  0.59201
## inheritedTRUE                  -0.251177    0.10529 -2.38548
## 
## Intercepts:
##                       Value    Std. Error t value 
## Inadequate|Req improv  -6.8557   0.3015   -22.7359
## Req improv|Good        -2.3647   0.0933   -25.3561
## Good|Outstanding        2.9800   0.0968    30.7767
## 
## Residual Deviance: 12692.39 
## AIC: 12726.39 
## (1165 observations deleted due to missingness)
brant(model_order_responsive_mass)
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## -------------------------------------------------------------------- 
## Test for             X2  df  probability 
## -------------------------------------------------------------------- 
## Omnibus                  88.61   28  0
## formNPO                  8.07    2   0.02
## formGOV                  7.13    2   0.03
## formCIC                  0.05    2   0.98
## formIND                  11.36   2   0
## categoryresidential          39.97   2   0
## regionEast of England            0.69    2   0.71
## regionLondon             6.27    2   0.04
## regionNorth East         2.76    2   0.25
## regionNorth West         1.18    2   0.56
## regionSouth East         1.71    2   0.42
## regionSouth West         2.07    2   0.35
## regionWest Midlands          8.96    2   0.01
## regionYorkshire and The Humber   1.74    2   0.42
## inheritedTRUE                0.62    2   0.73
## -------------------------------------------------------------------- 
## 
## H0: Parallel Regression Assumption holds
## Warning in brant(model_order_responsive_mass): 409 combinations in table(dv,ivs)
## do not occur. Because of that, the test results might be invalid.

camparing models

Showing the original coeffients from the ordered logit models.

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),
             statistic = "({p.value}) {stars}")
ordinal_models
overall safe effective caring well-led responsive
Inadequate|Req improv −4.449*** −4.253*** −5.932*** −7.094*** −4.102*** −6.856***
(0.000) *** (0.000) *** (0.000) *** (0.000) *** (0.000) *** (0.000) ***
Req improv|Good −1.702*** −1.444*** −2.079*** −3.431*** −1.334*** −2.365***
(0.000) *** (0.000) *** (0.000) *** (0.000) *** (0.000) *** (0.000) ***
Good|Outstanding 3.144*** 5.856*** 4.395*** 3.024*** 3.178*** 2.980***
(0.000) *** (0.000) *** (0.000) *** (0.000) *** (0.000) *** (0.000) ***
formNPO 0.457*** 0.580*** 0.413*** 0.316*** 0.475*** 0.507***
(0.000) *** (0.000) *** (0.000) *** (0.000) *** (0.000) *** (0.000) ***
formGOV 0.429** 0.685*** 0.397* 0.328+ 0.445*** 0.415**
(0.001) ** (0.000) *** (0.029) * (0.066) + (0.000) *** (0.006) **
formCIC 0.586* 0.797* 0.188 0.819* 0.478+ 0.306
(0.045) * (0.040) * (0.622) (0.013) * (0.085) + (0.340)
formIND −0.183* −0.117 −0.275* −0.050 −0.162* −0.057
(0.036) * (0.197) (0.011) * (0.710) (0.045) * (0.592)
categoryresidential −0.387*** −0.423*** −0.374*** −0.574*** −0.302*** −0.237***
(0.000) *** (0.000) *** (0.000) *** (0.000) *** (0.000) *** (0.000) ***
regionEast of England 0.245* 0.274** 0.350** 0.208 0.133 0.280*
(0.011) * (0.004) ** (0.002) ** (0.147) (0.134) (0.014) *
regionLondon 0.104 0.260** 0.482*** 0.037 0.132 −0.029
(0.279) (0.008) ** (0.000) *** (0.797) (0.138) (0.794)
regionNorth East 0.761*** 0.828*** 0.948*** 0.864*** 0.749*** 0.645***
(0.000) *** (0.000) *** (0.000) *** (0.000) *** (0.000) *** (0.000) ***
regionNorth West 0.293** 0.420*** 0.582*** 0.286* 0.257** 0.324**
(0.002) ** (0.000) *** (0.000) *** (0.041) * (0.003) ** (0.003) **
regionSouth East 0.322*** 0.597*** 0.416*** 0.505*** 0.235** 0.404***
(0.000) *** (0.000) *** (0.000) *** (0.000) *** (0.003) ** (0.000) ***
regionSouth West 0.836*** 0.841*** 0.932*** 1.030*** 0.712*** 0.721***
(0.000) *** (0.000) *** (0.000) *** (0.000) *** (0.000) *** (0.000) ***
regionWest Midlands −0.156+ 0.101 0.168 −0.204 −0.331*** −0.002
(0.090) + (0.277) (0.131) (0.146) (0.000) *** (0.985)
regionYorkshire and The Humber −0.121 −0.068 0.281* 0.450** −0.144 0.069
(0.208) (0.474) (0.019) * (0.002) ** (0.107) (0.554)
inheritedTRUE −0.108 −0.140 −0.288** −0.397** −0.076 −0.251*
(0.238) (0.146) (0.010) ** (0.003) ** (0.372) (0.017) *
Num.Obs. 12942 12966 12931 12927 12964 12953
AIC 16608.8 13440.5 10365.2 8969.0 18898.5 12726.4
BIC 16735.8 13567.5 10492.1 9096.0 19025.5 12853.4
RMSE 2.26 2.12 2.13 2.21 2.26 2.27

Showing the exponent of the coefficients (log-odds)

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),
             statistic = "({p.value}) {stars}", exponentiate = TRUE)
ordinal_models_exp
overall safe effective caring well-led responsive
Inadequate|Req improv 0.012*** 0.014*** 0.003*** 0.001*** 0.017*** 0.001***
(0.000) *** (0.000) *** (0.000) *** (0.000) *** (0.000) *** (0.000) ***
Req improv|Good 0.182*** 0.236*** 0.125*** 0.032*** 0.263*** 0.094***
(0.000) *** (0.000) *** (0.000) *** (0.000) *** (0.000) *** (0.000) ***
Good|Outstanding 23.200*** 349.197*** 81.076*** 20.564*** 24.009*** 19.686***
(0.000) *** (0.000) *** (0.000) *** (0.000) *** (0.000) *** (0.000) ***
formNPO 1.580*** 1.785*** 1.512*** 1.372*** 1.608*** 1.660***
(0.000) *** (0.000) *** (0.000) *** (0.000) *** (0.000) *** (0.000) ***
formGOV 1.536** 1.984*** 1.487* 1.389+ 1.561*** 1.515**
(0.001) ** (0.000) *** (0.029) * (0.066) + (0.000) *** (0.006) **
formCIC 1.797* 2.218* 1.207 2.269* 1.612+ 1.358
(0.045) * (0.040) * (0.622) (0.013) * (0.085) + (0.340)
formIND 0.833* 0.890 0.760* 0.951 0.851* 0.945
(0.036) * (0.197) (0.011) * (0.710) (0.045) * (0.592)
categoryresidential 0.679*** 0.655*** 0.688*** 0.563*** 0.739*** 0.789***
(0.000) *** (0.000) *** (0.000) *** (0.000) *** (0.000) *** (0.000) ***
regionEast of England 1.278* 1.315** 1.420** 1.231 1.142 1.323*
(0.011) * (0.004) ** (0.002) ** (0.147) (0.134) (0.014) *
regionLondon 1.109 1.296** 1.620*** 1.038 1.141 0.971
(0.279) (0.008) ** (0.000) *** (0.797) (0.138) (0.794)
regionNorth East 2.140*** 2.288*** 2.580*** 2.373*** 2.115*** 1.906***
(0.000) *** (0.000) *** (0.000) *** (0.000) *** (0.000) *** (0.000) ***
regionNorth West 1.340** 1.523*** 1.790*** 1.331* 1.293** 1.382**
(0.002) ** (0.000) *** (0.000) *** (0.041) * (0.003) ** (0.003) **
regionSouth East 1.379*** 1.817*** 1.516*** 1.657*** 1.265** 1.498***
(0.000) *** (0.000) *** (0.000) *** (0.000) *** (0.003) ** (0.000) ***
regionSouth West 2.308*** 2.319*** 2.539*** 2.802*** 2.037*** 2.057***
(0.000) *** (0.000) *** (0.000) *** (0.000) *** (0.000) *** (0.000) ***
regionWest Midlands 0.856+ 1.107 1.183 0.815 0.718*** 0.998
(0.090) + (0.277) (0.131) (0.146) (0.000) *** (0.985)
regionYorkshire and The Humber 0.886 0.934 1.324* 1.569** 0.866 1.071
(0.208) (0.474) (0.019) * (0.002) ** (0.107) (0.554)
inheritedTRUE 0.898 0.869 0.750** 0.672** 0.927 0.778*
(0.238) (0.146) (0.010) ** (0.003) ** (0.372) (0.017) *
Num.Obs. 12942 12966 12931 12927 12964 12953
AIC 16608.8 13440.5 10365.2 8969.0 18898.5 12726.4
BIC 16735.8 13567.5 10492.1 9096.0 19025.5 12853.4
RMSE 2.26 2.12 2.13 2.21 2.26 2.27

Analysis between CIC sub-groups

Etract CIC sub data frame

cic_num <- socialcare_num %>% 
  filter(form_num == 4)

ordered logit models

Now we know that for this dataset, OLS and ordered logit models are consistent and the latter is more robust. We will only run the ordered logit model to test if there any difference between the subtypes of CICs.

# run the ordered logit model with control
model_order_overall_cic <- clm(rating ~ category + region + inherited + cic_type,
                            data = filter(cic_num, domain == "Overall"),
                            link = "logit")

model_order_safe_cic <- clm(rating ~ category + region + inherited + cic_type,
                         data = filter(cic_num, domain == "Safe"),
                         link = "logit")

model_order_effective_cic <- clm(rating ~ category + region + inherited + cic_type,
                              data = filter(cic_num, domain == "Effective"),
                              link = "logit")

model_order_caring_cic <- clm(rating ~ category + region + inherited + cic_type,
                           data = filter(cic_num, domain == "Caring"),
                           link = "logit")

model_order_well_led_cic <- clm(rating ~ category + region + inherited + cic_type,
                             data = filter(cic_num, domain == "Well-led"),
                             link = "logit")

model_order_responsive_cic <- clm(rating ~ category + region + inherited + cic_type,
                             data = filter(cic_num, domain == "Responsive"),
                             link = "logit")

Brant test

model_order_overall_cicmass <- polr(rating ~ category + region + inherited + cic_type,
                data = filter(socialcare, domain == "Overall"),
                Hess = TRUE)
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
summary(model_order_overall_cicmass)
## Call:
## polr(formula = rating ~ category + region + inherited + cic_type, 
##     data = filter(socialcare, domain == "Overall"), Hess = TRUE)
## 
## Coefficients:
##                                  Value Std. Error t value
## categoryresidential            -0.8625     0.7850 -1.0987
## regionEast of England          -1.0893     1.5295 -0.7122
## regionLondon                   -3.2656     1.5883 -2.0560
## regionNorth East               -2.1399     2.3702 -0.9028
## regionNorth West                0.2104     1.2989  0.1620
## regionSouth East               -3.2574     1.7198 -1.8941
## regionSouth West               -0.5142     1.5356 -0.3349
## regionWest Midlands            -3.4236     1.6419 -2.0852
## regionYorkshire and The Humber -2.3231     1.6905 -1.3742
## inheritedTRUE                   0.4003     2.5239  0.1586
## cic_typeCIC_S                  -0.7389     0.6712 -1.1010
## 
## Intercepts:
##                       Value    Std. Error t value 
## Inadequate|Req improv -15.0870  55.9461    -0.2697
## Req improv|Good        -4.9253   1.4335    -3.4358
## Good|Outstanding        0.9100   1.1452     0.7946
## 
## Residual Deviance: 87.05844 
## AIC: 115.0584 
## (14034 observations deleted due to missingness)
brant(model_order_overall_cicmass)
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred

## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## -------------------------------------------------------------------- 
## Test for             X2  df  probability 
## -------------------------------------------------------------------- 
## Omnibus                  1.44    22  1
## categoryresidential          0.17    2   0.92
## regionEast of England            0   2   1
## regionLondon             0   2   1
## regionNorth East         0   2   1
## regionNorth West         0   2   1
## regionSouth East         0   2   1
## regionSouth West         0   2   1
## regionWest Midlands          0   2   1
## regionYorkshire and The Humber   0   2   1
## inheritedTRUE                0   2   1
## cic_typeCIC_S                1.38    2   0.5
## -------------------------------------------------------------------- 
## 
## H0: Parallel Regression Assumption holds
## Warning in brant(model_order_overall_cicmass): 181 combinations in table(dv,ivs)
## do not occur. Because of that, the test results might be invalid.
model_order_effective_cicmass <- polr(rating ~ category + region + inherited + cic_type,
                data = filter(socialcare, domain == "Effective"),
                Hess = TRUE)
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
summary(model_order_effective_cicmass)
## Call:
## polr(formula = rating ~ category + region + inherited + cic_type, 
##     data = filter(socialcare, domain == "Effective"), Hess = TRUE)
## 
## Coefficients:
##                                   Value Std. Error   t value
## categoryresidential            -1.38870     0.9498 -1.462100
## regionEast of England          -1.23843     2.4088 -0.514132
## regionLondon                   -0.02871     2.5667 -0.011185
## regionNorth East               -0.47056     3.3106 -0.142139
## regionNorth West                0.52455     2.3816  0.220253
## regionSouth East                0.02433     2.7603  0.008815
## regionSouth West                0.02433     2.7603  0.008815
## regionWest Midlands            -1.93175     2.3936 -0.807058
## regionYorkshire and The Humber  0.28596     2.6192  0.109177
## inheritedTRUE                   1.49685     2.9268  0.511428
## cic_typeCIC_S                   0.22315     0.9756  0.228723
## 
## Intercepts:
##                       Value    Std. Error t value 
## Inadequate|Req improv -13.5410  50.9815    -0.2656
## Req improv|Good        -3.4853   2.2104    -1.5768
## Good|Outstanding        3.6047   2.2084     1.6323
## 
## Residual Deviance: 53.62115 
## AIC: 81.62115 
## (14034 observations deleted due to missingness)
brant(model_order_effective_cicmass)
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred

## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## -------------------------------------------------------------------- 
## Test for             X2  df  probability 
## -------------------------------------------------------------------- 
## Omnibus                  0.71    22  1
## categoryresidential          0   2   1
## regionEast of England            0   2   1
## regionLondon             0   2   1
## regionNorth East         0   2   1
## regionNorth West         0   2   1
## regionSouth East         0   2   1
## regionSouth West         0   2   1
## regionWest Midlands          0   2   1
## regionYorkshire and The Humber   0   2   1
## inheritedTRUE                0   2   1
## cic_typeCIC_S                0.01    2   1
## -------------------------------------------------------------------- 
## 
## H0: Parallel Regression Assumption holds
## Warning in brant(model_order_effective_cicmass): 185 combinations in
## table(dv,ivs) do not occur. Because of that, the test results might be invalid.
model_order_caring_cicmass <- polr(rating ~ category + region + inherited + cic_type,
                data = filter(socialcare, domain == "Caring"),
                Hess = TRUE)
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
summary(model_order_caring_cicmass)
## Call:
## polr(formula = rating ~ category + region + inherited + cic_type, 
##     data = filter(socialcare, domain == "Caring"), Hess = TRUE)
## 
## Coefficients:
##                                   Value Std. Error  t value
## categoryresidential            -0.67637     0.8441 -0.80134
## regionEast of England           2.53692     2.4541  1.03377
## regionLondon                    0.12306     2.5916  0.04748
## regionNorth East               -1.74068     2.9311 -0.59386
## regionNorth West                2.95078     2.3830  1.23825
## regionSouth East               -0.06988     2.8403 -0.02460
## regionSouth West                1.95859     2.5283  0.77468
## regionWest Midlands            -1.53848     2.5394 -0.60583
## regionYorkshire and The Humber  2.10617     2.5193  0.83602
## inheritedTRUE                   3.80774     2.1662  1.75778
## cic_typeCIC_S                  -0.84790     0.7554 -1.12249
## 
## Intercepts:
##                       Value      Std. Error t value   
## Inadequate|Req improv   -19.6452     0.0102 -1920.0180
## Req improv|Good          -3.8755     2.3133    -1.6754
## Good|Outstanding          3.4356     2.2966     1.4960
## 
## Residual Deviance: 69.07379 
## AIC: 97.07379 
## (14033 observations deleted due to missingness)
brant(model_order_caring_cicmass)
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred

## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## -------------------------------------------------------------------- 
## Test for             X2  df  probability 
## -------------------------------------------------------------------- 
## Omnibus                  0.65    22  1
## categoryresidential          0   2   1
## regionEast of England            0   2   1
## regionLondon             0   2   1
## regionNorth East         0   2   1
## regionNorth West         0   2   1
## regionSouth East         0   2   1
## regionSouth West         0   2   1
## regionWest Midlands          0   2   1
## regionYorkshire and The Humber   0   2   1
## inheritedTRUE                0   2   1
## cic_typeCIC_S                0.52    2   0.77
## -------------------------------------------------------------------- 
## 
## H0: Parallel Regression Assumption holds
## Warning in brant(model_order_caring_cicmass): 184 combinations in table(dv,ivs)
## do not occur. Because of that, the test results might be invalid.
model_order_well_led_cicmass <- polr(rating ~ category + region + inherited + cic_type,
                data = filter(socialcare, domain == "Well-led"),
                Hess = TRUE)
summary(model_order_well_led_cicmass)
## Call:
## polr(formula = rating ~ category + region + inherited + cic_type, 
##     data = filter(socialcare, domain == "Well-led"), Hess = TRUE)
## 
## Coefficients:
##                                   Value Std. Error  t value
## categoryresidential             0.05882     0.6357  0.09253
## regionEast of England          -1.47101     1.3727 -1.07164
## regionLondon                   -2.11671     1.3792 -1.53476
## regionNorth East               -3.40117     1.7926 -1.89735
## regionNorth West                0.43311     1.2312  0.35180
## regionSouth East               -2.13729     1.4878 -1.43654
## regionSouth West               -0.41668     1.4184 -0.29376
## regionWest Midlands            -3.18905     1.4605 -2.18354
## regionYorkshire and The Humber -3.22033     1.4372 -2.24075
## inheritedTRUE                   1.36124     1.8069  0.75337
## cic_typeCIC_S                  -0.67589     0.5851 -1.15516
## 
## Intercepts:
##                       Value    Std. Error t value 
## Inadequate|Req improv -13.7273  30.9643    -0.4433
## Req improv|Good        -3.6111   1.2386    -2.9156
## Good|Outstanding        0.8423   1.0868     0.7751
## 
## Residual Deviance: 117.8561 
## AIC: 145.8561 
## (14037 observations deleted due to missingness)
brant(model_order_well_led_cicmass)
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## -------------------------------------------------------------------- 
## Test for             X2  df  probability 
## -------------------------------------------------------------------- 
## Omnibus                  6.14    22  1
## categoryresidential          0.75    2   0.69
## regionEast of England            0   2   1
## regionLondon             0   2   1
## regionNorth East         0   2   1
## regionNorth West         0   2   1
## regionSouth East         0   2   1
## regionSouth West         0   2   1
## regionWest Midlands          0   2   1
## regionYorkshire and The Humber   0   2   1
## inheritedTRUE                0   2   1
## cic_typeCIC_S                5.13    2   0.08
## -------------------------------------------------------------------- 
## 
## H0: Parallel Regression Assumption holds
## Warning in brant(model_order_well_led_cicmass): 177 combinations in
## table(dv,ivs) do not occur. Because of that, the test results might be invalid.
model_order_responsive_cicmass <- polr(rating ~ category + region + inherited + cic_type,
                data = filter(socialcare, domain == "Responsive"),
                Hess = TRUE)
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
summary(model_order_responsive_cicmass)
## Call:
## polr(formula = rating ~ category + region + inherited + cic_type, 
##     data = filter(socialcare, domain == "Responsive"), Hess = TRUE)
## 
## Coefficients:
##                                   Value Std. Error  t value
## categoryresidential            -1.55331     0.9781 -1.58806
## regionEast of England          -3.09331     1.8866 -1.63963
## regionLondon                   -4.16348     1.9546 -2.13013
## regionNorth East               -3.07223     3.1054 -0.98934
## regionNorth West                0.10702     1.3218  0.08096
## regionSouth East               -2.61874     2.3034 -1.13689
## regionSouth West               -2.61874     2.3034 -1.13689
## regionWest Midlands            -3.69733     2.0133 -1.83643
## regionYorkshire and The Humber -2.14399     2.0087 -1.06737
## inheritedTRUE                   1.27004     3.2721  0.38814
## cic_typeCIC_S                  -0.07933     0.7961 -0.09965
## 
## Intercepts:
##                       Value    Std. Error t value 
## Inadequate|Req improv -14.3475  25.7418    -0.5574
## Req improv|Good        -6.3436   1.7279    -3.6714
## Good|Outstanding        1.0800   1.1669     0.9255
## 
## Residual Deviance: 59.93914 
## AIC: 87.93914 
## (14034 observations deleted due to missingness)
brant(model_order_responsive_cicmass)
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred

## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## -------------------------------------------------------------------- 
## Test for             X2  df  probability 
## -------------------------------------------------------------------- 
## Omnibus                  0.82    22  1
## categoryresidential          0   2   1
## regionEast of England            0   2   1
## regionLondon             0   2   1
## regionNorth East         0   2   1
## regionNorth West         0   2   1
## regionSouth East         0   2   1
## regionSouth West         0   2   1
## regionWest Midlands          0   2   1
## regionYorkshire and The Humber   0   2   1
## inheritedTRUE                0   2   1
## cic_typeCIC_S                0.82    2   0.66
## -------------------------------------------------------------------- 
## 
## H0: Parallel Regression Assumption holds
## Warning in brant(model_order_responsive_cicmass): 185 combinations in
## table(dv,ivs) do not occur. Because of that, the test results might be invalid.

comparing models

ordered_models_cic <- modelsummary(list("overall" = model_order_overall_cic, "safe" = model_order_safe_cic, 
                  "effective" = model_order_effective_cic, "caring" = model_order_caring_cic, 
                  "well-led" = model_order_well_led_cic, "responsive" = model_order_responsive_cic),
             statistic = "({p.value}) {stars}")
ordered_models_cic
overall safe effective caring well-led responsive
Req improv|Good −4.924*** −4.165+ −3.490 −3.875+ −3.606** −6.357***
(0.001) *** (0.064) + (0.115) (0.094) + (0.004) ** (0.000) ***
Good|Outstanding 0.911 3.284 3.601 3.436 0.847 1.072
(0.427) (0.136) (0.103) (0.135) (0.436) (0.357)
categoryresidential −0.863 0.554 −1.387 −0.676 0.058 −1.552
(0.272) (0.608) (0.144) (0.423) (0.927) (0.113)
regionEast of England −1.089 −0.110 −1.243 2.537 −1.466 −3.108+
(0.477) (0.963) (0.606) (0.301) (0.286) (0.100) +
regionLondon −3.264* −2.579 −0.031 0.123 −2.112 −4.177*
(0.040) * (0.266) (0.990) (0.962) (0.126) (0.033) *
regionNorth East −2.144 −0.581 −0.472 −1.740 −3.395+ −3.084
(0.366) (0.873) (0.887) (0.553) (0.058) + (0.321)
regionNorth West 0.211 1.059 0.519 2.951 0.439 0.098
(0.871) (0.651) (0.827) (0.216) (0.722) (0.941)
regionSouth East −3.256+ −2.201 0.019 −0.071 −2.132 −2.629
(0.058) + (0.373) (0.995) (0.980) (0.152) (0.254)
regionSouth West −0.514 −0.130 0.019 1.959 −0.412 −2.629
(0.738) (0.962) (0.995) (0.438) (0.772) (0.254)
regionWest Midlands −3.422* −1.911 −1.937 −1.538 −3.183* −3.713+
(0.037) * (0.440) (0.418) (0.545) (0.029) * (0.065) +
regionYorkshire and The Humber −2.322 −1.242 0.287 2.107 −3.215* −2.160
(0.170) (0.615) (0.913) (0.403) (0.025) * (0.283)
inheritedTRUE 0.411 0.418 1.495 3.808+ 1.360 1.269
(0.871) (0.909) (0.609) (0.079) + (0.452) (0.698)
cic_typeCIC_S −0.739 −1.581+ 0.223 −0.848 −0.676 −0.078
(0.271) (0.063) + (0.820) (0.262) (0.248) (0.922)
Num.Obs. 84 84 84 84 84 84
AIC 113.1 84.2 79.6 95.1 143.9 85.9
BIC 144.7 115.8 111.2 126.7 175.5 117.5
RMSE 1.40 1.16 1.15 1.45 1.49 1.30

End

end of document updated on 8/31/2022