Як візуалізувати величезну таблицю з надзвичайними ситуаціями?


24

У мене є дві змінні: назва наркотиків (DN) та відповідні побічні явища (AE), які стоять у співвідношенні «багато до багатьох». Зафіксовано 33 556 найменувань препаратів та 9 556 побічних подій. Розмір вибірки становить близько 5,8 мільйона спостережень.

Я хочу вивчити та зрозуміти зв'язок / зв’язок між DN та AE. Я думаю про спосіб візуалізації цього набору в R, оскільки краще переглянути фотографії. Я не впевнений, як це зробити ...


3
(+1) Зважаючи на додаткову інформацію, представлену в цих коментарях (з моменту видалення, оскільки тепер інформація з'являється в самому запитанні), це стало цікавою і складною проблемою. Я закликаю попередніх правозахисників змінити свій голос на знак визнання цього (та інших, хто схвалює питання, якщо ви згодні зі мною!).
whuber

1
Чи є дані загальнодоступними?
кардинал

5
@cardinal, так .. дані, отримані від FDA, це називається AERS. Перейдіть за посиланням: fda.gov/Drugs/GuidanceComplianceRegulatoryInformation/…
користувач9292

Це відома проблема у великій літературі: Ви можете ознайомитись, наприклад (зі статистики медицини, яку можна завантажити): "Методи виявлення сигналів фармакологічної гігієни Баєса, переглянуті у кількох параметрах порівняння" та посилання на терен.
kjetil b halvorsen

Це звучить як цікавий папір (не впевнений, що він є у вільному доступі, але є пакет R ). Тепер, яке графічне рішення ви б запропонували?
chl

Відповіді:


11

Що ви можете зробити, це використовувати залишкові ідеї затінення від vcd тут у поєднанні з розрідженою візуалізацією матриці, як, наприклад, на сторінці 49 цієї книги . Уявіть останню ділянку із залишковими відтінками, і ви отримаєте ідею.

Таблиця розрідженої матриці / суміжності зазвичай містить кількість випадків дії кожного лікарського засобу з кожним несприятливим ефектом. За допомогою залишкової ідеї затінення, однак, ви можете встановити лінійну модель журналу базової лінії (наприклад, модель незалежності або все, що вам більше подобається) і використовувати кольорову схему, щоб дізнатися, яка комбінація ліків / ефектів трапляється частіше / рідше, ніж модель передбачала б . Оскільки у вас є багато спостережень, ви можете використовувати дуже тонкий поріг кольорів і отримати карту, яка буде схожа на те, як мікрориси в кластерному аналізі часто візуалізуються, наприклад, тут(але, ймовірно, з більш сильними кольоровими "градієнтами"). Або ви можете побудувати пороги такими, що лише в тому випадку, якщо відмінності спостережень від прогнозів перевищать поріг, ніж він стане кольоровим, а решта залишиться білою. Як саме ви це зробили (наприклад, яку модель використовувати або які пороги), залежить від ваших питань.

Редагувати Ось як я це зробив (враховуючи, що в мене буде достатньо оперативної пам'яті ...)

  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аргумент (можливо, ви також хочете використовувати розріджені об'єкти матриці; зверніть увагу, що повинен бути imageметод, якщо ви хочете використовувати код зверху, див. Пакет sparseM.)

Якщо ви це зробите, може стати корисним певне впорядкування рядків / стовпців, що ви можете обчислити за допомогою пакету ручок (перевірте сторінки 17 та 18 чи так). Як правило, я б рекомендував утиліти arules для цього типу даних і проблем (не тільки візуалізація, але і пошук шаблонів). Там же ви знайдете міри зв'язку між рівнями, які ви могли б використовувати замість залишкового затінення.

Ви також можете подивитися на планшети, які ви хочете дослідити лише пару негативних наслідків пізніше.


1
Мабуть, це сьогодні називають "сюжетним ковдром
Момо

Я звик бачити подібні теплові карти з кластерами рядків і стовпців, наприклад, з ієрархічною кластеризацією. Хоча 33556 x 9516 здається способом багато чого візуалізувати цей спосіб.
R Greg Stacey
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.