Wie kann man sich eine riesige, spärliche Kontingenztabelle vorstellen?

24

Ich habe zwei Variablen: Drogenname (DN) und entsprechende unerwünschte Ereignisse (AE), die in einer Beziehung von vielen zu vielen stehen. Es gibt 33.556 Medikamentennamen und 9.516 unerwünschte Ereignisse. Die Stichprobengröße beträgt etwa 5,8 Millionen Beobachtungen.

Ich möchte die Assoziation / Beziehung zwischen DN und AE studieren und verstehen. Ich denke über eine Möglichkeit nach, diese Menge in R zu visualisieren, da es besser ist, Bilder zu betrachten. Ich bin mir nicht sicher, wie ich vorgehen soll ...

user9292
quelle
3
(+1) Angesichts der zusätzlichen Informationen in diesen Kommentaren (seitdem gelöscht, da die Informationen jetzt in der Frage selbst erscheinen) ist dies ein interessantes und herausforderndes Problem geworden. Ich ermutige frühere Abwähler, ihre Stimmen in Anerkennung dessen zu ändern (und andere, die Frage zu beantworten, wenn Sie mir zustimmen!).
Whuber
1
Sind die Daten öffentlich verfügbar?
Kardinal,
5
@ Kardinal, ja .. die Daten von der FDA erhalten, heißt AERS. Siehe den Link: fda.gov/Drugs/GuidanceComplianceRegulatoryInformation/…
user9292
Dies ist ein bekanntes Problem bei einer großen Literatur: Sie können beispielsweise (aus der medizinischen Statistik, herunterladbar) nachlesen: "Bayesian Pharmacovigilance Signal Detection Methods revisited in a multiple Comparison Setting" und Verweise darauf.
kjetil b halvorsen
Es klingt wie ein interessantes Papier (nicht sicher, ob es frei verfügbar ist, aber es gibt ein R-Paket ). Welche grafische Lösung würden Sie vorschlagen?
CHL

Antworten:

11

Was Sie tun können, ist die Verwendung der Restschattierungsideen von vcd hier in Kombination mit der Visualisierung mit spärlicher Matrix, wie z. B. auf Seite 49 dieses Buchkapitels . Stellen Sie sich das letztere Diagramm mit Restschattierungen vor und Sie bekommen die Idee.

Die Tabelle mit der spärlichen Matrix / Kontingenz würde normalerweise die Anzahl der Vorkommen jedes Arzneimittels mit jeder nachteiligen Wirkung enthalten. Mit der Restschattierungsidee können Sie jedoch ein lineares Grundlinienmodell (z. B. ein Unabhängigkeitsmodell oder was auch immer Sie sonst möchten) erstellen und anhand des Farbschemas herausfinden, welche Arzneimittel- / Wirkungskombination häufiger / seltener auftritt, als das Modell vorhersagen würde . Da Sie viele Beobachtungen haben, können Sie eine sehr feine Farbschwelle verwenden und eine Karte erhalten, die der Darstellung von Microarrays in der Clusteranalyse ähnelt, z. B. hier(aber wahrscheinlich mit stärkeren Farbverläufen). Oder Sie können die Schwellenwerte so erstellen, dass nur dann, wenn die Unterschiede zwischen Beobachtungen und Vorhersagen den Schwellenwert überschreiten, dieser farblich hervorgehoben wird und der Rest weiß bleibt. Wie genau Sie dies tun würden (z. B. welches Modell oder welche Schwellenwerte), hängt von Ihren Fragen ab.

Bearbeiten Also hier ist, wie ich es machen würde (vorausgesetzt, ich hätte genug RAM zur Verfügung ...)

  1. Erstellen Sie eine dünne Matrix mit den gewünschten Dimensionen (Medikamentennamen x Effekte)
  2. Berechnen Sie die Residuen aus dem loglinearen Unabhängigkeitsmodell
  3. Verwenden Sie einen Farbverlauf in feiner Auflösung vom Minimum bis zum Maximum des Rests (z. B. mit einem HSV-Farbraum).
  4. Fügen Sie den entsprechenden Farbwert der Residuengröße an der entsprechenden Position in die dünne Matrix ein
  5. Zeichnen Sie die Matrix mit einem Bilddiagramm.

Sie erhalten dann so etwas (Ihr Bild ist natürlich viel größer und hat eine viel geringere Pixelgröße, aber Sie sollten die Idee haben. Mit einer geschickten Verwendung von Farben können Sie die Assoziationen / Abweichungen von der Unabhängigkeit, die Sie am meisten sind, visualisieren interessiert an).

Ein schnelles und schmutziges Beispiel mit einer 100x100 Matrix. Dies ist nur ein Spielzeugbeispiel mit Residuen zwischen -10 und 10, wie Sie in der Legende sehen können. Weiß ist Null, Blau ist weniger häufig als erwartet, Rot ist häufiger als erwartet. Sie sollten in der Lage sein, die Idee zu verstehen und von dort zu übernehmen. Bearbeiten: Ich habe die Einstellungen des Plots korrigiert und gewaltfreie Farben verwendet.

Bildbeschreibung hier eingeben

Dies wurde mit der imageFunktion und cm.colors()in der folgenden Funktion durchgeführt:

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)

Verwenden von Ideen von hier http://www.phaget4.org/R/image_matrix.html . Wenn Ihre Matrix so groß ist, dass die imageFunktion langsam wird, verwenden Sie das useRaster=TRUEArgument (möglicherweise möchten Sie auch spärliche Matrix-Objekte verwenden; beachten Sie, dass es eine geben sollteimage geringer Dichte verwenden. Methode wenn Sie den Code von oben verwenden möchten. Weitere Informationen finden Sie im sparseM-Paket.)

In diesem Fall kann eine geschickte Reihenfolge der Zeilen / Spalten hilfreich sein , die Sie mit dem Paket arules berechnen können ( siehe Seite 17 und 18 oder so). Ich würde generell die arules-Dienstprogramme für diese Art von Daten und Problemen empfehlen (nicht nur zur Visualisierung, sondern auch zum Auffinden von Mustern). Dort finden Sie auch Assoziationsmaße zwischen den Ebenen, die Sie anstelle der Restschattierung verwenden könnten.

Vielleicht möchten Sie sich auch Tabellen mit Grafiken ansehen, von denen Sie später nur ein paar nachteilige Auswirkungen untersuchen möchten.

Momo
quelle
1
Anscheinend wird dies heutzutage "Quilt-Plot" genannt. Plosone.org/article/info:doi/10.1371/journal.pone.0085047
Momo
Ich bin es gewohnt, Heatmaps wie diese mit gruppierten Zeilen und Spalten zu sehen, z. B. mit hierarchischem Clustering. Obwohl 33556 x 9516 scheint viel zu viel auf diese Weise zu visualisieren.
R Greg Stacey