Comment visualiser une énorme table de contingence clairsemée?

24

J'ai deux variables: le nom du médicament (DN) et les événements indésirables (AE) correspondants, qui se trouvent dans une relation plusieurs à plusieurs. Il y a 33 556 noms de médicaments et 9 516 événements indésirables. La taille de l'échantillon est d'environ 5,8 millions d'observations.

Je veux étudier et comprendre l'association / la relation entre DN et AE. Je pense à une façon de visualiser cet ensemble en R car il vaut mieux regarder les images. Je ne sais pas trop comment m'y prendre ...

user9292
la source
3
(+1) À la lumière des informations supplémentaires présentées dans ces commentaires (supprimées depuis, car les informations apparaissent désormais dans la question elle-même), cela est devenu un problème intéressant et difficile. J'encourage les précédents downvoters à changer leurs votes en reconnaissance de cela (et d'autres à voter pour la question si vous êtes d'accord avec moi!).
whuber
1
Les données sont-elles accessibles au public?
cardinal
5
@cardinal, oui .. les données obtenues de la FDA, ça s'appelle AERS. Voir le lien: fda.gov/Drugs/GuidanceComplianceRegulatoryInformation/…
user9292
Il s'agit d'un problème connu avec une grande littérature: vous pouvez par exemple consulter (à partir des statistiques de la médecine, téléchargeables): "Les méthodes de détection du signal de pharmacovigilance bayésienne revisitées dans un cadre de comparaison multiple" et leurs références.
kjetil b halvorsen
Cela ressemble à un document intéressant (pas sûr qu'il soit disponible gratuitement, mais il y a un package R ). Maintenant, quelle solution graphique proposeriez-vous?
chl

Réponses:

11

Ce que vous pourriez faire, c'est utiliser les idées d'ombrage résiduel de vcd ici en combinaison avec une visualisation à matrice clairsemée comme par exemple à la page 49 de ce chapitre du livre . Imaginez le dernier complot avec des nuances résiduelles et vous avez l'idée.

La matrice clairsemée / tableau de contiguïté contiendrait normalement le nombre d'occurrences de chaque médicament avec chaque effet indésirable. Cependant, avec l'idée de l'ombrage résiduel, vous pouvez configurer un modèle linéaire de journal de base (par exemple, un modèle d'indépendance ou tout ce que vous voulez) et utiliser le schéma de couleurs pour savoir quelle combinaison médicament / effet se produit plus souvent / moins souvent que le modèle ne le prédirait . Étant donné que vous avez de nombreuses observations, vous pouvez utiliser un seuil de couleur très fin et obtenir une carte qui ressemble à la façon dont les puces à ADN dans l'analyse des grappes sont souvent visualisées, par exemple ici(mais probablement avec des "dégradés" de couleurs plus forts). Ou vous pouvez construire les seuils de telle sorte que si les différences d'observations par rapport aux prévisions dépassent le seuil, il devient coloré et le reste reste blanc. Comment exactement vous feriez cela (par exemple, quel modèle utiliser ou quels seuils) dépend de vos questions.

Edit Voici donc comment je le ferais (étant donné que j'aurais assez de RAM disponible ...)

  1. Créer une matrice clairsemée des dimensions souhaitées (noms de médicaments x effets)
  2. Calculer les résidus à partir du modèle log-linéaire d'indépendance
  3. Utilisez un dégradé de couleurs en résolution fine du min au maximum du résidu (par exemple avec un espace colorimétrique hsv)
  4. Insérez la valeur de couleur correspondante de la magnitude des résidus à la position correspondante dans la matrice clairsemée
  5. Tracez la matrice avec un tracé d'image.

Vous vous retrouvez ensuite avec quelque chose comme ça (bien sûr, votre image sera beaucoup plus grande et il y aura une taille de pixel beaucoup plus faible, mais vous devriez avoir l'idée. Avec une utilisation intelligente de la couleur, vous pouvez visualiser les associations / dérogations à l'indépendance que vous êtes le plus intéressé par).

Un exemple rapide et sale avec une matrice 100x100. Ce n'est qu'un exemple de jouet avec des résidus allant de -10 à 10 comme vous pouvez le voir dans la légende. Le blanc est nul, le bleu est moins fréquent que prévu, le rouge est plus fréquent que prévu. Vous devriez pouvoir avoir l'idée et la reprendre à partir de là. Edit: J'ai corrigé la mise en place de l'intrigue et utilisé des couleurs non violentes.

entrez la description de l'image ici

Cela a été fait en utilisant la imagefonction et cm.colors()dans la fonction suivante:

ImagePlot <- function(x, ...){
 min <- min(x)
 max <- max(x)
 layout(matrix(data=c(1,2), nrow=1, ncol=2), widths=c(1,7), heights=c(1,1))

 ColorLevels <- cm.colors(255)

 # Color Scale
 par(mar = c(1,2.2,1,1))
 image(1, seq(min,max,length=255),
  matrix(data=seq(min,max,length=255), ncol=length(ColorLevels),nrow=1),
  col=ColorLevels,
  xlab="",ylab="",
  xaxt="n")


 # Data Map
 par(mar = c(0.5,1,1,1))
 image(1:dim(x)[1], 1:dim(x)[2], t(x), col=ColorLevels, xlab="",
 ylab="", axes=FALSE, zlim=c(min,max))

layout(1)
}

#100x100 example
x <- c(seq(-10,10,length=255),rep(0,600))
mat <- matrix(sample(x,10000,replace=TRUE),nrow=100,ncol=100)
ImagePlot(mat)

en utilisant des idées d'ici http://www.phaget4.org/R/image_matrix.html . Si votre matrice est si grande que la imagefonction devient lente, utilisez l' useRaster=TRUEargument (vous pouvez également utiliser des objets Matrix épars; notez qu'il devrait y avoir une imageméthode si vous souhaitez utiliser le code ci-dessus, voir le package sparseM.)

Si vous faites cela, un ordre intelligent des lignes / colonnes peut devenir pratique, que vous pouvez calculer avec le paquet d'arules (consultez les pages 17 et 18 ou plus). Je recommanderais généralement les utilitaires d'arules pour ce type de données et de problème (non seulement la visualisation mais aussi pour trouver des modèles). Vous y trouverez également des mesures d'association entre les niveaux que vous pourriez utiliser au lieu de l'ombrage résiduel.

Vous voudrez peut-être également examiner des tableaux de vous qui ne veulent enquêter que sur quelques effets indésirables plus tard.

Momo
la source
1
Apparemment, c'est ce qu'on appelle aujourd'hui un "complot de courtepointe" plosone.org/article/info:doi/10.1371/journal.pone.0085047
Momo
J'ai l'habitude de voir des cartes thermiques comme celle-ci avec les lignes et les colonnes en cluster, par exemple avec le clustering hiérarchique. Bien que 33556 x 9516 semble beaucoup trop à visualiser de cette façon.
R Greg Stacey