1 - Installation

Comment installer LinkR, sur R ou sur ShinyProxy

LinkR peut être installé et lancé depuis RStudio ou être installé sur un ShinyProxy.

Installation sur RStudio

La librairie remotes sera nécessaire pour l’installation de LinkR. Vous pouvez l’installer avec cette commande :

install.packages("remotes")

Version stable

Installez la dernière version stable avec cette commande :

remotes::install_gitlab("interhop/linkr/linkr", host = "framagit.org")

Version en développement

Pour installer la dernière version en développement, ajouter @dev à la fin du lien du dépôt git.

remotes::install_gitlab("interhop/linkr/linkr@dev", host = "framagit.org")

Important - version de shiny.fluent


Version 0.3.0 de shiny.fluent nécessaire


Vous devez également installer la version 0.3.0 de shiny.fluent.

Par défaut, c’est la version 0.4.0 qui est installée mais elle présente des bugs non résolus.

remotes::install_github('Appsilon/shiny.fluent', ref = 'dd1c956')

Démarrer LinkR

Pour lancer LinkR depuis RStudio ou depuis une console R, exécutez la fonction linkr.

Les arguments suivants sont à renseigner et sont suffisants pour une utilisation simple de LinkR :

  • language : choisissez la langue parmi “fr” et “en”
  • app_folder : choisissez le dossier dans lequel seront sauvegardés les fichiers permettant le fonctionnement de l’application

Vous pouvez également modifier ces arguments :

  • local : choisissez TRUE si vous voulez lancer l’application en local (sans connexion internet), FALSE sinon
  • debug : TRUE si vous souhaitez que des messages de log s’affichent dans la console ou dans le fichier log, FALSE sinon
  • log_file : TRUE si vous souhaitez qu’un fichier de log soit créé et que le log soit accessible depuis LinkR, FALSE sinon
linkr::linkr(language = "fr", app_folder = "/home/user_name")

Installation sur ShinyProxy

Tutoriel à venir.

2 - Mise en place

Un tutoriel permettant d’avoir rapidement un premier projet fonctionnel avec un set de données de 100 patients

Introduction

Dans ce tutoriel, nous allons voir comment :

  • importer des données
  • importer un projet
  • lancer ce projet

A la fin de ce tutoriel, vous aurez un tableau de bord vous permettant de visualiser les données de 100 patients.


Faut-il avoir des connaissances en programmation pour réaliser ce tutoriel ?


Pas besoin de connaissances avancées en programmation pour réaliser ce tutoriel !

La seule ligne de code à lancer est celle que vous voyez ci-dessous.

Il vous faudra en revanche installer RStudio.

Pour ce faire, vous pouvez consulter les tutoriels du site analyse-R :


RStudio est installé ? Allons-y, lançons LinkR !


Après avoir installé LinkR, lancez l’appli avec ce code.

linkr::linkr(language = "fr", app_folder = "/home/user_name")

Un onglet devrait s’ouvrir dans votre navigateur, avec la page d’accueil de LinkR.

Retournez sur la page d’installation pour plus d’informations sur les arguments que peut prendre la fonction.

Voyons maintenant comment importer des données.

Importer des données

Nous allons importer des données depuis le catalogue de contenu.

Depuis la page d’accueil ou depuis le menu en haut de la page, rendez-vous sur la page “Catalogue de contenus”.

Trouvez Saint-Malo sur la carte et sélectionnez InterHop.

Vous verrez à droite l’écran la page d’accueil du contenu partagé d’InterHop : on voit que sont proposés des plugins et des sets de données notamment.

Pour accéder au détail de ce contenu partagé, cliquez sur le bouton “Afficher le contenu” en bas de la page.

Nous voulons télécharger les données du set “MIMIC-IV demo set”.

Nous allons donc cliquez sur l’onglet “Sets de données”, en haut à droite de l’écran, puis cliquer sur le widget qui correspond à notre set de données.

Il ne reste plus qu’à cliquer sur “Installer”, et ça y est, le set de données (du moins son code) est installé !


Ce catalogue permet donc de partager des données ?


Non, aucune donnée n’est téléchargée lors de l’installation d’un set de données.

Les données de santé, qui sont des données sensibles, doivent être maniées dans un cadre réglementaire bien précis.

Ici, nous avons téléchargé le code qui permet d’accéder aux données, et non les données elles-mêmes.

Il se trouve que ce dans notre cas, ce sont des données anonymisées, et donc de fait non concernées par le RGPD. C’est pourquoi ce code peut, sans authentification quelconque, télécharger les données des 100 patients de la base test MIMIC-IV.

