巨大なスパース分割表を視覚化する方法は?


24

私には2つの変数があります:薬物名(DN)と対応する有害事象(AE)は、多対多の関係にあります。33,556の薬名と9,516の有害事象があります。サンプルサイズは約580万回の観測です。

DNとAEの関連/関係を研究し、理解したい。写真を見たほうが良いので、このセットをRで視覚化する方法を考えています。どうすればいいのかわかりません...


3
(+1)これらのコメントに表示される追加情報に照らして(削除されたため、情報自体が質問に表示されるようになったため)、これは興味深く挑戦的な問題になりました。これを認めて以前のダウンボッターに投票を変更することをお勧めします(あなたが私に同意すれば質問に賛成票を投じます!)。
whuber

1
データは公開されていますか?
枢機

5
@cardinal、はい。FDAから取得したデータはAERSと呼ばれます。:リンクを参照してくださいfda.gov/Drugs/GuidanceComplianceRegulatoryInformation/...
user9292

これは大規模な文献に関する既知の問題です。たとえば、(医学の統計から、ダウンロード可能):「多重比較設定でのベイジアンファーマコビジランス信号検出方法の再検討」およびtherinを参照できます。
kjetil bハルヴォルセン

興味深い論文のように聞こえます(無料で入手できるかどうかはわかりませんが、Rパッケージがあります)。さて、あなたはどんなグラフィカルなソリューションを提案しますか?
chl

回答:


11

できることは、この本の章の 49ページにあるように、ここでvcdからの残留シェーディングのアイデアをスパースマトリックスの視覚化と組み合わせて使用することです。残りの陰影を持つ後者のプロットを想像すると、アイデアが得られます。

スパースマトリックス/隣接テーブルには、通常、各有害作用を伴う各薬物の発生数が含まれます。ただし、残余シェーディングのアイデアでは、ベースラインの対数線形モデル(独立モデルなど)を設定し、配色を使用して、モデルが予測するよりも頻繁/少ない頻度で発生する薬物/効果の組み合わせを見つけることができます。多くの観察結果があるため、非常に細かい色のしきい値を使用して、クラスター分析のマイクロアレイが多くの場合視覚化される方法に似たマップを取得できます。(しかし、おそらくより強い色の「グラデーション」を使用)。または、観測値と予測値の差がしきい値を超えた場合のみ色が付けられ、残りは白のままになるようにしきい値を構築できます。これをどの程度正確に行うか(使用するモデルやしきい値など)は、質問によって異なります。

編集 だからここに私がそれをする方法があります(私は十分なRAMが利用できるとしたら...)

  1. 目的の次元のスパース行列を作成します(薬物名x効果)
  2. 独立対数線形モデルから残差を計算する
  3. 最小値から最大値までの高解像度のカラーグラデーションを使用します(例:hsvカラースペース)
  4. スパース行列の適切な位置に残差の大きさの適切な色の値を挿入します
  5. 画像プロットで行列をプロットします。

その後、このようなものになります(もちろん、写真はもっと大きくなり、ピクセルサイズはずっと小さくなりますが、アイデアを得る必要があります。色を巧妙に使用すると、独立性からの関連性/逸脱を視覚化できますに興味がある)。

100x100マトリックスを使用した簡単で汚い例。これは、凡例に見られるように、-10〜10の範囲の残差を持つ単なるおもちゃの例です。白はゼロ、青は予想よりも頻度が低く、赤は予想よりも頻度が高くなります。アイデアを取得し、そこから取得できるはずです。編集:プロットの設定を修正し、非暴力的な色を使用しました。

ここに画像の説明を入力してください

これは、image関数とcm.colors()次の関数を使用して行われました。

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)

ここからのアイデアを使用してhttp://www.phaget4.org/R/image_matrix.html。行列が大きすぎてimage関数が遅くなる場合は、useRaster=TRUE引数を使用します(スパースMatrixオブジェクトimageを使用することもできます。上記のコードを使用する場合はメソッドがあることに注意してください。sparseMパッケージを参照してください)。

これを行うと、行/列の巧妙な順序付けが便利になる場合があります。これはarulesパッケージで計算できます(17ページと18ページなどを確認してください)。通常、このタイプのデータと問題にはarulesユーティリティをお勧めします(視覚化だけでなく、パターンを見つけるためにも)。そこには、残余シェーディングの代わりに使用できるレベル間の関連性の尺度もあります。

また、後でいくつかの悪影響のみを調査したい場合の表プロットを確認することもできます。


1
どうやらこれは、最近「キルトプロット」と呼ばれているplosone.org/article/info:doi/10.1371/journal.pone.0085047

私は、階層的なクラスタリングなど、行と列がクラスター化されたこのようなヒートマップを見ることに慣れています。33556 x 9516は、この方法を視覚化する方法のように思えますが。
Rグレッグ・ステイシー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.