如何可视化一个巨大的稀疏列联表?


24

我有两个变量:药品名称(DN)和相应的不良事件(AE),它们之间存在多对多关系。有33,556种药物名称和9,516种不良事件。样本量约为580万次观察。

我想研究和理解DN和AE之间的关联/关系。我正在考虑一种可视化R中的设置的方法,因为最好看图片。我不确定该怎么做...


3
(+1)鉴于这些评论中提供的其他信息(自从删除以来,因为该信息现在出现在问题本身中),这已成为一个有趣且具有挑战性的问题。我鼓励以前的拒绝投票者改变投票以认可这一点(如果您同意我的意见,则鼓励其他投票者投票赞成!)。
ub

1
数据可以公开获得吗?
主教

5
@cardinal,是的..从FDA获得的数据称为AERS。见链接:fda.gov/Drugs/GuidanceComplianceRegulatoryInformation/...
user9292

这是大量文献中的一个已知问题:例如,您可以看一下(来自医学统计数据,可下载):“在多重比较设置中重新审视的贝叶斯药物警戒信号检测方法”,并引用了therin。
kjetil b halvorsen 2012年

听起来像是一篇有趣的论文(不确定是否可以免费获得,但是有R包)。现在,您会提出什么图形解决方案
chl 2012年

Answers:


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参数(您可能还想使用稀疏的Matrix对象;请注意,image如果要使用上面的代码,则应该有一个方法,请参见sparseM包。)

如果这样做,行/列的某些巧妙排序可能会变得很方便,您可以使用arules软件包进行计算(请参阅第17和18页左右)。我通常会推荐arules实用程序来处理此类数据和问题(不仅要可视化,还要查找模式)。在这里,您还将找到可以使用的级别之间的关联度量,而不是残留阴影。

您可能还希望查看表格,然后只调查几个不利影响。


1
显然,今天这被称为“被子图” plosone.org/article/info:doi/10.1371/journal.pone.0085047
Momo

我习惯于将像这样的热图与行和列进行聚类,例如使用分层聚类。尽管33556 x 9516似乎可以将这种方式形象化。
R Greg Stacey
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.