Code Monkey home page Code Monkey logo

projectathon6-miracum1's Introduction

6. Projectathon der MII: MIRACUM - "WEather-based Stroke event and Outcome Risk Modeling" (WE-STORM)

Datum: 04.04.2023

Autoren: [email protected] & [email protected]

Dieses Project führtdas MIRACUM ("WE-STORM") Projekt vom 6. Projectathons aus. Hier ist eine dezentrale Analyse (distributed On-Site and Federated Learning)vorgesehen. Dieses Repository beinhaltet Skripte für das zweistufige Verfahren:

  • Skript-1 (Step 1 - Abfrage) erzeugt mehreren Tabellen mit (anonymen, grob)aggregierten Daten, die für die Planung der statistischen Analysen (Step 2) benötigt werden. Diese Tabellen wurden zentral evaluiert und somit an die datenauswertendende Stelle (MIRACUM, Mannheim) übergeben.
  • Skript-2 (Step 2 Analysen) neues Update vom 13-01-2023, im Folder step2 des master Branches, führt die basierend der Step 1 erstellten statistische Modelle und Maschinelle Lernalgorithmen aus. Die Modelle werden ausschließlich lokal (im jeweiligen DIZ) trainiert und nur die Modellobjekte werden i.R. des Federated Learning Verfahrens zusammengeführt.

Das Readme beschreibt zunächst die technischen Details der Verwendung. Darunter sind die verwendeten CodeSysteme/Ressourcen/Profile und der konzeptionelle Ablauf der Abfrage beschrieben.

BREAKING NEWS

  • Finaler Abschluss der Testphase 31.03.2023 der Step2 Skripte für HAPI und BLAZE FHIR Servers inkl.

    • A) dockerhub Image, B) docker compose oder C) lokale base R mit Shell-Skript.
    • Die finale Ergebnisse im step2/results Folder werden als .zip Datei mit standortspezifischen Namen generiert. Diese soll über DSF oder CarusCloud an die Datentransferstelle (entsprechend der Step1 credentials) übertragen werden.
  • Abschluss der Testphase 20.02.2023 der Step2 Skripte.

  • Freigabe 13.01.2023 der Step2 Skripte für die statistischen Analysen mittels Federated Learning.

  • In der MII Weekly Projectathon Webkonferenz am 29.04.2022 haben wir die Scripts für die Select-Abfrage (Step 1) freigegeben. Details zur Ausführung der Scripte finden Sie im Changelog.

Häufige Probleme

Den Quick-Fix für die häufigste Error Meldung HTTP code 500 (bisher nur HAPI) aufgrund der Timeout der Abfrage (für Observations Modul) finden sie hier und für Condition Resources hier.


Table of Contents


UPDATE 2023

Verwendung Step2

Es gibt zwei Möglichkeiten die R-Skripte für die "Step 2 - Analysen" auszuführen:

  • Direkt in R oder in einem Docker Container. Beide werden im folgenden beschrieben.

Wichtig: nach dem Cloning des Repos bitte ins step2 Folder navigieren und als working/reference director einstellen.

Ausführung in R Step2

  1. Um die Analysen auszuführen (Analog zu den Step1-Skripten), muss der Inhalt des Git-Repository auf einen Rechner (PC, Server) gezogen werden, von dem aus der REST-Endpunkt des gewünschten FHIR-Servers (z.B. FHIR-Server der Clinical Domain im DIZ) erreichbar ist.

  2. Auf diesem Rechner muss R (aber nicht notwendigerweise RStudio) als genutzte Laufzeitumgebung installiert sein.

  3. Im master branch des Repos soll im Folder step2 befindliche Datei ./config_default.yml muss nach ./config.yml kopiert werden und lokal angepasst werden (serverbase, ggf. Authentifizierung - Username and password, proxy configs); Erklärungen dazu finden sich direkt in dieser Datei. Eine Authentifizierung mit Basic Authentication. Dafür müssen in config.yml die Variable authentication und die zugehörigen Zugangsdaten (password/username) angepasst werden.

  4. Wenn die App über runMiracum_select.bat (unter Windows) gestartet wird, sollte in dieser der Pfad zur Datei Rscript.exe geprüft und ggf. angepasst werden (z.B. C:\Program Files\R\R-4.0.4\bin\Rscript.exe).

Start des Skripts

Beim ersten Start des Skripts wird überprüft, ob die zur Ausführung notwendigen R-Pakete vorhanden sind. Ist dies nicht der Fall, werden diese Pakete nachinstalliert – dieser Prozess kann einige Zeit in Anspruch nehmen.

Batch-Datei/Shell-Skript

Unter Windows: Mit der Batch-Datei runMIRACUM_select_step2.bat. Beim ersten Ausführen sollte diese ggf. als Administrator gestartet werden (über Eingabeaufforderung oder Rechtsklick), wenn die ggf. notwendigen Berechtigungen zum Nachinstallieren der R-Pakete sonst nicht vorhanden sind. Nach der ersten Installation reicht dann ein Doppelklick zum Starten.

Unter Linux: Mit dem Shell-Skript runMIRACUM_select_step2.sh. Das Shell-Skript muss ausführbar sein und ggf. beim ersten Ausführen mittels sudo gestartet werden, wenn ein Nachinstallieren der R-Pakete außerhalb des User-Kontexts erforderlich ist.

Ablauf und Logik der Analyse Pipeline

Beide Skripte (runMIRACUM_select_step2.bat und runMIRACUM_select_step2.sh) führen die Datei execution.R aus.

Diese Skript (execution.R) führt sequenziell 6 weitere R Skripte aus, wie folgt:

  • 1_install_r_packages.R, Load & Install notwendige R Packete
  • 2_data_selection.R, Selektion der Daten vom FHIR Server zum Wetterdaten-Matching
  • 3_feature_extraction.R, Extraktion der Wetterparameter entsprechend der WStationen.
  • 4_modeling1_fixedwindow_false.R, Modeling 1: Kreuzvalidierung (fixedWindow = F)
  • 5_modeling2_fixedwindow_true.R, Modeling 2: Kreuzvalidierung (fixedWindow = T)
  • 6_modeling3_gamboost.R, Modeling 3: genestete-Kreuzvalidierung

Hinweis: Alle notwendige präprozessierte Wetterdaten sind im Folder data vorhanden. Im Rahmen der Ausführung der Skripte werden keine Daten von externen Quellen herunterladen, keine Ports geöffnet.

Ausführung im Docker Container Step2

A) Image von DockerHub ziehen:

Link to DockerHub or by using docker pull nandhinis08/projectathon6-miracum1-step2

  1. Git-Respository klonen: git clone https://github.com/medizininformatik-initiative/Projectathon6-miracum1.git
  2. Verzeichniswechsel in das lokale Repository und in den neuen Folder step2: cd Projectathon6-miracum1/step2
  3. Konfiguration lokal anpassen: ./config_default.yml nach ./config.yml kopieren und anpassen
  4. Image downloaden und Container starten:
docker run --name projectathon6-miracum1-step2 \
       -v "$(pwd)/errors:/errors" \
       -v "$(pwd)/data:/data" \
       -v "$(pwd)/results:/results" \
       -v "$(pwd)/conf:/conf" \
       -v "$(pwd)/config.yml:/config.yml" \
       nandhinis08/projectathon6-miracum1-step2

B) Image bauen mit Docker Compose Step2:

  1. Git-Respository klonen: git clone https://github.com/medizininformatik-initiative/Projectathon6-miracum1.git
  2. Verzeichniswechsel in das lokale Repository und in den neuen Folder step2: cd Projectathon6-miracum1/step2
  3. Konfiguration lokal anpassen: ./config_default.yml nach ./config.yml kopieren und anpassen
  4. Image bauen und Container starten: docker compose up -d

Zum Stoppen des Containers docker compose stop. Um ihn erneut zu starten, docker compose start.

C) Lokale Ausführung in base R mit Shell-Skript

