患者レベルの病院エピソー統計(HES)およびリンクされたONS死亡率データをクリーニングおよび処理するためのオープンソースRパイプライン。
病院のエピソー統計(HES)は、イギリスのNHS病院でのすべてのHosptial入院、A&Eの出席、外来患者の任命の詳細を含むデータベースです。
分析に使用する前に、HESデータでは、追加の変数を導出するためにクリーニング、品質管理、処理が必要です。 HESの複雑なレコード構造、多数の変数、およびデータセットのサイズは、分析的および計算的な観点の両方からこれを挑戦的なタスクにします。
このリポジトリプロセスで開発している半自動ワークフローは、すべての処理手順が文書化されており、承認された各分析プロジェクトが同じクリーンデータに基づいていることを確認するように設計されていることを一貫して再現できます。
2008/09年から最新の四半期リリースまで、ONS死亡率データにリンクされたHESデータを使用しています。データアプリケーションは、NHS Digital [Data Access Request Service Data Access Request Service(DARS)によって承認されています。
データは、Health Foundationの安全なデータ環境でアクセスされます。安全なデータ分析施設(ISO27001情報セキュリティ基準で認定され、NHSデジタルデータセキュリティと保護ツールキットで認識されています)。患者または他の個人を直接識別できる情報は使用されません。
ドキュメントフォルダーには以下の情報が含まれています。
さらに、以下のセクションについて説明します
このパイプラインで作成されたHESデータは公開されていないため、コードを使用して同じクリーンデータとデータベースを複製することはできません。ただし、コードは、分析のためにデータセットを準備するために、同様の患者レベルのHES抽出物で使用できます。パイプラインの仕組みに関する詳細については、以下を参照するか、プロセスドキュメントを参照してください。
プロセスドキュメントでは、パイプラインの全体的な設計について説明し、必要な入力とワークフローのステップの高レベルの説明をリストします。
フローチャートは、ユーザーの入力とデータがさまざまなパイプライン関数をどのように移動するかを示しています。
パイプラインは2つのモードで実行できます。
update = TRUE
の場合)。同じ年以内のHESデータの更新は重複しているため、古いデータの一部が削除され、新しいアップデートに置き換えられます。 ONS死亡率データは、データの更新ごとに完全に更新されます。ビルドモードでは、パイプライン
更新モードでは、パイプライン
アーキテクチャの意思決定記録(ADR)は、アーキテクチャの決定と設計の選択と、その文脈、理論的根拠、結果を捉えています。さらに、いくつかの分析的決定を記録しました。
これまでのところ、決定を記録しました
HESパイプラインは、Rバージョン3.6.2(2019-12-12) - 「暗くて嵐の夜」の下で構築されました。
CRANで使用できる次のRパッケージは、HESパイプラインを実行するために必要です。
データベースが作成されている場所には、生のHESデータ抽出のファイルサイズとAPCデータセットの2 xファイルサイズにほぼ同等の十分なストレージスペースが利用可能である必要があります(入院具体および連続入院呪文のテーブルとして追加する)。
処理手順の一部は、メモリ内ではなく、sqliteのクエリとして実行されます。これには、複製フラグのアルゴリズム、呪文の作成、およびクリーンデータ上の統計統計テーブルの作成が含まれます。データセットのサイズに応じて、これらの手順は、クエリが実行されると自動的に削除される大きな一時的なSQLiteデータベース(.etiqlsファイル)を作成します。デフォルトでは、これらはR Home Directoryに作成されます。RomeDirectoryは、多くの場合、ストレージ容量が制限されたドライブにあります。
一時的なストレージが十分に利用できない場合、ピエリンの実行が失敗することがわかりました(エラーメッセージ 'データベースまたはディスクがいっぱいです')。これは、一時的なSQLiteデータベースが作成される場所を変更することで修正できます。 Windowsでは、一時的な保管場所は環境変数「TMP」によって制御されます。 Project-Level .Renvironファイルを作成して、TMPを十分なストレージ容量のある場所に設定することをお勧めします。
data_path
hes data抽出へのパス。
パイプラインは、次の患者レベルのデータセットのいずれかを処理できます。彼は患者のケア、彼は事故と緊急事態、HES OUPTATIENT CARE、HESクリティカルケア、ONS死亡率の記録(HESにリンクするブリッジファイルを含む)を含む)。少なくとも1つが必要です。生データファイルは同じフォルダーに配置する必要があります。
database_path
SQLiteデータベースが構築されるフォルダーへのパス。
data_set_codes
data_path
フォルダー内のhesデータセットが予想されます。
これは、「APC」、「AE」、「CC」、「OP」の1つまたは複数である必要があります。これらの識別子は、NHS Digitalから受信したRAW HESファイルの場合に当てはまるはずです。 ONS死亡率記録とONS-HESブリッジファイルは、存在する場合はデフォルトで処理されます。死亡率記録とブリッジファイルのファイル名には、それぞれ「ON」と「BF」を含める必要があります。
各データセットの予想列名を使用して、CSVファイルへのexpected_headers_file
パス。
このCSVファイルには、このテンプレートと同様に、 colnames
とdataset
という名前の少なくとも2つの列があります。データの列ヘッダーは、データが読み取られている間に自動的に大文字化されるため、CSVファイルの列名はすべてキャップでなければなりません。この情報は、各生データファイルに予想されるすべての列が含まれているかどうかを確認するために使用されます。
次の引数にはデフォルトの設定があります。
chunk_sizes
各データセットのチャンクあたりの行数。
各データファイルは読み取られ、多くの行が無視されたチャンクで処理されました。デフォルトのサイズはチャンクあたり100万行ですが、これはユーザーが変更できます。チャンクサイズが大きく、ファイルごとのチャンク数が少なくなり、全体的な処理時間が短縮されます。これはおそらく、特定のファイル内の各チャンクについて、 fread()
データの読み取りを開始するために指定された行番号に移動するために徐々に長く必要とするためです。ただし、大きなチャンクサイズは、メモリで各チャンクを処理するための時間の時間を増やします。最適なチャンクサイズは、処理時間と読み取り時間のバランスを取り、各データセットには異なる数の変数を持つことができるため、システムごとに異なる量のメモリを必要とするため、システムとデータセットに依存します。非常に大きなチャンクサイズがRSTUDIOをクラッシュさせる可能性があるため、最初にデータの小さなサブセットでテストを実行することをお勧めします。
データ型を強制しcoerce
。
デフォルトでは、データで読み取るために使用されるfread()
関数は、列タイプを自動的に検出します。
あるいは、この引数をTRUE
に設定することにより、データ型をユーザー定義型に強制することができます。列タイプは、予想される列名を持つCSVファイルに、 type
と呼ばれる3番目の列のint int int intに提供されます。このテンプレートを参照してください。 SQLiteには日付データタイプがないことに注意してください。日付変数は文字として保存する必要があるため、CSVファイルの文字としてリストする必要があります。
IMD_2014_csv
、 IMD_2019_csv
、およびCCG_xlsx
は、マージする参照データを含むファイルへのパスです。
現在、各レコードにマージできる追加の参照データには、複数の剥奪(IMD)、2015年および/または2019バージョンのインデックス、およびCCG識別子が含まれます。参照ファイルへのファイルパスは引数として提供され、患者LSOA11に結合されます。 LSOA11-to-IMDマッピングを含むCSVファイルには、「LSOAコード」から始まる列名、「複数の剥奪(IMD)ランクのインデックス」を含む列名、および複数の剥奪のインデックスを含む列名を含む列名が必要です。 (IMD)Decile "。 IMD 2015およびIMD 2019のルックアップファイルは、gov.ukからダウンロードできます(ファイル7:剥奪のインデックスのすべてのランク、デカイル、および人口分母のスコア)。 CCG識別子のルックアップファイルは、NHS Digitalからダウンロードできます(ファイル:X- CCG-DCO-STPマッピングの変更)。
スイッチパイプラインモードupdate
。
パイプラインモードは、この引数をTRUE
に設定することにより、ビルドモードから更新モードに切り替えられます。
duplicate
フラグの重複レコード。
APC、A&E、およびOPデータセットに追加の列が作成されます。これは、このArgumetがTRUE
に設定されている場合、レコードが重複している可能性があるかどうかを確認します。定義ルールと派生ルールは、(derived_variables.md)にあります。警告:これにより、パイプラインの実行時間が大幅に増加します。
comorbiditees
にフラグを立てる併存士。
この引数がTRUE
に設定されている場合、個々の条件のフラグや重み付きのCharlsonおよびElixhauserスコアを含む、追加の列がAPCデータセットに作成されます(Rパッケージの併存疾患のドキュメンも参照)。さらに、パイプラインフラグは、虚弱に関連する条件とカスタム虚弱インデックスを計算します(参照?)。警告:これにより、パイプラインの実行時間が大幅に増加します。
現在、パイプラインはRSTUDIOセッションで実行するように設計されています。 rコンソールからコードをコンパイルします。
> source("pipeline.R")
次に、 pipeline()
を呼び出し、Data Directoryへのパス、SQLiteデータベースのディレクトリへのパス、データセットコードのベクトル、予想される列を持つCSVへのパス、データセットコードとデータ型を挿入すること、オプションのオプションを提供します。データセットごとに時間に読み取られる行数のベクトル、および必要に応じて、強制を可能にするためのブール値。データは処理され、データベースに書き込まれます。 NBこれは遅いプロセスであり、実行するためにかなりの量のメモリを取り上げます。
実行の例:
> pipeline(data_path = "/home/user/raw-data/", database_path = "/home/user/database-dir/", data_set_codes = c("APC", "AE", "CC", "OP"), chunk_sizes = c(2000000, 5000000, 2000000, 3000000), expected_headers_file = "/home/user/expected_columns.csv", IMD_15_csv = "IMD_2015_LSOA.csv", IMD_19_csv = "IMD_2019_LSOA.csv", CCG_xlsx = "xchanges-to-ccg-dco-stp-mappings-over-time.xlsx", coerce = TRUE, update = FALSE, duplicates = FALSE, comorbidities = FALSE)
Rからsqliteデータベースを照会する方法については、たとえば、Rを使用したRSTUDIOチュートリアルデータベースを参照してください。
データベースを照会することができます:
library( tidyverse )
library( dbplyr )
library ( DBI )
con <- dbConnect( RSQLite :: SQLite(), paste0( database_path , " HES_db.sqlite " ))
# List available tables
dbListTables( con )
# List available variables in the A&E table
dbListFields( con , " AE " )
# Option 1: Query using dbplyr
# Select table
AE <- tbl( con , ' AE ' )
# Look at the first 5 rows
AE % > %
head() % > %
collect()
# Option 2: Query using SQL
dbGetQuery( con , ' SELECT * FROM AE LIMIT 5 ' )
dbDisconnect( con )
DBIを使用している場合は、 dbGetQuery()
関数を使用してください。 dbExecute()
、 dbSendQuery()
、 dbSendStatement()
など、基礎となるデータベースを変更できる関数は避けてください。
このプロジェクトは、MITライセンスの下でライセンスされています。