There are 8000 general practices in England and data for each practice is increasingly available in the public domain. There are however few tools which enable analyst and practices to compare practices with similar peers to help evaluate their performance. A previous tool developed by APHO seemingly considerably misclassified practices, and it was agreed by the National Practice Benchmarking and Indicators group that the issue of finding peer groups should be revisited.

This short note is a pilot evaluation of a simple method based on k-means analysis of an extract of the national general practice profiles. The NGPP contain about 250 publicly available indicators of the health, utilisation, demography and characteristics of general practice populations. For this analysis and to keep things simple we have chosen a few demographic variables - total population, age break down and deprivation as a proof of concept before trying the larger list of classification variables for which there is general consensus should be included in such a peer grouping exercise.

K-means analysis is a relatively simple and widely used for of what is known as unsupervised machine learning. It clusters data together on the basis of similarity among all predictor variables into a pre-specified number of groups. The idea is that practices are clustered into groups which are more similar to each other on the variables of interest, and farther apart from other practice clusters.

Method

The data for this analysis was extracted from the spreadsheets downloaded from the NGPP website and included the following variables for each practice:

The analysis has been conducted in R and we have written this report in R Markdown using the R Studio package to allow us to embed relevant code which can then be shared and easily modified if we wish to change the variables or analysis.

The dataset only contains 7891 practices because it excludes small practices and those with discrepancies between QOF reported practice size and the registered population.

The dataset

We can summarise the dataset and see that there are 12 missing IMD values, an 6 practices with 0 population. We’ll exclude these.

summary(kgp)
##    practice             ccg                 %0-4            %5-14      
##  Length:7891        Length:7891        Min.   : 0.000   Min.   : 0.00  
##  Class :character   Class :character   1st Qu.: 4.902   1st Qu.:10.03  
##  Mode  :character   Mode  :character   Median : 5.862   Median :11.17  
##                                        Mean   : 6.071   Mean   :11.36  
##                                        3rd Qu.: 6.955   3rd Qu.:12.52  
##                                        Max.   :16.493   Max.   :28.82  
##                                                                        
##       <18             65+             %75+             85+        
##  Min.   : 0.00   Min.   : 0.00   Min.   : 0.000   Min.   : 0.000  
##  1st Qu.:18.42   1st Qu.:12.10   1st Qu.: 5.359   1st Qu.: 1.395  
##  Median :20.41   Median :16.89   Median : 7.594   Median : 2.121  
##  Mean   :20.89   Mean   :16.62   Mean   : 7.572   Mean   : 2.168  
##  3rd Qu.:22.81   3rd Qu.:20.82   3rd Qu.: 9.556   3rd Qu.: 2.792  
##  Max.   :53.86   Max.   :92.95   Max.   :80.803   Max.   :49.070  
##                                                                   
##       imd          population   
##  Min.   : 2.89   Min.   :    0  
##  1st Qu.:13.70   1st Qu.: 3700  
##  Median :21.82   Median : 6211  
##  Mean   :23.83   Mean   : 7053  
##  3rd Qu.:32.21   3rd Qu.: 9552  
##  Max.   :68.36   Max.   :52386  
##  NA's   :12
kgp %>% filter(population == 0) %>% select(practice) ## practice with 0 poplation recorded in GP profiles
##   practice
## 1   Y03656
## 2   Y03663
## 3   Y03664
## 4   Y03755
## 5   Y04266
## 6   Y04333
kgp <- kgp %>% filter(population !=0)

Exploring the relationship between the variables suggests that deprivation has complex relationship with age structure. The under 18 variable is strongly correlated with %0-4 and %5-14 so to simplify the analysis we will exclude this. Similarly we’ll use 75+ and drop 65+ and 85+.

There also seems to be an outlying practice with high proportions of older people. This practice is Y02625. Looking at the characteristics of this practice shows it is a small with an exclusively older population suggesting it is probably a nursing home practice. We’ll keep it in for the analysis.

##  [1] practice   ccg        %0-4       %5-14      <18        65+       
##  [7] %75+       85+        imd        population
## <0 rows> (or 0-length row.names)

Missing data

There are 12 practice with missing IMD data. For the initial analysis we will keep them in but k means analysis can’t be done with missing data so we will exclude them at that point. They are all Y coded practices implying they are relatively new and may not have been included in the mapping table required to calculate practice level IMD scores.