Die gleiche Schritte wie oben Ausführung in R beschrieben:

  1. Der Inhalt dieses Repository auf einen Rechner (PC, Server) geladen werden, von dem aus der REST-Endpunkt des gewünschten FHIR-Servers (z.B. FHIR-Server der Clinical Domain im DIZ) erreichbar ist.
  2. Auf diesem Rechner muss base R (aber nicht notwendigerweise RStudio) installiert sein.
  3. Im master branch des Repos soll im Folder step2 befindliche Datei ./config_default.yml muss nach ./config.yml kopiert werden und lokal angepasst werden (serverbase, ggf. Authentifizierung - Username and password, proxy configs); Erklärungen dazu finden sich direkt in dieser Datei. Eine Authentifizierung mit Basic Authentication. Dafür müssen in config.yml die Variable authentication und die zugehörigen Zugangsdaten (password/username) angepasst werden.
  4. Wenn die App über runMiracum_select.bat (unter Windows) gestartet wird, sollte in dieser der Pfad zur Datei Rscript.exe geprüft und ggf. angepasst werden (z.B. C:\Program Files\R\R-4.0.4\bin\Rscript.exe).

Output folder

Im step2/results folder sollen insgesamt 101 Dateiensein:

  • 2 excel files with multiple sheets
  • 3 PDF files with plots/images of model performance
  • Multiple .RData/.Rda Dateien mit den jeweiligen ML-Modelobjekt was die Modelinskripte (4_modeling1, 5_modeling2, 6_modeling3) erstellen.

Keine diese Datenbeinhalten persönliche indetifiers. Die Modelle fitten die count (Anzahl der Fälle).

In der neuesten Version der Skripte March 7, 2023 werden die obige Dateien als .zip Datei komprimiert und mit einem standortspezifischen Namen versehen.

paste('westorm-step2-results-', conf$site, "-", Sys.Date(), "-coverage-", min(year), "-", max(year), "-totalcases-", sum(daily$total_count),  sep = "")

Diese <name>.zip Datei sollte an die Datenmanagement Stelle (Dresden) über DSF oder CarusCloud versandt werden.


Changelog Step2

Apr 4, 2023

Novel issue, kindly raised by @FloSeidl, which is caused by not properly working R.utils::zip() function in the last (6_modeling3_gamboost.R) script (lines 260-264, which occured at Charité Berlin on a Windows Server during a local run in RStudio (v4.2.2).

The issue could be fixed by installing the zip library and using the zip::zipr() function.

A simple alternative solution would be the manual zip compression of the 101 output files in the results folder.

March 31, 2023

All 15 participating sites has succesfully tested certain versions of the script. Thank you for Your efforts!

We provide 3 versions (as mentioned in the readme text above):

  • A) Pull image from Docker Hub
  • B) Docker compose
  • C) Local run using base R and batch script (.sh)

All scripts are available for both HAPI (master branch) and BLAZE FHIR (blaze_update branch) servers.

The current version of the sricpts creates a step2/results containing a .zip file of all model outputs.

Feb 20, 2023

Various issues were fixed and requested features (bundle & count) were added based on feedbacks from lokal testings from 9/15 sites. Thank you all for your contributions!

As of today, two issues are still outstanding. One regarding the blaze branch (probably, due to a memory issue or docker version) and one regarding script-6 and gamboost models (matrix factorization problem probably due to the matrix structure).

Jan 27, 2023

MII Projektathon Weekly-Sprechstunde: WE-STORM Step2 Update Darstellung.

The branch blaze_update has also been updated with step2 scripts.

Currently, UKH and UKJ successfully ran the scripts in their current forms.

Link to DockerHub

Minor: the number of model objects in the results folder is coming soon.

Jan 26, 2023

GitHub Issue #11 regarding missing support vectors in SVM fit is fixed.

TL;DR Explanation This issue originated from the hardcoded import time range of 2015-01-01 to 2021-12-31, which might not neccessarily be available at all sites, resulting in (potentially years of) 0 values in the target vector (count). Hence, no decision boundary could be found. Additionally, try() | tryCatch() wrappers have been added to assure that the script runs even if certain model fits would fail. Thanks for raising and helping to solve the issue @pdi-uk.

Jan 25, 2023

GitHub Issue #10 regarding package dependency is now fixed.

Jan 23, 2023

GitHub Issue #9 regarding predict.glm(..., type = "response") is now fixed. Thanks for raising the issue @KutSaleh.

Jan 13, 2023

Major Update: Analyses Skripts for Step 2 including statistical (baseline) and machine learning models.

Jan 23, 2023

Uploaded the fix for the issue (Fehler bei der Ausführung (step2) #9). Updated Poisson-glm object with type = "response"

Jan 26, 2023

Uploaded the fix for the issue (Error for SVM model #11). Added try catch blocks, Changed dataframe timerange based on local min and max

Feb 02, 2023

Custom Random Forest function to tune mtry and ntree parameter. Made the max_bundles as configurable parameter in config.yml

Feb 06, 2023

SVM linear kernal models added and source path error fixed by changing source(file.path(getwd(), "customRF.R")) to source(file.path(getwd(), "customRF.R") , local = TRUE) (cannot open file '//customRF.R': No such file or directory #16)

Feb 16, 2023

Added count parameter to config and updated fhir query to drop warnings related to new updates in FHIRCRACKr. Fix for issue #18

Feb 17, 2023

Searching for single ICD code in every requests. Fix for issue #19

Feb 21, 2023

Zipping all results to a single file - caraous cloud upload

2022 Step 1 - Select Abfrage

Verwendung Step1

Es gibt zwei Möglichkeiten diese R-Skripte auszuführen: Direkt in R oder in einem Docker Container. Beide werden im folgenden beschrieben.

Ausführung in R

Vor der ersten Nutzung

  1. Um die Selectanfrage durchzuführen, muss der Inhalt des Git-Repository auf einen Rechner (PC, Server) gezogen werden, von dem aus der REST-Endpunkt des gewünschten FHIR-Servers (z.B. FHIR-Server der Clinical Domain im DIZ) erreichbar ist.

  2. Auf diesem Rechner muss R (aber nicht notwendigerweise RStudio) als genutzte Laufzeitumgebung installiert sein.

  3. Die mitgelieferte Datei ./config_default.yml muss nach ./config.yml kopiert werden und lokal angepasst werden (serverbase, ggf. Authentifizierung - Username and password, proxy configs); Erklärungen dazu finden sich direkt in dieser Datei. Eine Authentifizierung mit Basic Authentication. Dafür müssen in config.yml die Variable authentication und die zugehörigen Zugangsdaten (password/username) angepasst werden.

  4. Wenn die App über runMiracum_select.bat (unter Windows) gestartet soll, muss in dieser der Pfad zur Datei Rscript.exe geprüft und ggf. angepasst werden (z.B. C:\Program Files\R\R-4.0.4\bin\Rscript.exe).

Start des Skripts

Beim ersten Start des Skripts wird überprüft, ob die zur Ausführung notwendigen R-Pakete ("rprojroot","fhircrackr","config","dplyr","zoo","stringr","tidyr") vorhanden sind. Ist dies nicht der Fall, werden diese Pakete nachinstalliert – dieser Prozess kann einige Zeit in Anspruch nehmen.

Batch-Datei/Shell-Skript

Unter Windows: Mit der Batch-Datei runMIRACUM_select.bat. Beim ersten Ausführen sollte diese ggf. als Administrator gestartet werden (über Eingabeaufforderung oder Rechtsklick), wenn die ggf. notwendigen Berechtigungen zum Nachinstallieren der R-Pakete sonst nicht vorhanden sind. Nach der ersten Installation reicht dann ein Doppelklick zum Starten.

Unter Linux: Mit dem Shell-Skript runMIRACUM_select.sh. Das Shell-Skript muss ausführbar sein und ggf. beim ersten Ausführen mittels sudo gestartet werden, wenn ein Nachinstallieren der R-Pakete außerhalb des User-Kontexts erforderlich ist.

Debugging/Error: Im Falle eines Berechtigungsfehlers soll der folgende Befehl vor dem ausführen des o.b. Shell-Skripts noch zusätzlich ausgeführt werden: chmod -R 777 ./

R/RStudio

Durch Öffnen des R-Projektes (Projectathon6-miracum1.Rproj) mit anschließendem Ausführen der Datei miracum_select.R innerhalb von R/RStudio. Auch hier werden beim ersten Ausführen ggf. notwendige R-Pakete nachinstalliert.

Ausführung im Docker Container

Um die Abfrage in einem Docker Container laufen zu lassen gibt es zwei Möglichkeiten:

A) Image von DockerHub ziehen:

  1. Git-Repository klonen: git clone https://github.com/medizininformatik-initiative/Projectathon6-miracum1.git Projectathon6-miracum1
  2. Verzeichniswechsel in das lokale Repository: cd Projectathon6-miracum1
  3. Konfiguration lokal anpassen: ./config_default.yml nach ./config.yml kopieren und anpassen
  4. Image downloaden und Container starten:
docker run --name projectathon6-miracum1 \
       -v "$(pwd)/errors:/errors" \
       -v "$(pwd)/Bundles:/Bundles" \
       -v "$(pwd)/Summary:/Summary" \
       -v "$(pwd)/Ergebnisse:/Ergebnisse" \
       -v "$(pwd)/config.yml:/config.yml" \
       nandhinis08/projectathon6-miracum1

B) Image bauen mit Docker Compose:

  1. Git-Respository klonen: git clone https://github.com/medizininformatik-initiative/Projectathon6-miracum1.git
  2. Verzeichniswechsel in das lokale Repository: cd Projectathon6-miracum1
  3. Konfiguration lokal anpassen: ./config_default.yml nach ./config.yml kopieren und anpassen
  4. Image bauen und Container starten: docker compose up -d

Zum Stoppen des Containers docker compose stop. Um ihn erneut zu starten, docker compose start.

C) Image bauen ohne Docker Compose:

  1. Git-Respository klonen: git clone https://github.com/medizininformatik-initiative/Projectathon6-miracum1.git
  2. Verzeichniswechsel in das lokale Repository: cd Projectathon6-miracum1
  3. Image bauen: docker build -t projectathon6-miracum1 .
  4. Konfiguration lokal anpassen: ./config_default.yml nach ./config.yml kopieren und anpassen
  5. Container starten: docker run --name projectathon6-miracum1 -v "$(pwd)/errors:/errors" -v "$(pwd)/Bundles:/Bundles" -v "$(pwd)/Ergebnisse:/Ergebnisse" -v "$(pwd)/config.yml:/config.yml" projectathon6-miracum1