Vous pouvez lire cet article pour plus d’informations sur la base de données MIMIC.

Voyons à présent comment importer un projet.

Importer un projet

Nous allons procéder de la même façon pour importer un projet.

Rendez-vous sur la page “Catalogue de contenus”, sélectionnez cette fois-ci le laboratoire DOMASIA à Rennes.

Cliquez sur “Afficher le contenu”, vous devriez arriver sur l’onglet “Projets”, et vous devriez voir le projet “Dashboard indicateurs qualité”.

Lorsque je clique sur le projet, je vois sa description apparaître : ce projet permet de créer un tableau de bord présentant les indicateurs de qualité de la prise en charge de patients.

Cliquez sur “Installer”.


Ca y est, le projet est installé. Nous allons pouvoir le lancer.


Lancer le projet

Afin de lancer notre projet, nous devons associer le projet et le set de données.

Pour cela, rendez-vous sur la page “Projets”, depuis la première icône en partant de la gauche en haut de l’écran ou depuis la page d’accueil (à laquelle on accède en cliquant sur l’icône de LinkR en haut à gauche de l’écran).

Cliquez ensuite sur l’icône “Paramétrer le projet”, ceci permet de configurer le projet sans charger les données et les widgets.

Cliquez sur l’onglet “Set de données”, puis sélectionnez le set de donnée que nous avons précédemment installé : “MIMIC-IV set de démo”.


Nous avons associé le set de données au projet : ces données seront chargées au démarrage du projet.


Vous pouvez maintenant cliquez sur une des pages de données (les icônes avec les personnages).

Plusieurs choses se produisent.

  • Le code set de données, étant lancé pour la première fois, télécharge les fichiers CSV de la base de données, ceci peut prendre quelques minutes. Le chargement les fois suivantes sera plus rapide, étant donné que les fichiers seront stockés localement, ils ne devront pas être téléchargés de nouveau.

  • Un subset comprenant tous les patients va être créé.

  • Les widgets vont se charger et afficher les données

Enfin, cliquez sur l’icône des “Données agrégées” (celle avec plusieurs personnages), vous verrez alors apparaître le tableau de bord !

Les données de ce set (MIMIC-IV) étant anonymisées, les dates ont été modifiées (de 2110 à 2202), c’est pourquoi la figure des admissions en fonction du temps, en haut à droite, n’a pas un rendu correct.

Le tableau en bas à droite devrait afficher les diagnostics CIM-10. Il affiche ici des nombres, parce que nous n’avons pas importé la terminologie CIM-10 : la correspondance avec les noms correspondant aux codes CIM-10 ne peut se faire. Rendez-vous ici pour savoir comment importer des terminologies !

Conclusion

Nous avons vu dans ce tutoriel comment importer des données et importer un projet depuis le catalogue des contenus.


Comment créer un projet avec mes propres données ?


Pour importer vos données, suivez ce tutoriel.

Pour créer un projet à partir de zéro, suivez ce tutoriel.

3 - Composants

Une description des différents éléments composant LinkR : des sets de données aux terminologies, en passant par les plugins et les widgets…

Introduction

LinkR s’articule autour de projets, dans lesquels des sets de données sont chargés, contenant des données au format OMOP et utilisant des terminologies standards.

Ces données peuvent être mises en qualité grâce à l’utilisation et au partage de scripts de data cleaning.

Dans ces projets, l’utilisateur peut visualiser et analyser les données à l’aide de widgets, qui sont des plugins paramétrés.

Il est également possible d’accéder à un environnement de développement R et Python via la console.




Sets de données

LinkR fonctionne avec OMOP, un modèle de données commun international pour les données de santé.

Vous pouvez importer des données depuis différentes sources : une base de données, des fichiers Parquet ou des fichiers CSV.

Un même set de données peut être utilisé dans plusieurs projets.

Pour l’instant il est nécessaire de coder en R le script d’import des données. Une interface graphique sera codée dans une prochaine version.

Voir comment importer des données.


Terminologies

Le modèle de données OMOP se base sur des terminologies standards, tells que :

  • LOINC pour la biologie
  • ICD-10 pour les diagnostics
  • RxNorm pour les médicaments
  • etc…

Toutes ces terminologies sont disponibles sur Athena.

Ces terminologies doivent être importées dans LinkR, pour avoir les noms des concepts correspondants aux ID des concepts (colonnes concept_id des tables OMOP).

Voir comment importer des terminologies.


Scripts de data cleaning

Les données importées au format OMOP nécessitent souvent d’être mises en qualité à l’aide de scripts de data cleaning.