##      practice                          ccg   %0-4  %5-14    <18    65+
## 7880   Y03587       NHS Leicester City CCG  6.968  9.795 19.522 10.870
## 7881   Y03595              NHS Norwich CCG  4.454 10.086 18.540 21.638
## 7882   Y03597 NHS Birmingham Crosscity CCG 12.066 20.248 37.429  4.606
## 7883   Y03602 NHS South Worcestershire CCG  4.837 10.283 18.086 21.253
## 7884   Y03661               NHS Dorset CCG  3.519 10.801 17.933 28.243
## 7885   Y03671              NHS Swindon CCG  7.814 13.920 25.777  5.979
##        %75+   85+ imd population
## 7880  5.037 1.613  NA       4896
## 7881 10.603 3.477  NA       3464
## 7882  1.959 0.413  NA       1991
## 7883  8.644 2.141  NA       3532
## 7884 11.952 3.984  NA       3143
## 7885  1.519 0.443  NA       3082

Cluster analysis

We’ll exclude the age variables, %<18, % 65+, % 85+. A simple hierarchical cluster analysis produces the dendrogram below. Each branch is a general practice. The dendorgram partitions the data according to similarity - the further down the tree the more similar the practice are. It is hard to see all the detail (the chart shows all 8000 practices) but it picks out the outlier (single branch at the top left of the chart) and suggests there are number of practice groupings. We can use this as a basis for assigning clusters, depending on how fine grained we want them to be. Note that we have scaled the data (z-scores) because clustering is sensitive to absolute values.

K means analysis

For this part of the analysis, we’ll exclude practices with no IMD scores. The k in k means to be specified and we’ll arbitrarily start with 10. For context the average of each variable is

round(apply(kgp[,-(1:2)], 2, function(x) mean(x, na.rm = TRUE)),2)
##       %0-4      %5-14       %75+        imd population 
##       6.07      11.36       7.57      23.83    7058.56

Running the k means analysis

kgp <- kgp %>% filter(!is.na(imd))
set.seed(1) ## this is needed because there is an element of random sampling
k <- kmeans(scale(kgp[,-(1:2)]), 10, nstart = 10)

Summary of results

require(ggplot2)
require(GGally)
k$size
##  [1] 1075  838  939  484 1242  283 1142  788  190  898
agg <- round(aggregate(kgp[,-(1:2)], by = list(cluster=k$cluster), mean),2) ## summary of the results
    agg$cl <-as.factor(agg$cluster)
      kable(agg)
cluster %0-4 %5-14 %75+ imd population cl
1 5.13 10.68 10.00 13.89 11292.14 1
2 4.10 9.23 12.70 16.22 5061.00 2
3 6.67 11.68 6.93 23.79 11317.21 3
4 9.95 16.89 3.27 41.38 4883.05 4
5 5.36 11.35 8.39 13.12 5328.61 5
6 3.93 5.65 3.35 27.15 6901.84 6
7 5.61 10.40 7.81 30.85 4641.12 7
8 7.69 12.89 4.86 20.77 4959.01 8
9 5.79 10.91 7.48 17.53 20887.97 9
10 7.20 12.64 5.19 42.30 5031.48 10
ggparcoord(agg, columns = c(2:6), scale = 'std',scaleSummary = mean, showPoints = TRUE, groupColumn = 7) + 
     ggtitle("Mean values for each cluster")+ 
     ylab("z-scores") ## parallel coorindates plot of results of mean values for each cluster

We can begin to see the nature of the clusters this method identifies. For example, the second smallest is cluster 6 with 283 practices. These are on average characterised by average practice size, slightly higher levels of deprivation, and a “middle aged” age distribution (the proportion of the population either young or old is much lower than average). The smallest, cluster 9 with 190 practices, clusters the larger practices with average levels of the other variables. Cluster 5 is the largest group - these are smaller practices with a “typical” age distribution and so on. Cluster 1 and 2 are larger practices - cluster 2 tends to be older and more deprived than cluster 1.

It is possible to to create qualitative labels for each group, and enrich the clustering with additional variables - ethnicity and rurality are of particular interest.

We can add the clusters back to the original data to identify which practice is in which cluster and do some more sense checking.

We can look at the distribution of practices within clusters by CCG. For example, most practices in Barking and Dagenham are in cluster 4, and most in Bradford are in cluster 3.

t<- (with(kgp,table(ccg, cluster)))

