-
Notifications
You must be signed in to change notification settings - Fork 5
/
england.qmd
507 lines (435 loc) · 25.5 KB
/
england.qmd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
---
title: "Structural inequalities in General Practice in England"
format:
html:
code-fold: true
code-summary: "Click to show code"
fig-width: 90
fig-height: 25
execute:
echo: true
warning: false
---
```{r}
#| label: setup
#| warning: false
#| code-summary: "Show the set up code"
# Load necessary libraries
library(ggplot2)
library(tidyverse)
library(magrittr)
# Set up the ggplot theme
theme_set(
theme_minimal() +
theme(
axis.title = element_text(size = 100),
axis.text = element_text(size = 100),
plot.caption = element_text(size = 80),
plot.title = element_text(size = 120),
plot.subtitle = element_text(size = 110),
panel.grid = element_line(size = 5),
legend.title = element_text(size = 80),
legend.text = element_text(size = 80),
legend.key.width = unit(3.5, "cm"),
plot.title.position = "plot"
)
)
update_geom_defaults("point", list(size = 50))
df <- read.csv("https://raw.githubusercontent.com/HealthEquityEvidenceCentre/HEEC/refs/heads/main/datapacks/final_data.csv")
# The following code is used for data at ICB level
# If there were no practices in the most deprived quintile in the ICB, this line will still create a datapoint representing the most deprived practices in that ICB (is not required for country level data)
# df[is.na(df$quin_4) & is.na(df$quin_5), ]
#
# If quin_5 is NA (missing), code assigns the value from quin_4 to quin_5.
# If quin_5 is not NA, it retains its value
# (Not required for country level data)
# Note the use of the [magrittr pipe %<>%](https://magrittr.tidyverse.org/reference/compound.html?q=%%3C%3E%#ref-usage)
# df %<>%
# mutate(quin_5 = ifelse(is.na(quin_5), quin_4, quin_5))
```
## Introduction
- Strong primary care is associated with more equitable health outcomes.
- A key role of commissioners is to ensure the equitable distribution of resources across the system.
- We present the latest NHS primary care data, using [Index of Multiple Deprivation (IMD)](#imd) to examine inequalities existing in primary care access, experience and outcomes, across the following categories:
- **Resources (supply)**: Payments, Workforce
- **Population (demand)**: Disease prevalence, Health-related behaviours
- **Service quality**: QOF achievement
- **Access**: Patient experience, Appointments
- **Impact on secondary care**: Emergency admissions, A&E attendances
- This analysis was produced by the [Health Equity Evidence Centre](https://www.heec.co.uk/). Additional data and analysis is available on [GitHub](https://github.com/HealthEquityEvidenceCentre/HEEC).
- For further information or to discuss the results, please contact [Dr John Ford](mailto:[email protected]) or [Mr Cameron Appel](mailto:[email protected]).
## Inequality in Life Expectancy
```{r Life_Expectancy}
#| fig-alt: "Dumbbell chart with average life expectancy for England GP Practices. Split by female and male."
year <- 2020
df_filter <- df %>%
filter(ICB.NAME == "England") %>%
filter(Year == year) %>%
filter(Indicator %in% c("Life_Expectancy_Female", "Life_Expectancy_Male"))
df_filter %>%
ggplot(., aes(x = Indicator)) +
geom_linerange(aes(x = Indicator, ymin = quin_5, ymax = quin_1)) +
geom_point(aes(y = quin_1, color = "Least deprived")) +
geom_point(aes(y = quin_5, color = "Most deprived")) +
geom_point(aes(y = avg, color = "National average"), size = 15, shape = 18) +
scale_x_discrete(labels = c(
"Life_Expectancy_Female" = "Female",
"Life_Expectancy_Male" = "Male"
)) +
scale_color_manual(values = c("Least deprived" = "#009639", "Most deprived" = "#003087", "National average" = "#DA291C")) +
labs(
x = NULL, y = NULL,
title = paste0("Life expectancy by practice, birth cohort 2016-20 (England)"),
subtitle = "Practices in most and least deprived IMD quintiles.",
colour = "",
caption = "Source: NHS England GP Workforce statistics, 2024. © Health Equity Evidence Centre, 2024."
) +
coord_flip() +
guides(colour = guide_legend(override.aes = list(size = 50, shape = c(16, 16, 18))))
```
Average life expectancy for males is **`r round(df_filter[df_filter$Indicator == "Life_Expectancy_Male", ]$quin_1, 1)`** in the least deprived 20% and **`r round(df_filter[df_filter$Indicator == "Life_Expectancy_Male", ]$quin_5, 1)`** in the most deprived 20%.
Average life expectancy for females is **`r round(df_filter[df_filter$Indicator == "Life_Expectancy_Female", ]$quin_1, 1)`** in the least deprived 20% and **`r round(df_filter[df_filter$Indicator == "Life_Expectancy_Female", ]$quin_5, 1)`** in the most deprived 20%.
## Inequality in NHS Payments
```{r payments}
#| fig-alt: "Dumbbell chart with mean payment per weighted patient 2022/23 for England GP Practices. Split by All practices, Non-dispensing practice and Dispensing practices. Non dispensing practices are the closes between least and most deprived whilst Dispensing practices is a higher cost overall."
year <- 2023
df_filter <- df %>%
filter(ICB.NAME == "England") %>%
filter(Year == year) %>%
filter(Indicator %in% c("payment_per_patient_all", "payment_per_patient_disp", "payment_per_patient_non_disp")) %>%
mutate(Indicator = factor(Indicator, levels = c("payment_per_patient_disp", "payment_per_patient_non_disp", "payment_per_patient_all")))
df_filter %>%
ggplot(., aes(x = Indicator)) +
geom_linerange(aes(x = Indicator, ymin = quin_5, ymax = quin_1)) +
geom_point(aes(y = quin_1, color = "Least deprived")) +
geom_point(aes(y = quin_5, color = "Most deprived")) +
geom_point(aes(y = avg, color = "National average"), size = 15, shape = 18) +
scale_x_discrete(labels = c(
"payment_per_patient_all" = "All practices",
"payment_per_patient_disp" = "Dispensing practices",
"payment_per_patient_non_disp" = "Non-dispensing practices"
)) +
scale_color_manual(values = c("Least deprived" = "#009639", "Most deprived" = "#003087", "National average" = "#DA291C")) +
labs(
x = NULL, y = NULL,
title = paste0("Mean payment per weighted patient, 2022/23 (England)"),
subtitle = "Practices in most and least deprived IMD quintiles",
colour = "",
caption = "Source: NHS England Payments to General Practice, 2022/23. © Health Equity Evidence Centre, 2024."
) +
coord_flip() +
guides(colour = guide_legend(override.aes = list(size = 50, shape = c(16, 16, 18))))
```
Average payment per weighted patient is **£`r round(df_filter[df_filter$Indicator == "payment_per_patient_all", ]$quin_5, 2)`** in the most deprived 20% of practices, versus **£`r round(df_filter[df_filter$Indicator == "payment_per_patient_all", ]$quin_1, 2)`** in the least deprived 20%.
## Inequality in Workforce
```{r workforce}
#| fig-alt: "Dumbbell chart with average full time equivalent stff per 10,000 per weighted patients 2023/24 for England GP Practices. Split by 6 categories of healthcare staff the highest number of staff are for admin/non-clinical whilst lowest is PCN-funded staff (all types). The only categories where there is some gap between deprivation is for fully qualiffied permanent GPs and direct patient care."
year <- 2024
df_filter <- df %>%
filter(ICB.NAME == "England") %>%
filter(Year == year) %>%
filter(Indicator %in% c("TOTAL_GP_EXTGL_FTE", "TOTAL_LOCUUM_TRN_FTE", "TOTAL_NURSES_FTE", "TOTAL_ADMIN_FTE", "TOTAL_DPC_FTE", "PCN_staff")) %>%
mutate(Indicator = factor(Indicator, levels = c("PCN_staff", "TOTAL_ADMIN_FTE", "TOTAL_DPC_FTE", "TOTAL_NURSES_FTE", "TOTAL_LOCUUM_TRN_FTE", "TOTAL_GP_EXTGL_FTE")))
df_filter %>%
ggplot(., aes(x = Indicator)) +
geom_linerange(aes(x = Indicator, ymin = quin_5, ymax = quin_1)) +
geom_point(aes(y = quin_1, color = "Least deprived")) +
geom_point(aes(y = quin_5, color = "Most deprived")) +
geom_point(aes(y = avg, color = "National average"), size = 15, shape = 18) +
scale_x_discrete(labels = c(
"TOTAL_GP_EXTGL_FTE" = "Fully-qualified permanent GPs",
"TOTAL_LOCUUM_TRN_FTE" = "GPs in training grade & locuums",
"TOTAL_NURSES_FTE" = "Nurses",
"TOTAL_ADMIN_FTE" = "Admin/Non-clinical",
"TOTAL_DPC_FTE" = "Direct patient care",
"PCN_staff" = "PCN-funded staff (all types)"
)) +
scale_color_manual(values = c("Least deprived" = "#009639", "Most deprived" = "#003087", "National average" = "#DA291C")) +
labs(
x = NULL, y = NULL,
title = paste0("Average staff FTE per 10,000 weighted patients, 2023/24 (England)"),
subtitle = "Practices in most and least deprived IMD quintiles",
colour = "",
caption = "Source: NHS England GP Workforce & PCN Workforce, 2023-24. © Health Equity Evidence Centre, 2024."
) +
coord_flip() +
guides(colour = guide_legend(override.aes = list(size = 50, shape = c(16, 16, 18))))
```
Average fully-qualified GPs FTE per 10,000 weighted patients is **`r round(df_filter[df_filter$Indicator == "TOTAL_GP_EXTGL_FTE", ]$quin_5, 1)`** per weighted patient in the most deprived 20% of practices in England versus **`r round(df_filter[df_filter$Indicator == "TOTAL_GP_EXTGL_FTE", ]$quin_1, 1)`** in the least deprived 20%.
## Inequality in Health-related Behaviours
```{r behaviours}
#| fig-alt: "Dumbbell chart with average prevalence of health related behaviours for 2024 for England GP Practices. Split by current smokers (over 15), obesity (over 18) and hypertension (all ages). The widest gap is for smokers, followed by obesity then hypertension which is the only one where least deprived is lower on the % scale."
year <- 2024
df_filter <- df %>%
filter(ICB.NAME == "England") %>%
filter(Year == year) %>%
filter(Indicator %in% c("Hypertension: QOF prevalence (all ages)", "Obesity: QOF prevalence (18+ yrs)", "Smoking prevalence in adults (15+) - current smokers (QOF)"))
# divide by 100 to get percentage
df_filter$quin_1 <- df_filter$quin_1 / 100
df_filter$quin_5 <- df_filter$quin_5 / 100
df_filter$avg <- df_filter$avg / 100
df_filter %>%
ggplot(., aes(x = Indicator)) +
geom_linerange(aes(x = Indicator, ymin = quin_5, ymax = quin_1)) +
geom_point(aes(y = quin_1, color = "Least deprived")) +
geom_point(aes(y = quin_5, color = "Most deprived")) +
geom_point(aes(y = avg, color = "National average"), size = 15, shape = 18) +
scale_x_discrete(labels = c(
"Smoking prevalence in adults (15+) - current smokers (QOF)" = "Current smokers (15+ yrs)",
"Obesity: QOF prevalence (18+ yrs)" = "Obesity (18+ yrs)",
"Hypertension: QOF prevalence (all ages)" = "Hypertension (all ages)"
)) +
scale_y_continuous(
labels = scales::percent,
limits = c(0, 0.25)
) +
scale_color_manual(values = c("Least deprived" = "#009639", "Most deprived" = "#003087", "National average" = "#DA291C")) +
labs(
x = NULL, y = NULL,
title = paste0("Average prevalence of health-related behaviours, ", year, " (England)"),
subtitle = "Practices in most and least deprived IMD quintiles",
colour = "",
caption = "Source: NHS England Quality and Outcomes Framework, 2023/24. © Health Equity Evidence Centre, 2024."
) +
coord_flip() +
guides(colour = guide_legend(override.aes = list(size = 50, shape = c(16, 16, 18))))
```
Average prevalence of current smokers (15+ years) is **`r round(df_filter[df_filter$Indicator == "Smoking prevalence in adults (15+) - current smokers (QOF)", ]$quin_5*100, 1)`%** in the most deprived 20% of practices in England versus **`r round(df_filter[df_filter$Indicator == "Smoking prevalence in adults (15+) - current smokers (QOF)", ]$quin_1*100, 1)`%** in the least deprived 20%.
## Inequality in Disease Prevalence
```{r prevalence}
#| fig-alt: "Dumbbell chart with average disease prevalence for 2023 for England GP Practices. Split by 13 health categories. The highest and also has the widest gap for deprivation is depression (over 18 years), followed by diabetes (over 17 years)"
year <- 2023
df_filter <- df %>%
filter(ICB.NAME == "England") %>%
filter(Year == year) %>%
filter(Indicator %in% c(
"Atrial fibrillation: QOF prevalence (all ages)",
"Asthma: QOF prevalence (6+ yrs)",
"CHD: QOF prevalence (all ages)", "CKD: QOF prevalence (18+ yrs)", "COPD: QOF prevalence (all ages)", "Dementia: QOF prevalence (all ages)", "Depression: QOF prevalence (18+ yrs)", "Diabetes: QOF prevalence (17+ yrs)", "Epilepsy: QOF prevalence (18+ yrs)", "Heart failure with LVSD: QOF prevalence (all ages)", "Learning disability: QOF prevalence (all ages)", "Mental Health: QOF prevalence (all ages)", "Stroke: QOF prevalence (all ages)"
))
# divide by 100 to get percentage
df_filter$quin_1 <- df_filter$quin_1 / 100
df_filter$quin_5 <- df_filter$quin_5 / 100
df_filter$avg <- df_filter$avg / 100
df_filter %>%
ggplot(., aes(x = Indicator)) +
geom_linerange(aes(x = Indicator, ymin = quin_5, ymax = quin_1)) +
geom_point(aes(y = quin_1, color = "Least deprived")) +
geom_point(aes(y = quin_5, color = "Most deprived")) +
geom_point(aes(y = avg, color = "National average"), size = 15, shape = 18) +
scale_x_discrete(labels = c(
"Atrial fibrillation: QOF prevalence (all ages)" = "Atrial fibrillation (all ages)",
"Asthma: QOF prevalence (6+ yrs)" = "Asthma (6+ yrs)",
"CHD: QOF prevalence (all ages)" = "Coronary heart disease (all ages)",
"CKD: QOF prevalence (18+ yrs)" = "Chronic kidney disease (18+ yrs)",
"COPD: QOF prevalence (all ages)" = "Chronic obstructive pulmonary disease (all ages)",
"Depression: QOF prevalence (18+ yrs)" = "Depression (18+ yrs)",
"Diabetes: QOF prevalence (17+ yrs)" = "Diabetes (17+ yrs)",
"Epilepsy: QOF prevalence (18+ yrs)" = "Epilepsy (18+ yrs)",
"Heart failure with LVSD: QOF prevalence (all ages)" = "Heart failure (all ages)",
"Learning disability: QOF prevalence (all ages)",
"Mental Health: QOF prevalence (all ages)" = "Severe mental illness (all ages)",
"Stroke: QOF prevalence (all ages)" = "Stroke (all ages)"
)) +
scale_y_continuous(
labels = scales::percent
) +
scale_color_manual(values = c("Least deprived" = "#009639", "Most deprived" = "#003087", "National average" = "#DA291C")) +
labs(
x = NULL, y = NULL,
title = paste0("Average disease prevalence, ", year, " (England)"),
subtitle = "Practices in most and least deprived IMD quintiles",
colour = "",
caption = "Source: Office for Health Improvements and Disparities National GP Profiles, 2022/23. © Health Equity Evidence Centre, 2024."
) +
theme(
plot.title = element_text(
size = 105
),
plot.subtitle = element_text(
size = 90
)
) +
coord_flip() +
guides(colour = guide_legend(override.aes = list(size = 50, shape = c(16, 16, 18))))
```
Average prevalence of diabetes (17+ years) is **`r round(df_filter[df_filter$Indicator == "Diabetes: QOF prevalence (17+ yrs)", ]$quin_5*100, 1)`%** in the most deprived 20% of practices in England**, versus** **`r round(df_filter[df_filter$Indicator == "Diabetes: QOF prevalence (17+ yrs)", ]$quin_1*100, 1)`%** in the least deprived 20%.
Average prevalence of depression (18+ years) is **`r round(df_filter[df_filter$Indicator == "Depression: QOF prevalence (18+ yrs)", ]$quin_5*100, 1)`%** in the most deprived 20% of practices in England, versus **`r round(df_filter[df_filter$Indicator == "Depression: QOF prevalence (18+ yrs)", ]$quin_1*100, 1)`** **%** in the least deprived 20%.
## Inequality in Quality of Service
```{r quality}
#| fig-alt: "Dumbbell chart with average percentage prevalence of qof domains for 2023/24 for England GP Practices. Split by 6 categories the highes percentage is for qof points achieved followed by percentage of children 5 years received DTaP/IPV and 2 MMR which also has a considerable deprivation gap. "
df_filter <- df %>%
filter(ICB.NAME == "England") %>%
filter(Year == 2023 & Indicator %in% c(
"Last BP reading of patients (<80 yrs, with hypertension), in the last 12 months is <= 140/90 mmHg (denominator incl. PCAs)",
"IFCC-HbA1c <= 58 mmol/mol in patients with diabetes without frailty (denominator incl. PCAs)"
) |
Year == 2024 & Indicator %in% c(
"% QOF points achieved",
"child_imms",
"Women (25-49 yrs), with a record of cervical screening in the last 3.5 yrs (denominator incl. PCAs)",
"Women (50-64 yrs), with a record of cervical screening in the last 5.5 yrs (denominator incl. PCAs)"
)) %>%
mutate(Indicator = factor(Indicator, levels = c("Women (25-49 yrs), with a record of cervical screening in the last 3.5 yrs (denominator incl. PCAs)", "Women (50-64 yrs), with a record of cervical screening in the last 5.5 yrs (denominator incl. PCAs)", "Last BP reading of patients (<80 yrs, with hypertension), in the last 12 months is <= 140/90 mmHg (denominator incl. PCAs)", "IFCC-HbA1c <= 58 mmol/mol in patients with diabetes without frailty (denominator incl. PCAs)", "child_imms", "% QOF points achieved")))
# divide by 100 to get percentage
df_filter$quin_1 <- df_filter$quin_1 / 100
df_filter$quin_5 <- df_filter$quin_5 / 100
df_filter$avg <- df_filter$avg / 100
df_filter %>%
ggplot(., aes(x = Indicator)) +
geom_linerange(aes(x = Indicator, ymin = quin_5, ymax = quin_1)) +
geom_point(aes(y = quin_1, color = "Least deprived")) +
geom_point(aes(y = quin_5, color = "Most deprived")) +
geom_point(aes(y = avg, color = "National average"), size = 15, shape = 18) +
scale_x_discrete(labels = c(
"% QOF points achieved" = "QOF points achieved",
"Women (25-49 yrs), with a record of cervical screening in the last 3.5 yrs (denominator incl. PCAs)" = "Women (25-49 yrs) receiving cervical cancer screen last 3.5yrs",
"Women (50-64 yrs), with a record of cervical screening in the last 5.5 yrs (denominator incl. PCAs)" = "Women (50-64 yrs) receiving cervical cancer screen last 5.5yrs",
"child_imms" = "% Children 5y received DTaP/IPV and 2 MMR",
"Last BP reading of patients (<80 yrs, with hypertension), in the last 12 months is <= 140/90 mmHg (denominator incl. PCAs)" = "Last BP reading of hypertensive patients (<80 yrs) <= 140/90 mmHg",
"IFCC-HbA1c <= 58 mmol/mol in patients with diabetes without frailty (denominator incl. PCAs)" = "Last HbA1c of diabetic patients < = 68 mmol/mol"
)) +
scale_y_continuous(
labels = scales::percent
) +
scale_color_manual(values = c("Least deprived" = "#009639", "Most deprived" = "#003087", "National average" = "#DA291C")) +
labs(
x = NULL, y = NULL,
title = paste0("Average % achievement of QOF domains, 2023/24", " (England)"),
subtitle = "Practices in most and least deprived IMD quintiles",
colour = "",
caption = "Source: NHS England Quality and Outcomes Framework, 2022/23-2023/24. © Health Equity Evidence Centre, 2024."
) +
coord_flip() +
guides(colour = guide_legend(override.aes = list(size = 50, shape = c(16, 16, 18))))
```
Average QOF points achieved is **`r round(df_filter[df_filter$Indicator == "% QOF points achieved", ]$quin_5*100, 1)`%** in the most deprived 20% of practices in England, versus **`r round(df_filter[df_filter$Indicator == "% QOF points achieved", ]$quin_1*100, 1)`%** in the least deprived 20%.
## Inequality in Patient Experience
```{r exp}
#| fig-alt: "Dumbbell chart with average patient experience for 2023/24 for England GP Practices. Split by 5 categories of experience the lowest percentage is for continuity of care."
df_filter <- df %>%
filter(ICB.NAME == "England") %>%
filter(
Year == 2024 & Indicator %in% c(
"access_pct",
"continuity_pct",
"overall_pct",
"trust_pct"
) |
Year == 2023 & Indicator %in% c(
"cqc_rating"
)
) %>%
mutate(Indicator = factor(Indicator, levels = c("access_pct", "continuity_pct", "trust_pct", "cqc_rating", "overall_pct")))
df_filter %>%
ggplot(., aes(x = Indicator)) +
geom_linerange(aes(x = Indicator, ymin = quin_5, ymax = quin_1)) +
geom_point(aes(y = quin_1, color = "Least deprived")) +
geom_point(aes(y = quin_5, color = "Most deprived")) +
geom_point(aes(y = avg, color = "National average"), size = 15, shape = 18) +
scale_x_discrete(labels = c(
"overall_pct" = "Overall satisfaction",
"access_pct" = "Experience of contacting the surgery",
"continuity_pct" = "Continuity of care",
"trust_pct" = "Confidence and trust",
"cqc_rating" = "'Good' or 'Outstanding' CQC rating"
)) +
scale_y_continuous(
labels = scales::percent
) +
scale_color_manual(values = c("Least deprived" = "#009639", "Most deprived" = "#003087", "National average" = "#DA291C")) +
labs(
x = NULL, y = NULL,
title = paste0("Average patient experience, 2023/24 (England)"),
subtitle = "Practices in most and least deprived IMD quintiles",
colour = "",
caption = "Source: Ipsos GP Patient Survey, 2024 & CQC, 2023. © Health Equity Evidence Centre, 2024."
) +
coord_flip() +
guides(colour = guide_legend(override.aes = list(size = 50, shape = c(16, 16, 18))))
```
Average % of practices receiving 'Good' or 'Outstanding' CQC ratings is **`r round(df_filter[df_filter$Indicator == "cqc_rating", ]$quin_5*100, 1)`**% in the most deprived 20% of practices in England, versus **`r round(df_filter[df_filter$Indicator == "cqc_rating", ]$quin_1*100, 1)`%** in the least deprived 20%.
Average % of patients describing their experience as 'Good' is **`r round(df_filter[df_filter$Indicator == "overall_pct", ]$quin_5*100, 1)`%** in the most deprived 20% of practices in England, versus **`r round(df_filter[df_filter$Indicator == "overall_pct", ]$quin_1*100, 1)`%** in the least deprived 20%.
## Inequality in Appointments
```{r appts}
#| fig-alt: "Dumbbell chart with median appointments and did not attends per 10,000 weighted patients for March 2024 for England GP Practices. Split by telephone, face to face and didn't attend the highest numbers are for face to face with lowest for DNA. Most deprived had the lowest number except for DNA which was almost the same as least deprived."
year <- 2024
df_filter <- df %>%
filter(ICB.NAME == "England") %>%
filter(Year == year) %>%
filter(Indicator %in% c(
"Telephone", "Face-to-Face", "DNA"
))
df_filter %>%
ggplot(., aes(x = Indicator)) +
geom_linerange(aes(x = Indicator, ymin = quin_5, ymax = quin_1)) +
geom_point(aes(y = quin_1, color = "Least deprived")) +
geom_point(aes(y = quin_5, color = "Most deprived")) +
geom_point(aes(y = avg, color = "National average"), size = 15, shape = 18) +
scale_color_manual(values = c("Least deprived" = "#009639", "Most deprived" = "#003087", "National average" = "#DA291C")) +
labs(
x = NULL, y = NULL,
title = paste0("Median appointments and DNAs per 10,000 weighted patients, March 2024 (England)"),
subtitle = "Practices in most and least deprived IMD quintiles",
colour = "",
caption = "Source: NHS England Appointmets in General Practice, 2024. © Health Equity Evidence Centre, 2024."
) +
theme(
plot.title = element_text(
size = 105
),
plot.subtitle = element_text(
size = 95
)
) +
coord_flip() +
guides(colour = guide_legend(override.aes = list(size = 50, shape = c(16, 16, 18))))
```
Average number of Face-to-Face appointments per 10,000 weighted patients is **`r round(df_filter[df_filter$Indicator == "Face-to-Face", ]$quin_5, 1)`** in the most deprived 20% of practices in England, versus **`r round(df_filter[df_filter$Indicator == "Face-to-Face", ]$quin_1, 1)`** in the least deprived 20%.
## Inequality in Impact on Secondary Care
```{r secondary}
#| fig-alt: "Dumbbell chart with median emergency admissions or A&E attendances for the latest period in England GP Practices. Split by number of emergency admissions with cancer (from 2021), emergency admissions for ages 0-4 years (from 2022) and A&E attendances for 0-4 years (for 2023)the widest gap and highest numbers are for A&E attendances for children. "
df_filter <- df %>%
filter(ICB.NAME == "England") %>%
filter(Year == 2021 & Indicator %in% c(
"Emergency admissions (0 to 4 years) - CCG"
) |
Year == 2022 & Indicator %in% c(
"A&E attendances (0 to 4 years)"
) |
Year == 2023 & Indicator %in% c(
"Number of emergency admissions with cancer"
))
df_filter %>%
ggplot(., aes(x = Indicator)) +
geom_linerange(aes(x = Indicator, ymin = quin_5, ymax = quin_1)) +
geom_point(aes(y = quin_1, color = "Least deprived")) +
geom_point(aes(y = quin_5, color = "Most deprived")) +
geom_point(aes(y = avg, color = "National average"), size = 15, shape = 18) +
scale_x_discrete(labels = c(
"Number of emergency admissions with cancer" = "Number of emergency admissions with cancer",
"Emergency admissions (0 to 4 years) - CCG" = "Emergency admissions (0-4 yrs)",
"A&E attendances (0 to 4 years)" = "A&E attendances (0-4 yrs)"
)) +
scale_color_manual(values = c("Least deprived" = "#009639", "Most deprived" = "#003087", "National average" = "#DA291C")) +
labs(
x = NULL, y = NULL,
title = paste0("Median emergency admissions or A&E attendances, latest period (England)"),
subtitle = "Practices in most and least deprived IMD quintiles",
colour = "",
caption = "Source: Office for Health Improvements and Disparities National GP Profiles, 2022/23. © Health Equity Evidence Centre, 2024."
) +
theme(
plot.title = element_text(
size = 105
),
plot.subtitle = element_text(
size = 95
)
) +
coord_flip() +
guides(colour = guide_legend(override.aes = list(size = 50, shape = c(16, 16, 18))))
```
Average number of emergency admissions (0-4 years) is **`r round(df_filter[df_filter$Indicator == "Emergency admissions (0 to 4 years) - CCG", ]$quin_5, 1)`** in the most deprived 20% of practices in England, versus **`r round(df_filter[df_filter$Indicator == "Emergency admissions (0 to 4 years) - CCG", ]$quin_1, 1)`** in the least deprived 20%.
## Acknowledgements
- This work was contributed by the Health Equity Evidence Centre, and made possible through seed funding from NHS East of England team.