Un exemple classique est représenté par les données de poids et taille, qui, du fait de la façon dont sont créés les logiciels de soin, comporte souvent des données aberrantes, par exemple par inversion entre les champs poids et taille.

Des scripts pour exclure ce type de données sont souvent réalisés. LinkR permet de faciliter le partage de tels scripts, qui, du fait de l’utilisation du modèle de données commun OMOP, seront susceptibles de fonctionner sur les différents sets de données importés dans LinkR.

Quelques autres exemples de scripts :

  • calcul de scores, tels que l’IGS-2 ou le score SOFA
  • calcul de diurèse, en faisant la somme des différents paramètres (sonde urinaire, néphrostomie etc)
  • etc…

Voir comment créer un script de data cleaning.


Projets

Un projet est un environnement R et Python où seront analysées des données.

Un projet peut correspondre à une étude (par exemple une étude sur la prédiciton de la mortalité), mais également à des analyse de données hors étude, tels que la création de tableaux de bord (un tableau de bord permettant de visualiser l’activité d’un service hospitalier par exemple).

Lors de la création d’un projet, l’utilisateur choisit les données à utiliser, depuis les sets de données chargés dans l’application.

Le projet s’articulera autour de deux pages principales :

  • Page de données individuelles : ici, l’utilisateur pourra recréer l’équivalent d’un dossier clinique, en créant des onglets où il configurera des widgets, par exemple :

    • un onglet “Hémodynamique” où nous créerons des widgets permettant de visualiser la fréquence cardiaque, la pression artérielle et les traitements anti-hypertenseurs reçus par le patient)

    • un onglet “Notes” où nous afficherons toutes les documents textuels concernant le patient (compte-rendus hospitaliers, notes cliniques quotidiennes etc)

    • un onglet “Infectiologie” où nous afficherons toutes les données concernant l’infectiologie (prélèvements bactériologiques, antibioques reçus etc)

    • etc…

  • Page de données agrégées : ici, l’utilisateur créera de la même façon des onglets où il configurera des widgets. Il s’agira d’analyses sur un groupe de patients, par exemple :

    • un onglet “Données démographiques” où l’utilisateur affichera les données démographiques du groupe de patients (âge, sexe, durée de séjour, mortalité etc)

    • un onglet “Données aberrantes” où sera affichée la distribution des différents paramètres et excluera les données aberrantes

    • un onglet “Analyse de survie” où un widget sera configuré pour réaliser l’analyse de survie de la population sélectionnée

    • etc…

A l’aide de l’interface low-code (qui associe une interface de code et une interface graphique), le travail collaboratif entre data scientists, statisticiens et cliniciens devient plus facile.

Voir comment créer un projet.


Plugins

Les plugins sont des briques de code R et Python qui permettent d’ajouter des fonctionnalités à LinkR.

Comme nous l’avons vu dans le paragraphe précédent, les projets s’articulent en onglets.

Ces onglets comportent des widgets, qui sont des plugins appliqués à des données.

Par exemple, si je choisir le plugin “Timeline” pour être appliqué au paramètre “Fréquence cardiaque”, le widget résultant sera un graphique sous forme de timeline qui affichera la fréquence cardiaque du patient sélectionné.

Il existe des plugins de données individuelles, qui sont les éléments permettant de recréer un dossier médical, par exemple :

  • Lecteur de document : ce plugin permet d’afficher les documents textuels (compte-rendus hospitaliers, notes cliniques) et de les filtrer (avec recherche de mot clef ou avec filtre sur le titre par exemple)
  • Timeline : comme évoqué ci-dessus, pour afficher les données temporelles sous forme de timeline
  • Datatable : permet d’afficher les données sous forme de Datatable, comme par exemple l’affichage de la biologie d’un patient en fonction de l’horaire de prélèvement
  • etc…

Nous avons aussi des plugins de données agrégées, qui serviront à visualiser et analyser des données agrégées, par exemple :

  • ggplot2 : un plugin qui permet d’afficher les variables avec les différentes figures proposées par la librairie ggplot2
  • Analyse de survie : permet de réaliser des analyses de survie
  • Machine learning : pour entraîner et évaluer des modèles de machine learning, avec des librairies R ou Python
  • etc…

Voir comment créer un plugin.


Widgets

Les widgets correspondent à des plugins appliqués à des données.

Après avoir créé un onglet, je peux y ajouter plusieurs widgets.

Ces widgets peuvent être changés de taille et déplacés sur la page.


Subsets

Au niveau d’un projet, un set de données peut être partagé en plusieurs subsets.

Un subset est un sous-ensemble du set de données global, après avoir appliqué des filtres pour sélectionner des patients.

