From 9431d0b562d251081a1b444c7845abd943bff474 Mon Sep 17 00:00:00 2001 From: viv3ckj Date: Tue, 14 Jan 2025 12:06:56 +0000 Subject: [PATCH] Create new msoa measures, and add action --- analysis/measures_definition_pf_breakdown.py | 2 - .../measures_definition_pf_deciles_table.py | 39 +++++++++++++++++++ lib/functions/plot_measures.R | 11 ------ project.yaml | 20 +++++++++- 4 files changed, 58 insertions(+), 14 deletions(-) create mode 100644 analysis/measures_definition_pf_deciles_table.py diff --git a/analysis/measures_definition_pf_breakdown.py b/analysis/measures_definition_pf_breakdown.py index 33159d4..54e4596 100644 --- a/analysis/measures_definition_pf_breakdown.py +++ b/analysis/measures_definition_pf_breakdown.py @@ -59,7 +59,6 @@ otherwise="Missing", ) -msoa_code = addresses.for_patient_on(INTERVAL.start_date).msoa_code pharmacy_first_ids = select_events(clinical_events, codelist=pf_consultation_events_dict["pf_consultation_services_combined"]).consultation_id # # Select clinical events in interval date range @@ -74,7 +73,6 @@ "imd": imd_quintile, "region": latest_region, "ethnicity": ethnicity_combined, - "msoa_code": msoa_code } # Define the denominator as the number of patients registered diff --git a/analysis/measures_definition_pf_deciles_table.py b/analysis/measures_definition_pf_deciles_table.py new file mode 100644 index 0000000..05db4a9 --- /dev/null +++ b/analysis/measures_definition_pf_deciles_table.py @@ -0,0 +1,39 @@ +from ehrql import INTERVAL, create_measures, months +from ehrql.tables.tpp import ( + clinical_events, + practice_registrations, + patients, + addresses, +) + +from codelists import pf_consultation_events_dict +from config import start_date_measure_pf_breakdown, monthly_intervals_measure_pf_breakdown +from pf_variables_library import select_events + +measures = create_measures() +measures.configure_dummy_data(population_size=1000) + +start_date = start_date_measure_pf_breakdown +monthly_intervals = monthly_intervals_measure_pf_breakdown + +registration = practice_registrations.for_patient_on(INTERVAL.end_date) +msoa_code = addresses.for_patient_on(INTERVAL.start_date).msoa_code +pharmacy_first_ids = select_events(clinical_events, codelist=pf_consultation_events_dict["pf_consultation_services_combined"]).consultation_id +# # Select clinical events in interval date range +selected_events = select_events(clinical_events, start_date=INTERVAL.start_date, end_date=INTERVAL.end_date).where( + clinical_events.consultation_id.is_in(pharmacy_first_ids) +) + +# Define the denominator as the number of patients registered +denominator = registration.exists_for_patient() & patients.sex.is_in(["male", "female"]) + +condition_events = select_events(select_events, codelist=pf_consultation_events_dict["pf_consultation_services_combined"]) +numerator = condition_events.count_for_patient() + +measures.define_measure( + name="count_pf_consultation_services_by_msoa", + numerator=numerator, + denominator=denominator, + group_by=msoa_code, + intervals=months(monthly_intervals).starting_on(start_date), +) diff --git a/lib/functions/plot_measures.R b/lib/functions/plot_measures.R index f2eb725..b39d0d5 100644 --- a/lib/functions/plot_measures.R +++ b/lib/functions/plot_measures.R @@ -161,17 +161,6 @@ save_figure <- function(figure, width = 10, height = 6) { ) } -compute_deciles <- function(data, column, measure_column, date_column) { - decile_probs <- seq(10, 90, 10) - data %>% - reframe( - measure = first(measure_column), - date = first(date_column), - decile_values = quantile(column, decile_probs), - decile_labels = decile_probs - ) -} - # Colour palettes gradient_palette <- c("#001F4D", "#0056B3", "#007BFF", "#66B3E2", "#A4D8E1", "grey") region_palette <- c("red", "navy", "#018701", "#ffa600ca", "purple", "brown", "#f4a5b2", "cyan", "green", "grey") diff --git a/project.yaml b/project.yaml index e02eb17..f7f14b4 100644 --- a/project.yaml +++ b/project.yaml @@ -56,4 +56,22 @@ actions: --output output/measures/consultation_med_counts_measures.csv outputs: moderately_sensitive: - measure: output/measures/consultation_med_counts_measures.csv \ No newline at end of file + measure: output/measures/consultation_med_counts_measures.csv + + generate_measures_deciles_table: + run: > + ehrql:v1 generate-measures analysis/measures_definition_pf_deciles_table.py + --dummy-tables dummy_tables + --output output/measures/deciles_measures.csv + outputs: + highly_sensitive: + cohort: output/measures/deciles_measures.csv + + generate_deciles: + run: > + ehrql:v1 generate-measures analysis/measures_definition_pf_consultation_med_counts.py + --dummy-tables dummy_tables + --output output/measures/consultation_med_counts_measures.csv + outputs: + moderately_sensitive: + measure: output/measures/consultation_med_counts_measures.csv \ No newline at end of file