From 9b67de705b92ae732dbd8e83fbc6768d859378a3 Mon Sep 17 00:00:00 2001 From: Matt Garber Date: Tue, 28 Nov 2023 10:18:11 -0500 Subject: [PATCH 01/17] PSM table generation --- cumulus_library/.sqlfluff | 2 +- cumulus_library/base_table_builder.py | 7 +- cumulus_library/databases.py | 10 +- cumulus_library/statistics/psm.py | 230 ++++++++++++++++++ .../psm_create_covariate_table.sql.jinja | 40 +++ .../statistics/psm_distinct_ids.sql.jinja | 14 ++ .../template_sql/statistics/psm_templates.py | 131 ++++++++++ cumulus_library/template_sql/templates.py | 16 ++ pyproject.toml | 3 +- tests/test_data/psm/psm_config.toml | 61 +++++ tests/test_data/psm/symptoms.json | 30 +++ 11 files changed, 540 insertions(+), 4 deletions(-) create mode 100644 cumulus_library/statistics/psm.py create mode 100644 cumulus_library/template_sql/statistics/psm_create_covariate_table.sql.jinja create mode 100644 cumulus_library/template_sql/statistics/psm_distinct_ids.sql.jinja create mode 100644 cumulus_library/template_sql/statistics/psm_templates.py create mode 100644 tests/test_data/psm/psm_config.toml create mode 100644 tests/test_data/psm/symptoms.json diff --git a/cumulus_library/.sqlfluff b/cumulus_library/.sqlfluff index 1bcd5df9..73fdba43 100644 --- a/cumulus_library/.sqlfluff +++ b/cumulus_library/.sqlfluff @@ -4,7 +4,7 @@ dialect = athena sql_file_exts = .sql,.sql.jinja # this rule overfires on athena nested arrays exclude_rules=references.from,structure.column_order,aliasing.unused -max_line_length = 88 +max_line_length = 90 [sqlfluff:indentation] template_blocks_indent = false diff --git a/cumulus_library/base_table_builder.py b/cumulus_library/base_table_builder.py index f8196578..ba937cd5 100644 --- a/cumulus_library/base_table_builder.py +++ b/cumulus_library/base_table_builder.py @@ -33,7 +33,12 @@ def prepare_queries(self, cursor: object, schema: str): """ raise NotImplementedError - @final + # 🚨🚨🚨 WARNING: 🚨🚨🚨 in 99% of cases, subclasses should *not* re-implement + # execute_queries. + + # If you know what you are doing, you can attempt to override it, but it is + # strongly recommended you invoke this as is via a super() call, and then + # run code before or after that as makes sense for your use case. def execute_queries( self, cursor: DatabaseCursor, diff --git a/cumulus_library/databases.py b/cumulus_library/databases.py index aa436cf1..389aee6b 100644 --- a/cumulus_library/databases.py +++ b/cumulus_library/databases.py @@ -1,4 +1,12 @@ -"""Abstraction layers for supported database backends (e.g. AWS & DuckDB)""" +"""Abstraction layers for supported database backends (e.g. AWS & DuckDB) + +By convention, to maintain this as a relatively light wrapper layer, if you have +to chose between a convenience function in a specific library (as an example, the +[pyathena to_sql function](https://github.com/laughingman7743/PyAthena/#to-sql)) +or using raw sql directly in some form, you should do the latter. This not a law; +if there's a compelling reason to do so, just make sure you add an appropriate +wrapper method in one of DatabaseCursor or DatabaseBackend. +""" import abc import datetime diff --git a/cumulus_library/statistics/psm.py b/cumulus_library/statistics/psm.py new file mode 100644 index 00000000..4b639099 --- /dev/null +++ b/cumulus_library/statistics/psm.py @@ -0,0 +1,230 @@ +# + +import numpy as np +import pandas +import toml + +# from psmpy import PsmPy +# from psmpy.functions import cohenD +from psmpy.plotting import * + +import json +from pathlib import PosixPath +from dataclasses import dataclass + +from cumulus_library.cli import StudyBuilder +from cumulus_library.databases import AthenaDatabaseBackend as AthenaDb +from cumulus_library.base_table_builder import BaseTableBuilder +from cumulus_library.template_sql.templates import ( + get_ctas_query_from_df, + get_drop_view_table, +) +from cumulus_library.template_sql.statistics.psm_templates import ( + get_distinct_ids, + get_create_covariate_table, +) +import os + + +@dataclass +class PsmConfig: + """Provides expected values for PSM execution""" + + pos_source_table: str + neg_source_table: str + target_table: str + primary_ref: str + count_ref: str + count_table: str + dependent_variable: str + pos_sample_size: int + neg_sample_size: int + join_cols_by_table: dict[str, dict] + seed: int = 1234567890 + + +class PsmBuilder(BaseTableBuilder): + display_text = "Building PSM tables..." + + def __init__(self, toml_config_path: str): + with open(toml_config_path, encoding="UTF-8") as file: + toml_config = toml.load(file) + self.config = PsmConfig( + pos_source_table=toml_config["pos_source_table"], + neg_source_table=toml_config["neg_source_table"], + target_table=toml_config["target_table"], + primary_ref=toml_config["primary_ref"], + dependent_variable=toml_config["dependent_variable"], + pos_sample_size=toml_config["pos_sample_size"], + neg_sample_size=toml_config["neg_sample_size"], + join_cols_by_table=toml_config["join_cols_by_table"], + count_ref=toml_config.get("count_ref", None), + count_table=toml_config.get("count_table", None), + seed=toml_config.get("seed", None), + ) + super().__init__() + + def _get_symptoms_dict(self, path: str) -> dict: + with open(path) as f: + symptoms = json.load(f) + return symptoms + + # Todo: replace cusror object with new dbcursor object + + def _get_sampled_ids( + self, + cursor: object, + schema: str, + query: str, + sample_size: int, + label: str, + is_positive: bool, + ): + """Creates a table containing randomly sampled patients for PSM analysis + + To use this, it is assumed you have already identified a cohort of positively + IDed patients as a manual process. + TODO: recommend a name + """ + df = cursor.execute(query).as_pandas() + df = ( + df.sort_values(by=list(df.columns)) + .reset_index() + .sample(n=sample_size, random_state=self.config.seed) + ) + df[label] = is_positive + return df + + def _create_covariate_table(self, cursor: object, schema: str): + # checks for primary & link ref being the same + source_refs = list({self.config.primary_ref, self.config.count_ref}) + + # Sample a set of ids inside/outside of the cohort + pos_query = get_distinct_ids(source_refs, self.config.pos_source_table) + pos = self._get_sampled_ids( + cursor, + schema, + pos_query, + self.config.pos_sample_size, + self.config.dependent_variable, + 1, + ) + neg_query = get_distinct_ids( + source_refs, + self.config.neg_source_table, + join_id=self.config.primary_ref, + filter_table=self.config.pos_source_table, + ) + neg = self._get_sampled_ids( + cursor, + schema, + neg_query, + self.config.neg_sample_size, + self.config.dependent_variable, + 0, + ) + cohort = pandas.concat([pos, neg]) + + # Replace table (if it exists) + # drop = get_drop_view_table(f"{self.config.pos_source_table}_sampled_ids", 'TABLE') + # cursor.execute(drop) + ctas_query = get_ctas_query_from_df( + schema, f"{self.config.pos_source_table}_sampled_ids", cohort + ) + self.queries.append(ctas_query) + # drop = get_drop_view_table(self.config.target_table, 'TABLE') + # cursor.execute(drop) + dataset_query = get_create_covariate_table( + target_table=self.config.target_table, + pos_source_table=self.config.pos_source_table, + neg_source_table=self.config.neg_source_table, + primary_ref=self.config.primary_ref, + dependent_variable=self.config.dependent_variable, + join_cols_by_table=self.config.join_cols_by_table, + count_ref=self.config.count_ref, + count_table=self.config.count_table, + ) + self.queries.append(dataset_query) + + def generate_psm_analysis(self, cursor: object, schema: str): + df = cursor.execute(f"select * from {self.config.target_table}").as_pandas() + symptoms_dict = self._get_symptoms_dict( + "../../tests/test_data/psm/symptoms.json" + ) + for dependent_variable, codes in symptoms_dict.items(): + df[dependent_variable] = df["code"].apply(lambda x: 1 if x in codes else 0) + df = df.drop(columns="code") + df = df.drop(columns="instance_count") + for column in ["gender", "race"]: + encoded_df = pandas.get_dummies(df[column]) + df = pandas.concat([df, encoded_df], axis=1) + df = df.drop(column, axis=1) + df = df.reset_index() + try: + psm = PsmPy( + df, + treatment=self.config.dependent_variable, + indx=self.config.primary_ref, + exclude=[], + ) + psm.logistic_ps(balance=True) + print(psm.predicted_data) + psm.knn_matched( + matcher="propensity_logit", + replacement=False, + caliper=None, + drop_unmatched=True, + ) + print(psm.df_matched) + except ZeroDivisionError: + print( + "Encountered a divide by zero error during statistical graph generation. Try increasing your sample size." + ) + except ValueError: + print( + "Encountered a value error during KNN matching. Try increasing your sample size." + ) + + def prepare_queries(self, cursor: object, schema: str): + self._create_covariate_table(cursor, schema) + + def execute_queries( + self, + cursor: object, + schema: str, + verbose: bool, + drop_table: bool = False, + ): + super().execute_queries(cursor, schema, verbose, drop_table) + self.generate_psm_analysis(cursor, schema) + + +if __name__ == "__main__": + arg_env_pairs = ( + ("profile", "CUMULUS_LIBRARY_PROFILE"), + ("schema_name", "CUMULUS_LIBRARY_DATABASE"), + ("workgroup", "CUMULUS_LIBRARY_WORKGROUP"), + ("region", "CUMULUS_LIBRARY_REGION"), + ("study_dir", "CUMULUS_LIBRARY_STUDY_DIR"), + ("data_path", "CUMULUS_LIBRARY_DATA_PATH"), + ("user", "CUMULUS_AGGREGATOR_USER"), + ("id", "CUMULUS_AGGREGATOR_ID"), + ("url", "CUMULUS_AGGREGATOR_URL"), + ) + args = {} + read_env_vars = [] + for pair in arg_env_pairs: + if env_val := os.environ.get(pair[1]): + if pair[0] == "study_dir": + args[pair[0]] = [env_val] + else: + args[pair[0]] = env_val + read_env_vars.append([pair[1], env_val]) + database = AthenaDb( + args["region"], args["workgroup"], args["profile"], args["schema_name"] + ) + builder = StudyBuilder(database) + psm = PsmBuilder(f"../../tests/test_data/psm/psm_config.toml") + psm.execute_queries( + database.pandas_cursor, builder.schema_name, False, drop_table=True + ) diff --git a/cumulus_library/template_sql/statistics/psm_create_covariate_table.sql.jinja b/cumulus_library/template_sql/statistics/psm_create_covariate_table.sql.jinja new file mode 100644 index 00000000..9d76dc41 --- /dev/null +++ b/cumulus_library/template_sql/statistics/psm_create_covariate_table.sql.jinja @@ -0,0 +1,40 @@ +CREATE TABLE {{ target_table }} AS ( + SELECT + DISTINCT sample_cohort."{{ primary_ref }}", + sample_cohort."{{ dependent_variable }}", + {%- if count_table %} + ( + SELECT COUNT( DISTINCT {{ primary_ref }} ) + FROM "{{ count_table }}" + WHERE sample_cohort."{{ count_ref }}" = "{{ count_table }}"."{{ count_ref }}" + --AND sample_cohort.enc_end_date >= "{{ count_table }}".recordeddate + ) AS instance_count, + {%- endif %} + {%- for key in join_cols_by_table %} + {%- for column in join_cols_by_table[key]["included_cols"] %} + {%- if column|length == 1 %} + "{{ key }}"."{{ column[0] }}", + {%- else %} + "{{ key }}"."{{ column[0] }}" AS "{{ column[1]}}", + {%- endif %} + {%- endfor %} + {%- endfor %} + {{ neg_source_table }}.code + FROM "{{ pos_source_table }}_sampled_ids" AS sample_cohort, + "{{ neg_source_table }}", + {%- for key in join_cols_by_table %} + "{{ key }}" + {%- if not loop.last -%} + , + {%- endif -%} + {% endfor %} + WHERE sample_cohort."{{ primary_ref }}" = "{{ neg_source_table }}"."{{ primary_ref }}" + {%- for key in join_cols_by_table %} + AND sample_cohort."{{ join_cols_by_table[key]["join_id"] }}" = "{{ key }}"."{{ join_cols_by_table[key]["join_id"] }}" + {%- if not loop.last -%} + , + {%- endif -%} + {% endfor %} + -- AND c.recordeddate <= sample_cohort.enc_end_date + ORDER BY sample_cohort."{{ primary_ref }}" +) \ No newline at end of file diff --git a/cumulus_library/template_sql/statistics/psm_distinct_ids.sql.jinja b/cumulus_library/template_sql/statistics/psm_distinct_ids.sql.jinja new file mode 100644 index 00000000..c14193d6 --- /dev/null +++ b/cumulus_library/template_sql/statistics/psm_distinct_ids.sql.jinja @@ -0,0 +1,14 @@ +SELECT DISTINCT +{%- for column in columns %} + "{{ source_table }}"."{{ column }}" + {%- if not loop.last -%} + , + {%- endif -%} +{%- endfor %} +FROM {{ source_table }} +{%- if join_id %} +WHERE "{{ source_table }}"."{{ join_id }}" NOT IN ( + SELECT "{{ filter_table }}"."{{ join_id }}" + FROM {{ filter_table }} +) +{%- endif -%} diff --git a/cumulus_library/template_sql/statistics/psm_templates.py b/cumulus_library/template_sql/statistics/psm_templates.py new file mode 100644 index 00000000..7eba1272 --- /dev/null +++ b/cumulus_library/template_sql/statistics/psm_templates.py @@ -0,0 +1,131 @@ +""" Collection of jinja template getters for common SQL queries """ +from enum import Enum +from pathlib import Path +from typing import Dict, List, Optional + +from jinja2 import Template +from pandas import DataFrame + +from cumulus_library.errors import CumulusLibraryError + + +class ExtensionConfig(object): + """convenience class for holding parameters for generating extension tables. + + :param source_table: the table to extract extensions from + :param source_id: the id column to treat as a foreign key + :param target_table: the name of the table to create + :param target_col_prefix: the string to prepend code/display column names with + :param fhir_extension: the URL of the FHIR resource to select + :param code_systems: a list of codes, in preference order, to use to select data + :param is_array: a boolean indicating if the targeted field is an array type + """ + + def __init__( + self, + source_table: str, + source_id: str, + target_table: str, + target_col_prefix: str, + fhir_extension: str, + ext_systems: List[str], + is_array: bool = False, + ): + self.source_table = source_table + self.source_id = source_id + self.target_table = target_table + self.target_col_prefix = target_col_prefix + self.fhir_extension = fhir_extension + self.ext_systems = ext_systems + self.is_array = is_array + + +def get_distinct_ids( + columns: list[str], source_table: str, join_id: str = None, filter_table: str = None +) -> str: + """Gets distinct ids from a table, optionally filtering by ids in another table + + This is expected to be used in two ways: + - To retrieve ids from a study cohort table + - To retreive ids from a core FHIR table, excluding ids in a cohort study table + + It is expected that, if supplying optional parameters, all of them must be set + + :param columns: a list of ids to request + :param source_table: the table to retrieve ids from + :param join_id: the id column to use for joining. Expected to exist in both source and filter tables + :param filter_table: a table containing ids you want to exclude + """ + if (join_id is None and filter_table is not None) or ( + join_id is not None and filter_table is None + ): + raise CumulusLibraryError( + "psm_templates.get_distinct_ids expects all optional parameters to be defined if supplied" + ) + + path = Path(__file__).parent + with open(f"{path}/psm_distinct_ids.sql.jinja") as distinct_ids: + return Template(distinct_ids.read()).render( + columns=columns, + source_table=source_table, + join_id=join_id, + filter_table=filter_table, + ) + + +def get_create_covariate_table( + target_table: str, + pos_source_table: str, + neg_source_table: str, + primary_ref: str, + dependent_variable: str, + join_cols_by_table: dict, + count_ref: str = None, + count_table: str = None, +) -> str: + """ """ + if (count_ref is None and count_table is not None) or ( + count_ref is not None and count_table is None + ): + raise CumulusLibraryError( + "psm_templates.get_create_covariate_table expects all count parameters to be defined if supplied" + ) + + path = Path(__file__).parent + with open(f"{path}/psm_create_covariate_table.sql.jinja") as create_covariate_table: + return Template(create_covariate_table.read()).render( + target_table=target_table, + pos_source_table=pos_source_table, + neg_source_table=neg_source_table, + primary_ref=primary_ref, + dependent_variable=dependent_variable, + count_ref=count_ref, + count_table=count_table, + join_cols_by_table=join_cols_by_table, + ) + + +def get_extension_denormalize_query(config: ExtensionConfig) -> str: + """extracts target extension from a table into a denormalized table + + This function is targeted at a complex extension element that is at the root + of a FHIR resource - as an example, see the 5 codes at the root node of + http://hl7.org/fhir/us/core/STU6/StructureDefinition-us-core-patient.html. + The template will create a new table with the extension data, in arrays, + mapped 1-1 to the table id. You can specify multiple systems + in the ExtensionConfig passed to this function. For each patient, we'll + take the data from the first extension coding system we find for each patient. + + :param config: An instance of ExtensionConfig. + """ + path = Path(__file__).parent + with open(f"{path}/extension_denormalize.sql.jinja") as extension_denormalize: + return Template(extension_denormalize.read()).render( + source_table=config.source_table, + source_id=config.source_id, + target_table=config.target_table, + target_col_prefix=config.target_col_prefix, + fhir_extension=config.fhir_extension, + ext_systems=config.ext_systems, + is_array=config.is_array, + ) diff --git a/cumulus_library/template_sql/templates.py b/cumulus_library/template_sql/templates.py index a407667b..18958f41 100644 --- a/cumulus_library/template_sql/templates.py +++ b/cumulus_library/template_sql/templates.py @@ -4,6 +4,7 @@ from typing import Dict, List, Optional from jinja2 import Template +from pandas import DataFrame from cumulus_library.errors import CountsBuilderError @@ -228,6 +229,21 @@ def get_ctas_query( ) +def get_ctas_query_from_df(schema_name: str, table_name: str, df: DataFrame) -> str: + """Generates a create table as query from a dataframe + + This is a convenience wrapper for get_ctas_query. + + :param schema_name: The athena schema to create the table in + :param table_name: The name of the athena table to create + :param df: A pandas dataframe + """ + split_dict = df.to_dict(orient="split") + return get_ctas_query( + schema_name, table_name, split_dict["data"], split_dict["columns"] + ) + + def get_ctas_empty_query( schema_name: str, table_name: str, table_cols: List[str] ) -> str: diff --git a/pyproject.toml b/pyproject.toml index fc218fed..28a2076c 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -7,7 +7,8 @@ dependencies = [ "duckdb >= 0.9", "fhirclient >= 4.1", "Jinja2 > 3", - "pandas <3, >=2.1.1", + "pandas <3, >=2.1.3", + "psmpy <1, >=0.3.13", "pyarrow >= 11.0", "pyathena >= 2.23", "requests >= 2.28", diff --git a/tests/test_data/psm/psm_config.toml b/tests/test_data/psm/psm_config.toml new file mode 100644 index 00000000..decc1720 --- /dev/null +++ b/tests/test_data/psm/psm_config.toml @@ -0,0 +1,61 @@ +# This is a config file for generating a propensity score matching (PSM) definition. + +# You can use this for selecting records for an expert review process, and you can +# also use it to generate statistics around your population that meets your selection +# criteria versus those that do not. + +# This attempts to handle the complexities of generating SQL queries for you, +# but you do need to know a little bit about what your data looks like in the +# database. We recommend that you only attempt to use this after you have decided +# on the first draft of your cohort selection criteria + +# pos_source_table should be a curated table built as part of a study, which +# has entities matching your selection criteria (probably patients, but it could +# be another base FHIR resource) +pos_source_table = "core__psm_cohort" +# neg_source_table should be the primary table your positive source was built from, +# i.e. it should contain all members that weren't identified as part of your cohort. +# It should be one of the base FHIR resource tables +neg_source_table = "core__condition" +# target_table should be the name of the table you're storing your PSM cohort in. It +# should be prefixed by 'studyname__' +target_table = "core__psm_encounter_covariate" +# primary_ref should be the column name from your pos_source_table that is the item +# of interest. it should have the same name as it did when it was selected +#from neg_source_table +primary_ref = 'encounter_ref' +# count_ref is an optional second ref in your positive_source table that can be used +# to id the number of instances associated with your primary_ref. It is only used +# for validation +count_ref = 'subject_ref' +# count_table is the table to use to select your count_ref from. It should :probably: +# be the same as your neg_source_table +count_table = 'core__condition' +# dependent_variable is the name to use for identifying which cohort a record is in. +# It should be phrased such that a value of true would indicate it is originally from +# your pos_source_table. +dependent_variable = "example_diagnosis" +# pos_sample_size is the number of records to select from your pos_source_table. +# It should be no smaller than 20. +pos_sample_size = 20 +# neg_sample_size is the number of records to select from your neg_source_table. +# It should be no smaller than 20. +neg_sample_size = 60 +# [join_cols_by_table.table_name] allows you to add arbitrary data from other sources +# to your target_table. it should be comprised of two keys: +# - join_id - the field to use to join to your cohort table. It should :probably: +# be the primary ref. +# - included_cols - a list of columns to join from the table in question. An array +# of one string string will be included as the column name. An array of two strings +# will create an alias, like "table_name.first_string AS second_str" +# You can join as many tables as you like. +[join_cols_by_table.core__encounter] +join_id = "encounter_ref" +included_cols = [ + ["gender"], + ["race_display", "race"] +] +# You can, if needed, select a new random seed value for count sampling. This is used +# to make sure that, for a given population, you'll always get the same sample set +# for repeatability. You probably don't need to use this. +# seed = 123 \ No newline at end of file diff --git a/tests/test_data/psm/symptoms.json b/tests/test_data/psm/symptoms.json new file mode 100644 index 00000000..dc1efb52 --- /dev/null +++ b/tests/test_data/psm/symptoms.json @@ -0,0 +1,30 @@ +{ + "Intellectual Disabilities": ["F70", "F71", "F72", "F73", "F88", "F79"], + "Communication Disorders": ["F80.9", "F80.0", "F80.81", "F80.89", "F80.9"], + "Autism Spectrum Disorder": ["F84.0"], + "Attention-Deficit/Hyperactivity Disorder": ["F90.0", "F90.1", "F90.2", "F90.8", "F90.9"], + "Specific Learning Disorder": ["F81.0", "F81.2", "F81.81"], + "Motor Disorders": ["F82", "F98.4"], + "Tic Disorders": ["F95.2", "F95.1", "F95.0", "F95.8", "F95.9"], + "Other Neurodevelopmental Disorders": ["F88", "F89"], + "Schizophrenia Spectrum and Other Psychotic Disorders": ["F21", "F22", "F23", "F20.81", "F20.9", "F25.0", "F25.1", "F06.0", "F06.2", "F28", "F29", "F06.1"], + "Bipolar Disorders": ["F31.0", "F31.1", "F31.10", "F31.11", "F31.12", "F31.13", "F31.2", "F31.3", "F31.30", "F31.31", "F31.32", "F31.4", "F31.5", "F31.6", "F31.60", "F31.61", "F31.62", "F31.63", "F31.64", "F31.7", "F31.70", "F31.71", "F31.72", "F31.73", "F31.74", "F31.75", "F31.76", "F31.77", "F31.78", "F31.8", "F31.81", "F34.0", "F06.33", "F06.34", "F31.89", "F31.9"], + "Depressive Disorders": ["F34.8", "F32.0", "F32.1", "F32.2", "F32.3", "F32.4", "F32.5", "F32.8", "F32.81", "F32.89", "F32.9", "F33.0", "F33.1", "F33.2", "F33.3", "F33.4", "F33.40", "F33.41", "F33.42", "F33.8", "F33.9", "F34.1", "N94.3", "F06.31", "F06.32", "F06.34", "F32.8", "F32.9"], + "Anxiety Disorders": ["F93.0", "F94.0", "F40.218", "F40.228", "F40.230", "F40.231", "F40.232", "F40.233", "F40.248", "F40.298", "F40.10", "F41.0", "F40.00", "F41.1", "F06.4", "F41.8", "F41.9"], + "Obsessive-Compulsive and Related Disorders": ["F42", "F45.22", "F63.2", "L98.1", "F06.8"], + "Trauma- and Stressor-Related Disorders": ["F94.1", "F94.2", "F43.10", "F43.0", "F43.20", "F43.21", "F43.22", "F43.23", "F43.24", "F43.25", "F43.8", "F43.9"], + "Dissociative Disorders": ["F44.81", "F44.0", "F44.1", "F48.1", "F44.89", "F44.9"], + "Somatic Symptom and Related Disorders": ["F45.1", "F45.21", "F44.4", "F44.5", "F44.6", "F44.7", "F54", "F68.10", "F45.8", "F45.9"], + "Feeding and Eating Disorders": ["F98.3", "F50.8", "F98.21", "F50.01", "F50.02", "F50.2", "F50.9"], + "Elimination Disorders": ["F98.0", "F98.1", "N39.498", "R15.9", "R32", "R15.9"], + "Sleep-Wake Disorders": ["G47.00", "G47.10", "G47.411", "G47.419", "G47.429", "G47.33", "G47.31", "G47.37", "R06.3", "G47.37", "G47.34", "G47.35", "G47.36", "G47.20", "G47.21", "G47.22", "G47.23", "G47.24", "G47.26", "F51.3", "F51.4", "F51.5", "G47.52", "G25.81", "G47.09", "G47.00", "G47.19", "G47.10", "G47.8", "G47.9"], + "Sexual Dysfunctions": ["F52.32", "F52.21", "F52.31", "F52.22", "F52.6", "F52.0", "F52.4", "F52.8", "F52.9"], + "Gender Dysphoria": ["F64.1", "F64.2", "F64.8", "F64.9"], + "Disruptive, Impulse-Control, and Conduct Disorders": ["F91.3", "F63.81", "F91.1", "F91.2", "F91.9", "F60.2", "F63.1", "F63.3", "F91.8", "F91.9"], + "Substance-Related and Addictive Disorders": ["F10.10", "F10.20", "F10.129", "F10.229", "F10.929", "F10.239", "F10.232", "F10.99", "F15.929", "F15.93", "F15.99", "F12.10", "F12.20", "F12.129", "F12.229", "F12.929", "F12.122", "F12.222", "F12.922", "F12.288", "F12.99", "F16.10", "F16.20", "F16.129", "F16.229", "F16.929", "F16.983", "F16.99", "F18.10", "F18.20", "F18.129", "F18.229", "F18.929", "F18.99", "F11.10", "F11.20", "F11.129", "F11.229", "F11.929", "F11.122", "F11.222", "F11.922", "F11.23", "F11.99", "F13.10", "F13.20", "F13.129", "F13.229", "F13.929", "F13.239", "F13.232", "F13.99", "F15.10", "F14.10", "F15.20", "F14.20", "Z72.0", "F17.200", "F17.203", "F17.209", "F19.10", "F19.20", "F19.129", "F19.229", "F19.929", "F19.239", "F19.99", "F63.0"], + "Neurocognitive Disorders": ["F05", "R41.0", "F01.51", "F01.50", "G31.9", "G31.84", "F02.81", "F02.80", "R41.9"], + "Personality Disorders": ["F60.0", "F60.1", "F21", "F60.2", "F60.3", "F60.4", "F60.81", "F60.6", "F60.7", "F60.5", "F07.0", "F60.89", "F60.9"], + "Paraphilic Disorders": ["F65.3", "F65.2", "F65.81", "F65.51", "F65.52", "F65.4", "F65.0", "F65.1", "F65.89", "F65.9"], + "Other Mental Disorders": ["F06.8", "F09", "F99"], + "Medication-Induced Movement Disorders and Other Adverse Effects of Medication": ["G21.11", "G21.19", "G21.0", "G24.02", "G25.71", "G24.01", "G24.09", "G25.71", "G25.1", "G25.79", "T43.205A", "T43.205D", "T43.205S", "T50.905A", "T50.905D", "T50.905S"] +} \ No newline at end of file From fb745ff59935c9b5456bb23240b70384b72add84 Mon Sep 17 00:00:00 2001 From: Matt Garber Date: Thu, 30 Nov 2023 14:32:14 -0500 Subject: [PATCH 02/17] Reference SQL --- cumulus_library/statistics/psm.py | 6 +- cumulus_library/statistics/psm.sql | 111 +++++++++++++++++++++++++++++ 2 files changed, 116 insertions(+), 1 deletion(-) create mode 100644 cumulus_library/statistics/psm.sql diff --git a/cumulus_library/statistics/psm.py b/cumulus_library/statistics/psm.py index 4b639099..e41290ea 100644 --- a/cumulus_library/statistics/psm.py +++ b/cumulus_library/statistics/psm.py @@ -129,7 +129,9 @@ def _create_covariate_table(self, cursor: object, schema: str): # drop = get_drop_view_table(f"{self.config.pos_source_table}_sampled_ids", 'TABLE') # cursor.execute(drop) ctas_query = get_ctas_query_from_df( - schema, f"{self.config.pos_source_table}_sampled_ids", cohort + schema, + f"{self.config.pos_source_table}_sampled_ids", + cohort.drop("index", axis=1), ) self.queries.append(ctas_query) # drop = get_drop_view_table(self.config.target_table, 'TABLE') @@ -196,6 +198,8 @@ def execute_queries( drop_table: bool = False, ): super().execute_queries(cursor, schema, verbose, drop_table) + self.comment_queries() + self.write_queries() self.generate_psm_analysis(cursor, schema) diff --git a/cumulus_library/statistics/psm.sql b/cumulus_library/statistics/psm.sql new file mode 100644 index 00000000..869fff4e --- /dev/null +++ b/cumulus_library/statistics/psm.sql @@ -0,0 +1,111 @@ +-- noqa: disable=all +CREATE TABLE "cumulus_mhg_dev_db"."core__psm_cohort_sampled_ids" AS ( + SELECT * FROM ( + VALUES + ((cast('Patient/0b9f1de5dafc274110f78ee28f5eebd446b5b89f9f5ff18adf964694f6f7f8de' AS varchar),cast('Encounter/67f36354731b7591109ba73148a68354d717592e6a790310584c0579571c2d28' AS varchar),cast('1' AS varchar))), + ((cast('Patient/a50737315a9b5d74573be547a93de304072070fd9851da0429c9eb68398eebf4' AS varchar),cast('Encounter/445125bad3dadc0668513c26f029cd122ac923de5e1aa107887dec4f2b8f47de' AS varchar),cast('1' AS varchar))), + ((cast('Patient/a82d6443f6ef1e64b7542fd8d6bd8ae6fa08f525abfb2d6c212ce3a51883d8a7' AS varchar),cast('Encounter/b29ea4400966b83f380ecb8129e9939e62bcacc506b323677d70283a16ea5704' AS varchar),cast('1' AS varchar))), + ((cast('Patient/3aafe05267ec191199c697a4b9c0140f11d567ca1edcd97a6a91e9e35fa6d99e' AS varchar),cast('Encounter/439122de45e8b2d124d65a88a525903ba4837dc980e6b409f866dd1eaec7962f' AS varchar),cast('1' AS varchar))), + ((cast('Patient/0efd7a0cd26cae01e13fba909bcaafd445a2196117f4393c3b5f3c64245ef4c3' AS varchar),cast('Encounter/fc14df1992d4f7586914819bca5065c5b90d544e8c989be838ad8273a0bdb729' AS varchar),cast('1' AS varchar))), + ((cast('Patient/50d9fbe5f3b142203529a53224539d78402912db60079df4f0811425d35125bd' AS varchar),cast('Encounter/cde5079d2d482be0cec4d3d2d1fb2b4aee4f54362c2581be8d9f7bc45a9af85f' AS varchar),cast('1' AS varchar))), + ((cast('Patient/320cce52bca9cb00ff4d62fe3abc4ec7300352a595aaa7a0b2ee48e748a0d183' AS varchar),cast('Encounter/52c4f5a2eabf12e4638c71d58bd0cb2687253420aff63bd1d906245dee93bb0a' AS varchar),cast('1' AS varchar))), + ((cast('Patient/3ce81e6b3b15cd26d9e9a83fa30e9373a210f0043be485f056695ebaf9368ce3' AS varchar),cast('Encounter/f01b4c4a9f270612dbd848a5db348784085c9e8e709950acc30e081bc73d5c0b' AS varchar),cast('1' AS varchar))), + ((cast('Patient/882c579a63478216510dcc643be5e1553b7231a8361264d7594cbb9f648a2702' AS varchar),cast('Encounter/c0b6c2ae41ce701754fa3509b3da0a0c69887b3f2307c64325bd09ecb80b7873' AS varchar),cast('1' AS varchar))), + ((cast('Patient/15961cf1f22eec6dbeba54b865a64f2b3a3006ecb0a7e335c1658eaf596e2af4' AS varchar),cast('Encounter/86a3d6f926bd78c4944e38531529c1b06683a1760565d4c75f8488b5ff4e6856' AS varchar),cast('1' AS varchar))), + ((cast('Patient/bc5368114a8bdb40ea8b0a7edccd069ad80031d3431b5760a3b86e6a4392bf51' AS varchar),cast('Encounter/7d30da53d5aba36b0dd748c3d1724bcf16f500d607b778145143c25d9dd4ee22' AS varchar),cast('1' AS varchar))), + ((cast('Patient/0fa4f0987fe46c657539e3cd8a816d1facffd03b9ce7112e546fadc73744cad7' AS varchar),cast('Encounter/31702d82108744d3c3237af26c4dfb05cb43a418d1848e942845a17a301f2348' AS varchar),cast('1' AS varchar))), + ((cast('Patient/bc8118df3cc6fa0b285f509fab0462bf3a209f02afb5bf4cbb5a3c899ecd69e1' AS varchar),cast('Encounter/a1daaa4a62db8a906e8e736758d67ec3a4e9bc2aea86d42873f4b8b5c5ddd72b' AS varchar),cast('1' AS varchar))), + ((cast('Patient/f642ad9efcef7fd58fedef30b8c07359d0c85e591f100dcc8377efad28a40b01' AS varchar),cast('Encounter/a7c013f15a8467982a21873330c9d62c2baa4631544655cc3cd1566ff063487c' AS varchar),cast('1' AS varchar))), + ((cast('Patient/222f2355b10bc39bc9a9ded1ade0de8850b0af922e146b283a8d9df88469d7a0' AS varchar),cast('Encounter/4b11b7264ada1a8623048073243624979111ac81ce1128bb479b6800fa11fa90' AS varchar),cast('1' AS varchar))), + ((cast('Patient/b43c0a1d9273c8d4fc1b2161c5d26b1bcf6ceb9bcfe225f0b5f7b9983159f716' AS varchar),cast('Encounter/431ffa9723a074a69f27e1ef4a9351587537665894a33cc8d789281f73ef7942' AS varchar),cast('1' AS varchar))), + ((cast('Patient/aaa7627e62c99312fceef021302d48989a9a924ed9ac231f4656a5fd29ebfd26' AS varchar),cast('Encounter/1f024866da15f33d46a5a47f8205fc3ec0f4740ac7f28a88b6f219972388904a' AS varchar),cast('1' AS varchar))), + ((cast('Patient/ef85aff307071e783f17f0d42104fab8b19381c75ebc37d2d1b234fc4c4d74fe' AS varchar),cast('Encounter/ad3927be7a61b576ba6dc9e52c544df4e3a26aae513d17142a864f4315826583' AS varchar),cast('1' AS varchar))), + ((cast('Patient/b43c0a1d9273c8d4fc1b2161c5d26b1bcf6ceb9bcfe225f0b5f7b9983159f716' AS varchar),cast('Encounter/d73c40e2ce6ec09d79fe4ad59d7f5cebf96af8db5c7cc54cc2086f8e186941d3' AS varchar),cast('1' AS varchar))), + ((cast('Patient/b94aaae0b0a3ac7d91d0932c45454f7c86fec10c0e9ed685c4aad1f07cac570e' AS varchar),cast('Encounter/647e552513b9ab28e17172eb845755b8bc53e0244a649c7336851ad9334c2696' AS varchar),cast('1' AS varchar))), + ((cast('Patient/3df91db3c381bbdcfbea57bafdfe767098a77b75bdaefa73c30c3858fee67d0d' AS varchar),cast('Encounter/93d3bead1cf65fa4b4894b8615a95fe209b8fa99be8063e47b8755c6d8ceba42' AS varchar),cast('0' AS varchar))), + ((cast('Patient/ffcc85457a71630f8dedc905a6cf023e8009ff5efd938912fb5a5ceb845baef3' AS varchar),cast('Encounter/8cceb04ed38d8f2bda250a7c395b6600a8732b67d529eb18667378a561e1f296' AS varchar),cast('0' AS varchar))), + ((cast('Patient/8abce4d5b0dccae9ec56f6a6bf6ae24d7ffd83b2b51d951fe8b020ad29dc651a' AS varchar),cast('Encounter/fbd75ddcc9da85b96335e728e2494f1a42483c68e32b5bd793f5491419f8b60d' AS varchar),cast('0' AS varchar))), + ((cast('Patient/98e1dcad658f0d3ed713a77a3c4112ea3a21df316133c10b3151beb94ca3f5d6' AS varchar),cast('Encounter/bf760964ae2791399aaee56bd843aade0a37fbdf51117bbb8146aedead368ef3' AS varchar),cast('0' AS varchar))), + ((cast('Patient/75164294583880de42729d580678f3369052fbce2dd73a830bcdb8ea0fe1c37b' AS varchar),cast('Encounter/f82785991a0c447465f11f6c597abc996b16b948acc963a3758dc12cced483b8' AS varchar),cast('0' AS varchar))), + ((cast('Patient/fb13358126930ba503941673c6e391e3b480e2bf9a02c553544f35245e2c1524' AS varchar),cast('Encounter/e78a58870f16e5a669fea86eea36948c3c2f002cd5c2a1bac485c806c8c7d9f5' AS varchar),cast('0' AS varchar))), + ((cast('Patient/e122df8065e1be221a4be8fd83e5aab0df9de956bdc9a33c95be8a87b7ecb7fd' AS varchar),cast('Encounter/0455c2966f1fc4790fdda94091e4b07acb06ca9e133ee8421bc5141d3ac34e28' AS varchar),cast('0' AS varchar))), + ((cast('Patient/48bdb2af6fcf82cf726bb32489e2df57395c4ea20329e71f5bca964db6158cd2' AS varchar),cast('Encounter/bc113669f5a7cf61575b9cb26b75439241aebfabe199d09f835ec7dc0aab4420' AS varchar),cast('0' AS varchar))), + ((cast('Patient/09353bd6e097f59e51e5a113dbc388c2913a67adad3d257a9b672152db536b38' AS varchar),cast('Encounter/6b5fae7aa1e1f5b3601c5ba9e635c3ce71845648cad2962ce645039b0bbcf20e' AS varchar),cast('0' AS varchar))), + ((cast('Patient/9c1ed4fe0d350e90a015ad98ed40b29a702790401dd9072ad7694de2e6454935' AS varchar),cast('Encounter/407246eaba3f85f5c0cc95f4a544656e5a918f910fbd264a60206b0ec880837b' AS varchar),cast('0' AS varchar))), + ((cast('Patient/81d3c8642600779be157e4e7eed5026c3b9fff3b8e4edda2bdbd56e49ed8fabb' AS varchar),cast('Encounter/96c373509c2d1d3d3347af58b894b35346ff1b89fd853dd5f758ce624ccb8f51' AS varchar),cast('0' AS varchar))), + ((cast('Patient/e72f646baa605ed5d451859924d38bd1410f7e2cf5e7d52db6d0a4da01ecc496' AS varchar),cast('Encounter/37cdbcbd7d7f37c4298b153433524365fcddee35abdd882fb23395c53964d3d9' AS varchar),cast('0' AS varchar))), + ((cast('Patient/1a862a2288a4af65bed371c3926a91a88d7fb8cfe04e9a457d2674a8285fda83' AS varchar),cast('Encounter/396107165e308c599b4717ba5f1f0c433aa1d67ed92250eba24b4685db8669c0' AS varchar),cast('0' AS varchar))), + ((cast('Patient/72e6e9272902e39dbfd91aae3ac8f43929057fc4f0119fca826df8e468723488' AS varchar),cast('Encounter/b572f3d0e66722fc830cbd7750d4d702c67f7e2b6ea5838cfcaf18fe8a8fbf92' AS varchar),cast('0' AS varchar))), + ((cast('Patient/d22ebd757231d633594987fd8968bb34c4014a462613d66e57cb40b577e70734' AS varchar),cast('Encounter/a816500ecc5e4065c8cc89cd15df23f3f270f597baa6e6753afb647fd6a2de65' AS varchar),cast('0' AS varchar))), + ((cast('Patient/eead3f673bdaca10f12ceca63f1814fe8d528c3d9e2cfff99754a435ffab93f1' AS varchar),cast('Encounter/e3f35454c976ab35a7187c8069765ce26903e25660511cd2f7153aefb20f4d91' AS varchar),cast('0' AS varchar))), + ((cast('Patient/644ba99b38f92c0b41de2e3dfd95f83623718999f2ea5fc3a55e3c441200599b' AS varchar),cast('Encounter/fb80129e4cf335bd6f9ae459f868409d7a5041ef49df14eb0e4f60c9a9a5546b' AS varchar),cast('0' AS varchar))), + ((cast('Patient/a50737315a9b5d74573be547a93de304072070fd9851da0429c9eb68398eebf4' AS varchar),cast('Encounter/f2f328c162cccddc3e5f984a5526e9b38fad7ca03607f8d68e97ee1125b6589d' AS varchar),cast('0' AS varchar))), + ((cast('Patient/aaa7627e62c99312fceef021302d48989a9a924ed9ac231f4656a5fd29ebfd26' AS varchar),cast('Encounter/167c79720b8bc5dace5aa469f1e44b6010c3268677b6c27da2e554cdbd2fe903' AS varchar),cast('0' AS varchar))), + ((cast('Patient/a4cc07e6f913e52dbf19d4cd04e075841ed3a2c7e4ead3768653aefee20550d6' AS varchar),cast('Encounter/9c71ff5ce943d68ea0a357e74949891d3587a96d5c5658e534678398c37d28fe' AS varchar),cast('0' AS varchar))), + ((cast('Patient/e2f4ab84647ec23b988a7c99c6118e9d4fb9d243d0e53effa611b2386c9ed2c1' AS varchar),cast('Encounter/97ee812b1916a134a6ea9a9848c2a5696b8dbf09cad5a408d3b174ae6853ff30' AS varchar),cast('0' AS varchar))), + ((cast('Patient/841127bf03ccfce622dcce934fad77aa32abe9c606ce01248bf2eff04eefe1b4' AS varchar),cast('Encounter/1db1d61a14a6ef022d5d1d17b92a6e21ac03b0e189040a26e9051892fa51fe65' AS varchar),cast('0' AS varchar))), + ((cast('Patient/478ac40c9feea40cbe94cf25d493ecc7e4036cfe376256159f7c8ba27990661e' AS varchar),cast('Encounter/1271c2f2740c0bbb962fd2a851cbbe3a7f4c5883bff5a4b193317c38eae912f5' AS varchar),cast('0' AS varchar))), + ((cast('Patient/4201e61c1698b62091c78000f9850143a9179446e966d9d45a5eb0d783eb38e4' AS varchar),cast('Encounter/bc5be6306ac7e2fe796b55dcac7ab40a7687de52afe97d0ea9c6524b3d48ae74' AS varchar),cast('0' AS varchar))), + ((cast('Patient/00ce22d5bb5cae09c5942135c34c61660882ec658ecd78677a8dc43b77425073' AS varchar),cast('Encounter/8371856539df760e7cf25cf9171701d4e94501fef6fc10a40c81680936116ea0' AS varchar),cast('0' AS varchar))), + ((cast('Patient/644ba99b38f92c0b41de2e3dfd95f83623718999f2ea5fc3a55e3c441200599b' AS varchar),cast('Encounter/ec8d34043223974ef89abdce1cfa58c77710463a5b37baeebc2fc99d822d4f3c' AS varchar),cast('0' AS varchar))), + ((cast('Patient/e82e2afddb937682feeba017d5feccb488ee766ac50e1cda0d300725bc0ed983' AS varchar),cast('Encounter/55f08e011e60574906b692479460bbddd275a15d273bae40c662dfd30a848280' AS varchar),cast('0' AS varchar))), + ((cast('Patient/8a486e85a8faa75adcef0a684975b1c4a0d457b2787e31d7fe1a105cac231846' AS varchar),cast('Encounter/6afbc0dea2b609d1b7f724e5c12b743d65d12cd4c36f533ab29679f4dc4b0912' AS varchar),cast('0' AS varchar))), + ((cast('Patient/1f3f71df4383551b5c7ad5884a4baf098675d78bc3355a6a714ae20313c0934f' AS varchar),cast('Encounter/4bb11bd4187c8b0c3d79fb6153e2fe16e6645da62096da4712dc0b01dde30cd6' AS varchar),cast('0' AS varchar))), + ((cast('Patient/b7d8ac2e9432a829d977610d16063517ed1094ccc31c8bde5b34ef728d3fdf4f' AS varchar),cast('Encounter/38d139174da0e9360a474204ce77a3ec661cdadd0759777e0ab79c57f5ed1c2a' AS varchar),cast('0' AS varchar))), + ((cast('Patient/f8984e87c035d43fbf8aadc4616244e043fb2ed22121a16432bb7f201b0038c2' AS varchar),cast('Encounter/0f67621c010ebb0f10c7d55877fb03b4c4796dc25d2434b548c002c513cd568f' AS varchar),cast('0' AS varchar))), + ((cast('Patient/008ba32814086d4d030b5dce1c1248b2551fcefe7efd7cee21121c699aa22a0d' AS varchar),cast('Encounter/ead78d05b8c3342717cc56836063bcaccef9d9a5b2de2ed93dac50232c272f0b' AS varchar),cast('0' AS varchar))), + ((cast('Patient/941498945fdc323dbf18fd1b25552ec8a31801d306e63c1899946bfeed582c38' AS varchar),cast('Encounter/97e5ab4888251fdb8c9ac5defe7bc80aef32e405730e934ac8dc197bdb09c1d3' AS varchar),cast('0' AS varchar))), + ((cast('Patient/bdb91ea213cde98ab2e987417376a9a9d1b0abf2367b0c22ddfb6a149d1003d2' AS varchar),cast('Encounter/06ff3ff4021dfa32a984cad3781e6ff0877acc5238a651fba0c96cb340e27e67' AS varchar),cast('0' AS varchar))), + ((cast('Patient/9ac438286b83a9daee6c391f855ba434184c193b4653679f002318b9d01a6eb1' AS varchar),cast('Encounter/ffae8ce81cdf025ebb0930e87e0cbfe487498b29d552bfa9559ef80ffc4853eb' AS varchar),cast('0' AS varchar))), + ((cast('Patient/dc8856faa2091d73b687f4aa982402692d7cf56c4ed129404fbecf1faf54e9b0' AS varchar),cast('Encounter/cd52f1c3ee14383e4f3c84768b9d57e233994d310f91960f0d9666355fb5f44c' AS varchar),cast('0' AS varchar))), + ((cast('Patient/276e068ce8463e6dd018eca0d2684c928fe69b1a191d966ff3c70b10244310e0' AS varchar),cast('Encounter/cfdb52394c8d9f66e8f1479e352770fc23c76e1d1ba37d80b515e48105ae3e5d' AS varchar),cast('0' AS varchar))), + ((cast('Patient/c79c91e1346140dd41bbe8da9cf9d3b162bd23b42f0ab9d11d7901a11f61e18c' AS varchar),cast('Encounter/34e173220edae20dfb261c580043cdc69afc70d2875101ce837858ca829c52ef' AS varchar),cast('0' AS varchar))), + ((cast('Patient/e2f4ab84647ec23b988a7c99c6118e9d4fb9d243d0e53effa611b2386c9ed2c1' AS varchar),cast('Encounter/714a684cc1c57bcd2db8216883154b5543293978de149980ee0b0f443d55036c' AS varchar),cast('0' AS varchar))), + ((cast('Patient/8be278520c87cfde67943413692a0ab4ba40c3a38635cdb87b93340469b55667' AS varchar),cast('Encounter/ed9a425b1edc208675dbe4e4d6cddfb7a12bc87dd081d619692ebc51c2d88bad' AS varchar),cast('0' AS varchar))), + ((cast('Patient/e23a56d527cda94fada9ebbe3f22413a1a31d82a04f6bb7d416021d35cfbffff' AS varchar),cast('Encounter/1fef0390b1a172285298953f412a0f35b552bcd37cc2e6e4403b10d233ae1953' AS varchar),cast('0' AS varchar))), + ((cast('Patient/61042fa86aa2b12a2f0d984051f70569c75494933524816ec3b0255b1a5ca4fd' AS varchar),cast('Encounter/a5c9bb6ad3644435f4c0e907b486a11a1eeef35c2bf4bc1266e26eca86c0e4d1' AS varchar),cast('0' AS varchar))), + ((cast('Patient/aaa7627e62c99312fceef021302d48989a9a924ed9ac231f4656a5fd29ebfd26' AS varchar),cast('Encounter/3613943bada30261ac8896543a5f85944ddd423745ed2f6d5db674213b1412f7' AS varchar),cast('0' AS varchar))), + ((cast('Patient/8070692627a5b08d6090e2585907634773d24043580d38353d8457c339a7cafc' AS varchar),cast('Encounter/33f6e5b15a65538e32012009b19b42cb6d2a6e430b57c13d8f118729a22654b9' AS varchar),cast('0' AS varchar))), + ((cast('Patient/56fa59b0f19b6b6d19a472313b78e355d8bd71ec8bbe0a8d1cb32ee966b64850' AS varchar),cast('Encounter/6aa1753de47c16f898b24c97c303ab5a2a2d1f1cfa7b0428a499a379d0d7166b' AS varchar),cast('0' AS varchar))), + ((cast('Patient/7131387ace7c425de78ebeba287a67436ff3e9025c9b18d21d3d7af8a8dd0f1e' AS varchar),cast('Encounter/aec3e626a1b9ac93377f99765f09249476fc6ee6659db552482fbf25e15cdae0' AS varchar),cast('0' AS varchar))), + ((cast('Patient/3bae77ef7c1834c9ac99900a4d101aac1c40e2e741ebeae6d6a9975241d66913' AS varchar),cast('Encounter/df966a2c8069a6c83483681224ab2406e73e3b36090b42bb085eb7dd04814ae8' AS varchar),cast('0' AS varchar))), + ((cast('Patient/564a3c168f33783e76ce60b1dcf05f1eb9857c1d2459e729819ed45174bfa1c1' AS varchar),cast('Encounter/a2ed39553b6014205d3199dc9968f34d4ad2318d34dbb413475e7c430feeabf1' AS varchar),cast('0' AS varchar))), + ((cast('Patient/7229f84324dc9eb4e92ac1c483f7307d984a9e2ab9f4d8db098c919629be4f2f' AS varchar),cast('Encounter/6b2f6ef2495d772416abd254504db3fa1c8f2ac13c50f926c25ba280f1b4924d' AS varchar),cast('0' AS varchar))), + ((cast('Patient/fd32b483921f8c16d0127e9c7f5af3112a973d304fc1ce335b70e439741c8004' AS varchar),cast('Encounter/4cab98a3f5c6ba9439285e19a6ecba6bc50083f613700f992511dc57a572ddcb' AS varchar),cast('0' AS varchar))), + ((cast('Patient/0b8fed84ab3969013e735852e69d7666c805b11d31200bbab206c3ebf8392e17' AS varchar),cast('Encounter/1e861fb766e92242a3662dc13d885b394d64eeb7ca58a17ceb1129cc49ee9e3f' AS varchar),cast('0' AS varchar))), + ((cast('Patient/19c65c23167b931cf07f550a8fd3fdb67d634b20e319ce2aa0eab9f22c6ecc3e' AS varchar),cast('Encounter/5e7aa658227c5d4fa139e8382de7a31c31155ca6d8d0a90d5b1580406d23700f' AS varchar),cast('0' AS varchar))), + ((cast('Patient/de465cd0da7ed926ec5995d7936e825e5510d718624c2cbf9a09432d8c3a1c99' AS varchar),cast('Encounter/a56cd00ceeb6b320ec0f2bb901dd1219e4d909c554e568da4fd5fb8e24b85c1d' AS varchar),cast('0' AS varchar))), + ((cast('Patient/e3a532c179a12902a2439df569e93e8b48ebed09e84e7a433ff61935f19eff8f' AS varchar),cast('Encounter/7d115ba035c032f49987915075dc007b11253603fa3f898a78013ec66d5bb2a8' AS varchar),cast('0' AS varchar))), + ((cast('Patient/844fca509614791cc8b9d4fe42dc234599a408bc128d65892a77c550d2c2da8c' AS varchar),cast('Encounter/28a8a7eab0e0585d30b5ce0db87ad022275e44c088e1e301aebe04fab67248e7' AS varchar),cast('0' AS varchar))), + ((cast('Patient/34cb4e36a97cf468ae7fe1470a66e27613be69a27dbf45e6239b4c3d0573e340' AS varchar),cast('Encounter/633674cb8cc4efe4fd7e9b6ef5985d8c701dd3d37e0b183ba8d2f62aea2ccf3f' AS varchar),cast('0' AS varchar))), + ((cast('Patient/43e51cdf15d8379e6eae07a0d0e410524dfc2d8546ba214c7c73ecd3ea51011e' AS varchar),cast('Encounter/2fc7a4a9be2f9df9053da6b2f91e63324c8287ee01fff9fb543036a288deca4d' AS varchar),cast('0' AS varchar))), + ((cast('Patient/3e8dd084158f78dffef04f0a393a8b1ce8710d6345eaeea04d344279076af8f3' AS varchar),cast('Encounter/448f1b4fded6f62e8725dc9f40f6a8a665ba605cdd117b34b0f7fa159f8daf20' AS varchar),cast('0' AS varchar))), + ((cast('Patient/890668e1eed6daec60fb134725d58b414f4269d829adbf71baf1fe208019955a' AS varchar),cast('Encounter/e643b07cc8ff6979e946ce47b170bae301a4f78fd8bf1b375073edb3ee05b1c7' AS varchar),cast('0' AS varchar))), + ((cast('Patient/276e068ce8463e6dd018eca0d2684c928fe69b1a191d966ff3c70b10244310e0' AS varchar),cast('Encounter/515b234f80eb953c2c1ca7629008a9404a5e9b984f7d04e2fbc8c5c89f41193d' AS varchar),cast('0' AS varchar))) + ) + AS t + ("subject_ref","encounter_ref","example_diagnosis") +); + +-- ########################################################### +CREATE TABLE core__psm_encounter_covariate AS ( + SELECT + DISTINCT sample_cohort."encounter_ref", + sample_cohort."example_diagnosis", + ( + SELECT COUNT( DISTINCT encounter_ref ) + FROM "core__condition" + WHERE sample_cohort."subject_ref" = "core__condition"."subject_ref" + --AND sample_cohort.enc_end_date >= "core__condition".recordeddate + ) AS instance_count, + "core__encounter"."gender", + "core__encounter"."race_display" AS "race", + core__condition.code + FROM "core__psm_cohort_sampled_ids" AS sample_cohort, + "core__condition", + "core__encounter" + WHERE sample_cohort."encounter_ref" = "core__condition"."encounter_ref" + AND sample_cohort."encounter_ref" = "core__encounter"."encounter_ref" + -- AND c.recordeddate <= sample_cohort.enc_end_date + ORDER BY sample_cohort."encounter_ref" +) From 5d7ef49e2cc0f524348ef5b4b88f713667490c6d Mon Sep 17 00:00:00 2001 From: Matt Garber Date: Mon, 4 Dec 2023 11:14:16 -0500 Subject: [PATCH 03/17] fixed randomness in unit test runs --- cumulus_library/base_table_builder.py | 4 +- cumulus_library/databases.py | 8 ++ cumulus_library/statistics/psm.py | 99 ++++++++++-------- cumulus_library/template_sql/ctas.sql.jinja | 7 +- .../template_sql/ctas_empty.sql.jinja | 3 +- tests/conftest.py | 44 ++++++++ tests/test_data/duckdb_data/Untitled | Bin 0 -> 12288 bytes ...ymptoms.json => dsm5_classifications.json} | 0 tests/test_data/psm/psm_config.toml | 27 +++-- tests/test_psm.py | 43 ++++++++ 10 files changed, 177 insertions(+), 58 deletions(-) create mode 100644 tests/conftest.py create mode 100644 tests/test_data/duckdb_data/Untitled rename tests/test_data/psm/{symptoms.json => dsm5_classifications.json} (100%) create mode 100644 tests/test_psm.py diff --git a/cumulus_library/base_table_builder.py b/cumulus_library/base_table_builder.py index ba937cd5..461c6032 100644 --- a/cumulus_library/base_table_builder.py +++ b/cumulus_library/base_table_builder.py @@ -33,8 +33,8 @@ def prepare_queries(self, cursor: object, schema: str): """ raise NotImplementedError - # 🚨🚨🚨 WARNING: 🚨🚨🚨 in 99% of cases, subclasses should *not* re-implement - # execute_queries. + # 🚨🚨🚨 WARNING: in 99% of cases, subclasses should *not* re-implement 🚨🚨🚨 + # 🚨🚨🚨 execute_queries. 🚨🚨🚨 # If you know what you are doing, you can attempt to override it, but it is # strongly recommended you invoke this as is via a super() call, and then diff --git a/cumulus_library/databases.py b/cumulus_library/databases.py index 389aee6b..29128350 100644 --- a/cumulus_library/databases.py +++ b/cumulus_library/databases.py @@ -13,6 +13,7 @@ import json import os import sys +from functools import partial from pathlib import Path from typing import Optional, Protocol, Union @@ -103,6 +104,8 @@ class DuckDatabaseBackend(DatabaseBackend): def __init__(self, db_file: str): super().__init__("main") self.connection = duckdb.connect(db_file) + # Aliasing Athena's as_pandas to duckDB's df cast + setattr(duckdb.DuckDBPyConnection, "as_pandas", duckdb.DuckDBPyConnection.df) # Paper over some syntax differences between Athena and DuckDB self.connection.create_function( @@ -158,6 +161,11 @@ def cursor(self) -> duckdb.DuckDBPyConnection: # because then we'd have to re-register our json tables. return self.connection + def pandas_cursor(self) -> duckdb.DuckDBPyConnection: + # Don't actually create a new connection, + # because then we'd have to re-register our json tables. + return self.connection + def execute_as_pandas(self, sql: str) -> pandas.DataFrame: # We call convert_dtypes here in case there are integer columns. # Pandas will normally cast nullable-int as a float type unless diff --git a/cumulus_library/statistics/psm.py b/cumulus_library/statistics/psm.py index e41290ea..c7e155df 100644 --- a/cumulus_library/statistics/psm.py +++ b/cumulus_library/statistics/psm.py @@ -30,6 +30,7 @@ class PsmConfig: """Provides expected values for PSM execution""" + classification_json: str pos_source_table: str neg_source_table: str target_table: str @@ -50,6 +51,7 @@ def __init__(self, toml_config_path: str): with open(toml_config_path, encoding="UTF-8") as file: toml_config = toml.load(file) self.config = PsmConfig( + classification_json=f"{PosixPath(toml_config_path).parent}/{toml_config['classification_json']}", pos_source_table=toml_config["pos_source_table"], neg_source_table=toml_config["neg_source_table"], target_table=toml_config["target_table"], @@ -88,18 +90,23 @@ def _get_sampled_ids( """ df = cursor.execute(query).as_pandas() df = ( - df.sort_values(by=list(df.columns)) + df.sort_values(by=[self.config.primary_ref]) .reset_index() - .sample(n=sample_size, random_state=self.config.seed) + .drop("index", axis=1) ) + df = ( + df.sample(n=sample_size, random_state=self.config.seed, replace=True) + .sort_values(by=[self.config.primary_ref]) + .reset_index() + .drop("index", axis=1) + ) + df[label] = is_positive return df def _create_covariate_table(self, cursor: object, schema: str): # checks for primary & link ref being the same source_refs = list({self.config.primary_ref, self.config.count_ref}) - - # Sample a set of ids inside/outside of the cohort pos_query = get_distinct_ids(source_refs, self.config.pos_source_table) pos = self._get_sampled_ids( cursor, @@ -124,18 +131,21 @@ def _create_covariate_table(self, cursor: object, schema: str): 0, ) cohort = pandas.concat([pos, neg]) - # Replace table (if it exists) - # drop = get_drop_view_table(f"{self.config.pos_source_table}_sampled_ids", 'TABLE') - # cursor.execute(drop) + # TODO - replace with timestamp prepended table + drop = get_drop_view_table( + f"{self.config.pos_source_table}_sampled_ids", "TABLE" + ) + cursor.execute(drop) ctas_query = get_ctas_query_from_df( schema, f"{self.config.pos_source_table}_sampled_ids", - cohort.drop("index", axis=1), + cohort, ) self.queries.append(ctas_query) - # drop = get_drop_view_table(self.config.target_table, 'TABLE') - # cursor.execute(drop) + # TODO - replace with timestamp prepended table + drop = get_drop_view_table(self.config.target_table, "TABLE") + cursor.execute(drop) dataset_query = get_create_covariate_table( target_table=self.config.target_table, pos_source_table=self.config.pos_source_table, @@ -150,9 +160,7 @@ def _create_covariate_table(self, cursor: object, schema: str): def generate_psm_analysis(self, cursor: object, schema: str): df = cursor.execute(f"select * from {self.config.target_table}").as_pandas() - symptoms_dict = self._get_symptoms_dict( - "../../tests/test_data/psm/symptoms.json" - ) + symptoms_dict = self._get_symptoms_dict(self.config.classification_json) for dependent_variable, codes in symptoms_dict.items(): df[dependent_variable] = df["code"].apply(lambda x: 1 if x in codes else 0) df = df.drop(columns="code") @@ -169,11 +177,14 @@ def generate_psm_analysis(self, cursor: object, schema: str): indx=self.config.primary_ref, exclude=[], ) - psm.logistic_ps(balance=True) + # This function populates the psm.predicted_data element, which is required + # for things like the knn_matched() function call + psm.logistic_ps(balance=False) print(psm.predicted_data) + # This function populates the psm.df_matched element psm.knn_matched( matcher="propensity_logit", - replacement=False, + replacement=True, caliper=None, drop_unmatched=True, ) @@ -203,32 +214,32 @@ def execute_queries( self.generate_psm_analysis(cursor, schema) -if __name__ == "__main__": - arg_env_pairs = ( - ("profile", "CUMULUS_LIBRARY_PROFILE"), - ("schema_name", "CUMULUS_LIBRARY_DATABASE"), - ("workgroup", "CUMULUS_LIBRARY_WORKGROUP"), - ("region", "CUMULUS_LIBRARY_REGION"), - ("study_dir", "CUMULUS_LIBRARY_STUDY_DIR"), - ("data_path", "CUMULUS_LIBRARY_DATA_PATH"), - ("user", "CUMULUS_AGGREGATOR_USER"), - ("id", "CUMULUS_AGGREGATOR_ID"), - ("url", "CUMULUS_AGGREGATOR_URL"), - ) - args = {} - read_env_vars = [] - for pair in arg_env_pairs: - if env_val := os.environ.get(pair[1]): - if pair[0] == "study_dir": - args[pair[0]] = [env_val] - else: - args[pair[0]] = env_val - read_env_vars.append([pair[1], env_val]) - database = AthenaDb( - args["region"], args["workgroup"], args["profile"], args["schema_name"] - ) - builder = StudyBuilder(database) - psm = PsmBuilder(f"../../tests/test_data/psm/psm_config.toml") - psm.execute_queries( - database.pandas_cursor, builder.schema_name, False, drop_table=True - ) +# if __name__ == "__main__": +# arg_env_pairs = ( +# ("profile", "CUMULUS_LIBRARY_PROFILE"), +# ("schema_name", "CUMULUS_LIBRARY_DATABASE"), +# ("workgroup", "CUMULUS_LIBRARY_WORKGROUP"), +# ("region", "CUMULUS_LIBRARY_REGION"), +# ("study_dir", "CUMULUS_LIBRARY_STUDY_DIR"), +# ("data_path", "CUMULUS_LIBRARY_DATA_PATH"), +# ("user", "CUMULUS_AGGREGATOR_USER"), +# ("id", "CUMULUS_AGGREGATOR_ID"), +# ("url", "CUMULUS_AGGREGATOR_URL"), +# ) +# args = {} +# read_env_vars = [] +# for pair in arg_env_pairs: +# if env_val := os.environ.get(pair[1]): +# if pair[0] == "study_dir": +# args[pair[0]] = [env_val] +# else: +# args[pair[0]] = env_val +# read_env_vars.append([pair[1], env_val]) +# database = AthenaDb( +# args["region"], args["workgroup"], args["profile"], args["schema_name"] +# ) +# builder = StudyBuilder(database) +# psm = PsmBuilder(f"../../tests/test_data/psm/psm_config.toml") +# psm.execute_queries( +# database.pandas_cursor, builder.schema_name, False, drop_table=True +# ) diff --git a/cumulus_library/template_sql/ctas.sql.jinja b/cumulus_library/template_sql/ctas.sql.jinja index 274a5276..96d58c19 100644 --- a/cumulus_library/template_sql/ctas.sql.jinja +++ b/cumulus_library/template_sql/ctas.sql.jinja @@ -2,21 +2,20 @@ CREATE TABLE "{{ schema_name }}"."{{ table_name }}" AS ( SELECT * FROM ( VALUES {%- for row in dataset %} - (( + ( {%- for field in row -%} cast('{{ field }}' AS varchar) {%- if not loop.last -%} , {%- endif -%} {%- endfor -%} - )) + ) {%- if not loop.last -%} , {%- endif -%} {%- endfor %} ) - AS t - ( + AS t ( {%- for col in table_cols -%} "{{ col }}" {%- if not loop.last -%} diff --git a/cumulus_library/template_sql/ctas_empty.sql.jinja b/cumulus_library/template_sql/ctas_empty.sql.jinja index 84d08d7a..f65a1a78 100644 --- a/cumulus_library/template_sql/ctas_empty.sql.jinja +++ b/cumulus_library/template_sql/ctas_empty.sql.jinja @@ -10,8 +10,7 @@ CREATE TABLE "{{ schema_name }}"."{{ table_name }}" AS ( {%- endfor -%} ) ) - AS t - ( + AS t ( {%- for col in table_cols -%} "{{ col }}" {%- if not loop.last -%} diff --git a/tests/conftest.py b/tests/conftest.py new file mode 100644 index 00000000..1b6e7c09 --- /dev/null +++ b/tests/conftest.py @@ -0,0 +1,44 @@ +import tempfile + +from pathlib import Path +from unittest import mock + + +import pytest + +from cumulus_library.cli import StudyBuilder +from cumulus_library.databases import create_db_backend + + +@pytest.fixture +def mock_db(): + """Provides a DuckDatabaseBackend for local testing""" + data_dir = f"{Path(__file__).parent}/test_data/duckdb_data" + with tempfile.TemporaryDirectory() as tmpdir: + db = create_db_backend( + { + "db_type": "duckdb", + "schema_name": f"{tmpdir}/duck.db", + "load_ndjson_dir": data_dir, + } + ) + yield db + + +@pytest.fixture +def mock_db_core(): + """Provides a DuckDatabaseBackend with the core study ranfor local testing""" + data_dir = f"{Path(__file__).parent}/test_data/duckdb_data" + with tempfile.TemporaryDirectory() as tmpdir: + db = create_db_backend( + { + "db_type": "duckdb", + "schema_name": f"{tmpdir}/duck.db", + "load_ndjson_dir": data_dir, + } + ) + builder = StudyBuilder(db) + builder.clean_and_build_study( + f"{Path(__file__).parent.parent}/cumulus_library/studies/core" + ) + yield db diff --git a/tests/test_data/duckdb_data/Untitled b/tests/test_data/duckdb_data/Untitled new file mode 100644 index 0000000000000000000000000000000000000000..ababe675cb4d91b04d53fbe3248702064e5d6695 GIT binary patch literal 12288 zcmeI#F$#lF3;<9UkKi>vqO|32Lc6&MoyFEOc!_Skk5kX#;zin7L1>qP@Un#j5?-b> zQ~MZS&-rpa*H!Xe40(v5*zPUw$9U*Zw=Qn?s1P7PfB*pk1PBlyK!5-N0{;_8v*oP! xDwb6l0RjXF5FkK+009C72oNB!M*;u;9 Date: Mon, 4 Dec 2023 12:08:49 -0500 Subject: [PATCH 04/17] Cleanup & documentation --- cumulus_library/statistics/psm.py | 92 +++++++++---------- .../template_sql/statistics/psm_templates.py | 17 +++- tests/test_data/psm/psm_config.toml | 2 +- .../test_data/psm/psm_config_no_optional.toml | 52 +++++++++++ tests/test_psm.py | 78 +++++++++++----- 5 files changed, 167 insertions(+), 74 deletions(-) create mode 100644 tests/test_data/psm/psm_config_no_optional.toml diff --git a/cumulus_library/statistics/psm.py b/cumulus_library/statistics/psm.py index c7e155df..c0fab26c 100644 --- a/cumulus_library/statistics/psm.py +++ b/cumulus_library/statistics/psm.py @@ -1,19 +1,18 @@ -# +# Module for generating Propensity Score matching cohorts import numpy as np import pandas import toml -# from psmpy import PsmPy -# from psmpy.functions import cohenD -from psmpy.plotting import * +from psmpy import PsmPy + import json from pathlib import PosixPath from dataclasses import dataclass from cumulus_library.cli import StudyBuilder -from cumulus_library.databases import AthenaDatabaseBackend as AthenaDb +from cumulus_library.databases import DatabaseCursor from cumulus_library.base_table_builder import BaseTableBuilder from cumulus_library.template_sql.templates import ( get_ctas_query_from_df, @@ -23,7 +22,6 @@ get_distinct_ids, get_create_covariate_table, ) -import os @dataclass @@ -45,9 +43,12 @@ class PsmConfig: class PsmBuilder(BaseTableBuilder): + """TableBuilder for creating PSM tables""" + display_text = "Building PSM tables..." def __init__(self, toml_config_path: str): + """Loads PSM job details from a psm TOML file""" with open(toml_config_path, encoding="UTF-8") as file: toml_config = toml.load(file) self.config = PsmConfig( @@ -59,34 +60,39 @@ def __init__(self, toml_config_path: str): dependent_variable=toml_config["dependent_variable"], pos_sample_size=toml_config["pos_sample_size"], neg_sample_size=toml_config["neg_sample_size"], - join_cols_by_table=toml_config["join_cols_by_table"], + join_cols_by_table=toml_config.get("join_cols_by_table", {}), count_ref=toml_config.get("count_ref", None), count_table=toml_config.get("count_table", None), - seed=toml_config.get("seed", None), + seed=toml_config.get("seed", 123), ) super().__init__() def _get_symptoms_dict(self, path: str) -> dict: + """convenience function for loading symptoms dictionaries from a json file""" with open(path) as f: symptoms = json.load(f) return symptoms - # Todo: replace cusror object with new dbcursor object - def _get_sampled_ids( self, - cursor: object, + cursor: DatabaseCursor, schema: str, query: str, sample_size: int, - label: str, + dependent_variable: str, is_positive: bool, ): """Creates a table containing randomly sampled patients for PSM analysis To use this, it is assumed you have already identified a cohort of positively IDed patients as a manual process. - TODO: recommend a name + :param cursor: A valid DatabaseCusror: + :param schema: the schema/database name where the data exists + :param query: a query generated from the psm_dsitinct_ids template + :param sample_size: the number of records to include in the random sample. + This should generally be >= 20. + :param dependent_variable: the name to use for your filtering column + :param is_positive: defines the value to be used for your filtering column """ df = cursor.execute(query).as_pandas() df = ( @@ -95,18 +101,22 @@ def _get_sampled_ids( .drop("index", axis=1) ) df = ( + # TODO: remove replace behavior after increasing data sample size df.sample(n=sample_size, random_state=self.config.seed, replace=True) .sort_values(by=[self.config.primary_ref]) .reset_index() .drop("index", axis=1) ) - df[label] = is_positive + df[dependent_variable] = is_positive return df - def _create_covariate_table(self, cursor: object, schema: str): + def _create_covariate_table(self, cursor: DatabaseCursor, schema: str): + """Creates a covariate table from the loaded toml config""" # checks for primary & link ref being the same - source_refs = list({self.config.primary_ref, self.config.count_ref}) + source_refs = list( + {self.config.primary_ref, self.config.count_ref} - set([None]) + ) pos_query = get_distinct_ids(source_refs, self.config.pos_source_table) pos = self._get_sampled_ids( cursor, @@ -159,13 +169,25 @@ def _create_covariate_table(self, cursor: object, schema: str): self.queries.append(dataset_query) def generate_psm_analysis(self, cursor: object, schema: str): + """Runs PSM statistics on generated tables""" df = cursor.execute(f"select * from {self.config.target_table}").as_pandas() symptoms_dict = self._get_symptoms_dict(self.config.classification_json) for dependent_variable, codes in symptoms_dict.items(): df[dependent_variable] = df["code"].apply(lambda x: 1 if x in codes else 0) df = df.drop(columns="code") - df = df.drop(columns="instance_count") - for column in ["gender", "race"]: + # instance_count present but unused for PSM if table contains a count_ref input + df = df.drop(columns="instance_count", errors="ignore") + columns = [] + if self.config.join_cols_by_table is not None: + for table_key in self.config.join_cols_by_table: + for column in self.config.join_cols_by_table[table_key][ + "included_cols" + ]: + if len(column) == 2: + columns.append(column[1]) + else: + columns.append(column[0]) + for column in columns: encoded_df = pandas.get_dummies(df[column]) df = pandas.concat([df, encoded_df], axis=1) df = df.drop(column, axis=1) @@ -179,9 +201,10 @@ def generate_psm_analysis(self, cursor: object, schema: str): ) # This function populates the psm.predicted_data element, which is required # for things like the knn_matched() function call - psm.logistic_ps(balance=False) + psm.logistic_ps(balance=True) print(psm.predicted_data) # This function populates the psm.df_matched element + # TODO: flip replacement to false after increasing sample data size psm.knn_matched( matcher="propensity_logit", replacement=True, @@ -212,34 +235,3 @@ def execute_queries( self.comment_queries() self.write_queries() self.generate_psm_analysis(cursor, schema) - - -# if __name__ == "__main__": -# arg_env_pairs = ( -# ("profile", "CUMULUS_LIBRARY_PROFILE"), -# ("schema_name", "CUMULUS_LIBRARY_DATABASE"), -# ("workgroup", "CUMULUS_LIBRARY_WORKGROUP"), -# ("region", "CUMULUS_LIBRARY_REGION"), -# ("study_dir", "CUMULUS_LIBRARY_STUDY_DIR"), -# ("data_path", "CUMULUS_LIBRARY_DATA_PATH"), -# ("user", "CUMULUS_AGGREGATOR_USER"), -# ("id", "CUMULUS_AGGREGATOR_ID"), -# ("url", "CUMULUS_AGGREGATOR_URL"), -# ) -# args = {} -# read_env_vars = [] -# for pair in arg_env_pairs: -# if env_val := os.environ.get(pair[1]): -# if pair[0] == "study_dir": -# args[pair[0]] = [env_val] -# else: -# args[pair[0]] = env_val -# read_env_vars.append([pair[1], env_val]) -# database = AthenaDb( -# args["region"], args["workgroup"], args["profile"], args["schema_name"] -# ) -# builder = StudyBuilder(database) -# psm = PsmBuilder(f"../../tests/test_data/psm/psm_config.toml") -# psm.execute_queries( -# database.pandas_cursor, builder.schema_name, False, drop_table=True -# ) diff --git a/cumulus_library/template_sql/statistics/psm_templates.py b/cumulus_library/template_sql/statistics/psm_templates.py index 7eba1272..4da0206d 100644 --- a/cumulus_library/template_sql/statistics/psm_templates.py +++ b/cumulus_library/template_sql/statistics/psm_templates.py @@ -79,11 +79,24 @@ def get_create_covariate_table( neg_source_table: str, primary_ref: str, dependent_variable: str, - join_cols_by_table: dict, + join_cols_by_table: dict = {}, count_ref: str = None, count_table: str = None, ) -> str: - """ """ + """Gets a query to create a covariate table for PSM analysis + + :param target_table: the name of the table to create + :param pos_source_table: the table defining your positive cohort + :param neg_source_table: the table you defined your positive cohort against, + containing the full population + :primary_ref: the ID field to use for IDing members of your cohort + :dependent_variable: the name for the condition you are investigating, which + will differentiate your positive and negative sources + :join_cols_by_table: A dict defining extra data to join. See the psm_config.toml + in tests/test_data/psm for more details + :count_ref: optional ID to count records with for validation + :count_table: optional table to use as the source of the count_refs + """ if (count_ref is None and count_table is not None) or ( count_ref is not None and count_table is None ): diff --git a/tests/test_data/psm/psm_config.toml b/tests/test_data/psm/psm_config.toml index 5fe07a65..bd96d234 100644 --- a/tests/test_data/psm/psm_config.toml +++ b/tests/test_data/psm/psm_config.toml @@ -57,7 +57,7 @@ neg_sample_size = 10 # You can, if needed, select a new random seed value for count sampling. This is used # to make sure that, for a given population, you'll always get the same sample set -# for repeatability. You probably don't need to use this in most cases. +# for repeatability. You probably don't need to change this in most cases. seed = 1234567890 # [join_cols_by_table.table_name] allows you to add arbitrary data from other sources diff --git a/tests/test_data/psm/psm_config_no_optional.toml b/tests/test_data/psm/psm_config_no_optional.toml new file mode 100644 index 00000000..17b29b9b --- /dev/null +++ b/tests/test_data/psm/psm_config_no_optional.toml @@ -0,0 +1,52 @@ +# This is a config file for generating a propensity score matching (PSM) definition. + +# You can use this for selecting records for an expert review process, and you can +# also use it to generate statistics around your population that meets your selection +# criteria versus those that do not. + +# This attempts to handle the complexities of generating SQL queries for you, +# but you do need to know a little bit about what your data looks like in the +# database. We recommend that you only attempt to use this after you have decided +# on the first draft of your cohort selection criteria + +# classification_json should reference a file in the same directory as this config, +# which matches a category to a set of ICD codes. As an example, we are using the +# DSM5 classification guide, but this could be a user-curated set of condition labels +classification_json = "dsm5_classifications.json" + +# pos_source_table should be a curated table built as part of a study, which +# has entities matching your selection criteria (probably patients, but it could +# be another base FHIR resource) +pos_source_table = "core__psm_cohort" + +# neg_source_table should be the primary table your positive source was built from, +# i.e. it should contain all members that weren't identified as part of your cohort. +# It should be one of the base FHIR resource tables +neg_source_table = "core__condition" + +# target_table should be the name of the table you're storing your PSM cohort in. It +# should be prefixed by 'studyname__' +target_table = "core__psm_encounter_covariate" + +# primary_ref should be the column name from your pos_source_table that is the item +# of interest. it should have the same name as it did when it was selected +#from neg_source_table +primary_ref = 'encounter_ref' + +# dependent_variable is the name to use for identifying which cohort a record is in. +# It should be phrased such that a value of true would indicate it is originally from +# your pos_source_table. +dependent_variable = "example_diagnosis" + +# pos_sample_size is the number of records to select from your pos_source_table. +# It should be no smaller than 20. +pos_sample_size = 5 + +# neg_sample_size is the number of records to select from your neg_source_table. +# It should be no smaller than 20. +neg_sample_size = 10 + +# You can, if needed, select a new random seed value for count sampling. This is used +# to make sure that, for a given population, you'll always get the same sample set +# for repeatability. You probably don't need to change this in most cases. + seed = 1234567890 diff --git a/tests/test_psm.py b/tests/test_psm.py index 9041d815..4e4ba074 100644 --- a/tests/test_psm.py +++ b/tests/test_psm.py @@ -1,12 +1,62 @@ from pathlib import Path +import pytest + from cumulus_library.cli import StudyBuilder from cumulus_library.statistics.psm import PsmBuilder -def test_psm_create(mock_db_core): +@pytest.mark.parametrize( + "toml_def,pos_set,neg_set,expected_first_record,expected_last_record", + [ + ( + "psm_config.toml", + 7, + 7, + { + "encounter_ref": "Encounter/11381dc6-0e06-da55-0735-d1e7bbf8bb35", + "example_diagnosis": "1", + "instance_count": 1, + "gender": "male", + "race": "white", + "code": "44465007", + }, + { + "encounter_ref": "Encounter/ed151e04-3dd6-8cb7-a3e5-777c8a8667f1", + "example_diagnosis": "0", + "instance_count": 1, + "gender": "female", + "race": "white", + "code": "195662009", + }, + ), + ( + "psm_config_no_optional.toml", + 7, + 7, + { + "encounter_ref": "Encounter/11381dc6-0e06-da55-0735-d1e7bbf8bb35", + "example_diagnosis": "1", + "code": "44465007", + }, + { + "encounter_ref": "Encounter/ed151e04-3dd6-8cb7-a3e5-777c8a8667f1", + "example_diagnosis": "0", + "code": "195662009", + }, + ), + ], +) +def test_psm_create( + mock_db_core, + toml_def, + pos_set, + neg_set, + expected_first_record, + expected_last_record, +): builder = StudyBuilder(mock_db_core) - psm = PsmBuilder(f"{Path(__file__).parent}/test_data/psm/psm_config.toml") + psm = PsmBuilder(f"{Path(__file__).parent}/test_data/psm/{toml_def}") mock_db_core.cursor().execute( f"create table core__psm_cohort as (select * from core__condition ORDER BY {psm.config.primary_ref} limit 10)" ).df() @@ -21,23 +71,9 @@ def test_psm_create(mock_db_core): .df() ) ed_series = df["example_diagnosis"].value_counts() - assert ed_series.iloc[0] == 7 - assert ed_series.iloc[1] == 7 + assert ed_series.iloc[0] == neg_set + assert ed_series.iloc[1] == pos_set first_record = df.iloc[0].to_dict() - assert first_record == { - "encounter_ref": "Encounter/11381dc6-0e06-da55-0735-d1e7bbf8bb35", - "example_diagnosis": "1", - "instance_count": 1, - "gender": "male", - "race": "white", - "code": "44465007", - } - last_record = df.iloc[13].to_dict() - assert last_record == { - "encounter_ref": "Encounter/ed151e04-3dd6-8cb7-a3e5-777c8a8667f1", - "example_diagnosis": "0", - "instance_count": 1, - "gender": "female", - "race": "white", - "code": "195662009", - } + assert first_record == expected_first_record + last_record = df.iloc[neg_set + pos_set - 1].to_dict() + assert last_record == expected_last_record From 4f270e15db1e876d0ad77a8e9291a2e371b0e6d2 Mon Sep 17 00:00:00 2001 From: Matt Garber Date: Mon, 4 Dec 2023 12:46:10 -0500 Subject: [PATCH 05/17] Docs cleanup, query tests --- .../template_sql/statistics/psm_templates.py | 59 +------ cumulus_mhg_dev_db | Bin 0 -> 1323008 bytes docs/third-party-software-citations.md | 17 ++ tests/test_psm_templates.py | 153 ++++++++++++++++++ tests/test_templates.py | 7 +- 5 files changed, 174 insertions(+), 62 deletions(-) create mode 100644 cumulus_mhg_dev_db create mode 100644 docs/third-party-software-citations.md create mode 100644 tests/test_psm_templates.py diff --git a/cumulus_library/template_sql/statistics/psm_templates.py b/cumulus_library/template_sql/statistics/psm_templates.py index 4da0206d..0a43793f 100644 --- a/cumulus_library/template_sql/statistics/psm_templates.py +++ b/cumulus_library/template_sql/statistics/psm_templates.py @@ -9,37 +9,6 @@ from cumulus_library.errors import CumulusLibraryError -class ExtensionConfig(object): - """convenience class for holding parameters for generating extension tables. - - :param source_table: the table to extract extensions from - :param source_id: the id column to treat as a foreign key - :param target_table: the name of the table to create - :param target_col_prefix: the string to prepend code/display column names with - :param fhir_extension: the URL of the FHIR resource to select - :param code_systems: a list of codes, in preference order, to use to select data - :param is_array: a boolean indicating if the targeted field is an array type - """ - - def __init__( - self, - source_table: str, - source_id: str, - target_table: str, - target_col_prefix: str, - fhir_extension: str, - ext_systems: List[str], - is_array: bool = False, - ): - self.source_table = source_table - self.source_id = source_id - self.target_table = target_table - self.target_col_prefix = target_col_prefix - self.fhir_extension = fhir_extension - self.ext_systems = ext_systems - self.is_array = is_array - - def get_distinct_ids( columns: list[str], source_table: str, join_id: str = None, filter_table: str = None ) -> str: @@ -79,7 +48,7 @@ def get_create_covariate_table( neg_source_table: str, primary_ref: str, dependent_variable: str, - join_cols_by_table: dict = {}, + join_cols_by_table: dict, count_ref: str = None, count_table: str = None, ) -> str: @@ -116,29 +85,3 @@ def get_create_covariate_table( count_table=count_table, join_cols_by_table=join_cols_by_table, ) - - -def get_extension_denormalize_query(config: ExtensionConfig) -> str: - """extracts target extension from a table into a denormalized table - - This function is targeted at a complex extension element that is at the root - of a FHIR resource - as an example, see the 5 codes at the root node of - http://hl7.org/fhir/us/core/STU6/StructureDefinition-us-core-patient.html. - The template will create a new table with the extension data, in arrays, - mapped 1-1 to the table id. You can specify multiple systems - in the ExtensionConfig passed to this function. For each patient, we'll - take the data from the first extension coding system we find for each patient. - - :param config: An instance of ExtensionConfig. - """ - path = Path(__file__).parent - with open(f"{path}/extension_denormalize.sql.jinja") as extension_denormalize: - return Template(extension_denormalize.read()).render( - source_table=config.source_table, - source_id=config.source_id, - target_table=config.target_table, - target_col_prefix=config.target_col_prefix, - fhir_extension=config.fhir_extension, - ext_systems=config.ext_systems, - is_array=config.is_array, - ) diff --git a/cumulus_mhg_dev_db b/cumulus_mhg_dev_db new file mode 100644 index 0000000000000000000000000000000000000000..4a78c37ca53a127f95accb27598fa3cd96b4ffb6 GIT binary patch literal 1323008 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 literal 0 HcmV?d00001 diff --git a/docs/third-party-software-citations.md b/docs/third-party-software-citations.md new file mode 100644 index 00000000..5b2c30cc --- /dev/null +++ b/docs/third-party-software-citations.md @@ -0,0 +1,17 @@ +--- +title: Third party software citations +parent: Library +nav_order: 8 +# audience: Clinical researchers interested in publications +# type: reference +--- + +# Third party software citations + +This file contains a list of third party software libraries associated with +publications that are used by Cumulus library. These are generally domain +specific to clinical research. + +## (PsmPy)[https://github.com/adriennekline/psmpy] + +A. Kline and Y. Luo, PsmPy: A Package for Retrospective Cohort Matching in Python, 2022 44th Annual International Conference of the IEEE Engineering in Medicine & Biology Society (EMBC), 2022, pp. 1354-1357, doi: 10.1109/EMBC48229.2022.9871333. diff --git a/tests/test_psm_templates.py b/tests/test_psm_templates.py new file mode 100644 index 00000000..f66ec4c5 --- /dev/null +++ b/tests/test_psm_templates.py @@ -0,0 +1,153 @@ +from contextlib import nullcontext as does_not_raise + +import pytest + +from cumulus_library.errors import CumulusLibraryError +from cumulus_library.template_sql.statistics.psm_templates import ( + get_distinct_ids, + get_create_covariate_table, +) + + +@pytest.mark.parametrize( + "columns,source_table,join_id,filter_table,expected,raises", + [ + ( + ["a", "b"], + "source", + "ref_id", + "filter", + """SELECT DISTINCT + "source"."a", + "source"."b" +FROM source +WHERE "source"."ref_id" NOT IN ( + SELECT "filter"."ref_id" + FROM filter +)""", + does_not_raise(), + ), + ( + ["a", "b"], + "source", + None, + None, + """SELECT DISTINCT + "source"."a", + "source"."b" +FROM source""", + does_not_raise(), + ), + (["a", "b"], "source", "ref_id", None, "", pytest.raises(CumulusLibraryError)), + ], +) +def test_get_distinct_ids( + columns, source_table, join_id, filter_table, expected, raises +): + with raises: + query = get_distinct_ids(columns, source_table, join_id, filter_table) + assert query == expected + + +@pytest.mark.parametrize( + "target,pos_source,neg_source,primary_ref,dep_var,join_cols_by_table,count_ref,count_table,expected,raises", + [ + ( + "target", + "pos_table", + "neg_table", + "subject_id", + "has_flu", + {}, + None, + None, + """CREATE TABLE target AS ( + SELECT + DISTINCT sample_cohort."subject_id", + sample_cohort."has_flu", + neg_table.code + FROM "pos_table_sampled_ids" AS sample_cohort, + "neg_table", + WHERE sample_cohort."subject_id" = "neg_table"."subject_id" + -- AND c.recordeddate <= sample_cohort.enc_end_date + ORDER BY sample_cohort."subject_id" +)""", + does_not_raise(), + ), + ( + "target", + "pos_table", + "neg_table", + "subject_id", + "has_flu", + { + "join_table": { + "join_id": "enc_ref", + "included_cols": [["a"], ["b", "c"]], + } + }, + "enc_ref", + "join_table", + """CREATE TABLE target AS ( + SELECT + DISTINCT sample_cohort."subject_id", + sample_cohort."has_flu", + ( + SELECT COUNT( DISTINCT subject_id ) + FROM "join_table" + WHERE sample_cohort."enc_ref" = "join_table"."enc_ref" + --AND sample_cohort.enc_end_date >= "join_table".recordeddate + ) AS instance_count, + "join_table"."a", + "join_table"."b" AS "c", + neg_table.code + FROM "pos_table_sampled_ids" AS sample_cohort, + "neg_table", + "join_table" + WHERE sample_cohort."subject_id" = "neg_table"."subject_id" + AND sample_cohort."enc_ref" = "join_table"."enc_ref" + -- AND c.recordeddate <= sample_cohort.enc_end_date + ORDER BY sample_cohort."subject_id" +)""", + does_not_raise(), + ), + ( + "target", + "pos_table", + "neg_table", + "subject_id", + "has_flu", + {}, + "join_table", + None, + "", + pytest.raises(CumulusLibraryError), + ), + ], +) +def test_create_covariate_table( + target, + pos_source, + neg_source, + primary_ref, + dep_var, + join_cols_by_table, + count_ref, + count_table, + expected, + raises, +): + with raises: + query = get_create_covariate_table( + target, + pos_source, + neg_source, + primary_ref, + dep_var, + join_cols_by_table, + count_ref, + count_table, + ) + with open("output.sql", "w") as f: + f.write(query) + assert query == expected diff --git a/tests/test_templates.py b/tests/test_templates.py index d0d5e330..1a41641e 100644 --- a/tests/test_templates.py +++ b/tests/test_templates.py @@ -368,11 +368,10 @@ def test_ctas_query_creation(): expected = """CREATE TABLE "test_schema"."test_table" AS ( SELECT * FROM ( VALUES - ((cast('foo' AS varchar),cast('foo' AS varchar))), - ((cast('bar' AS varchar),cast('bar' AS varchar))) + (cast('foo' AS varchar),cast('foo' AS varchar)), + (cast('bar' AS varchar),cast('bar' AS varchar)) ) - AS t - ("a","b") + AS t ("a","b") );""" query = get_ctas_query( schema_name="test_schema", From 64096b3fc70b2e59934c6a5054aa9570b17674cb Mon Sep 17 00:00:00 2001 From: Matt Garber Date: Mon, 4 Dec 2023 12:59:39 -0500 Subject: [PATCH 06/17] sqlfluff cleanup --- cumulus_library/.sqlfluff | 10 ++++++ .../psm_create_covariate_table.sql.jinja | 28 ++++++++------- .../statistics/psm_distinct_ids.sql.jinja | 14 ++++---- tests/test_psm_templates.py | 34 ++++++++++--------- 4 files changed, 51 insertions(+), 35 deletions(-) diff --git a/cumulus_library/.sqlfluff b/cumulus_library/.sqlfluff index 73fdba43..536cb290 100644 --- a/cumulus_library/.sqlfluff +++ b/cumulus_library/.sqlfluff @@ -18,20 +18,30 @@ capitalisation_policy = upper [sqlfluff:templater:jinja:context] code_systems = ["http://snomed.info/sct", "http://hl7.org/fhir/sid/icd-10-cm"] col_type_list = ["a string","b string"] +columns = ['a','b'] cc_columns = [{"name": "baz", "is_array": True}, {"name": "foobar", "is_array": False}] cc_column = 'code' code_system_tables = [{table_name":"hasarray","column_name":"acol","is_bare_coding":False,"is_array":True, "has_data": True},{"table_name":"noarray","column_name":"col","is_bare_coding":False,"is_array":False, "has_data": True}{"table_name":"bare","column_name":"bcol","is_bare_coding":True,"is_array":False, "has_data": True},{"table_name":"empty","column_name":"empty","is_bare_coding":False,"is_array":False, "has_data": False}] column_name = 'bar' conditions = ["1 > 0", "1 < 2"] +count_ref = count_ref +count_table = count_table dataset = [["foo","foo"],["bar","bar"]] +dependent_variable = is_flu ext_systems = ["omb", "text"] field = 'column_name' +filter_table = filter_table fhir_extension = fhir_extension fhir_resource = patient id = 'id' +join_cols_by_table = { "join_table": { "join_id": "enc_ref","included_cols": [["a"], ["b", "c"]]}} +join_id = subject_ref medication_datasources = {"by_contained_ref" : True, "by_external_ref" : True} +neg_source_table = neg_source_table output_table_name = 'created_table' prefix = Test +primary_ref = encounter_ref +pos_source_table = pos_source_table schema_name = test_schema source_table = source_table source_id = source_id diff --git a/cumulus_library/template_sql/statistics/psm_create_covariate_table.sql.jinja b/cumulus_library/template_sql/statistics/psm_create_covariate_table.sql.jinja index 9d76dc41..afcdac71 100644 --- a/cumulus_library/template_sql/statistics/psm_create_covariate_table.sql.jinja +++ b/cumulus_library/template_sql/statistics/psm_create_covariate_table.sql.jinja @@ -1,10 +1,10 @@ CREATE TABLE {{ target_table }} AS ( - SELECT - DISTINCT sample_cohort."{{ primary_ref }}", + SELECT DISTINCT + sample_cohort."{{ primary_ref }}", sample_cohort."{{ dependent_variable }}", {%- if count_table %} ( - SELECT COUNT( DISTINCT {{ primary_ref }} ) + SELECT COUNT(DISTINCT {{ primary_ref }}) FROM "{{ count_table }}" WHERE sample_cohort."{{ count_ref }}" = "{{ count_table }}"."{{ count_ref }}" --AND sample_cohort.enc_end_date >= "{{ count_table }}".recordeddate @@ -15,26 +15,28 @@ CREATE TABLE {{ target_table }} AS ( {%- if column|length == 1 %} "{{ key }}"."{{ column[0] }}", {%- else %} - "{{ key }}"."{{ column[0] }}" AS "{{ column[1]}}", + "{{ key }}"."{{ column[0] }}" AS "{{ column[1] }}", {%- endif %} {%- endfor %} {%- endfor %} {{ neg_source_table }}.code - FROM "{{ pos_source_table }}_sampled_ids" AS sample_cohort, + FROM "{{ pos_source_table }}_sampled_ids" AS sample_cohort, "{{ neg_source_table }}", - {%- for key in join_cols_by_table %} + {%- for key in join_cols_by_table %} "{{ key }}" - {%- if not loop.last -%} + {%- if not loop.last -%} , {%- endif -%} - {% endfor %} - WHERE sample_cohort."{{ primary_ref }}" = "{{ neg_source_table }}"."{{ primary_ref }}" + {% endfor %} + WHERE + sample_cohort."{{ primary_ref }}" = "{{ neg_source_table }}"."{{ primary_ref }}" {%- for key in join_cols_by_table %} - AND sample_cohort."{{ join_cols_by_table[key]["join_id"] }}" = "{{ key }}"."{{ join_cols_by_table[key]["join_id"] }}" - {%- if not loop.last -%} + AND sample_cohort."{{ join_cols_by_table[key]["join_id"] }}" + = "{{ key }}"."{{ join_cols_by_table[key]["join_id"] }}" + {%- if not loop.last -%} , {%- endif -%} - {% endfor %} + {% endfor %} -- AND c.recordeddate <= sample_cohort.enc_end_date ORDER BY sample_cohort."{{ primary_ref }}" -) \ No newline at end of file +) diff --git a/cumulus_library/template_sql/statistics/psm_distinct_ids.sql.jinja b/cumulus_library/template_sql/statistics/psm_distinct_ids.sql.jinja index c14193d6..20b7e961 100644 --- a/cumulus_library/template_sql/statistics/psm_distinct_ids.sql.jinja +++ b/cumulus_library/template_sql/statistics/psm_distinct_ids.sql.jinja @@ -1,14 +1,16 @@ SELECT DISTINCT -{%- for column in columns %} + {%- for column in columns %} "{{ source_table }}"."{{ column }}" {%- if not loop.last -%} , {%- endif -%} -{%- endfor %} + {%- endfor %} FROM {{ source_table }} {%- if join_id %} -WHERE "{{ source_table }}"."{{ join_id }}" NOT IN ( - SELECT "{{ filter_table }}"."{{ join_id }}" - FROM {{ filter_table }} -) +WHERE + "{{ source_table }}"."{{ join_id }}" NOT IN ( + SELECT "{{ filter_table }}"."{{ join_id }}" + FROM {{ filter_table }} + ) {%- endif -%} + diff --git a/tests/test_psm_templates.py b/tests/test_psm_templates.py index f66ec4c5..7404e578 100644 --- a/tests/test_psm_templates.py +++ b/tests/test_psm_templates.py @@ -21,10 +21,11 @@ "source"."a", "source"."b" FROM source -WHERE "source"."ref_id" NOT IN ( - SELECT "filter"."ref_id" - FROM filter -)""", +WHERE + "source"."ref_id" NOT IN ( + SELECT "filter"."ref_id" + FROM filter + )""", does_not_raise(), ), ( @@ -62,13 +63,14 @@ def test_get_distinct_ids( None, None, """CREATE TABLE target AS ( - SELECT - DISTINCT sample_cohort."subject_id", + SELECT DISTINCT + sample_cohort."subject_id", sample_cohort."has_flu", neg_table.code - FROM "pos_table_sampled_ids" AS sample_cohort, + FROM "pos_table_sampled_ids" AS sample_cohort, "neg_table", - WHERE sample_cohort."subject_id" = "neg_table"."subject_id" + WHERE + sample_cohort."subject_id" = "neg_table"."subject_id" -- AND c.recordeddate <= sample_cohort.enc_end_date ORDER BY sample_cohort."subject_id" )""", @@ -89,11 +91,11 @@ def test_get_distinct_ids( "enc_ref", "join_table", """CREATE TABLE target AS ( - SELECT - DISTINCT sample_cohort."subject_id", + SELECT DISTINCT + sample_cohort."subject_id", sample_cohort."has_flu", ( - SELECT COUNT( DISTINCT subject_id ) + SELECT COUNT(DISTINCT subject_id) FROM "join_table" WHERE sample_cohort."enc_ref" = "join_table"."enc_ref" --AND sample_cohort.enc_end_date >= "join_table".recordeddate @@ -101,11 +103,13 @@ def test_get_distinct_ids( "join_table"."a", "join_table"."b" AS "c", neg_table.code - FROM "pos_table_sampled_ids" AS sample_cohort, + FROM "pos_table_sampled_ids" AS sample_cohort, "neg_table", "join_table" - WHERE sample_cohort."subject_id" = "neg_table"."subject_id" - AND sample_cohort."enc_ref" = "join_table"."enc_ref" + WHERE + sample_cohort."subject_id" = "neg_table"."subject_id" + AND sample_cohort."enc_ref" + = "join_table"."enc_ref" -- AND c.recordeddate <= sample_cohort.enc_end_date ORDER BY sample_cohort."subject_id" )""", @@ -148,6 +152,4 @@ def test_create_covariate_table( count_ref, count_table, ) - with open("output.sql", "w") as f: - f.write(query) assert query == expected From eac38ae60c23913c92a74f9f1aa6462f2638084f Mon Sep 17 00:00:00 2001 From: Matt Garber Date: Mon, 4 Dec 2023 13:21:17 -0500 Subject: [PATCH 07/17] self review --- cumulus_library/databases.py | 18 +++++--- cumulus_library/statistics/psm.py | 11 +++-- cumulus_library/statistics/psm.sql | 65 ++------------------------- cumulus_mhg_dev_db | Bin 1323008 -> 0 bytes tests/conftest.py | 2 +- tests/test_data/duckdb_data/Untitled | Bin 12288 -> 0 bytes tests/test_templates.py | 10 +++++ 7 files changed, 35 insertions(+), 71 deletions(-) delete mode 100644 cumulus_mhg_dev_db delete mode 100644 tests/test_data/duckdb_data/Untitled diff --git a/cumulus_library/databases.py b/cumulus_library/databases.py index 29128350..cb553d6e 100644 --- a/cumulus_library/databases.py +++ b/cumulus_library/databases.py @@ -13,7 +13,6 @@ import json import os import sys -from functools import partial from pathlib import Path from typing import Optional, Protocol, Union @@ -56,6 +55,14 @@ def __init__(self, schema_name: str): def cursor(self) -> DatabaseCursor: """Returns a connection to the backing database""" + @abc.abstractmethod + def pandas_cursor(self) -> DatabaseCursor: + """Returns a connection to the backing database optimized for dataframes + + If your database does not provide an optimized cursor, this should function the + same as a vanilla cursor. + """ + @abc.abstractmethod def execute_as_pandas(self, sql: str) -> pandas.DataFrame: """Returns a pandas.DataFrame version of the results from the provided SQL""" @@ -89,11 +96,13 @@ def __init__(self, region: str, workgroup: str, profile: str, schema_name: str): schema_name=self.schema_name, **connect_kwargs, ) - self.pandas_cursor = self.connection.cursor(cursor=AthenaPandasCursor) def cursor(self) -> AthenaCursor: return self.connection.cursor() + def pandas_cursor(self) -> AthenaCursor: + return self.connection.cursor(cursor=AthenaPandasCursor) + def execute_as_pandas(self, sql: str) -> pandas.DataFrame: return self.pandas_cursor.execute(sql).as_pandas() @@ -162,9 +171,8 @@ def cursor(self) -> duckdb.DuckDBPyConnection: return self.connection def pandas_cursor(self) -> duckdb.DuckDBPyConnection: - # Don't actually create a new connection, - # because then we'd have to re-register our json tables. - return self.connection + # Since this is not provided, return the vanilla cursor + return self.cursor() def execute_as_pandas(self, sql: str) -> pandas.DataFrame: # We call convert_dtypes here in case there are integer columns. diff --git a/cumulus_library/statistics/psm.py b/cumulus_library/statistics/psm.py index c0fab26c..b61a3b9a 100644 --- a/cumulus_library/statistics/psm.py +++ b/cumulus_library/statistics/psm.py @@ -26,7 +26,12 @@ @dataclass class PsmConfig: - """Provides expected values for PSM execution""" + """Provides expected values for PSM execution + + These values should be read in from a toml configuration file. + See tests/test_data/psm/psm_config.toml for an example with details about + the expected values for these fields. + """ classification_json: str pos_source_table: str @@ -39,7 +44,7 @@ class PsmConfig: pos_sample_size: int neg_sample_size: int join_cols_by_table: dict[str, dict] - seed: int = 1234567890 + seed: int class PsmBuilder(BaseTableBuilder): @@ -48,7 +53,7 @@ class PsmBuilder(BaseTableBuilder): display_text = "Building PSM tables..." def __init__(self, toml_config_path: str): - """Loads PSM job details from a psm TOML file""" + """Loads PSM job details from a PSM configuration file""" with open(toml_config_path, encoding="UTF-8") as file: toml_config = toml.load(file) self.config = PsmConfig( diff --git a/cumulus_library/statistics/psm.sql b/cumulus_library/statistics/psm.sql index 869fff4e..40d9bdf1 100644 --- a/cumulus_library/statistics/psm.sql +++ b/cumulus_library/statistics/psm.sql @@ -1,4 +1,7 @@ -- noqa: disable=all + +-- This template is provided as an example only of queries generated by PSM table creation. +-- It is not used in actual validation CREATE TABLE "cumulus_mhg_dev_db"."core__psm_cohort_sampled_ids" AS ( SELECT * FROM ( VALUES @@ -7,68 +10,6 @@ CREATE TABLE "cumulus_mhg_dev_db"."core__psm_cohort_sampled_ids" AS ( ((cast('Patient/a82d6443f6ef1e64b7542fd8d6bd8ae6fa08f525abfb2d6c212ce3a51883d8a7' AS varchar),cast('Encounter/b29ea4400966b83f380ecb8129e9939e62bcacc506b323677d70283a16ea5704' AS varchar),cast('1' AS varchar))), ((cast('Patient/3aafe05267ec191199c697a4b9c0140f11d567ca1edcd97a6a91e9e35fa6d99e' AS varchar),cast('Encounter/439122de45e8b2d124d65a88a525903ba4837dc980e6b409f866dd1eaec7962f' AS varchar),cast('1' AS varchar))), ((cast('Patient/0efd7a0cd26cae01e13fba909bcaafd445a2196117f4393c3b5f3c64245ef4c3' AS varchar),cast('Encounter/fc14df1992d4f7586914819bca5065c5b90d544e8c989be838ad8273a0bdb729' AS varchar),cast('1' AS varchar))), - ((cast('Patient/50d9fbe5f3b142203529a53224539d78402912db60079df4f0811425d35125bd' AS varchar),cast('Encounter/cde5079d2d482be0cec4d3d2d1fb2b4aee4f54362c2581be8d9f7bc45a9af85f' AS varchar),cast('1' AS varchar))), - ((cast('Patient/320cce52bca9cb00ff4d62fe3abc4ec7300352a595aaa7a0b2ee48e748a0d183' AS varchar),cast('Encounter/52c4f5a2eabf12e4638c71d58bd0cb2687253420aff63bd1d906245dee93bb0a' AS varchar),cast('1' AS varchar))), - ((cast('Patient/3ce81e6b3b15cd26d9e9a83fa30e9373a210f0043be485f056695ebaf9368ce3' AS varchar),cast('Encounter/f01b4c4a9f270612dbd848a5db348784085c9e8e709950acc30e081bc73d5c0b' AS varchar),cast('1' AS varchar))), - ((cast('Patient/882c579a63478216510dcc643be5e1553b7231a8361264d7594cbb9f648a2702' AS varchar),cast('Encounter/c0b6c2ae41ce701754fa3509b3da0a0c69887b3f2307c64325bd09ecb80b7873' AS varchar),cast('1' AS varchar))), - ((cast('Patient/15961cf1f22eec6dbeba54b865a64f2b3a3006ecb0a7e335c1658eaf596e2af4' AS varchar),cast('Encounter/86a3d6f926bd78c4944e38531529c1b06683a1760565d4c75f8488b5ff4e6856' AS varchar),cast('1' AS varchar))), - ((cast('Patient/bc5368114a8bdb40ea8b0a7edccd069ad80031d3431b5760a3b86e6a4392bf51' AS varchar),cast('Encounter/7d30da53d5aba36b0dd748c3d1724bcf16f500d607b778145143c25d9dd4ee22' AS varchar),cast('1' AS varchar))), - ((cast('Patient/0fa4f0987fe46c657539e3cd8a816d1facffd03b9ce7112e546fadc73744cad7' AS varchar),cast('Encounter/31702d82108744d3c3237af26c4dfb05cb43a418d1848e942845a17a301f2348' AS varchar),cast('1' AS varchar))), - ((cast('Patient/bc8118df3cc6fa0b285f509fab0462bf3a209f02afb5bf4cbb5a3c899ecd69e1' AS varchar),cast('Encounter/a1daaa4a62db8a906e8e736758d67ec3a4e9bc2aea86d42873f4b8b5c5ddd72b' AS varchar),cast('1' AS varchar))), - ((cast('Patient/f642ad9efcef7fd58fedef30b8c07359d0c85e591f100dcc8377efad28a40b01' AS varchar),cast('Encounter/a7c013f15a8467982a21873330c9d62c2baa4631544655cc3cd1566ff063487c' AS varchar),cast('1' AS varchar))), - ((cast('Patient/222f2355b10bc39bc9a9ded1ade0de8850b0af922e146b283a8d9df88469d7a0' AS varchar),cast('Encounter/4b11b7264ada1a8623048073243624979111ac81ce1128bb479b6800fa11fa90' AS varchar),cast('1' AS varchar))), - ((cast('Patient/b43c0a1d9273c8d4fc1b2161c5d26b1bcf6ceb9bcfe225f0b5f7b9983159f716' AS varchar),cast('Encounter/431ffa9723a074a69f27e1ef4a9351587537665894a33cc8d789281f73ef7942' AS varchar),cast('1' AS varchar))), - ((cast('Patient/aaa7627e62c99312fceef021302d48989a9a924ed9ac231f4656a5fd29ebfd26' AS varchar),cast('Encounter/1f024866da15f33d46a5a47f8205fc3ec0f4740ac7f28a88b6f219972388904a' AS varchar),cast('1' AS varchar))), - ((cast('Patient/ef85aff307071e783f17f0d42104fab8b19381c75ebc37d2d1b234fc4c4d74fe' AS varchar),cast('Encounter/ad3927be7a61b576ba6dc9e52c544df4e3a26aae513d17142a864f4315826583' AS varchar),cast('1' AS varchar))), - ((cast('Patient/b43c0a1d9273c8d4fc1b2161c5d26b1bcf6ceb9bcfe225f0b5f7b9983159f716' AS varchar),cast('Encounter/d73c40e2ce6ec09d79fe4ad59d7f5cebf96af8db5c7cc54cc2086f8e186941d3' AS varchar),cast('1' AS varchar))), - ((cast('Patient/b94aaae0b0a3ac7d91d0932c45454f7c86fec10c0e9ed685c4aad1f07cac570e' AS varchar),cast('Encounter/647e552513b9ab28e17172eb845755b8bc53e0244a649c7336851ad9334c2696' AS varchar),cast('1' AS varchar))), - ((cast('Patient/3df91db3c381bbdcfbea57bafdfe767098a77b75bdaefa73c30c3858fee67d0d' AS varchar),cast('Encounter/93d3bead1cf65fa4b4894b8615a95fe209b8fa99be8063e47b8755c6d8ceba42' AS varchar),cast('0' AS varchar))), - ((cast('Patient/ffcc85457a71630f8dedc905a6cf023e8009ff5efd938912fb5a5ceb845baef3' AS varchar),cast('Encounter/8cceb04ed38d8f2bda250a7c395b6600a8732b67d529eb18667378a561e1f296' AS varchar),cast('0' AS varchar))), - ((cast('Patient/8abce4d5b0dccae9ec56f6a6bf6ae24d7ffd83b2b51d951fe8b020ad29dc651a' AS varchar),cast('Encounter/fbd75ddcc9da85b96335e728e2494f1a42483c68e32b5bd793f5491419f8b60d' AS varchar),cast('0' AS varchar))), - ((cast('Patient/98e1dcad658f0d3ed713a77a3c4112ea3a21df316133c10b3151beb94ca3f5d6' AS varchar),cast('Encounter/bf760964ae2791399aaee56bd843aade0a37fbdf51117bbb8146aedead368ef3' AS varchar),cast('0' AS varchar))), - ((cast('Patient/75164294583880de42729d580678f3369052fbce2dd73a830bcdb8ea0fe1c37b' AS varchar),cast('Encounter/f82785991a0c447465f11f6c597abc996b16b948acc963a3758dc12cced483b8' AS varchar),cast('0' AS varchar))), - ((cast('Patient/fb13358126930ba503941673c6e391e3b480e2bf9a02c553544f35245e2c1524' AS varchar),cast('Encounter/e78a58870f16e5a669fea86eea36948c3c2f002cd5c2a1bac485c806c8c7d9f5' AS varchar),cast('0' AS varchar))), - ((cast('Patient/e122df8065e1be221a4be8fd83e5aab0df9de956bdc9a33c95be8a87b7ecb7fd' AS varchar),cast('Encounter/0455c2966f1fc4790fdda94091e4b07acb06ca9e133ee8421bc5141d3ac34e28' AS varchar),cast('0' AS varchar))), - ((cast('Patient/48bdb2af6fcf82cf726bb32489e2df57395c4ea20329e71f5bca964db6158cd2' AS varchar),cast('Encounter/bc113669f5a7cf61575b9cb26b75439241aebfabe199d09f835ec7dc0aab4420' AS varchar),cast('0' AS varchar))), - ((cast('Patient/09353bd6e097f59e51e5a113dbc388c2913a67adad3d257a9b672152db536b38' AS varchar),cast('Encounter/6b5fae7aa1e1f5b3601c5ba9e635c3ce71845648cad2962ce645039b0bbcf20e' AS varchar),cast('0' AS varchar))), - ((cast('Patient/9c1ed4fe0d350e90a015ad98ed40b29a702790401dd9072ad7694de2e6454935' AS varchar),cast('Encounter/407246eaba3f85f5c0cc95f4a544656e5a918f910fbd264a60206b0ec880837b' AS varchar),cast('0' AS varchar))), - ((cast('Patient/81d3c8642600779be157e4e7eed5026c3b9fff3b8e4edda2bdbd56e49ed8fabb' AS varchar),cast('Encounter/96c373509c2d1d3d3347af58b894b35346ff1b89fd853dd5f758ce624ccb8f51' AS varchar),cast('0' AS varchar))), - ((cast('Patient/e72f646baa605ed5d451859924d38bd1410f7e2cf5e7d52db6d0a4da01ecc496' AS varchar),cast('Encounter/37cdbcbd7d7f37c4298b153433524365fcddee35abdd882fb23395c53964d3d9' AS varchar),cast('0' AS varchar))), - ((cast('Patient/1a862a2288a4af65bed371c3926a91a88d7fb8cfe04e9a457d2674a8285fda83' AS varchar),cast('Encounter/396107165e308c599b4717ba5f1f0c433aa1d67ed92250eba24b4685db8669c0' AS varchar),cast('0' AS varchar))), - ((cast('Patient/72e6e9272902e39dbfd91aae3ac8f43929057fc4f0119fca826df8e468723488' AS varchar),cast('Encounter/b572f3d0e66722fc830cbd7750d4d702c67f7e2b6ea5838cfcaf18fe8a8fbf92' AS varchar),cast('0' AS varchar))), - ((cast('Patient/d22ebd757231d633594987fd8968bb34c4014a462613d66e57cb40b577e70734' AS varchar),cast('Encounter/a816500ecc5e4065c8cc89cd15df23f3f270f597baa6e6753afb647fd6a2de65' AS varchar),cast('0' AS varchar))), - ((cast('Patient/eead3f673bdaca10f12ceca63f1814fe8d528c3d9e2cfff99754a435ffab93f1' AS varchar),cast('Encounter/e3f35454c976ab35a7187c8069765ce26903e25660511cd2f7153aefb20f4d91' AS varchar),cast('0' AS varchar))), - ((cast('Patient/644ba99b38f92c0b41de2e3dfd95f83623718999f2ea5fc3a55e3c441200599b' AS varchar),cast('Encounter/fb80129e4cf335bd6f9ae459f868409d7a5041ef49df14eb0e4f60c9a9a5546b' AS varchar),cast('0' AS varchar))), - ((cast('Patient/a50737315a9b5d74573be547a93de304072070fd9851da0429c9eb68398eebf4' AS varchar),cast('Encounter/f2f328c162cccddc3e5f984a5526e9b38fad7ca03607f8d68e97ee1125b6589d' AS varchar),cast('0' AS varchar))), - ((cast('Patient/aaa7627e62c99312fceef021302d48989a9a924ed9ac231f4656a5fd29ebfd26' AS varchar),cast('Encounter/167c79720b8bc5dace5aa469f1e44b6010c3268677b6c27da2e554cdbd2fe903' AS varchar),cast('0' AS varchar))), - ((cast('Patient/a4cc07e6f913e52dbf19d4cd04e075841ed3a2c7e4ead3768653aefee20550d6' AS varchar),cast('Encounter/9c71ff5ce943d68ea0a357e74949891d3587a96d5c5658e534678398c37d28fe' AS varchar),cast('0' AS varchar))), - ((cast('Patient/e2f4ab84647ec23b988a7c99c6118e9d4fb9d243d0e53effa611b2386c9ed2c1' AS varchar),cast('Encounter/97ee812b1916a134a6ea9a9848c2a5696b8dbf09cad5a408d3b174ae6853ff30' AS varchar),cast('0' AS varchar))), - ((cast('Patient/841127bf03ccfce622dcce934fad77aa32abe9c606ce01248bf2eff04eefe1b4' AS varchar),cast('Encounter/1db1d61a14a6ef022d5d1d17b92a6e21ac03b0e189040a26e9051892fa51fe65' AS varchar),cast('0' AS varchar))), - ((cast('Patient/478ac40c9feea40cbe94cf25d493ecc7e4036cfe376256159f7c8ba27990661e' AS varchar),cast('Encounter/1271c2f2740c0bbb962fd2a851cbbe3a7f4c5883bff5a4b193317c38eae912f5' AS varchar),cast('0' AS varchar))), - ((cast('Patient/4201e61c1698b62091c78000f9850143a9179446e966d9d45a5eb0d783eb38e4' AS varchar),cast('Encounter/bc5be6306ac7e2fe796b55dcac7ab40a7687de52afe97d0ea9c6524b3d48ae74' AS varchar),cast('0' AS varchar))), - ((cast('Patient/00ce22d5bb5cae09c5942135c34c61660882ec658ecd78677a8dc43b77425073' AS varchar),cast('Encounter/8371856539df760e7cf25cf9171701d4e94501fef6fc10a40c81680936116ea0' AS varchar),cast('0' AS varchar))), - ((cast('Patient/644ba99b38f92c0b41de2e3dfd95f83623718999f2ea5fc3a55e3c441200599b' AS varchar),cast('Encounter/ec8d34043223974ef89abdce1cfa58c77710463a5b37baeebc2fc99d822d4f3c' AS varchar),cast('0' AS varchar))), - ((cast('Patient/e82e2afddb937682feeba017d5feccb488ee766ac50e1cda0d300725bc0ed983' AS varchar),cast('Encounter/55f08e011e60574906b692479460bbddd275a15d273bae40c662dfd30a848280' AS varchar),cast('0' AS varchar))), - ((cast('Patient/8a486e85a8faa75adcef0a684975b1c4a0d457b2787e31d7fe1a105cac231846' AS varchar),cast('Encounter/6afbc0dea2b609d1b7f724e5c12b743d65d12cd4c36f533ab29679f4dc4b0912' AS varchar),cast('0' AS varchar))), - ((cast('Patient/1f3f71df4383551b5c7ad5884a4baf098675d78bc3355a6a714ae20313c0934f' AS varchar),cast('Encounter/4bb11bd4187c8b0c3d79fb6153e2fe16e6645da62096da4712dc0b01dde30cd6' AS varchar),cast('0' AS varchar))), - ((cast('Patient/b7d8ac2e9432a829d977610d16063517ed1094ccc31c8bde5b34ef728d3fdf4f' AS varchar),cast('Encounter/38d139174da0e9360a474204ce77a3ec661cdadd0759777e0ab79c57f5ed1c2a' AS varchar),cast('0' AS varchar))), - ((cast('Patient/f8984e87c035d43fbf8aadc4616244e043fb2ed22121a16432bb7f201b0038c2' AS varchar),cast('Encounter/0f67621c010ebb0f10c7d55877fb03b4c4796dc25d2434b548c002c513cd568f' AS varchar),cast('0' AS varchar))), - ((cast('Patient/008ba32814086d4d030b5dce1c1248b2551fcefe7efd7cee21121c699aa22a0d' AS varchar),cast('Encounter/ead78d05b8c3342717cc56836063bcaccef9d9a5b2de2ed93dac50232c272f0b' AS varchar),cast('0' AS varchar))), - ((cast('Patient/941498945fdc323dbf18fd1b25552ec8a31801d306e63c1899946bfeed582c38' AS varchar),cast('Encounter/97e5ab4888251fdb8c9ac5defe7bc80aef32e405730e934ac8dc197bdb09c1d3' AS varchar),cast('0' AS varchar))), - ((cast('Patient/bdb91ea213cde98ab2e987417376a9a9d1b0abf2367b0c22ddfb6a149d1003d2' AS varchar),cast('Encounter/06ff3ff4021dfa32a984cad3781e6ff0877acc5238a651fba0c96cb340e27e67' AS varchar),cast('0' AS varchar))), - ((cast('Patient/9ac438286b83a9daee6c391f855ba434184c193b4653679f002318b9d01a6eb1' AS varchar),cast('Encounter/ffae8ce81cdf025ebb0930e87e0cbfe487498b29d552bfa9559ef80ffc4853eb' AS varchar),cast('0' AS varchar))), - ((cast('Patient/dc8856faa2091d73b687f4aa982402692d7cf56c4ed129404fbecf1faf54e9b0' AS varchar),cast('Encounter/cd52f1c3ee14383e4f3c84768b9d57e233994d310f91960f0d9666355fb5f44c' AS varchar),cast('0' AS varchar))), - ((cast('Patient/276e068ce8463e6dd018eca0d2684c928fe69b1a191d966ff3c70b10244310e0' AS varchar),cast('Encounter/cfdb52394c8d9f66e8f1479e352770fc23c76e1d1ba37d80b515e48105ae3e5d' AS varchar),cast('0' AS varchar))), - ((cast('Patient/c79c91e1346140dd41bbe8da9cf9d3b162bd23b42f0ab9d11d7901a11f61e18c' AS varchar),cast('Encounter/34e173220edae20dfb261c580043cdc69afc70d2875101ce837858ca829c52ef' AS varchar),cast('0' AS varchar))), - ((cast('Patient/e2f4ab84647ec23b988a7c99c6118e9d4fb9d243d0e53effa611b2386c9ed2c1' AS varchar),cast('Encounter/714a684cc1c57bcd2db8216883154b5543293978de149980ee0b0f443d55036c' AS varchar),cast('0' AS varchar))), - ((cast('Patient/8be278520c87cfde67943413692a0ab4ba40c3a38635cdb87b93340469b55667' AS varchar),cast('Encounter/ed9a425b1edc208675dbe4e4d6cddfb7a12bc87dd081d619692ebc51c2d88bad' AS varchar),cast('0' AS varchar))), - ((cast('Patient/e23a56d527cda94fada9ebbe3f22413a1a31d82a04f6bb7d416021d35cfbffff' AS varchar),cast('Encounter/1fef0390b1a172285298953f412a0f35b552bcd37cc2e6e4403b10d233ae1953' AS varchar),cast('0' AS varchar))), - ((cast('Patient/61042fa86aa2b12a2f0d984051f70569c75494933524816ec3b0255b1a5ca4fd' AS varchar),cast('Encounter/a5c9bb6ad3644435f4c0e907b486a11a1eeef35c2bf4bc1266e26eca86c0e4d1' AS varchar),cast('0' AS varchar))), - ((cast('Patient/aaa7627e62c99312fceef021302d48989a9a924ed9ac231f4656a5fd29ebfd26' AS varchar),cast('Encounter/3613943bada30261ac8896543a5f85944ddd423745ed2f6d5db674213b1412f7' AS varchar),cast('0' AS varchar))), - ((cast('Patient/8070692627a5b08d6090e2585907634773d24043580d38353d8457c339a7cafc' AS varchar),cast('Encounter/33f6e5b15a65538e32012009b19b42cb6d2a6e430b57c13d8f118729a22654b9' AS varchar),cast('0' AS varchar))), - ((cast('Patient/56fa59b0f19b6b6d19a472313b78e355d8bd71ec8bbe0a8d1cb32ee966b64850' AS varchar),cast('Encounter/6aa1753de47c16f898b24c97c303ab5a2a2d1f1cfa7b0428a499a379d0d7166b' AS varchar),cast('0' AS varchar))), - ((cast('Patient/7131387ace7c425de78ebeba287a67436ff3e9025c9b18d21d3d7af8a8dd0f1e' AS varchar),cast('Encounter/aec3e626a1b9ac93377f99765f09249476fc6ee6659db552482fbf25e15cdae0' AS varchar),cast('0' AS varchar))), - ((cast('Patient/3bae77ef7c1834c9ac99900a4d101aac1c40e2e741ebeae6d6a9975241d66913' AS varchar),cast('Encounter/df966a2c8069a6c83483681224ab2406e73e3b36090b42bb085eb7dd04814ae8' AS varchar),cast('0' AS varchar))), ((cast('Patient/564a3c168f33783e76ce60b1dcf05f1eb9857c1d2459e729819ed45174bfa1c1' AS varchar),cast('Encounter/a2ed39553b6014205d3199dc9968f34d4ad2318d34dbb413475e7c430feeabf1' AS varchar),cast('0' AS varchar))), ((cast('Patient/7229f84324dc9eb4e92ac1c483f7307d984a9e2ab9f4d8db098c919629be4f2f' AS varchar),cast('Encounter/6b2f6ef2495d772416abd254504db3fa1c8f2ac13c50f926c25ba280f1b4924d' AS varchar),cast('0' AS varchar))), ((cast('Patient/fd32b483921f8c16d0127e9c7f5af3112a973d304fc1ce335b70e439741c8004' AS varchar),cast('Encounter/4cab98a3f5c6ba9439285e19a6ecba6bc50083f613700f992511dc57a572ddcb' AS varchar),cast('0' AS varchar))), diff --git a/cumulus_mhg_dev_db b/cumulus_mhg_dev_db deleted file mode 100644 index 4a78c37ca53a127f95accb27598fa3cd96b4ffb6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1323008 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 diff --git a/tests/conftest.py b/tests/conftest.py index 1b6e7c09..16399855 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -27,7 +27,7 @@ def mock_db(): @pytest.fixture def mock_db_core(): - """Provides a DuckDatabaseBackend with the core study ranfor local testing""" + """Provides a DuckDatabaseBackend with the core study ran for local testing""" data_dir = f"{Path(__file__).parent}/test_data/duckdb_data" with tempfile.TemporaryDirectory() as tmpdir: db = create_db_backend( diff --git a/tests/test_data/duckdb_data/Untitled b/tests/test_data/duckdb_data/Untitled deleted file mode 100644 index ababe675cb4d91b04d53fbe3248702064e5d6695..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12288 zcmeI#F$#lF3;<9UkKi>vqO|32Lc6&MoyFEOc!_Skk5kX#;zin7L1>qP@Un#j5?-b> zQ~MZS&-rpa*H!Xe40(v5*zPUw$9U*Zw=Qn?s1P7PfB*pk1PBlyK!5-N0{;_8v*oP! xDwb6l0RjXF5FkK+009C72oNB!M*;u;9 Date: Mon, 4 Dec 2023 13:32:00 -0500 Subject: [PATCH 08/17] light PSM cleanup --- cumulus_library/statistics/psm.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/cumulus_library/statistics/psm.py b/cumulus_library/statistics/psm.py index b61a3b9a..a1bf7ee9 100644 --- a/cumulus_library/statistics/psm.py +++ b/cumulus_library/statistics/psm.py @@ -146,6 +146,7 @@ def _create_covariate_table(self, cursor: DatabaseCursor, schema: str): 0, ) cohort = pandas.concat([pos, neg]) + # Replace table (if it exists) # TODO - replace with timestamp prepended table drop = get_drop_view_table( @@ -181,7 +182,9 @@ def generate_psm_analysis(self, cursor: object, schema: str): df[dependent_variable] = df["code"].apply(lambda x: 1 if x in codes else 0) df = df.drop(columns="code") # instance_count present but unused for PSM if table contains a count_ref input + # (it's intended for manual review) df = df.drop(columns="instance_count", errors="ignore") + columns = [] if self.config.join_cols_by_table is not None: for table_key in self.config.join_cols_by_table: @@ -192,11 +195,13 @@ def generate_psm_analysis(self, cursor: object, schema: str): columns.append(column[1]) else: columns.append(column[0]) + for column in columns: encoded_df = pandas.get_dummies(df[column]) df = pandas.concat([df, encoded_df], axis=1) df = df.drop(column, axis=1) df = df.reset_index() + try: psm = PsmPy( df, From 0a477bac0a6ae5c18aa8136d21535713a8429bc9 Mon Sep 17 00:00:00 2001 From: Matt Garber Date: Mon, 4 Dec 2023 13:38:27 -0500 Subject: [PATCH 09/17] additional cleanup --- .../psm_create_covariate_table.sql.jinja | 2 - .../test_data/psm/psm_config_no_optional.toml | 45 +------------------ 2 files changed, 1 insertion(+), 46 deletions(-) diff --git a/cumulus_library/template_sql/statistics/psm_create_covariate_table.sql.jinja b/cumulus_library/template_sql/statistics/psm_create_covariate_table.sql.jinja index afcdac71..210ec253 100644 --- a/cumulus_library/template_sql/statistics/psm_create_covariate_table.sql.jinja +++ b/cumulus_library/template_sql/statistics/psm_create_covariate_table.sql.jinja @@ -7,7 +7,6 @@ CREATE TABLE {{ target_table }} AS ( SELECT COUNT(DISTINCT {{ primary_ref }}) FROM "{{ count_table }}" WHERE sample_cohort."{{ count_ref }}" = "{{ count_table }}"."{{ count_ref }}" - --AND sample_cohort.enc_end_date >= "{{ count_table }}".recordeddate ) AS instance_count, {%- endif %} {%- for key in join_cols_by_table %} @@ -37,6 +36,5 @@ CREATE TABLE {{ target_table }} AS ( , {%- endif -%} {% endfor %} - -- AND c.recordeddate <= sample_cohort.enc_end_date ORDER BY sample_cohort."{{ primary_ref }}" ) diff --git a/tests/test_data/psm/psm_config_no_optional.toml b/tests/test_data/psm/psm_config_no_optional.toml index 17b29b9b..5890d9c1 100644 --- a/tests/test_data/psm/psm_config_no_optional.toml +++ b/tests/test_data/psm/psm_config_no_optional.toml @@ -1,52 +1,9 @@ -# This is a config file for generating a propensity score matching (PSM) definition. - -# You can use this for selecting records for an expert review process, and you can -# also use it to generate statistics around your population that meets your selection -# criteria versus those that do not. - -# This attempts to handle the complexities of generating SQL queries for you, -# but you do need to know a little bit about what your data looks like in the -# database. We recommend that you only attempt to use this after you have decided -# on the first draft of your cohort selection criteria - -# classification_json should reference a file in the same directory as this config, -# which matches a category to a set of ICD codes. As an example, we are using the -# DSM5 classification guide, but this could be a user-curated set of condition labels classification_json = "dsm5_classifications.json" - -# pos_source_table should be a curated table built as part of a study, which -# has entities matching your selection criteria (probably patients, but it could -# be another base FHIR resource) pos_source_table = "core__psm_cohort" - -# neg_source_table should be the primary table your positive source was built from, -# i.e. it should contain all members that weren't identified as part of your cohort. -# It should be one of the base FHIR resource tables neg_source_table = "core__condition" - -# target_table should be the name of the table you're storing your PSM cohort in. It -# should be prefixed by 'studyname__' target_table = "core__psm_encounter_covariate" - -# primary_ref should be the column name from your pos_source_table that is the item -# of interest. it should have the same name as it did when it was selected -#from neg_source_table primary_ref = 'encounter_ref' - -# dependent_variable is the name to use for identifying which cohort a record is in. -# It should be phrased such that a value of true would indicate it is originally from -# your pos_source_table. dependent_variable = "example_diagnosis" - -# pos_sample_size is the number of records to select from your pos_source_table. -# It should be no smaller than 20. pos_sample_size = 5 - -# neg_sample_size is the number of records to select from your neg_source_table. -# It should be no smaller than 20. neg_sample_size = 10 - -# You can, if needed, select a new random seed value for count sampling. This is used -# to make sure that, for a given population, you'll always get the same sample set -# for repeatability. You probably don't need to change this in most cases. - seed = 1234567890 +seed = 1234567890 From e684d8f9f759f9cb5d7cb02b2ef3da3fdfbcb037 Mon Sep 17 00:00:00 2001 From: Matt Garber Date: Mon, 4 Dec 2023 13:40:35 -0500 Subject: [PATCH 10/17] pylint --- cumulus_library/base_table_builder.py | 1 - 1 file changed, 1 deletion(-) diff --git a/cumulus_library/base_table_builder.py b/cumulus_library/base_table_builder.py index 461c6032..9b4f3e20 100644 --- a/cumulus_library/base_table_builder.py +++ b/cumulus_library/base_table_builder.py @@ -2,7 +2,6 @@ import re from abc import ABC, abstractmethod -from typing import final from cumulus_library.databases import DatabaseCursor from cumulus_library.helper import get_progress_bar, query_console_output From 86c70bc0485a32e352eb503cbd96a3ad24ad2568 Mon Sep 17 00:00:00 2001 From: Matt Garber Date: Mon, 4 Dec 2023 14:14:15 -0500 Subject: [PATCH 11/17] unit test fixing --- cumulus_library/databases.py | 7 ++++--- .../statistics/psm_distinct_ids.sql.jinja | 1 - cumulus_mhg_dev_db | Bin 0 -> 2895872 bytes tests/test_psm_templates.py | 3 --- 4 files changed, 4 insertions(+), 7 deletions(-) create mode 100644 cumulus_mhg_dev_db diff --git a/cumulus_library/databases.py b/cumulus_library/databases.py index cb553d6e..82ab6e5c 100644 --- a/cumulus_library/databases.py +++ b/cumulus_library/databases.py @@ -96,12 +96,13 @@ def __init__(self, region: str, workgroup: str, profile: str, schema_name: str): schema_name=self.schema_name, **connect_kwargs, ) + self.pandas_cursor = self.connection.cursor(cursor=AthenaPandasCursor) def cursor(self) -> AthenaCursor: return self.connection.cursor() - def pandas_cursor(self) -> AthenaCursor: - return self.connection.cursor(cursor=AthenaPandasCursor) + def pandas_cursor(self) -> AthenaPandasCursor: + return self.pandas_cursor def execute_as_pandas(self, sql: str) -> pandas.DataFrame: return self.pandas_cursor.execute(sql).as_pandas() @@ -172,7 +173,7 @@ def cursor(self) -> duckdb.DuckDBPyConnection: def pandas_cursor(self) -> duckdb.DuckDBPyConnection: # Since this is not provided, return the vanilla cursor - return self.cursor() + return self.connection def execute_as_pandas(self, sql: str) -> pandas.DataFrame: # We call convert_dtypes here in case there are integer columns. diff --git a/cumulus_library/template_sql/statistics/psm_distinct_ids.sql.jinja b/cumulus_library/template_sql/statistics/psm_distinct_ids.sql.jinja index 20b7e961..7041f690 100644 --- a/cumulus_library/template_sql/statistics/psm_distinct_ids.sql.jinja +++ b/cumulus_library/template_sql/statistics/psm_distinct_ids.sql.jinja @@ -13,4 +13,3 @@ WHERE FROM {{ filter_table }} ) {%- endif -%} - diff --git a/cumulus_mhg_dev_db b/cumulus_mhg_dev_db new file mode 100644 index 0000000000000000000000000000000000000000..1fb9ee134c076e5a32a3c9dcb3502dbda59fb39b GIT binary patch literal 2895872 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