kable(t)
1 2 3 4 5 6 7 8 9 10
NHS Airedale, Wharfdale And Craven CCG 6 4 4 1 2 0 0 0 0 0
NHS Ashford CCG 1 1 3 1 5 0 0 3 1 0
NHS Aylesbury Vale CCG 7 0 3 1 9 0 0 0 1 0
NHS Barking And Dagenham CCG 0 0 0 25 1 0 1 8 0 5
NHS Barnet CCG 2 3 9 3 21 1 2 23 1 0
NHS Barnsley CCG 2 0 8 1 2 0 12 4 1 7
NHS Basildon And Brentwood CCG 7 4 6 3 6 0 6 8 0 4
NHS Bassetlaw CCG 1 3 1 1 3 0 1 0 2 0
NHS Bath And North East Somerset CCG 7 5 0 0 11 1 0 3 0 0
NHS Bedfordshire CCG 13 2 11 3 15 0 0 9 2 0
NHS Bexley CCG 7 3 5 3 5 0 0 5 0 0
NHS Birmingham Crosscity CCG 8 3 9 28 4 2 24 2 3 31
NHS Birmingham South And Central CCG 2 1 4 17 0 2 7 3 0 9
NHS Blackburn With Darwen CCG 0 0 5 10 1 0 7 1 0 4
NHS Blackpool CCG 3 3 0 1 0 0 10 0 0 6
NHS Bolton CCG 2 0 6 9 3 0 10 3 1 16
NHS Bracknell And Ascot CCG 3 0 4 0 3 0 0 4 1 0
NHS Bradford City CCG 0 0 0 23 0 1 0 0 0 3
NHS Bradford Districts CCG 4 0 11 11 3 0 4 1 1 6
NHS Brent CCG 0 3 7 5 2 7 17 11 0 15
NHS Brighton And Hove CCG 3 2 5 0 4 14 8 4 2 4
NHS Bristol CCG 5 1 17 4 3 7 6 3 2 6
NHS Bromley CCG 9 2 7 2 15 0 5 5 1 0
NHS Bury CCG 3 2 5 1 5 0 3 13 0 1
NHS Calderdale CCG 4 1 9 4 1 0 2 2 1 2
NHS Cambridgeshire and Peterborough CCG 20 4 16 7 32 6 4 14 3 0
NHS Camden CCG 0 0 5 0 4 14 4 4 1 4
NHS Cannock Chase CCG 1 3 4 0 10 0 7 2 0 0
NHS Canterbury And Coastal CCG 7 4 1 0 6 1 0 1 2 0
NHS Castle Point And Rochford CCG 6 9 1 0 8 0 2 1 1 0
NHS Central London (Westminster) CCG 0 1 2 1 1 18 6 3 0 2
NHS Central Manchester CCG 0 0 0 4 0 5 5 4 1 15
NHS Chiltern CCG 9 1 6 0 11 0 0 5 3 0
NHS Chorley And South Ribble CCG 4 2 2 0 14 0 6 1 1 1
NHS City And Hackney CCG 0 0 1 6 0 7 4 0 0 26
NHS Coastal West Sussex CCG 21 23 4 0 3 0 3 2 0 0
NHS Corby CCG 0 0 1 0 0 0 2 1 1 0
NHS Coventry And Rugby CCG 3 8 11 9 9 3 17 3 1 12
NHS Crawley CCG 2 0 5 0 2 1 0 3 0 0
NHS Croydon CCG 4 5 10 5 6 0 6 20 0 4
NHS Cumbria CCG 10 27 6 0 13 0 24 0 1 0
NHS Darlington CCG 2 0 6 0 2 0 0 0 0 1
NHS Dartford, Gravesham And Swanley CCG 6 1 6 2 9 0 1 9 0 0
NHS Doncaster CCG 1 1 12 1 7 0 13 0 0 8
NHS Dorset CCG 20 44 8 0 14 2 6 1 2 1
NHS Dudley CCG 5 8 1 5 4 0 16 1 3 5
NHS Durham Dales, Easington And Sedgefield CCG 2 3 10 1 1 0 21 0 0 3
NHS Ealing CCG 0 0 11 7 3 5 17 29 0 5
NHS East And North Hertfordshire CCG 19 0 9 0 16 1 0 9 4 0
NHS East Lancashire CCG 5 1 9 8 5 0 19 2 0 10
NHS East Leicestershire And Rutland CCG 15 3 2 0 9 0 1 2 2 0
NHS East Riding Of Yorkshire CCG 12 10 2 0 10 0 2 1 1 0
NHS East Staffordshire CCG 3 1 5 0 6 0 1 3 0 0
NHS East Surrey CCG 7 0 4 0 4 0 0 3 0 0
NHS Eastbourne, Hailsham And Seaford CCG 7 9 2 0 1 1 0 1 0 0
NHS Eastern Cheshire CCG 12 5 1 0 3 0 0 1 0 0
NHS Enfield CCG 2 0 5 12 12 0 5 6 0 8
NHS Erewash CCG 3 1 2 0 2 0 3 1 0 0
NHS Fareham And Gosport CCG 11 2 4 1 3 0 0 0 0 0
NHS Fylde & Wyre CCG 5 10 2 0 1 0 3 0 0 0
NHS Gloucestershire CCG 17 21 6 2 30 1 1 3 2 2
NHS Great Yarmouth And Waveney CCG 8 7 1 0 1 0 4 1 1 4
NHS Greater Huddersfield CCG 3 2 5 4 11 1 8 2 0 4
NHS Greater Preston CCG 5 2 3 4 3 1 7 1 0 7
NHS Greenwich CCG 0 1 6 5 1 0 13 4 1 11
NHS Guildford And Waverley CCG 10 1 1 0 7 0 0 0 2 0
NHS Halton CCG 2 0 3 1 0 0 1 1 0 9
NHS Hambleton, Richmondshire And Whitby CCG 5 10 0 1 3 0 1 1 1 0
NHS Hammersmith And Fulham CCG 0 0 3 0 0 10 10 5 0 3
NHS Hardwick CCG 1 1 2 0 3 0 8 0 1 0
NHS Haringey CCG 0 2 3 2 0 5 13 5 2 17
NHS Harrogate And Rural District CCG 8 2 0 0 8 0 0 1 0 0
NHS Harrow CCG 3 1 6 0 11 0 0 13 1 0
NHS Hartlepool And Stockton-On-Tees CCG 2 4 8 3 2 0 6 3 4 7
NHS Hastings And Rother CCG 1 8 1 0 2 0 15 1 0 4
NHS Havering CCG 7 13 1 2 11 0 6 10 0 0
NHS Herefordshire CCG 8 11 1 0 2 0 0 2 0 0
NHS Herts Valleys CCG 16 0 13 1 18 0 1 13 7 0
NHS Heywood, Middleton And Rochdale CCG 1 0 6 9 0 0 9 3 0 10
NHS High Weald Lewes Havens CCG 9 1 3 0 8 0 1 0 0 0
NHS Hillingdon CCG 2 0 5 3 14 1 1 22 0 0
NHS Horsham And Mid Sussex CCG 8 1 1 0 10 0 0 1 2 0
NHS Hounslow CCG 1 1 4 2 3 3 9 30 0 0
NHS Hull CCG 0 4 6 3 2 5 19 4 0 14
NHS Ipswich And East Suffolk CCG 16 9 6 0 7 0 1 0 2 0
NHS Isle Of Wight CCG 5 7 2 0 1 0 2 0 0 0
NHS Islington CCG 0 1 5 0 0 11 10 1 0 9
NHS Kernow CCG 17 23 6 0 4 0 13 0 4 1
NHS Kingston CCG 1 1 6 0 13 0 0 5 1 0
NHS Knowsley CCG 0 1 0 0 0 0 11 1 1 15
NHS Lambeth CCG 0 0 7 0 0 17 11 6 1 6
NHS Lancashire North CCG 6 1 1 0 1 0 2 0 2 0
NHS Leeds North CCG 4 3 5 1 6 2 1 2 0 4
NHS Leeds South And East CCG 3 4 5 7 4 1 4 1 0 13
NHS Leeds West CCG 3 4 5 0 6 5 8 0 5 2
NHS Leicester City CCG 0 2 7 9 2 7 12 7 1 15
NHS Lewisham CCG 0 0 13 3 0 4 9 6 0 6
NHS Lincolnshire East CCG 5 15 5 0 2 0 2 0 1 0
NHS Lincolnshire West CCG 2 6 7 0 11 1 7 1 0 2
NHS Liverpool CCG 0 5 3 2 3 3 30 2 1 45
NHS Luton CCG 0 1 6 11 3 1 0 7 1 1
NHS Mansfield And Ashfield CCG 1 1 5 2 2 0 15 1 0 4
NHS Medway CCG 2 5 5 2 12 0 9 20 1 1
NHS Merton CCG 2 0 10 0 3 0 1 9 0 0
NHS Mid Essex CCG 14 3 1 0 21 0 0 6 3 0
NHS Milton Keynes CCG 2 0 10 2 2 0 0 10 1 0
NHS Nene CCG 7 2 22 2 20 1 2 8 4 1
NHS Newark & Sherwood CCG 3 2 3 0 2 0 3 1 1 0
NHS Newbury And District CCG 2 0 3 0 4 0 0 1 1 0
NHS Newcastle And Gateshead CCG 5 3 9 4 7 6 24 2 1 6
NHS Newham CCG 0 0 1 14 0 1 3 0 0 41
NHS North & West Reading CCG 3 0 5 0 0 0 0 1 0 0
NHS North Derbyshire CCG 14 9 1 0 9 0 3 1 1 0
NHS North Durham CCG 5 0 5 0 5 0 10 3 3 0
NHS North East Essex CCG 9 7 6 2 9 1 4 5 0 0
NHS North East Hampshire And Farnham CCG 9 0 5 0 5 0 0 5 0 0
NHS North East Lincolnshire CCG 2 2 4 1 1 1 11 0 1 6
NHS North Hampshire CCG 4 0 4 0 4 0 0 4 4 0
NHS North Kirklees CCG 0 0 6 7 0 0 9 3 1 5
NHS North Lincolnshire CCG 5 1 1 1 3 0 5 1 2 2
NHS North Manchester CCG 0 0 0 6 0 2 3 0 0 25
NHS North Norfolk CCG 7 11 0 0 1 0 0 1 0 0
NHS North Somerset CCG 7 9 2 1 2 0 0 3 1 0
NHS North Staffordshire CCG 9 9 0 0 6 1 3 3 0 1
NHS North Tyneside CCG 5 5 3 0 6 0 4 4 1 1
NHS North West Surrey CCG 11 3 5 1 13 0 0 6 3 0
NHS Northern, Eastern And Western Devon CCG 26 33 6 0 22 3 17 6 2 8
NHS Northumberland CCG 8 15 4 0 10 0 4 0 3 1
NHS Norwich CCG 5 2 2 0 4 3 3 1 1 1
NHS Nottingham City CCG 2 0 2 8 3 5 14 1 1 25
NHS Nottingham North And East CCG 3 4 4 0 6 0 2 2 0 0
NHS Nottingham West CCG 4 2 1 0 4 0 0 1 0 0
NHS Oldham CCG 3 0 4 15 1 0 7 4 1 11
NHS Oxfordshire CCG 22 2 9 0 19 9 1 15 4 0
NHS Portsmouth CCG 1 1 7 0 4 2 7 0 1 3
NHS Redbridge CCG 1 0 6 5 8 0 2 24 0 0
NHS Redditch And Bromsgrove CCG 3 2 6 1 7 0 1 2 0 0
NHS Richmond CCG 2 1 5 0 9 1 0 12 0 0
NHS Rotherham CCG 3 0 4 3 2 0 15 0 3 6
NHS Rushcliffe CCG 3 1 0 0 7 0 0 3 1 0
NHS Salford CCG 1 2 4 4 1 2 14 4 0 16
NHS Sandwell And West Birmingham CCG 2 2 9 19 0 2 18 4 0 49
NHS Scarborough And Ryedale CCG 1 6 1 0 2 0 4 0 1 1
NHS Sheffield CCG 16 7 4 5 12 3 15 3 1 22
NHS Shropshire CCG 7 22 1 0 11 0 0 2 1 0
NHS Slough CCG 0 0 5 2 0 0 1 7 1 0
NHS Solihull CCG 6 2 4 1 11 0 3 1 0 4
NHS Somerset CCG 19 23 5 0 17 0 1 9 1 0
NHS South Cheshire CCG 5 2 4 0 6 0 0 0 1 0
NHS South Devon And Torbay CCG 12 15 1 0 3 0 4 2 0 0
NHS South East Staffs And Seisdon Peninsular CCG 7 6 1 0 5 0 2 9 1 0
NHS South Eastern Hampshire CCG 6 5 4 0 7 0 2 1 0 2
NHS South Gloucestershire CCG 9 1 6 0 7 0 1 1 1 0
NHS South Kent Coast CCG 5 10 4 1 2 0 6 2 0 1
NHS South Lincolnshire CCG 6 4 0 0 3 0 0 0 2 0
NHS South Manchester CCG 0 0 5 0 1 2 2 2 0 13
NHS South Norfolk CCG 7 7 3 0 4 0 0 1 3 0
NHS South Reading CCG 0 0 3 0 1 3 1 12 0 0
NHS South Sefton CCG 2 9 0 1 2 0 11 0 0 8
NHS South Tees CCG 2 3 7 6 1 0 15 2 0 11
NHS South Tyneside CCG 1 3 3 0 2 0 16 1 0 1
NHS South Warwickshire CCG 13 4 1 0 15 0 1 2 0 0
NHS South West Lincolnshire CCG 3 2 1 0 10 0 0 2 1 0
NHS South Worcestershire CCG 11 7 5 0 6 1 0 0 1 0
NHS Southampton CCG 2 1 10 1 2 4 5 6 1 2
NHS Southend CCG 2 10 4 1 4 0 6 4 1 3
NHS Southern Derbyshire CCG 15 3 13 5 10 0 5 3 2 1
NHS Southport And Formby CCG 5 9 0 0 3 0 1 2 0 0
NHS Southwark CCG 0 1 6 0 0 5 7 7 1 18
NHS St Helens CCG 1 5 2 0 4 0 17 2 0 5
NHS Stafford And Surrounds CCG 11 1 0 0 1 0 0 0 1 0
NHS Stockport CCG 6 3 4 1 15 0 16 3 0 2
NHS Stoke On Trent CCG 3 3 4 6 5 1 16 1 0 13
NHS Sunderland CCG 2 5 5 0 2 1 25 6 0 6
NHS Surrey Downs CCG 10 2 2 0 16 0 0 1 2 0
NHS Surrey Heath CCG 4 0 0 0 2 0 0 2 1 0
NHS Sutton CCG 2 0 4 1 12 0 1 6 0 1
NHS Swale CCG 2 0 2 1 2 0 6 5 0 2
NHS Swindon CCG 3 2 8 1 7 0 0 4 1 0
NHS Tameside And Glossop CCG 1 0 5 4 4 0 16 4 0 7
NHS Telford And Wrekin CCG 4 0 6 3 1 0 2 5 0 1
NHS Thanet CCG 1 5 5 0 2 0 3 0 0 4
NHS Thurrock CCG 1 3 2 7 8 0 4 8 0 1
NHS Tower Hamlets CCG 0 0 4 6 0 7 3 1 0 15
NHS Trafford CCG 3 2 3 0 15 0 0 6 1 5
NHS Vale Of York CCG 7 7 2 0 10 2 0 1 4 0
NHS Vale Royal CCG 0 0 2 0 5 0 0 4 1 0
NHS Wakefield CCG 7 0 14 0 3 0 10 2 1 3
NHS Walsall CCG 3 7 1 13 3 0 14 3 0 18
NHS Waltham Forest CCG 0 1 7 4 0 1 6 1 0 25
NHS Wandsworth CCG 0 0 10 1 1 13 3 8 3 2
NHS Warrington CCG 3 0 6 0 5 0 5 4 1 2
NHS Warwickshire North CCG 5 2 6 1 3 1 8 2 0 0
NHS West Cheshire CCG 6 6 2 0 14 1 3 1 1 2
NHS West Essex CCG 7 3 7 0 14 0 1 5 1 0
NHS West Hampshire CCG 26 8 4 0 9 0 0 3 2 0
NHS West Kent CCG 11 3 8 1 30 0 1 6 2 0
NHS West Lancashire CCG 0 7 1 0 8 0 2 1 0 3
NHS West Leicestershire CCG 14 3 6 0 23 1 1 2 0 0
NHS West London (K&C & QPP) CCG 1 2 1 0 6 18 13 3 0 9
NHS West Norfolk CCG 2 13 1 0 4 0 0 1 1 0
NHS West Suffolk CCG 10 6 2 0 3 0 0 2 2 0
NHS Wigan Borough CCG 3 2 1 3 9 0 32 7 1 7
NHS Wiltshire CCG 13 11 6 0 20 0 0 3 4 0
NHS Windsor, Ascot And Maidenhead CCG 7 0 2 0 7 0 0 3 0 0
NHS Wirral CCG 4 12 3 2 6 1 18 0 0 10
NHS Wokingham CCG 3 1 4 0 2 0 0 1 2 0
NHS Wolverhampton CCG 3 5 4 5 1 0 12 0 0 20
NHS Wyre Forest CCG 5 2 1 0 1 0 2 0 1 0