Erklärung:

  • -v "$(pwd)/config.yml:/config.yml"" bindet die lokal veränderte Variante des config-Files ein. Wenn dieses geändert wird, reicht es, den Container neu zu stoppen und starten (docker stop Projectathon6-miracum1, config.yml ändern, dann docker start Projectathon6-miracum1), ein erneutes docker build ist nicht nötig.

D) Direkt Download vom DockerHub:

Falls ein Error beim lokalen Builden des Containers auftreten soll (e.g. RUN install2.r --error --deps TRUE fhircrackr ---> Running in 34cdad0afa40), bitte entsprechend des Changelogs Feb 17 und Feb 18 den neusten pre-built container vom dockerhub herunterladen. Der DockerHub Link wurde angepasst, bitte entsprechend des Changelogs die letzte Version Apr 12 nutzen.


Output

Das Skript erzeugt mehrere Ordner im Projekt-Directory. Um für den Projectathon eine möglichst einfache übersichtliche Lösung zu bekommen, werden alle files, die darin erzeugt werden bei mehrmaligem Ausführen ggf. einfach überschrieben.

Wenn die Abfrage erfolgreich durchgeführt wurde, wird die folgende Zusammenfassung in Excel erstellt

Summary

  • Cohort_Feature_availability Dieses Blatt zeigt den Prozentsatz der verfügbaren Merkmale für jeden Monat in der Kohorte. Diese Tabelle enthält die wichtigsten Merkmale, die für das Modell benötigt werden
  • MultiplePatientVisit: Hier wird die Zuordnung zwischen der Anzahl der Patienten und ihrer Besuche dargestellt
  • PLZ Hier wird die Anzahl der Begegnungen in jeder PLZ angegeben (gefiltert größer oder gleich 5). Dies hilft uns bei der Identifizierung der wichtigsten PLZ in der Kohorte für den Abgleich mit den Wetterstationen.
  • Stroke_ICD_Summary Dies gibt die Anzahl der Begegnungen mit einem entsprechenden ICD an und auch den Prozentsatz, den dieser in der Gesamtkohorte ausmacht, der ebenfalls mit etwas Rauschen addiert wird.
  • Different Procedures Für die identifizierte Kohorte werden hier die verschiedenen Verfahren, die für die verschiedenen Begegnungen durchgeführt wurden, und ihr prozentualer Anteil an der Gesamtkohorte angegeben.
  • Previous comorbidities Anzahl der Fälle gruppierte entsprechend der verfügbaren Stroke diagnosen ICDFür die identifizierte Kohorte werden hier die früheren Komorbiditäten für die verschiedenen Begegnungen und ihr prozentualer Anteil an der Gesamtkohorte angegeben.
  • LabValues Für die identifizierte Kohorte werden hier die Labormethoden angegeben, die bei verschiedenen Untersuchungen gemessen wurden (basierend auf LOINC-Code), sowie deren prozentualer Anteil an der Gesamtkohorte.
  • Medication Für die identifizierte Kohorte werden hier die bei verschiedenen Untersuchungen verabreichten Medikamente und ihr prozentualer Anteil an der Gesamtkohorte angegeben. Diese sind benötigt um die Different Procedures größte und feature-reicshte homogene Kohrote über alle Standorten hinweg für die statistische Auswertung selektieren zu können.

Verwendete Codesysteme

Dieses System wird für den Download per FHIR Search verwendet

Verwendete Profile/Datenelemente

Die Abfragen werden auf der Grundlage der MII-Profile für die entsprechenden Ressourcen geschrieben. Die Skripte sind mit der neuesten Version der verfügbaren Hauptversionen kompatibel. Im Folgenden wird für jeden verwendeten Ressourcentyp beschrieben, welche Elemente für die FHIR-Suchanfrage an den Server verwendet werden (diese Elemente müssen vorhanden sein, damit kein Fehler ausgelöst wird) und welche Elemente im Skript extrahiert und in die Ergebnistabellen geschrieben werden.

Modul Person: Patient

Profil: https://www.medizininformatik-initiative.de/fhir/core/modul-person/StructureDefinition/Patient

Version: 2.0.0-alpha3 bzw. 1.0.14

Für Servabfrage verwendete Elemente: Extrahierte Elemente:

  • Patient.id
  • Patient.gender
  • Patient.birthDate
  • Patient.address.postalCode

Modul Fall: Encounter

Profil: https://www.medizininformatik-initiative.de/fhir/core/modul-fall/StructureDefinition/KontaktGesundheitseinrichtung

Version: 1.0.1

Extrahierte Elemente:

  • Encounter.id
  • Encounter.subject.reference
  • Encounter.period.start
  • Encounter.diagnosis.condition.reference
  • Encounter.diagnosis.rank
  • Encounter.hospitalization.dischargeDisposition.coding.code

Modul Diagnose: Condition

Profil: https://www.medizininformatik-initiative.de/fhir/core/modul-diagnose/StructureDefinition/Diagnose

Version: 2.0.0-alpha3 bzw. 1.0.4

Für Servabfrage verwendete Elemente:

  • Condition.subject.reference

Extrahierte Elemente:

  • Condition.id
  • Condition.recordedDate
  • Condition.code.coding.code
  • Condition.code.coding.system
  • Condition.encounter.reference
  • Condition.subject.reference

Modul Prozedur: Procedure

Profil: https://www.medizininformatik-initiative.de/fhir/core/modul-prozedur/StructureDefinition/Procedure

Version: 2.0.0-alpha3 bzw. 1.0.4

Für Servabfrage verwendete Elemente:

  • Procedure.subject.reference

Extrahierte Elemente:

  • Procedure.id
  • Procedure.performedDateTime
  • Procedure.code.coding.code
  • Procedure.code.coding.system
  • Procedure.encounter.reference
  • Procedure.subject.reference

Modul Labor: Observation

Profil: https://www.medizininformatik-initiative.de/fhir/core/modul-labor/StructureDefinition/ObservationLab

Version: 1.0.6