f 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 z 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�Ur8*P` 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 z00ck)1V8`;KmY_l00ck)1V8`;KmY_l00ck)1V8`;KmY_l00ck)1V8`;KmY_l00ck) z1V8`;KmY_l00ck)1V8`;KmY_l00ck)1V8`;KmY_l00ck)1V8`;KmY_l00ck)1V8`; zKmY_l00ck)1V8`;KmY_l00ck)1V8`;KmY_l00ck)1V8`;KmY_l00ck)1V8`;KmY_l z00ck)1V8`;KmY_l00ck)1V8`;KmY_l00ck)1V8`;KmY_l00ck)1V8`;KmY_l00ck) z1V8`;KmY_l00ck)1V8`;KmY_l00ck)1V8`;KmY_l00ck)1V8`;KmY_l00ck)1V8`; zKmY_l00ck)1V8`;KmY_l00ck)1V8`;KmY_l00ck)1V8`;KmY_l00ck)1V8`;KmY_l z00ck)1V8`;KmY_l00ck)1V8`;KmY_l00ck)1V8`;KmY_l00ck)1V8`;KmY_l00ck) z1V8`;KmY_l00ck)1V8`;KmY_l00ck)1V8`;KmY_l00ck)1V8`;KmY_l00ck)1V8`; zKmY_l00ck)1V8`;KmY_l00ck)1V8`;KmY_l00ck)1V8`;KmY_l00ck)1V8`;KmY_l z00ck)1V8`;KmY_l00ck)1V8`;KmY_l00ck)1V8`;KmY_l00ck)1V8`;KmY_l00ck) z1V8`;KmY_l00ck)1V8`;KmY_l00ck)1V8`;KmY_l00ck)1V8`;KmY_l00ck)1V8`; zKmY_l00ck)1V8`;KmY_l00ck)1V8`;KmY_l00ck)1V8`;KmY_l00ck)1V8`;KmY_l z00ck)1V8`;KmY_l00ck)1V8`;KmY_l00ck)1V8`;KmY_l00ck)1V8`;KmY_l00ck) z1V8`;KmY_l00ck)1V8`;KmY_l00ck)1V8`;KmY_l00ck)1V8`;KmY_l00ck)1V8`; zKmY_l00ck)1V8`;KmY_l00ck)1V8`;KmY_l00ck)1V8`;KmY_l00ck)1V8`;KmY_l z00ck)1V8`;KmY_l00ck)1V8`;KmY_l00ck)1V8`;KmY_l00ck)1V8`;KmY_l00ck) z1V8`;KmY_l00ck)1V8`;KmY_l00ck)1V8`;KmY_l00ck)1V8`;KmY_l00ck)1V8`; zKmY_l00ck)1V8`;KmY_l00e4A;H~Xn{Da5-zn{8v#Pw^YX70fq5C8!Xm|6n+&S$1= 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 literal 0 HcmV?d00001 diff --git a/tests/test_psm_templates.py b/tests/test_psm_templates.py index 7404e578..28306132 100644 --- a/tests/test_psm_templates.py +++ b/tests/test_psm_templates.py @@ -71,7 +71,6 @@ def test_get_distinct_ids( "neg_table", WHERE sample_cohort."subject_id" = "neg_table"."subject_id" - -- AND c.recordeddate <= sample_cohort.enc_end_date ORDER BY sample_cohort."subject_id" )""", does_not_raise(), @@ -98,7 +97,6 @@ def test_get_distinct_ids( SELECT COUNT(DISTINCT subject_id) FROM "join_table" WHERE sample_cohort."enc_ref" = "join_table"."enc_ref" - --AND sample_cohort.enc_end_date >= "join_table".recordeddate ) AS instance_count, "join_table"."a", "join_table"."b" AS "c", @@ -110,7 +108,6 @@ def test_get_distinct_ids( sample_cohort."subject_id" = "neg_table"."subject_id" AND sample_cohort."enc_ref" = "join_table"."enc_ref" - -- AND c.recordeddate <= sample_cohort.enc_end_date ORDER BY sample_cohort."subject_id" )""", does_not_raise(), From 561f7281ece4649dad715134cef002d54675a080 Mon Sep 17 00:00:00 2001 From: Matt Garber Date: Mon, 4 Dec 2023 14:20:00 -0500 Subject: [PATCH 12/17] a truly pedantic template bug --- .../template_sql/statistics/psm_distinct_ids.sql.jinja | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cumulus_library/template_sql/statistics/psm_distinct_ids.sql.jinja b/cumulus_library/template_sql/statistics/psm_distinct_ids.sql.jinja index 7041f690..9756c866 100644 --- a/cumulus_library/template_sql/statistics/psm_distinct_ids.sql.jinja +++ b/cumulus_library/template_sql/statistics/psm_distinct_ids.sql.jinja @@ -12,4 +12,4 @@ WHERE SELECT "{{ filter_table }}"."{{ join_id }}" FROM {{ filter_table }} ) -{%- endif -%} +{%- endif %} From 53458a2f57170533d61449ca6a3e103c8dda63ad Mon Sep 17 00:00:00 2001 From: Matt Garber Date: Tue, 5 Dec 2023 12:12:54 -0500 Subject: [PATCH 13/17] PR comments --- cumulus_library/statistics/psm.py | 98 ++++++++------ cumulus_library/statistics/psm.sql | 4 +- .../template_sql/insert_into.sql.jinja | 4 +- .../psm_create_covariate_table.sql.jinja | 44 ++++--- .../template_sql/statistics/psm_templates.py | 8 +- cumulus_mhg_dev_db | Bin 2895872 -> 0 bytes docs/statistics.md | 15 +++ docs/statistics/propensity-score-matching.md | 121 ++++++++++++++++++ docs/study-list.md | 2 +- docs/third-party-software-citations.md | 2 +- tests/conftest.py | 21 +-- tests/test_data/psm/psm_config.toml | 61 +-------- tests/test_psm_templates.py | 2 + 13 files changed, 240 insertions(+), 142 deletions(-) delete mode 100644 cumulus_mhg_dev_db create mode 100644 docs/statistics.md create mode 100644 docs/statistics/propensity-score-matching.md diff --git a/cumulus_library/statistics/psm.py b/cumulus_library/statistics/psm.py index a1bf7ee9..cf105798 100644 --- a/cumulus_library/statistics/psm.py +++ b/cumulus_library/statistics/psm.py @@ -2,6 +2,7 @@ import numpy as np import pandas +import sys import toml from psmpy import PsmPy @@ -29,7 +30,7 @@ class PsmConfig: """Provides expected values for PSM execution These values should be read in from a toml configuration file. - See tests/test_data/psm/psm_config.toml for an example with details about + See docs/statistics/propensity-score-matching.md for an example with details about the expected values for these fields. """ @@ -54,27 +55,40 @@ class PsmBuilder(BaseTableBuilder): def __init__(self, toml_config_path: str): """Loads PSM job details from a PSM configuration file""" - with open(toml_config_path, encoding="UTF-8") as file: - toml_config = toml.load(file) - self.config = PsmConfig( - classification_json=f"{PosixPath(toml_config_path).parent}/{toml_config['classification_json']}", - pos_source_table=toml_config["pos_source_table"], - neg_source_table=toml_config["neg_source_table"], - target_table=toml_config["target_table"], - primary_ref=toml_config["primary_ref"], - dependent_variable=toml_config["dependent_variable"], - pos_sample_size=toml_config["pos_sample_size"], - neg_sample_size=toml_config["neg_sample_size"], - join_cols_by_table=toml_config.get("join_cols_by_table", {}), - count_ref=toml_config.get("count_ref", None), - count_table=toml_config.get("count_table", None), - seed=toml_config.get("seed", 123), - ) super().__init__() + # We're stashing the toml path for error reporting later + self.toml_path = toml_config_path + try: + with open(self.toml_path, encoding="UTF-8") as file: + toml_config = toml.load(file) + + except OSError: + sys.exit(f"PSM configuration not found at {self.toml_path}") + try: + self.config = PsmConfig( + classification_json=f"{PosixPath(self.toml_path).parent}/{toml_config['classification_json']}", + pos_source_table=toml_config["pos_source_table"], + neg_source_table=toml_config["neg_source_table"], + target_table=toml_config["target_table"], + primary_ref=toml_config["primary_ref"], + dependent_variable=toml_config["dependent_variable"], + pos_sample_size=toml_config["pos_sample_size"], + neg_sample_size=toml_config["neg_sample_size"], + join_cols_by_table=toml_config.get("join_cols_by_table", {}), + count_ref=toml_config.get("count_ref", None), + count_table=toml_config.get("count_table", None), + seed=toml_config.get("seed", 123), + ) + except KeyError: + # TODO: add link to docsite when you have network access + sys.exit( + f"PSM configuration at {toml_config_path} contains missing/invalid keys." + "Check the PSM documentation for an example config with more details" + ) def _get_symptoms_dict(self, path: str) -> dict: """convenience function for loading symptoms dictionaries from a json file""" - with open(path) as f: + with open(path, encoding="UTF-8") as f: symptoms = json.load(f) return symptoms @@ -102,11 +116,13 @@ def _get_sampled_ids( df = cursor.execute(query).as_pandas() df = ( df.sort_values(by=[self.config.primary_ref]) - .reset_index() - .drop("index", axis=1) + # .reset_index() + # .drop("index", axis=1) ) + df = ( - # TODO: remove replace behavior after increasing data sample size + # TODO: flip polarity of replace kwarg after increasing the size of the + # unit testing data df.sample(n=sample_size, random_state=self.config.seed, replace=True) .sort_values(by=[self.config.primary_ref]) .reset_index() @@ -119,9 +135,7 @@ def _get_sampled_ids( def _create_covariate_table(self, cursor: DatabaseCursor, schema: str): """Creates a covariate table from the loaded toml config""" # checks for primary & link ref being the same - source_refs = list( - {self.config.primary_ref, self.config.count_ref} - set([None]) - ) + source_refs = list({self.config.primary_ref, self.config.count_ref} - {None}) pos_query = get_distinct_ids(source_refs, self.config.pos_source_table) pos = self._get_sampled_ids( cursor, @@ -148,7 +162,7 @@ def _create_covariate_table(self, cursor: DatabaseCursor, schema: str): cohort = pandas.concat([pos, neg]) # Replace table (if it exists) - # TODO - replace with timestamp prepended table + # TODO - replace with timestamp prepended table in future PR drop = get_drop_view_table( f"{self.config.pos_source_table}_sampled_ids", "TABLE" ) @@ -174,7 +188,7 @@ def _create_covariate_table(self, cursor: DatabaseCursor, schema: str): ) self.queries.append(dataset_query) - def generate_psm_analysis(self, cursor: object, schema: str): + def generate_psm_analysis(self, cursor: DatabaseCursor, schema: str): """Runs PSM statistics on generated tables""" df = cursor.execute(f"select * from {self.config.target_table}").as_pandas() symptoms_dict = self._get_symptoms_dict(self.config.classification_json) @@ -187,15 +201,26 @@ def generate_psm_analysis(self, cursor: object, schema: str): columns = [] if self.config.join_cols_by_table is not None: - for table_key in self.config.join_cols_by_table: - for column in self.config.join_cols_by_table[table_key][ - "included_cols" - ]: + for table_config in self.config.join_cols_by_table.values(): + for column in table_config["included_cols"]: + # If there are two elements, it's a SQL column that has been + # aliased, so we'll look for the alias name if len(column) == 2: columns.append(column[1]) - else: + # If there is one element, it's a straight SQL column we can + # use with no modification + elif len(column) == 1: columns.append(column[0]) + else: + sys.exit( + f"PSM config at {self.toml_path} contains an " + f"unexpected SQL column definition: {column}." + "Check the PSM documentation for valid usages." + ) + # This code block is replacing a column which may contain several categories + # (like male/female/other/unknown for AdministrativeGender), and converts + # it into a series of 1-hot columns for each distinct value in that column, for column in columns: encoded_df = pandas.get_dummies(df[column]) df = pandas.concat([df, encoded_df], axis=1) @@ -211,23 +236,24 @@ def generate_psm_analysis(self, cursor: object, schema: str): ) # This function populates the psm.predicted_data element, which is required # for things like the knn_matched() function call + # TODO: create graph from this data psm.logistic_ps(balance=True) - print(psm.predicted_data) # This function populates the psm.df_matched element # TODO: flip replacement to false after increasing sample data size + # TODO: create graph from this data psm.knn_matched( matcher="propensity_logit", replacement=True, caliper=None, drop_unmatched=True, ) - print(psm.df_matched) + except ZeroDivisionError: - print( + sys.exit( "Encountered a divide by zero error during statistical graph generation. Try increasing your sample size." ) except ValueError: - print( + sys.exit( "Encountered a value error during KNN matching. Try increasing your sample size." ) @@ -242,6 +268,4 @@ def execute_queries( drop_table: bool = False, ): super().execute_queries(cursor, schema, verbose, drop_table) - self.comment_queries() - self.write_queries() self.generate_psm_analysis(cursor, schema) diff --git a/cumulus_library/statistics/psm.sql b/cumulus_library/statistics/psm.sql index 40d9bdf1..c6891a6b 100644 --- a/cumulus_library/statistics/psm.sql +++ b/cumulus_library/statistics/psm.sql @@ -2,7 +2,7 @@ -- This template is provided as an example only of queries generated by PSM table creation. -- It is not used in actual validation -CREATE TABLE "cumulus_mhg_dev_db"."core__psm_cohort_sampled_ids" AS ( +CREATE TABLE "cumulus"."core__psm_cohort_sampled_ids" AS ( SELECT * FROM ( VALUES ((cast('Patient/0b9f1de5dafc274110f78ee28f5eebd446b5b89f9f5ff18adf964694f6f7f8de' AS varchar),cast('Encounter/67f36354731b7591109ba73148a68354d717592e6a790310584c0579571c2d28' AS varchar),cast('1' AS varchar))), @@ -37,7 +37,6 @@ CREATE TABLE core__psm_encounter_covariate AS ( SELECT COUNT( DISTINCT encounter_ref ) FROM "core__condition" WHERE sample_cohort."subject_ref" = "core__condition"."subject_ref" - --AND sample_cohort.enc_end_date >= "core__condition".recordeddate ) AS instance_count, "core__encounter"."gender", "core__encounter"."race_display" AS "race", @@ -47,6 +46,5 @@ CREATE TABLE core__psm_encounter_covariate AS ( "core__encounter" WHERE sample_cohort."encounter_ref" = "core__condition"."encounter_ref" AND sample_cohort."encounter_ref" = "core__encounter"."encounter_ref" - -- AND c.recordeddate <= sample_cohort.enc_end_date ORDER BY sample_cohort."encounter_ref" ) diff --git a/cumulus_library/template_sql/insert_into.sql.jinja b/cumulus_library/template_sql/insert_into.sql.jinja index fa8a14da..cc058abd 100644 --- a/cumulus_library/template_sql/insert_into.sql.jinja +++ b/cumulus_library/template_sql/insert_into.sql.jinja @@ -9,14 +9,14 @@ INSERT INTO {{ table_name }} ) VALUES {%- for row in dataset %} -(( +( {%- for field in row -%} '{{ field }}' {%- if not loop.last -%} , {%- endif -%} {%- endfor -%} -)) +) {%- if not loop.last -%} , {%- endif -%} diff --git a/cumulus_library/template_sql/statistics/psm_create_covariate_table.sql.jinja b/cumulus_library/template_sql/statistics/psm_create_covariate_table.sql.jinja index 210ec253..eed255fe 100644 --- a/cumulus_library/template_sql/statistics/psm_create_covariate_table.sql.jinja +++ b/cumulus_library/template_sql/statistics/psm_create_covariate_table.sql.jinja @@ -1,3 +1,25 @@ +{#- + Macros +-#} +{%- macro comma_delineate(loop) -%} + {%- if not loop.last -%} + , + {%- endif -%} +{%- endmacro -%} +{%- macro select_column_or_alias(join_cols_by_table) -%} + {%- for key in join_cols_by_table %} + {%- for column in join_cols_by_table[key]["included_cols"] %} + {%- if column|length == 1 %} + "{{ key }}"."{{ column[0] }}", + {%- else %} + "{{ key }}"."{{ column[0] }}" AS "{{ column[1] }}", + {%- endif %} + {%- endfor %} + {%- endfor %} +{%- endmacro -%} +{#- + Query +-#} CREATE TABLE {{ target_table }} AS ( SELECT DISTINCT sample_cohort."{{ primary_ref }}", @@ -8,33 +30,21 @@ CREATE TABLE {{ target_table }} AS ( FROM "{{ count_table }}" WHERE sample_cohort."{{ count_ref }}" = "{{ count_table }}"."{{ count_ref }}" ) AS instance_count, - {%- endif %} - {%- for key in join_cols_by_table %} - {%- for column in join_cols_by_table[key]["included_cols"] %} - {%- if column|length == 1 %} - "{{ key }}"."{{ column[0] }}", - {%- else %} - "{{ key }}"."{{ column[0] }}" AS "{{ column[1] }}", - {%- endif %} - {%- endfor %} - {%- endfor %} + {%- endif -%} + {{ select_column_or_alias(join_cols_by_table) }} {{ neg_source_table }}.code FROM "{{ pos_source_table }}_sampled_ids" AS sample_cohort, "{{ neg_source_table }}", {%- for key in join_cols_by_table %} "{{ key }}" - {%- if not loop.last -%} - , - {%- endif -%} + {{- comma_delineate(loop) -}} {% endfor %} WHERE sample_cohort."{{ primary_ref }}" = "{{ neg_source_table }}"."{{ primary_ref }}" {%- for key in join_cols_by_table %} AND sample_cohort."{{ join_cols_by_table[key]["join_id"] }}" = "{{ key }}"."{{ join_cols_by_table[key]["join_id"] }}" - {%- if not loop.last -%} - , - {%- endif -%} - {% endfor %} + {{- comma_delineate(loop) -}} + {% endfor %} ORDER BY sample_cohort."{{ primary_ref }}" ) diff --git a/cumulus_library/template_sql/statistics/psm_templates.py b/cumulus_library/template_sql/statistics/psm_templates.py index 0a43793f..71082e01 100644 --- a/cumulus_library/template_sql/statistics/psm_templates.py +++ b/cumulus_library/template_sql/statistics/psm_templates.py @@ -25,9 +25,7 @@ def get_distinct_ids( :param join_id: the id column to use for joining. Expected to exist in both source and filter tables :param filter_table: a table containing ids you want to exclude """ - if (join_id is None and filter_table is not None) or ( - join_id is not None and filter_table is None - ): + if (join_id and not filter_table) or (not join_id and filter_table): raise CumulusLibraryError( "psm_templates.get_distinct_ids expects all optional parameters to be defined if supplied" ) @@ -66,9 +64,7 @@ def get_create_covariate_table( :count_ref: optional ID to count records with for validation :count_table: optional table to use as the source of the count_refs """ - if (count_ref is None and count_table is not None) or ( - count_ref is not None and count_table is None - ): + if (count_ref and not count_table) or (not count_ref and count_table): raise CumulusLibraryError( "psm_templates.get_create_covariate_table expects all count parameters to be defined if supplied" ) diff --git a/cumulus_mhg_dev_db b/cumulus_mhg_dev_db deleted file mode 100644 index 1fb9ee134c076e5a32a3c9dcb3502dbda59fb39b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2895872 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

f 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 z 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�Ur8*P` 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 z00ck)1V8`;KmY_l00ck)1V8`;KmY_l00ck)1V8`;KmY_l00ck)1V8`;KmY_l00ck) z1V8`;KmY_l00ck)1V8`;KmY_l00ck)1V8`;KmY_l00ck)1V8`;KmY_l00ck)1V8`; zKmY_l00ck)1V8`;KmY_l00ck)1V8`;KmY_l00ck)1V8`;KmY_l00ck)1V8`;KmY_l z00ck)1V8`;KmY_l00ck)1V8`;KmY_l00ck)1V8`;KmY_l00ck)1V8`;KmY_l00ck) z1V8`;KmY_l00ck)1V8`;KmY_l00ck)1V8`;KmY_l00ck)1V8`;KmY_l00ck)1V8`; zKmY_l00ck)1V8`;KmY_l00ck)1V8`;KmY_l00ck)1V8`;KmY_l00ck)1V8`;KmY_l z00ck)1V8`;KmY_l00ck)1V8`;KmY_l00ck)1V8`;KmY_l00ck)1V8`;KmY_l00ck) z1V8`;KmY_l00ck)1V8`;KmY_l00ck)1V8`;KmY_l00ck)1V8`;KmY_l00ck)1V8`; zKmY_l00ck)1V8`;KmY_l00ck)1V8`;KmY_l00ck)1V8`;KmY_l00ck)1V8`;KmY_l z00ck)1V8`;KmY_l00ck)1V8`;KmY_l00ck)1V8`;KmY_l00ck)1V8`;KmY_l00ck) z1V8`;KmY_l00ck)1V8`;KmY_l00ck)1V8`;KmY_l00ck)1V8`;KmY_l00ck)1V8`; zKmY_l00ck)1V8`;KmY_l00ck)1V8`;KmY_l00ck)1V8`;KmY_l00ck)1V8`;KmY_l z00ck)1V8`;KmY_l00ck)1V8`;KmY_l00ck)1V8`;KmY_l00ck)1V8`;KmY_l00ck) z1V8`;KmY_l00ck)1V8`;KmY_l00ck)1V8`;KmY_l00ck)1V8`;KmY_l00ck)1V8`; zKmY_l00ck)1V8`;KmY_l00ck)1V8`;KmY_l00ck)1V8`;KmY_l00ck)1V8`;KmY_l z00ck)1V8`;KmY_l00ck)1V8`;KmY_l00ck)1V8`;KmY_l00ck)1V8`;KmY_l00ck) z1V8`;KmY_l00ck)1V8`;KmY_l00ck)1V8`;KmY_l00ck)1V8`;KmY_l00ck)1V8`; zKmY_l00ck)1V8`;KmY_l00e4A;H~Xn{Da5-zn{8v#Pw^YX70fq5C8!Xm|6n+&S$1= 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 diff --git a/docs/statistics.md b/docs/statistics.md new file mode 100644 index 00000000..1674ee26 --- /dev/null +++ b/docs/statistics.md @@ -0,0 +1,15 @@ +--- +title: Statistics +parent: Library +nav_order: 7 +has_children: true +# audience: Clinical researchers interested in publications +# type: reference +--- + +# Statistics reference + +This page contains detailed documentation on statistics utilities provided +for use in Cumulus studies. + +- [Propensity Score Matching](statistics/propensity-score-matching.md). \ No newline at end of file diff --git a/docs/statistics/propensity-score-matching.md b/docs/statistics/propensity-score-matching.md new file mode 100644 index 00000000..a002e3a4 --- /dev/null +++ b/docs/statistics/propensity-score-matching.md @@ -0,0 +1,121 @@ +--- +title: Propensity Score Matching +parent: Statistics +nav_order: 1 +# audience: clinical researchers, IRB reviewers +# type: reference +--- + +# Propensity Score Matching (PSM) + +This document aims to provide help in configuring/running PSM analysis as part of a +Cumulus Library study. + +## What is propensity score matching? + +Propensity score matching is a statistical technique for generating an experimental +cohort from a larger population around a dependent variable. In our context, this +allows you to compare the positive/negative members of a given population to determine +if there are any social determinants of health (SDOH) that may be an indicator of +a higher probability of exhibiting a given disease/symptom. + +The expected workflow looks something like this: + +- Define a set of symptoms that are indicators of the condition you are investigating +- From a general population, ID the instances that match this condition set +- Select an appropriate sample size for your randomly selected cohorts +- Run the PSM module, which will sample from your condition matches, generate a + negative set from the remaining general population, normalize these two sets, + and generate data that can be fed into statistical methods to help you analyze + the population differences w.r.t SDOH. + +## Configuring a PSM task + +You can configure a PSM task the same way that you would configure python/counts table +infrastructure in your manifest.toml. + +TODO: update after this is implemented with example of usage + +The PSM config you are referencing above is expected to contain a number of field +definitions. We :strongly: recommend starting from the below template, which contains +details on the expectations of each value. +```toml +# This is a config file for generating a propensity score matching (PSM) definition. + +# You can use this for selecting records for an expert review process, and you can +# also use it to generate statistics around your population that meets your selection +# criteria versus those that do not. + +# This attempts to handle the complexities of generating SQL queries for you, +# but you do need to know a little bit about what your data looks like in the +# database. We recommend that you only attempt to use this after you have decided +# on the first draft of your cohort selection criteria + +# classification_json should reference a file in the same directory as this config, +# which matches a category to a set of ICD codes. As an example, you could use +# an existing guide like DSM5 classifications for this, but you could also use +# something like VSAC, or create your own. +classification_json = "dsm5_classifications.json" + +# pos_source_table should be a curated table built as part of a study, which +# has entities matching your selection criteria (probably patients, but it could +# be another base FHIR resource) +pos_source_table = "study__diagnosis_cohort" + +# neg_source_table should be the primary table your positive source was built from, +# i.e. it should contain all members that weren't identified as part of your cohort. +# It should be one of the base FHIR resource tables +neg_source_table = "study__condition" + +# target_table should be the name of the table you're storing your PSM cohort in. It +# should be prefixed by 'studyname__' +target_table = "study__psm_encounter_covariate" + +# primary_ref should be the column name from your pos_source_table that is the item +# of interest. it should have the same name as it did when it was selected +#from neg_source_table +primary_ref = 'encounter_ref' + +# count_ref is an optional second ref in your positive_source table that can be used +# to id the number of instances associated with your primary_ref. It is only used +# for validation +count_ref = 'subject_ref' + +# count_table is the table to use to select your count_ref from. It should :probably: +# be the same as your neg_source_table +count_table = 'study__condition' + +# dependent_variable is the name to use for identifying which cohort a record is in. +# It should be phrased such that a value of true would indicate it is originally from +# your pos_source_table. +dependent_variable = "example_diagnosis" + +# pos_sample_size is the number of records to select from your pos_source_table. +# It should be no smaller than 20. +pos_sample_size = 50 + +# neg_sample_size is the number of records to select from your neg_source_table. +# It should be no smaller than 20. +neg_sample_size = 1000 + +# You can, if needed, select a new random seed value for count sampling. This is used +# to make sure that, for a given population, you'll always get the same sample set +# for repeatability. You probably don't need to change this in most cases. + seed = 1234567890 + +# [join_cols_by_table.table_name] allows you to add arbitrary data from other sources +# to your target_table. it should be comprised of two keys: +# - join_id - the field to use to join to your cohort table. It should :probably: +# be the primary ref. +# - included_cols - a list of columns to join from the table in question. An array +# of one string string will be included as the column name. An array of two strings +# will create an alias, like "table_name.first_string AS second_str" +# You can join as many tables as you like. +[join_cols_by_table.study__encounter] +join_id = "encounter_ref" +included_cols = [ + ["gender"], + ["race_display", "race"] +] + +``` \ No newline at end of file diff --git a/docs/study-list.md b/docs/study-list.md index 5c8196f5..dbf231d9 100644 --- a/docs/study-list.md +++ b/docs/study-list.md @@ -1,7 +1,7 @@ --- title: Cumulus studies parent: Library -nav_order: 7 +nav_order: 8 # audience: Clinical researchers interested in publications # type: reference --- diff --git a/docs/third-party-software-citations.md b/docs/third-party-software-citations.md index 5b2c30cc..a97c5e64 100644 --- a/docs/third-party-software-citations.md +++ b/docs/third-party-software-citations.md @@ -1,7 +1,7 @@ --- title: Third party software citations parent: Library -nav_order: 8 +nav_order: 9 # audience: Clinical researchers interested in publications # type: reference --- diff --git a/tests/conftest.py b/tests/conftest.py index 16399855..be99fac1 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -26,19 +26,10 @@ def mock_db(): @pytest.fixture -def mock_db_core(): +def mock_db_core(mock_db): """Provides a DuckDatabaseBackend with the core study ran for local testing""" - data_dir = f"{Path(__file__).parent}/test_data/duckdb_data" - with tempfile.TemporaryDirectory() as tmpdir: - db = create_db_backend( - { - "db_type": "duckdb", - "schema_name": f"{tmpdir}/duck.db", - "load_ndjson_dir": data_dir, - } - ) - builder = StudyBuilder(db) - builder.clean_and_build_study( - f"{Path(__file__).parent.parent}/cumulus_library/studies/core" - ) - yield db + builder = StudyBuilder(mock_db) + builder.clean_and_build_study( + f"{Path(__file__).parent.parent}/cumulus_library/studies/core" + ) + yield mock_db diff --git a/tests/test_data/psm/psm_config.toml b/tests/test_data/psm/psm_config.toml index bd96d234..11b54d2e 100644 --- a/tests/test_data/psm/psm_config.toml +++ b/tests/test_data/psm/psm_config.toml @@ -1,73 +1,14 @@ -# This is a config file for generating a propensity score matching (PSM) definition. - -# You can use this for selecting records for an expert review process, and you can -# also use it to generate statistics around your population that meets your selection -# criteria versus those that do not. - -# This attempts to handle the complexities of generating SQL queries for you, -# but you do need to know a little bit about what your data looks like in the -# database. We recommend that you only attempt to use this after you have decided -# on the first draft of your cohort selection criteria - -# classification_json should reference a file in the same directory as this config, -# which matches a category to a set of ICD codes. As an example, we are using the -# DSM5 classification guide, but this could be a user-curated set of condition labels classification_json = "dsm5_classifications.json" - -# pos_source_table should be a curated table built as part of a study, which -# has entities matching your selection criteria (probably patients, but it could -# be another base FHIR resource) pos_source_table = "core__psm_cohort" - -# neg_source_table should be the primary table your positive source was built from, -# i.e. it should contain all members that weren't identified as part of your cohort. -# It should be one of the base FHIR resource tables neg_source_table = "core__condition" - -# target_table should be the name of the table you're storing your PSM cohort in. It -# should be prefixed by 'studyname__' target_table = "core__psm_encounter_covariate" - -# primary_ref should be the column name from your pos_source_table that is the item -# of interest. it should have the same name as it did when it was selected -#from neg_source_table primary_ref = 'encounter_ref' - -# count_ref is an optional second ref in your positive_source table that can be used -# to id the number of instances associated with your primary_ref. It is only used -# for validation count_ref = 'subject_ref' - -# count_table is the table to use to select your count_ref from. It should :probably: -# be the same as your neg_source_table count_table = 'core__condition' - -# dependent_variable is the name to use for identifying which cohort a record is in. -# It should be phrased such that a value of true would indicate it is originally from -# your pos_source_table. dependent_variable = "example_diagnosis" - -# pos_sample_size is the number of records to select from your pos_source_table. -# It should be no smaller than 20. pos_sample_size = 5 - -# neg_sample_size is the number of records to select from your neg_source_table. -# It should be no smaller than 20. neg_sample_size = 10 - -# You can, if needed, select a new random seed value for count sampling. This is used -# to make sure that, for a given population, you'll always get the same sample set -# for repeatability. You probably don't need to change this in most cases. - seed = 1234567890 - -# [join_cols_by_table.table_name] allows you to add arbitrary data from other sources -# to your target_table. it should be comprised of two keys: -# - join_id - the field to use to join to your cohort table. It should :probably: -# be the primary ref. -# - included_cols - a list of columns to join from the table in question. An array -# of one string string will be included as the column name. An array of two strings -# will create an alias, like "table_name.first_string AS second_str" -# You can join as many tables as you like. +seed = 1234567890 [join_cols_by_table.core__encounter] join_id = "encounter_ref" included_cols = [ diff --git a/tests/test_psm_templates.py b/tests/test_psm_templates.py index 28306132..04c11ad0 100644 --- a/tests/test_psm_templates.py +++ b/tests/test_psm_templates.py @@ -149,4 +149,6 @@ def test_create_covariate_table( count_ref, count_table, ) + with open("output.sql", "w") as f: + f.write(query) assert query == expected From 1f09718f48903ef16849dfed229dff8057422c68 Mon Sep 17 00:00:00 2001 From: Matt Garber Date: Tue, 5 Dec 2023 12:25:15 -0500 Subject: [PATCH 14/17] post execution hook --- cumulus_library/base_table_builder.py | 19 +++++++++++++------ cumulus_library/statistics/psm.py | 4 ++-- 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/cumulus_library/base_table_builder.py b/cumulus_library/base_table_builder.py index 9b4f3e20..512ae4d2 100644 --- a/cumulus_library/base_table_builder.py +++ b/cumulus_library/base_table_builder.py @@ -2,6 +2,7 @@ import re from abc import ABC, abstractmethod +from typing import final from cumulus_library.databases import DatabaseCursor from cumulus_library.helper import get_progress_bar, query_console_output @@ -32,12 +33,7 @@ def prepare_queries(self, cursor: object, schema: str): """ raise NotImplementedError - # 🚨🚨🚨 WARNING: in 99% of cases, subclasses should *not* re-implement 🚨🚨🚨 - # 🚨🚨🚨 execute_queries. 🚨🚨🚨 - - # If you know what you are doing, you can attempt to override it, but it is - # strongly recommended you invoke this as is via a super() call, and then - # run code before or after that as makes sense for your use case. + @final def execute_queries( self, cursor: DatabaseCursor, @@ -78,6 +74,17 @@ def execute_queries( for query in self.queries: query_console_output(verbose, query, progress, task) cursor.execute(query) + self.post_execution(cursor, schema, verbose, drop_table) + + def post_execution( + self, + cursor: DatabaseCursor, + schema: str, + verbose: bool, + drop_table: bool = False, + ): + """Hook for any additional actions to run after execute_queries""" + pass def comment_queries(self): """Convenience method for annotating outputs of template generators to disk""" diff --git a/cumulus_library/statistics/psm.py b/cumulus_library/statistics/psm.py index cf105798..da18f13e 100644 --- a/cumulus_library/statistics/psm.py +++ b/cumulus_library/statistics/psm.py @@ -260,12 +260,12 @@ def generate_psm_analysis(self, cursor: DatabaseCursor, schema: str): def prepare_queries(self, cursor: object, schema: str): self._create_covariate_table(cursor, schema) - def execute_queries( + def post_execution( self, cursor: object, schema: str, verbose: bool, drop_table: bool = False, ): - super().execute_queries(cursor, schema, verbose, drop_table) + # super().execute_queries(cursor, schema, verbose, drop_table) self.generate_psm_analysis(cursor, schema) From 6274b8052a6bd12fff356dc6daa4062315293adb Mon Sep 17 00:00:00 2001 From: Matt Garber Date: Tue, 5 Dec 2023 12:44:45 -0500 Subject: [PATCH 15/17] test cleanup --- .../psm_create_covariate_table.sql.jinja | 29 +++++++++---------- tests/test_psm_templates.py | 5 +--- tests/test_templates.py | 4 +-- 3 files changed, 17 insertions(+), 21 deletions(-) diff --git a/cumulus_library/template_sql/statistics/psm_create_covariate_table.sql.jinja b/cumulus_library/template_sql/statistics/psm_create_covariate_table.sql.jinja index eed255fe..3a868dd9 100644 --- a/cumulus_library/template_sql/statistics/psm_create_covariate_table.sql.jinja +++ b/cumulus_library/template_sql/statistics/psm_create_covariate_table.sql.jinja @@ -1,21 +1,21 @@ {#- Macros -#} -{%- macro comma_delineate(loop) -%} - {%- if not loop.last -%} - , - {%- endif -%} +{%- macro comma_delineate(loop) -%} +{%- if not loop.last -%} +, +{%- endif -%} {%- endmacro -%} {%- macro select_column_or_alias(join_cols_by_table) -%} - {%- for key in join_cols_by_table %} - {%- for column in join_cols_by_table[key]["included_cols"] %} - {%- if column|length == 1 %} +{%- for key in join_cols_by_table %} +{%- for column in join_cols_by_table[key]["included_cols"] %} +{%- if column|length == 1 %} "{{ key }}"."{{ column[0] }}", {%- else %} "{{ key }}"."{{ column[0] }}" AS "{{ column[1] }}", - {%- endif %} - {%- endfor %} - {%- endfor %} +{%- endif %} +{%- endfor %} +{%- endfor %} {%- endmacro -%} {#- Query @@ -41,10 +41,9 @@ CREATE TABLE {{ target_table }} AS ( {% endfor %} WHERE sample_cohort."{{ primary_ref }}" = "{{ neg_source_table }}"."{{ primary_ref }}" - {%- for key in join_cols_by_table %} - AND sample_cohort."{{ join_cols_by_table[key]["join_id"] }}" - = "{{ key }}"."{{ join_cols_by_table[key]["join_id"] }}" - {{- comma_delineate(loop) -}} - {% endfor %} + {%- for key in join_cols_by_table %} + AND sample_cohort."{{ join_cols_by_table[key]["join_id"] }}" = "{{ key }}"."{{ join_cols_by_table[key]["join_id"] }}" +{{- comma_delineate(loop) -}} + {% endfor %} ORDER BY sample_cohort."{{ primary_ref }}" ) diff --git a/tests/test_psm_templates.py b/tests/test_psm_templates.py index 04c11ad0..74c6b333 100644 --- a/tests/test_psm_templates.py +++ b/tests/test_psm_templates.py @@ -106,8 +106,7 @@ def test_get_distinct_ids( "join_table" WHERE sample_cohort."subject_id" = "neg_table"."subject_id" - AND sample_cohort."enc_ref" - = "join_table"."enc_ref" + AND sample_cohort."enc_ref" = "join_table"."enc_ref" ORDER BY sample_cohort."subject_id" )""", does_not_raise(), @@ -149,6 +148,4 @@ def test_create_covariate_table( count_ref, count_table, ) - with open("output.sql", "w") as f: - f.write(query) assert query == expected diff --git a/tests/test_templates.py b/tests/test_templates.py index c945428e..ce4a3111 100644 --- a/tests/test_templates.py +++ b/tests/test_templates.py @@ -518,8 +518,8 @@ def test_insert_into_query_creation(): expected = """INSERT INTO test_table ("a","b") VALUES -(('foo','foo')), -(('bar','bar'));""" +('foo','foo'), +('bar','bar');""" query = get_insert_into_query( table_name="test_table", table_cols=["a", "b"], From 5ab07b93928fc64437fd8cd77b621651e8686e2a Mon Sep 17 00:00:00 2001 From: Matt Garber Date: Tue, 5 Dec 2023 12:47:28 -0500 Subject: [PATCH 16/17] line length --- .../statistics/psm_create_covariate_table.sql.jinja | 3 ++- tests/test_psm_templates.py | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/cumulus_library/template_sql/statistics/psm_create_covariate_table.sql.jinja b/cumulus_library/template_sql/statistics/psm_create_covariate_table.sql.jinja index 3a868dd9..0a6d46cd 100644 --- a/cumulus_library/template_sql/statistics/psm_create_covariate_table.sql.jinja +++ b/cumulus_library/template_sql/statistics/psm_create_covariate_table.sql.jinja @@ -42,7 +42,8 @@ CREATE TABLE {{ target_table }} AS ( WHERE sample_cohort."{{ primary_ref }}" = "{{ neg_source_table }}"."{{ primary_ref }}" {%- for key in join_cols_by_table %} - AND sample_cohort."{{ join_cols_by_table[key]["join_id"] }}" = "{{ key }}"."{{ join_cols_by_table[key]["join_id"] }}" + AND sample_cohort."{{ join_cols_by_table[key]["join_id"] }}" + = "{{ key }}"."{{ join_cols_by_table[key]["join_id"] }}" {{- comma_delineate(loop) -}} {% endfor %} ORDER BY sample_cohort."{{ primary_ref }}" diff --git a/tests/test_psm_templates.py b/tests/test_psm_templates.py index 74c6b333..55b153c2 100644 --- a/tests/test_psm_templates.py +++ b/tests/test_psm_templates.py @@ -106,7 +106,8 @@ def test_get_distinct_ids( "join_table" WHERE sample_cohort."subject_id" = "neg_table"."subject_id" - AND sample_cohort."enc_ref" = "join_table"."enc_ref" + AND sample_cohort."enc_ref" + = "join_table"."enc_ref" ORDER BY sample_cohort."subject_id" )""", does_not_raise(), From aa81d3bfa223629fd4bfbefbb91662b6b6d3f092 Mon Sep 17 00:00:00 2001 From: Matt Garber Date: Tue, 5 Dec 2023 12:49:04 -0500 Subject: [PATCH 17/17] sqlfluff pedantry --- .../statistics/psm_create_covariate_table.sql.jinja | 4 ++-- tests/test_psm_templates.py | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/cumulus_library/template_sql/statistics/psm_create_covariate_table.sql.jinja b/cumulus_library/template_sql/statistics/psm_create_covariate_table.sql.jinja index 0a6d46cd..8e5d2558 100644 --- a/cumulus_library/template_sql/statistics/psm_create_covariate_table.sql.jinja +++ b/cumulus_library/template_sql/statistics/psm_create_covariate_table.sql.jinja @@ -42,8 +42,8 @@ CREATE TABLE {{ target_table }} AS ( WHERE sample_cohort."{{ primary_ref }}" = "{{ neg_source_table }}"."{{ primary_ref }}" {%- for key in join_cols_by_table %} - AND sample_cohort."{{ join_cols_by_table[key]["join_id"] }}" - = "{{ key }}"."{{ join_cols_by_table[key]["join_id"] }}" + AND sample_cohort."{{ join_cols_by_table[key]["join_id"] }}" + = "{{ key }}"."{{ join_cols_by_table[key]["join_id"] }}" {{- comma_delineate(loop) -}} {% endfor %} ORDER BY sample_cohort."{{ primary_ref }}" diff --git a/tests/test_psm_templates.py b/tests/test_psm_templates.py index 55b153c2..78c4fd74 100644 --- a/tests/test_psm_templates.py +++ b/tests/test_psm_templates.py @@ -106,8 +106,8 @@ def test_get_distinct_ids( "join_table" WHERE sample_cohort."subject_id" = "neg_table"."subject_id" - AND sample_cohort."enc_ref" - = "join_table"."enc_ref" + AND sample_cohort."enc_ref" + = "join_table"."enc_ref" ORDER BY sample_cohort."subject_id" )""", does_not_raise(),