Bagaimana cara memvisualisasikan tabel kontingensi jarang yang sangat besar?

24

Saya memiliki dua variabel: Nama Obat (DN) dan Kejadian Buruk yang sesuai (AE), yang berdiri dalam hubungan banyak-ke-banyak. Ada 33.556 nama obat dan 9.516 efek samping. Ukuran sampel adalah sekitar 5,8 juta pengamatan.

Saya ingin belajar dan memahami hubungan / hubungan antara DN dan AE. Saya sedang memikirkan cara memvisualisasikan set ini dalam R karena lebih baik untuk melihat gambar. Saya tidak yakin bagaimana cara melakukannya ...

pengguna9292
sumber
3
(+1) Mengingat informasi tambahan yang disajikan dalam komentar ini (sejak dihapus, karena informasi itu sekarang muncul dalam pertanyaan itu sendiri), ini telah menjadi masalah yang menarik dan menantang. Saya mendorong para downvoter sebelumnya untuk mengubah suara mereka sebagai pengakuan atas hal ini (dan yang lainnya untuk menjawab pertanyaan jika Anda setuju dengan saya!).
whuber
1
Apakah data tersedia untuk umum?
kardinal
5
@ cardinal, ya .. data yang diperoleh dari FDA, namanya AERS. Lihat tautan: fda.gov/Drugs/GuidanceComplianceRegulatoryInformation/…
user9292
Ini adalah masalah yang diketahui dengan literatur besar: Anda bisa melihat, misalnya (dari statistik kedokteran, dapat diunduh): "Metode deteksi sinyal pharmacovigilance Bayesian ditinjau kembali dalam pengaturan perbandingan berganda" dan referensi di dalamnya.
kjetil b halvorsen
Kedengarannya seperti kertas yang menarik (tidak yakin itu tersedia secara bebas, tapi ada paket R ). Sekarang, solusi grafis apa yang akan Anda sarankan?
chl

Jawaban:

11

Apa yang dapat Anda lakukan adalah menggunakan ide bayangan sisa dari vcd di sini dikombinasikan dengan visualisasi matriks jarang seperti misalnya pada halaman 49 bab buku ini . Bayangkan plot terakhir dengan bayangan sisa dan Anda mendapatkan ide.

Tabel matriks jarang / kontigensi biasanya akan berisi jumlah kejadian setiap obat dengan masing-masing efek samping. Namun dengan ide naungan residual Anda dapat mengatur model linier log baseline (misalnya model independensi atau apa pun yang Anda suka) dan menggunakan skema warna untuk mengetahui kombinasi obat / efek yang lebih sering terjadi / lebih jarang daripada yang diprediksi oleh model . Karena Anda memiliki banyak pengamatan, Anda dapat menggunakan ambang warna yang sangat halus dan mendapatkan peta yang mirip dengan bagaimana microarray dalam analisis kluster sering divisualisasikan misalnya di sini(tapi mungkin dengan warna "gradien" yang lebih kuat). Atau Anda bisa membuat ambang sedemikian rupa sehingga hanya jika perbedaan pengamatan dengan prediksi melebihi ambang batas daripada yang diwarnai dan sisanya akan tetap putih. Bagaimana tepatnya Anda melakukan ini (misalnya model mana yang digunakan atau ambang mana) tergantung pada pertanyaan Anda.

Sunting Jadi, inilah cara saya melakukannya (mengingat saya memiliki cukup RAM yang tersedia ...)

  1. Buat matriks jarang dari dimensi yang diinginkan (nama obat x efek)
  2. Hitung residu dari model loglinear independensi
  3. Gunakan gradien warna dalam resolusi halus dari min ke maksimum residu (misalnya dengan ruang warna hsv)
  4. Masukkan nilai warna sesuai dari besarnya residu pada posisi yang sesuai dalam matriks jarang
  5. Plot matriks dengan plot gambar.

Anda kemudian berakhir dengan sesuatu seperti ini (tentu saja gambar Anda akan jauh lebih besar dan akan ada ukuran piksel yang jauh lebih rendah tetapi Anda harus mendapatkan ide. Dengan penggunaan warna yang pintar Anda dapat memvisualisasikan asosiasi / keberangkatan dari kemerdekaan yang paling Anda sukai. berminat).

Contoh cepat dan kotor dengan matriks 100x100. Ini hanyalah contoh mainan dengan residu mulai dari -10 hingga 10 seperti yang Anda lihat dalam legenda. Putih adalah nol, biru lebih jarang dari yang diharapkan, merah lebih sering dari yang diharapkan. Anda harus bisa mendapatkan ide dan mengambilnya dari sana. Sunting: Saya memperbaiki pengaturan plot dan menggunakan warna non-kekerasan.

masukkan deskripsi gambar di sini

Ini dilakukan menggunakan imagefungsi dan cm.colors()dalam fungsi berikut:

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)

menggunakan ide dari sini http://www.phaget4.org/R/image_matrix.html . Jika matriks Anda begitu besar sehingga imagefungsinya menjadi lambat, gunakan useRaster=TRUEargumen (Anda mungkin juga ingin menggunakan objek Matrix jarang; perhatikan bahwa harus ada imagemetode jika Anda ingin menggunakan kode dari atas, lihat paket sparsem.)

Jika Anda melakukan ini, beberapa pemesanan baris / kolom yang cerdik mungkin menjadi berguna, yang dapat Anda hitung dengan paket arules (periksa halaman 17 dan 18 atau lebih). Saya biasanya merekomendasikan utilitas arules untuk tipe data dan masalah ini (tidak hanya visualisasi tetapi juga untuk menemukan pola). Di sana Anda juga akan menemukan ukuran-ukuran hubungan antara level-level yang bisa Anda gunakan alih-alih shading residual.

Anda mungkin juga ingin melihat tableplots yang ingin Anda selidiki hanya beberapa efek samping nanti.

Momo
sumber
1
Rupanya ini sekarang disebut "quilt plot" plosone.org/article/info:doi/10.1371/journal.pone.0085047
Momo
Saya terbiasa melihat peta panas seperti ini dengan baris dan kolom berkerumun, misalnya dengan pengelompokan hierarkis. Meskipun 33556 x 9516 sepertinya cara untuk memvisualisasikan cara ini.
R Greg Stacey