Extrahierte Elemente:

  • Observation.id
  • Observation.effectiveDateTime
  • Observation.code.coding.code
  • Observation.code.coding.system
  • Observation.subject.reference
  • Observation.valueQuantity.value
  • Observation.valueQuantity.unit
  • Observation.subject.reference
  • Observation.encounter.reference

Modul Medikation and MedicationStatement

Profil: https://www.medizininformatik-initiative.de/fhir/core/modul-medikation/StructureDefinition/MedicationStatement

Version: 1.0.6

Extrahierte Elemente:

  • MedicationStatement.medication
  • Medication.code.coding.code
  • Medication.code.coding.system

Konzeptioneller Ablauf der Abfrage

Im Prinzip läuft das Drehbuch wie folgt ab:

  1. Es verbindet sich mit dem FHIR-Server, um alle Encounter-Ressourcen herunterzuladen, die die unten genannten Schlaganfalldiagnosen aus dem Zeitraum vom 2015-01-01 bis zum aktuellen Datum haben.

    ICD10: I60.0,I60.1,I60.2,I60.3,I60.4,I60.5,I60.6,I60.7,I60.8,I60.9,I61.0,I61.1,I61.2,I61.3,I61.4,I61.5,I61.6,I61.8,I61.9,I63.0,I63.1,I63.2,I63.3,I63.4,I63.5,I63.6,I63.8,I63.9,I67.80!
    
  2. Es lädt auch alle referenzierten Patienten-, Condition- Ressourcen durch die erhaltenen Encounter-Ressourcen herunter bei bei denen in Schritt 1. Encounters erhaltenen worden sind.

    Request: [base]/Encounter?date=ge2015-01-01&_has:diagnosis.code&_include=Encounter:patient&_include=Encounter:diagnosis
    
  3. Nachdem diese Ressourcen heruntergeladen wurden, wird die notwendige Verarbeitung mit dem FHIRCrackR Paket durchgeführt und in einen Datenframe mit relevanten Merkmalen für die Encounter mit der entsprechenden Diagnose umgewandelt.

  4. Die Liste der Encounter- und Patienten-IDs wird aus den extrahierten Ressourcen extrahiert und wird für das Herunterladen weiterer Ressourcen wie Observation und Medikation verwendet.

  5. Die Observation- Ressources werden für die Liste der Patient-IDS und LOINC-Codes heruntergeladen. Zusätzlich werden die Observation- Ressources basierend auf das Aufnahme- und Entlassdatum miteinander gematcht.

    Request: [base]Observation?subject=xx&code=777-3,6301-6,3173-2,2160-0,2089-1,2085-9,7799-0,4548-4,2345-7,2093-3,74201-5
    *Note: xx indicates a placeholder for list of patient ids*
    
  6. Ähnlich werden die Procedure- Ressources für die Liste der Patient-IDS heruntergeladen und basierend auf das Aufnahme- und Entlassdatum zusätzlich gematcht.

     Request: [base]Procedure?subject=xx
     *Note: xx indicates a placeholder for list of patient ids*  
    
  7. Das medicationStatement wird für die Liste der Encounters heruntergeladen, aus der die relevante Medikamenten-ID gewonnen wird, die dann zur Extraktion der eigentlichen **Medikamenten-**Ressourcen verwendet wird:

    Request: [Base]/Medication?id=xx
    *Note: xx indicates a placeholder for list of encounter ids*
    
  8. Um die früheren Komorbiditäten im Zusammenhang mit dem kardiovaskulären Risiko und den metabolischen Risiken zu erhalten, wird die Condition-Ressource für die Liste der Patienten extrahiert und die relevanten Merkmale werden auf der Grundlage der ICD10-Codes erstellt.

     Request: [Base]/Condition?subject=xx        
     *Note: xx indicates a placeholder for list of patient ids*
    
  9. Wann alle diese Ressourcen heruntergeladen worden sind, werden in R verschiedene Data-Frames für die gesamten aggregierten Daten und auch verschiedene Summaries erstellt, und als .csv gespeichert werden. Die Einzelheiten dazu sind im obigen Abschnitt über die Ausgabe aufgeführt.


Datentransfer