Voici des exemples de subsets que l’on pourrait imaginer sur la base de données MIMIC, qui comporte les séjours de plus de 50 000 patients en réanimation, adulte et pédiatrique :

  • Patients de plus de 18 ans admis en réanimation médicale pour COVID-19
  • Patients ayant un code CIM-10 de pneumopathie infectieuse et ayant été traité par Amoxicilline
  • Patients exclus : il peut être utile de créer un subset avec uniquement les patients exclus des analyses
  • etc…

Pour l’instant il est nécessaire de coder en R les scripts pour créer les subsets. Une interface graphique sera codée dans une prochaine version.

Voir comment créer un subset.


4 - Importer des données

Un tutoriel pour importer des données depuis différents sources : bases de données, Parquet, CSV…

Créer un set de données

Pour importer des données, rendez-vous sur la page Sets de données depuis le menu en haut de l’écran ou depuis le widget de la page d’accueil.




Cliquez ensuite sur l’icône Plus (+) à gauche de l’écran pour créer un nouveau set de données.

Choisissez un nom. Pour l’exemple, nous importerons le set de données MIMIC-IV set de démo.

Pour plus d’informations sur la base de données MIMIC, rendez-vous ici.




Une fois le set créé, cliquez sur le widget correspondant à ce set et rendez-vous sur l’onglet Code à droite de l’écran.

Vous verrez que du code R a été généré automatiquement.

Fonction import_dataset

Pour importer des données dans LinkR, nous utilisons la fonction import_dataset.

Voici les arguments que peut prendre cette fonction.

Il y a certains arguments qu’il n’est pas nécessaire de modifier, nous renseignerons des valeurs par défaut :

  • r, d : ce sont des variables qui servent à communiquer des informations au sein de l’application, elles doivent être mises en arguments pour être disponibles à l’intérieur de la fonction
  • dataset_id : c’est l’ID du set de données actuel, vous pouvez remplacer cet argument pour %dataset_id%, qui sera remplacé par l’ID du set de données

Vous devrez modifier ces arguments :

  • omop_version : c’est la version d’OMOP des données que vous allez importer. Si vous indiquez %omop_version%, c’est la version renseignée dans l’onglet Sommaire qui sera utilisée
  • data_source : vous indiquerez ici d’où proviennent les données, db si les données proviennent d’une connexion à une base de données, disk si elles sont stockées localement
  • data_folder : si vous avez choisi la valeur disk pour l’argument data_source, vous indiquerez ici le dossier contenant les données
  • con : si vous avez choisi la valeur db pour l’arguemnt data_source, vous indiquerez ici la variable de connexion à la base de données
  • load_tables : par défaut, toutes les tables OMOP seront chargées depuis la source indiquée. Si vous ne souhaitez charger qu’une partie de ces tables, renseignez ici les tables à importer. Par exemple load_tables = c('person', 'visit_occurrence', 'visit_detail')

Connexion à une base de données

Connexion et lecture des données

Vous pouvez importer des données à une partie d’une connexion à une base de données.

Configurez d’abord l’objet de connexion con avec la librairie DBI, puis utilisez la fonction import_dataset.

Pour indiquer que nous chargeons une base de données, l’argument data_source doit prendre la valeur “db”.

L’argument con prendra notre objet con en valeur.

# Objet de connexion. Nous voyons ceci en détail en-dessous.
con <- DBI::dbConnect(...)

# Fonction pour charger les données au chargement du projet
import_dataset(
    r, d, dataset_id = %dataset_id%, omop_version = "5.4",
    data_source = "db", con = con
)

Ce code établira une connexion à la base de données au chargement du projet.

Voyons maintenant comment configurer la connexion à la base de données.

PostgreSQL

con <- DBI::dbConnect(
    RPostgres::Postgres(),
    host = "localhost",
    port = 5432,
    dbname = "mimic-iv-demo",
    user = "postgres",
    password = "postgres"
)

DuckDB

Vous pouvez vous connecter à une base de données duckdb via le fichier .db.

con <- DBI::dbConnect(duckdb::duckdb(), dbdir = "/my_db_file.db", read_only = TRUE)

Exemple complet

# Connexion à la base PostgreSQL locale
con <- DBI::dbConnect(
    RPostgres::Postgres(),
    host = "localhost",
    port = 5432,
    dbname = "mimic-iv-demo",
    user = "postgres",
    password = "postgres"
)

# Chargement des données au lancement du projet
import_dataset(
    r, d, dataset_id = %dataset_id%, omop_version = %omop_version%,
    data_source = "db", con = con
)

Importer des fichiers

Vous pouvez également importer des fichiers sans passer par une connexion à une base de données.