Datentransfer: Für den zentralen Datentransfer der Ergebnisse der SELECT-Abfrage (Summary/Summary_Step1_MIRACUM_WESTORM.xlsx) soll der Prozess-Skript für den Dateityp (".xlsx") angepasst werden. Der Hintergrund dafür ist, dass der Projectathon Prozess prüft den tatsächlichen MimeType der Base64 codierten Datei gegen den deklarierten MimeType. Daher muss der deklarierte MimeType in den DocumentReferenceundBinary Ressourcendazu passen bzw. identisch sein. Für eine.xlsxDatei wie folgt:`.

Die Repository für das MII Projectathon Data Transfer process befindet sich unter MII DSF Processes.

Als Beispiel, @wetret (Reto Wettstein) hat bereits einen erfolgreichen Test mit dem folgenden Skript (DicFhirStore_WE-STORM.xml; lines 23 & 38) durchgeführt.

Vielen Dank an @wetret (Reto Wettstein) und @hhund (Hauke Hund) sowie Christian Gierschner für den Support.


Changelog Step1

Major changes

May 06, 2022

Siehe das Issue was auch ein HTTP code 500 error geliefert hat. Das Problem scheint hier mit der HAPI Server Version (5.3.0) gebunden zu sein. Die länge der Condition Resources und Anzahl der gebundelten Fälle (zuvor max_bundles = 100) kann ggf. zu lang werden.

Der simple Fix in line 131 mit der Reduktion auf , max_bundles = 40 hat das Problem in Halle gelöst. Vielen Dank @Diana Pietzner.

May 05, 2022

Die häufigste Fehlermeldung beim Ausführen des Scripts (miracum_select.R) war bisher das folgende Your request generated a server error, HTTP code 500. siehe auch das Issue - vielen Dank @pdi-uk und @Abel Stolz (MII Slack). Der Fehler trat bisher nur beim HAPI FHIR Servers auf.

Das Problem wird von der langen Query im Rahmen der Abfrage vom Labor Modul ausgelöst. Die kombinierte Länge der multiplen LOINC Codes von multiplen Patienten überschreiten die erlaubte URL Charakter Länge. Diese wird in Zeile 352 definiert. In Erlangen, Jena, Mannheim lief das Script mit 1800 durch. In Leipzig kam der HTTP 500 Error.

  • Zuvor nchar_for_ids <- 1800 - (nchar(conf$serverbase)+nchar_loincs)
  • Lösung nchar_for_ids <- 900 - (nchar(conf$serverbase)+nchar_loincs)
    • Dadurch wird die Anzahl der Patienten pro Anfrage reduziert, für die LOINC-kodierte Beobachtungen heruntergeladen werden (z.B. in Leipzig hat es das Problem gelöst).

Wir haben den master Branch dem entsprechend (Observation_length_update) aktualisiert.

Apr 29, 2022

Freigabe der Step 1, SELECT-Query

In der heutigen MII Weekly Projectathon Webkonferenz haben wir die Step 1, Select-Abfrage des WE-STORM Projektes freigegeben. Die Skripte wurden erfolgreich an den folgenden Standorten getestet (e.g. Erlangen, Jena, Mannheim, TU-München, Tübingen).

Vielen Dank für die gute Zusammenarbeit, Eure Zeit und Unterstützung sowie die Anregungen und Verbesserungs Vorschläge, insbesondere an:

Github Pull
  1. Für die HAPI erstellte Scripte können vom master Branch ge-pullt werden.
  2. Für blaze angepasste Scripte können vom blaze_update Branch ge-pullt werden.
    • Diese wurden für v0.16.x(noch ohne chained search parameters) angepasst.
Dockerhub

Die dockerhub Images sind für jeweils:

  • HAPI-type und
  • blaze FHIR Server über die Links verfügbar. Diese können je nach Server/Proxy Settings eine einfachere Lösung bieten (siehe Changelogs Apr 12 & Feb 18).
Performance

Der geschwindigkeitslimitierende Faktor ist der Download der Observations (Labor Module. Für Standorte mit vielen Labordaten erhöht sich die Zeit (vor allem auf HAPI FHIR).

  • Time ranges (HAPI): 4h-16h (cohort sizes: ~2-9k)
  • Time range (blaze): 46 mins (cohort sizes: ~6-9k)

Apr 27, 2022

Für blaze Servers wird der Download von Resourcen angepasst, um die Verkettung (chaining) aus dem Filtering-Process der HAPI Scripte zu entfernen (siehe Issue hier).

Apr 21, 2022

Wir haben die Scripts updated um stationäre und ambulante Fälle, je nach vorliegende FHIR-Elemente (.class, .rank, .use) bzw. Kondierung des jeweiligen DIZ besser unterscheiden zu können. Aktuell basieren diese Scripts auf lokale (Mannheimer DIZ-Daten) somit müssen diese noch vor dem finalen Einsatz (Step 1, SELECT-Abfrage), extern getestet werden. Diese Tests sind noch aussstehend, daher bitte den Script noch nicht nutzen.

Apr 12, 2022

Änderung: Zusätzlich zu den Ergebnis-Tabellen wird nun ein Textfile "Summary/miracum_select.log" erzeugt, welches die Anzahl der extrahierten Fälle, Patienten und die Laufzeit des R-Skriptes dokumentiert. Das log-file muss nicht geteilt werden, es dient den DIZen nur als Hilfestellung für die Einschätzung von Laufzeiten und Ergebnismengen.

Updated LOINC Codes: Die LOINC Codes für die Laborparameter mussten aufgrund der unterschiedlichen Kodierung der Laborparameter zwischen den Standorten erweitert werden. Hierfür haben wir die Referenztabelle mit Top 300 LOINC Codes entsprechend der Liste im KDS Basismodule, 03 Modul Laborbefunde 2021-08-08_MII_TOP_300_LOINC.xlsx verwendet.

Updated DockerHub Link: Ein neues dockerhub Image wurde mit den neuen Updates vom 12.04.2022 erstellt. Wenn dieses Image lokal nachgebaut wird soll dies mit --deps TRUE Flag passieren, somit alle R Pakete bereits miteingebaut werden.

Mar 10, 2022

Proxy-Konfigurationsoptionen in config_default.yml hinzugefügt und in miracum_select.R eingefügt, um es in R-Session zu verwenden

Mar 08, 2022

Maxbundles-Argument aus dem Encounter-Bundle-Downlaod entfernt, das am 25. Januar versehentlich hinzugefügt wurde (Überbleibsel aus einer Debug-Session)

Feb 18, 2022

Rückmeldung von Leipzing: Fehlermeldung bei R package install Warning: unable to access index for repository https://packagemanager.rstudio.com/cran/__linux__/focal/latest/src/contrib: cannot open URL ...

Bei WE-STORM werden zur Run time des Containers durch das R-Skript (install2.r) weitere R-Pakete (fhircrackr, config, dplyr, zoo, didyr, data.table, openxlsx) nachinstalliert, deise benötigen weitere Pakete als Abhängigkeiten, welche standardgemäß von CRAN geladen werden.

Zwischenlösung: @joundso docker image auf dockerhub nachgebaut mit --deps TRUE flag somit alle R Pakete bereits miteingebaut sind.

Falls der Skript ausführende Server keine Internetverbindung hat siehe Feb 17 kann der o.g. updated container vom dockerhub docker pull joundso/projectathon6-miracum1:latest benutzt werden.

Feb 17, 2022

Rückmeldung von Leipzig: Fehler am ehesten aufgrund von Firewall beim Download vom R-Packete & Dependencies (Abel Stolz; RUN install2.r --error --deps TRUE fhircrackr ---> Running in 34cdad0afa40), weil wir aktuell den Docker-Container lokal selbst bauen.

Anmerkung: Das Docker-Image sollte für Sites verfügbar sein, die nicht in der Lage sind, selbst zu bauen. Siehe auch Issue.

Zwischenlösung: @joundso (Jonathan Mang) hat netterweise das Image unter seinem dockerhub-Konto hochgeladen. Es wird noch ein Konto des Maintainers ([@nandhiniS08] | [@mematt]) erstellt.

Jan 27, 2022

Änderung: Fälle mit fehlenden Aufnahme- und Aufzeichnungsdaten wurden entfernt.

Jan 25, 2022

Änderung: Logik beim herunterladen von Conditions geändert. Es werden jetzt alle Conditions zu den untersuchten Patienten gezogen und anschließend so gefiltert, dass nur Conditions übrig bleiben, die zu den gewünschten Encountern gehören.

Erklärung: Damit ist es jetzt irrelevant, ob der Encounter auf die Condition verlinkt oder die Condition auf den Encounter verlinkt. Das Skript funktioniert, solange mindestens eine der Richtungen gegeben ist. Diese Änderung wurde implementiert, weil es sich herausgestellt hat, dass die Linkrichtung in den verschiedenen DIZen heterogen und unterschiedlich gelöst ist.

Jan 18, 2022

Änderung: Problem, wenn multiple Medikamenten-IDs gefiltert werden, wird die URL-Länge der FHIR Query zu lang. Dieses Problem hat Erlangen gemeldet. Die Medikamenten-IDs werden aufgeteilt und die Ressourcen werden in Teilen heruntergeladen.

Erklärung: Es wurde versäumt, die Logik der Aufteilung von IDs anzupassen (die für andere Ressourcen-Downloads implementiert ist). Der Fehler trat auf der lokalen Seite nicht auf, da die Medikationsdaten sehr gering sind.

Jan 11, 2022

Änderung: Anpassung des Formats und des Inhalts der Excel-Zusammenfassung gemäß einem Vorschlag der UAC.

Dec 10, 2021

Änderung: Anpassung der FHIR-Suchparameter für den Diagnosecode

Dec 7, 2021

Änderung: Extraction based on subject_id and admission and discharge date

Dec 6, 2021

Änderung: Adapted SSL option in config and adapted the readme

Dec 2,3, 2021

Änderung: minor changes on readme and removed saving bundles

projectathon6-miracum1's People

Contributors

joundso avatar mematt avatar nandhinis08 avatar palmjulia avatar

Stargazers

 avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

projectathon6-miracum1's Issues

Error in seq.int(0, to0 - from, by) : 'to' must be a finite number

Problem Description

Shortly after downloading all the necessary FHIR resources, the script stops working and throws an error. The error message is shown below.

Execution Informations

  • blaze_update branch
  • Execution with docker-compose

Error Message

...
[1] "Data selection done"
Warning messages:
1: `fhir_style()` was deprecated in fhircrackr 2.0.0.
ℹ Please code style elements directly in fhir_table_description().
2: The `style` argument of `fhir_table_description()` is deprecated as of
fhircrackr 2.0.0.
ℹ Please code style elements directly in the table description. Overwriting
  fhir_table_descriptions arguments for now.
3: In crack_bundles_to_one_table(bundles = bundles, table_description = table_description,  :
  The resource type or columns you are looking for don't seem to be present in the bundles.
 Returning an empty table.
4: In crack_bundles_to_one_table(bundles = bundles, table_description = table_description,  :
  The resource type or columns you are looking for don't seem to be present in the bundles.
 Returning an empty table.
5: In crack_bundles_to_one_table(bundles = bundles, table_description = table_description,  :
  The resource type or columns you are looking for don't seem to be present in the bundles.
 Returning an empty table.
[1] "loading stroke cohort"
[1] "extracting lat and long based on PLZ"
[1] "stroke daily counts - three different outputs"
Error in seq.int(0, to0 - from, by) : 'to' must be a finite number
Calls: source -> withVisible -> eval -> eval -> seq -> seq.Date
Execution halted

Hint

In other projects we had problems with our encounter resources, because there are a lot of resources that have no end-date set. So in the data table 'stroke_cohort.csv the admission_date and discharge_date are 'NA' for some rows.
Maybe this is unexpected and causing problems.

R Umgebung

Hallo,

leider ist meine bisher genutzte Linux R Umgebung nicht mehr verfügbar und ich muss das ganze neu aufsetzen.
Auf einer Windows Umgebung gibt es Probleme beim automatischen Installieren der Packages-
Gibt es irgendwo eine Kurzdoku zur Installation und den Voraussetzungen bzgl. der zu verwendenden R-Version, dem auszuwählendem CRAN Mirror etc.
Bin leider R Neuling...

Lieben Dank & Grüße,
[email protected]

Problems with the FHIR search queries when using the blaze FHIR server

Hello,

unfortunately it seems that the Blaze FHIR server does not support FHIR search reference parameters.
As a consequence, the first FHIR search query

Encounter?date=ge2015-01-01&diagnosis:Condition.code=I60.0,I60.1,I60.2,I60.3,I60.4,I60.5,I60.6,I60.7,I60.8,I60.9,I61.0,I61.1,I61.2,I61.3,I61.4,I61.5,I61.6,I61.8,I61.9,I63.0,I63.1,I63.2,I63.3,I63.4,I63.5,I63.6,I63.8,I63.9,I67.80!&_include=Encounter:patient&_include=Encounter:diagnosis

does not work as expected when using Blaze, because it cannot select Encounters based on ICD codes of Conditions they reference. More precisely, the query returns 0, even though the data definitely containes Encounters that meet the specified search criteria.

Is there any way to still do this analysis when using the Blaze server?

Warning message

At the end the final script prints a warning message (see attached screenshot).
Error_WESTORM

Script exits with error object 'res_gamboostNB' not found

Hello,
the script gets exit with the following Error:

| 2023-04-06T20:25:43.904494125Z Aggregating results

step2-projectathon6-miracum1-step2-1  | 2023-04-06T20:25:43.904538059Z Selecting tuning parameters
step2-projectathon6-miracum1-step2-1  | 2023-04-06T20:25:43.908486032Z Fitting C = 0.0156 on full training set
step2-projectathon6-miracum1-step2-1  | 2023-04-06T20:25:44.352595598Z [1] "fitting SVR based on chosen hyperparameter"
step2-projectathon6-miracum1-step2-1  | 2023-04-06T20:26:00.318737917Z Time difference of 3.097104 hours
step2-projectathon6-miracum1-step2-1  | 2023-04-06T20:26:00.319018293Z [1] "Modeling with fixed window as TRUE is done"
step2-projectathon6-miracum1-step2-1  | 2023-04-06T20:26:00.319317261Z Warning message:
step2-projectathon6-miracum1-step2-1  | 2023-04-06T20:26:00.319357367Z In randomForest.default(x, y, mtry = param$mtry, ...) :
step2-projectathon6-miracum1-step2-1  | 2023-04-06T20:26:00.319375887Z   The response has five or fewer unique values.  Are you sure you want to do regression?
step2-projectathon6-miracum1-step2-1  | 2023-04-06T20:26:00.860297011Z [1] "fitting models for total_count"
step2-projectathon6-miracum1-step2-1  | 2023-04-06T20:26:01.840663605Z [1] "Fitting Gamboost for total_count"
step2-projectathon6-miracum1-step2-1  | 2023-04-06T20:27:44.878771932Z [1] "Fitting Gamboost Poisson for total_count"
step2-projectathon6-miracum1-step2-1  | 2023-04-06T20:29:15.309573810Z [1] "Fitting MARS earth for total_count"
step2-projectathon6-miracum1-step2-1  | 2023-04-06T20:29:16.140146873Z [1] "Fitting Random forest for total_count"
step2-projectathon6-miracum1-step2-1  | 2023-04-06T20:29:18.184488134Z Error in rbind(res_gamboostNB, res_gamboostPO, res_earth1, res_rf) : 
step2-projectathon6-miracum1-step2-1  | 2023-04-06T20:29:18.184582508Z   object 'res_gamboostNB' not found
step2-projectathon6-miracum1-step2-1  | 2023-04-06T20:29:18.184614999Z Calls: source -> withVisible -> eval -> eval -> rbind
step2-projectathon6-miracum1-step2-1  | 2023-04-06T20:29:18.190446091Z Execution halted
step2-projectathon6-miracum1-step2-1 exited with code 1

Can you reproduce this and suggest a solution?
Best regards,
Christian

Script breaks

$ docker compose up
[+] Running 1/0
 - Container projectathon6-miracum1-projectathon6-miracum1-1  Created                                                                                                                           0.0s
Attaching to projectathon6-miracum1-projectathon6-miracum1-1
projectathon6-miracum1-projectathon6-miracum1-1  | Loading required package: rprojroot
projectathon6-miracum1-projectathon6-miracum1-1  | Loading required package: fhircrackr
projectathon6-miracum1-projectathon6-miracum1-1  | Loading required package: config
projectathon6-miracum1-projectathon6-miracum1-1  |
projectathon6-miracum1-projectathon6-miracum1-1  | Attaching package: ‘config’
projectathon6-miracum1-projectathon6-miracum1-1  |
projectathon6-miracum1-projectathon6-miracum1-1  | The following objects are masked from ‘package:base’:
projectathon6-miracum1-projectathon6-miracum1-1  |
projectathon6-miracum1-projectathon6-miracum1-1  |     get, merge
projectathon6-miracum1-projectathon6-miracum1-1  |
projectathon6-miracum1-projectathon6-miracum1-1  | Loading required package: dplyr
projectathon6-miracum1-projectathon6-miracum1-1  | 
projectathon6-miracum1-projectathon6-miracum1-1  | Attaching package: ‘dplyr’
projectathon6-miracum1-projectathon6-miracum1-1  |
projectathon6-miracum1-projectathon6-miracum1-1  | The following objects are masked from ‘package:stats’:
projectathon6-miracum1-projectathon6-miracum1-1  |
projectathon6-miracum1-projectathon6-miracum1-1  |     filter, lag
projectathon6-miracum1-projectathon6-miracum1-1  |
projectathon6-miracum1-projectathon6-miracum1-1  | The following objects are masked from ‘package:base’:
projectathon6-miracum1-projectathon6-miracum1-1  |
projectathon6-miracum1-projectathon6-miracum1-1  |     intersect, setdiff, setequal, union
projectathon6-miracum1-projectathon6-miracum1-1  |
projectathon6-miracum1-projectathon6-miracum1-1  | Loading required package: zoo
projectathon6-miracum1-projectathon6-miracum1-1  | 
projectathon6-miracum1-projectathon6-miracum1-1  | Attaching package: ‘zoo’
projectathon6-miracum1-projectathon6-miracum1-1  |
projectathon6-miracum1-projectathon6-miracum1-1  | The following objects are masked from ‘package:base’:
projectathon6-miracum1-projectathon6-miracum1-1  |
projectathon6-miracum1-projectathon6-miracum1-1  |     as.Date, as.Date.numeric
projectathon6-miracum1-projectathon6-miracum1-1  |
projectathon6-miracum1-projectathon6-miracum1-1  | Loading required package: stringr
projectathon6-miracum1-projectathon6-miracum1-1  | Loading required package: tidyr
projectathon6-miracum1-projectathon6-miracum1-1  | 
projectathon6-miracum1-projectathon6-miracum1-1  | Attaching package: ‘data.table’
projectathon6-miracum1-projectathon6-miracum1-1  |
projectathon6-miracum1-projectathon6-miracum1-1  | The following objects are masked from ‘package:dplyr’:
projectathon6-miracum1-projectathon6-miracum1-1  |
projectathon6-miracum1-projectathon6-miracum1-1  |     between, first, last
projectathon6-miracum1-projectathon6-miracum1-1  |
projectathon6-miracum1-projectathon6-miracum1-1  | Starting download of ALL! bundles of resource type Encounter from FHIR base URL https://***.de.
projectathon6-miracum1-projectathon6-miracum1-1  |
projectathon6-miracum1-projectathon6-miracum1-1  | This may take a while...
projectathon6-miracum1-projectathon6-miracum1-1  | bundle[1](1): https://*****.de/Encounter?date=ge2015-01-01&diagnosis.code=I60.0,I60.1,I60.2,I60.3,I60.4,I60.5,I60.6,I60.7,I60.8,I60.9,I61.0,I61.1,I61.2,I61.3,I61.4,I61.5,I61.6,I61.8,I61.9,I63.0,I63.1,I63.2,I63.3,I63.4,I63.5,I63.6,I63.8,I63.9,I67.80!&_include=Encounter:patient&_include=Encounter:diagnosis
projectathon6-miracum1-projectathon6-miracum1-1  | Error in check_response(response = response, log_errors = log_errors) : 
projectathon6-miracum1-projectathon6-miracum1-1  |   Your request generated a client error, HTTP code 403. For more information see the generated error file.
projectathon6-miracum1-projectathon6-miracum1-1  | Calls: fhir_search -> get_bundle -> check_response
projectathon6-miracum1-projectathon6-miracum1-1  | Execution halted
projectathon6-miracum1-projectathon6-miracum1-1 exited with code 1

The error file encounter_error.xml says:

<?xml version="1.0" encoding="UTF-8"?>
<OperationOutcome xmlns="http://hl7.org/fhir">
  <id value="73f564a9-f9a2-439f-bd11-513629add92b"/>
  <issue>
    <severity value="error"/>
    <code value="invalid"/>
    <diagnostics value="The reference search parameter 'diagnosis' refers to multiple possible resource types. Please specify a type in the search expression: diagnosis:Condition or diagnosis:Procedure"/>
  </issue>
</OperationOutcome>

Our FHIR server is an Azure FHIR Server.

Do not search for lists of codes

The central fhir search for encounters has a list of codes as a search parameter. The script should loop over all codes in the list, ask for each code separately, and combine the results afterwards.

Similar fhir search requests should be handled the same way.

Reason: HAPI crashes when the fhir search requests are to complicated (in this case to many codes)

Cannot install R packages

Due to safety restrictions we cannot install R packages inside running docker containers. Is it possible to build an image with all necessary R packages preinstalled?

Error in if (max_bundles < Inf)

Hello,
I get this error:

2023-02-03 09:12:37 Loading required package: pacman
2023-02-03 09:12:37 [1] "Installation done"
2023-02-03 09:12:38 Error in if (max_bundles < Inf) { : argument is of length zero
2023-02-03 09:12:38 Calls: source ... eval -> fhir_search -> message -> .makeMessage -> lapply
2023-02-03 09:12:38 In addition: Warning messages:
2023-02-03 09:12:38 1: In readLines(con, warn = readLines.warn) :
2023-02-03 09:12:38 incomplete final line found on '/config.yml'
2023-02-03 09:12:38 2: fhir_style() was deprecated in fhircrackr 2.0.0.
2023-02-03 09:12:38 ℹ Please code style elements directly in fhir_table_description().
2023-02-03 09:12:38 3: The style argument of fhir_table_description() is deprecated as of
2023-02-03 09:12:38 fhircrackr 2.0.0.
2023-02-03 09:12:38 ℹ Please code style elements directly in the table description. Overwriting
2023-02-03 09:12:38 fhir_table_descriptions arguments for now.
2023-02-03 09:12:38 Execution halted

Script stops unexpectedtly with empty table df.conditions

Hi all, the script stops unexpectedly after retrieving Medication resources with the following log output:

projectathon6-miracum1_1  | Warning message:
projectathon6-miracum1_1  | Problem while computing `rank_indicator = min(rank)`.
projectathon6-miracum1_1  | ℹ no non-missing arguments, returning NA
projectathon6-miracum1_1  | Error in `summarise()`:
projectathon6-miracum1_1  | ! Problem while computing `percent_encounters = paste0(...)`.
projectathon6-miracum1_1  | ℹ The error occurred in group 1: procedures = "Admission to stroke unit".
projectathon6-miracum1_1  | Caused by error in `unique()`:
projectathon6-miracum1_1  | ! object 'df.cohort.trunc' not found
projectathon6-miracum1_1  | Backtrace:
projectathon6-miracum1_1  |      ▆
projectathon6-miracum1_1  |   1. ├─df.procedure %>% group_by(procedures = features) %>% ...
projectathon6-miracum1_1  |   2. ├─dplyr::summarise(...)
projectathon6-miracum1_1  |   3. ├─dplyr:::summarise.grouped_df(...)
projectathon6-miracum1_1  |   4. │ └─dplyr:::summarise_cols(.data, dplyr_quosures(...), caller_env = caller_env())
projectathon6-miracum1_1  |   5. │   ├─base::withCallingHandlers(...)
projectathon6-miracum1_1  |   6. │   └─dplyr:::map(quosures, summarise_eval_one, mask = mask)
projectathon6-miracum1_1  |   7. │     └─base::lapply(.x, .f, ...)
projectathon6-miracum1_1  |   8. │       └─dplyr FUN(X[[i]], ...)
projectathon6-miracum1_1  |   9. │         └─mask$eval_all_summarise(quo)
projectathon6-miracum1_1  |  10. ├─base::paste0(...)
projectathon6-miracum1_1  |  11. ├─base::unique(df.cohort.trunc$encounter_id)
projectathon6-miracum1_1  |  12. └─base::.handleSimpleError(...)
projectathon6-miracum1_1  |  13.   └─dplyr h(simpleError(msg, call))
projectathon6-miracum1_1  |  14.     └─rlang::abort(bullets, call = error_call, parent = skip_internal_condition(e))
projectathon6-miracum1_1  | Execution halted
projectathon6_projectathon6-miracum1_1 exited with code 1

Using nandhinis08/projectathon6-miracum1 from dockerhub with docker-compose.

After some initial debugging I can say that:

  • df.encounters contains (seemingly) valid entires
  • df.conditions is empty - this might be the reason for stopping?
  • df.cohort is empty

Any ideas?

Error running docker compose up using the branch blaze_update

Hello,

unfortunately, I'm getting an error when I try to run the command docker compose up using the branch blaze_update in the folder step2. The output I get is as follows:

step2-projectathon6-miracum1-step2-1 | OpenBLAS blas_thread_init: pthread_create failed for thread 1 of 4: Operation not permitted
step2-projectathon6-miracum1-step2-1 | OpenBLAS blas_thread_init: RLIMIT_NPROC -1 current, -1 max
step2-projectathon6-miracum1-step2-1 | OpenBLAS blas_thread_init: pthread_create failed for thread 2 of 4: Operation not permitted
step2-projectathon6-miracum1-step2-1 | OpenBLAS blas_thread_init: RLIMIT_NPROC -1 current, -1 max
step2-projectathon6-miracum1-step2-1 | OpenBLAS blas_thread_init: pthread_create failed for thread 3 of 4: Operation not permitted
step2-projectathon6-miracum1-step2-1 | OpenBLAS blas_thread_init: RLIMIT_NPROC -1 current, -1 max
step2-projectathon6-miracum1-step2-1 | During startup - Warning messages:
step2-projectathon6-miracum1-step2-1 | 1: package ‘utils’ in options("defaultPackages") was not found
step2-projectathon6-miracum1-step2-1 | 2: package ‘stats’ in options("defaultPackages") was not found
step2-projectathon6-miracum1-step2-1 | Error: .onLoad failed in loadNamespace() for 'utils', details:
step2-projectathon6-miracum1-step2-1 | call: system(paste(which, shQuote(names[i])), intern = TRUE, ignore.stderr = TRUE)
step2-projectathon6-miracum1-step2-1 | error: cannot popen '/usr/bin/which 'uname' 2>/dev/null', probable reason 'Cannot allocate memory'
step2-projectathon6-miracum1-step2-1 | Execution halted
step2-projectathon6-miracum1-step2-1 exited with code 1

The OS of the machine used is Ubuntu 20.04.5 LTS and the version of Docker is 20.10.7, build f0df350

Any help would be greatly appreciated

Your request generated a server error, HTTP code 500

Time Out Error from HAPI FHIR Server (Request timed out after 60494ms) causes the script to terminate.

Is it possible to increase the number of trials of sending requests to the FHIR server?
Is it possible to decrease the size of the requests?

Paramter in config for _count

The number of results per page ("_count" in fhir search) should be set by parameter in the config file.

Reason: Performance problems of HAPI

Make docker image available at docker hub

The docker Image should be availabe for sites that are not able to build themselves. As an intermin solution @joundso uploded the image under his dockerhub account , but there should probably be one under the maintainers (@NandhiniS08 ) account.

You can use the code from #2 , modify it accordingly and merge it into the master.

Necessary steps for this would be:

  • Create a DockerHub account
  • Change REGISTRY_PREFIX .env-file
  • Run build_and_push_image.sh
  • Update Readme and docker-compose to new Image <REGISTRY_PREFIX>/projectathon6-miracum1

Thanks @joundso for the help!

packages not installed

After running the script runMIRACUM_select_step2.sh
3 R packages are still missing:

RANN,
randomForest and
kernlab

[1] "Load weather data and find the appropriate stations for patients" Fehler in loadNamespace(x) : es gibt kein Paket namens ‘RANN’

cannot open file '//customRF.R': No such file or directory

I get this error during execution:

2023-02-06 10:04:59 Error in file(filename, "r", encoding = encoding) :
2023-02-06 10:04:59 cannot open the connection
2023-02-06 10:04:59 Calls: source -> withVisible -> eval -> eval -> source -> file
2023-02-06 10:04:59 In addition: Warning messages:
2023-02-06 10:04:59 1: In readLines(con, warn = readLines.warn) :
2023-02-06 10:04:59 incomplete final line found on '/config.yml'
2023-02-06 10:04:59 2: In file(filename, "r", encoding = encoding) :
2023-02-06 10:04:59 cannot open file '//customRF.R': No such file or directory
2023-02-06 10:04:59 Execution halted

Error for SVM model

No fit can be found for the SVM model and the script stops:

- Training1460: C=0.25, sigma=0.1
+ Training1460: C=0.50, sigma=0.1
model fit failed for Training1460: C=0.50, sigma=0.1 Error in .local(x, ...) :
  No Support Vectors found. You may want to change your parameters

- Training1460: C=0.50, sigma=0.1
+ Training1460: C=1.00, sigma=0.1
model fit failed for Training1460: C=1.00, sigma=0.1 Error in .local(x, ...) :
  No Support Vectors found. You may want to change your parameters

- Training1460: C=1.00, sigma=0.1
Aggregating results
Something is wrong; all the RMSE metric values are missing:
      RMSE        Rsquared        MAE
 Min.   : NA   Min.   : NA   Min.   : NA
 1st Qu.: NA   1st Qu.: NA   1st Qu.: NA
 Median : NA   Median : NA   Median : NA
 Mean   :NaN   Mean   :NaN   Mean   :NaN
 3rd Qu.: NA   3rd Qu.: NA   3rd Qu.: NA
 Max.   : NA   Max.   : NA   Max.   : NA
 NA's   :3     NA's   :3     NA's   :3
Fehler: Stopping

Maybe the script should jump to the next model instead?

Fehler in seq.int(0, to0 - from, by) : 'to' muss eine endliche Zahl sein

Hallo zusammen,

ich bekomme hier in Frankfurt nach einigen Minuten folgende Fehlermeldung und Warnungen bei Ausführung
des "step2" Skripts :

{...}
Download completed. All available bundles were downloaded.
Cracking 24 Encounters' Bundles on a WINDOWS-Engine using 1/1 CPU ...
Cracking 24 Patients' Bundles on a WINDOWS-Engine using 1/1 CPU ...
Cracking 24 Conditions' Bundles on a WINDOWS-Engine using 1/1 CPU ...
Time difference of 5.585685 mins
[1] "Data selection done"
[1] "loading stroke cohort"
[1] "extracting lat and long based on PLZ"
[1] "stroke daily counts - three different outputs"
Fehler in seq.int(0, to0 - from, by) : 'to' muss eine endliche Zahl sein
Zusätzlich: Warnmeldungen:
1: fhir_style() was deprecated in fhircrackr 2.0.0.
i Please code style elements directly in fhir_table_description().
This warning is displayed once every 8 hours.
Call lifecycle::last_lifecycle_warnings() to see where this warning was generated.
2: The style argument of fhir_table_description() is deprecated as of fhircrackr 2.0.0.
i Please code style elements directly in the table description. Overwriting fhir_table_descriptions arguments for now.
This warning is displayed once every 8 hours.
Call lifecycle::last_lifecycle_warnings() to see where this warning was generated.
3: In min.default(numeric(0), na.rm = FALSE) :
kein nicht-fehlendes Argument für min; gebe Inf zurück
4: All formats failed to parse. No formats found.
5: In max.default(numeric(0), na.rm = FALSE) :
kein nicht-fehlendes Argument für max; gebe -Inf zurück
6: All formats failed to parse. No formats found.

Grüße,
S. Wojke

OutOfMemory when downloading Observations

Ich habe eine OutOfMemory-Exception bekommen beim Runterladen der Observations.
Der Docker-Server hat eigentlich 100GB RAM zugestanden.
Von diesen hat der FHIR-Server der auf derselben Maschine läuft 20GB in Beschlag.
Ich kann leider nicht mehr nachvollziehen wie der Zustand des Auswertungs-Containers kurz vorm Abbruch war, da sich dieser durch den Fehler beendet hat.
Beim erneuten Start des Auswertungscontainers beginnt der komplette Extraktionsprozess von neuem, so dass ich jetzt erstmal wieder abwarte um zu schauen was diesen Durchlauf passiert. Vielleicht geht es diesmal.
Der erste Schritt der Extraktion der Daten hat ca. 4 Stunden gedauert.

zip error: Interrupted (aborting)

Hi,

the final step of the execution script fails with this error message:

[1] "Modeling gamboost is done"
[1] "Zip the files in the reults folder to be delivered"


zip error: Interrupted (aborting)
[1] "please upload the zip file (/results) : westorm-step2-results-XXX-2023-04-25-coverage-20xx-20xx-totalcases-XXX"
[1] "Execution is done"

Is this known? The results folder contains 99 files: 2 excel, 3 pdf and 94 .rda files.
Is it OK to manually zip these files and upload the results?

Fehler bei der Ausführung (step2)

Skript wirft diese Fehlermeldung bei der Ausführung aus:

Aggregating results
Fitting final model on full training set
[1] "Fitting models for Ischemic_count for daily resolution"
[1] "split to train and test set"
[1] "Poisson"
Error in match.arg(type) :
'arg' sollte eines von '“link”, “response”, “terms”' sein

Problem writing ZIP File on Windows Maschine (step2)

While running the whole step2 calculation I encountered a problem at the end while writing the zipfile. No Error was given but no zip file was created.

Setup:

  • RStudio
  • R 4.2.2
  • Windows Server 2019

We found the following solution while debugging (thanks @NandhiniS08 and @mematt)
Solution:
change the following code from the file ./Projectathon6-miracum1/step2/6_modeling_gamboost.R:

...
zip_file_name <- paste('westorm-step2-results-', conf$site, "-", Sys.Date(), "-coverage-", min(year), "-", max(year), "-totalcases-", sum(daily$total_count),  sep = "")
zip(zipfile = file.path(getwd(),'results', zip_file_name), files = files2zip, extras = '-j')
...

First we had to install the zip package:

install.packages("zip")
library(zip)

and than alter the lines above:

# adding the .zip extension
zip_file_name <- paste('westorm-step2-results-', conf$site, "-", Sys.Date(), "-coverage-", min(year), "-", max(year), "-totalcases-", sum(daily$total_count), ".zip",  sep = "")

# changing method
zip::zipr(zipfile = file.path(getwd(), 'results', zip_file_name), files = files2zip)

Hope nobody has this problem or can solve it with this :)

Problem: `The server could not be reached`

The script breaks after a 5 seconds with this error message:

[1] "Method 1 extracting for ICD I60.0"
Starting download of 50 bundles of resource type Encounter from FHIR base URL https://our.fhir.server.de/.

This may take a while...
bundle[1](1): https://our.fhir.server.de/fhir/Encounter?date=ge2015-01-01&date=le2021-12-31&diagnosis:Condition.code=I60.0&_include=Encounter:patient&_include=Encounter:diagnosis&_count=2
Error in check_response(response = response, log_errors = log_errors) : 
  The server could not be reached:
Error in curl::curl_fetch_memory(url, handle = handle) : 
  Timeout was reached: [our.fhir.server.de] Failed to connect to our.fhir.server.de port 443 after 5201 ms: Connection timed out
.

The same Request using Postman oder the browser works totally fine outside Docker. Any ideas?
We use an IBM FHIR server.
German answers welcome.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.