Pour cela :

  • renseignez la valeur disk dans l’argument data_source
  • renseignez la localisation des fichiers dans l’argument data_folder

Par exemple, mettons que les fichiers de ma base de données soient dans le dossier /data/mimic-omop/ :

/data/mimic-iv-demo/
--- person.parquet
--- visit_occurrence.parquet
--- visit_detail.parquet
--- measurement.parquet

Je les charge comme ceci.

import_dataset(
    r, d, dataset_id = %dataset_id%, omop_version = "5.4",
    data_source = "disk", data_folder = "/data/mimic-iv-demo/"
)

Charger certaines tables

Vous pouvez choisir de n’importer que certaines tables depuis la base de données, avec l’argument load_tables.

Vous n’avez qu’à renseigner dans un vecteur de caractères les tables à importer, comme ceci :

# Chargement des tables person, visit_occurrence, visit_detail et measurement seulement
tables <- c("person", "visit_occurrence", "visit_detail", "measurement")

# Ajout de l'argument load_tables dans import_dataset
import_dataset(
    r, d, dataset_id = %dataset_id%, omop_version = "5.4",
    data_source = "db", con = con,
    load_tables = tables
)

Depuis le catalogue de contenus

Vous pouvez également installer un set de données depuis la librairie des contenus.

Ceci vous permettra de télécharger le code permettant de charger des données, mais uniquement le code.

Les données ne seront pas téléchargées : l’accès aux données de santé nécessite généralement une authentification.

Retrouvez le tutoriel ici.

5 - Importer des terminologies

Comment importer des terminologies, depuis Athena jusqu’à LinkR

6 - Créer un script de data cleaning

Comment créer et appliquer des scripts de data cleaning, pour avoir des données de qualité

7 - Créer un projet

Après toutes ces étapes, lançons-nous enfin dans le concret en créant un projet

8 - Créer un plugin

Comment créer des plugins, pour ajouter des foncitonnalités à LinkR

8.1 - Simple

8.2 - Avancé

9 - Créer un subset

Analysez des sous-ensembles de population à l’aide des subsets

10 - Catalogue de contenus

Ne réinventez pas la roue, d’autres ont peut-être déjà fait le travail ?

Installer un élément

Pour commencer, rendez-vous sur la page “Catalogue de contenus”, depuis l’accueil ou depuis le menu en haut de la page.

En sélectionnant un point sur la carte, vous verrez apparaître sa description (correspondant au fichier README.md du dépôt git).

Cliquez sur le bouton “Afficher le contenu”, vous aurez accès au contenu partagé que propose cette équipe.

Vous pouvez choisir la catégorie de contenu à partir des onglets en haut à droite de l’écran, parmi :

  • Projets
  • Plugins
  • Sets de data cleaning
  • Sets de données

En cliquant sur un widget, vous accéderez à la description de ce contenu.

Vous pouvez installer ou mettre à jour l’élément simplement en cliquant sur le bouton “Installer” ou “Mettre à jour”.

Une fois l’élément installé, vous pouvez y accéder localement depuis la page correspondante (page Projets, Sets de données etc).

Pour revenir à la carte, cliquez sur “Dépôts git” en haut de l’écran.

11 - Partager

La philosophie d’InterHop : l’open science. Pourquoi ne pas partager vos travaux ?

12 - Roadmap

De quoi sera fait l’avenir pour LinkR ?

Version 0.3 (fin 2024 - début 2025) :

  • Intégrer les scripts de data cleaning dans les projets : choisir quels scripts exécuter, dans quel ordre
  • Page “Fichiers du projet” : page permettant de créer, éditer et supprimer des fichiers contenus dans un projet
  • Page “Messages” : pour échanger des messages entre collaborateurs d’un projet (surtout pour partager et s’aider à débuguer du code)

Version 0.4 (courant 2025) :

  • Page “Workflow” : une page permettant de configurer le workflow d’un projet : quels fichiers, quels scripts exécuter, dans quel ordre
  • Intégration des LLMs au sein de LinkR : page pour configurer le code permettant de charger chaque LLM local (et uniquement local, pour éviter les fuites de données sur des serveurs non HDS)
  • Proposer une interface graphique pour l’import des données
  • Proposer une interface graphique pour la création de subset (sélection de critères, opérateurs logiques etc)
  • Gestion de tâches de fond

Plugins prioritaires à développer (fin 2024) :

  • Timeline / dygraphs (ind)
  • Datatable (ind)
  • Prescriptions / adminsitrations (ind)
  • Figures / gpplot2 (agg)

Scripts prioritaires à développer (fin 2024) :

  • Diurèse
  • SOFA
  • IGS-2