我有两个变量:药品名称(DN)和相应的不良事件(AE),它们之间存在多对多关系。有33,556种药物名称和9,516种不良事件。样本量约为580万次观察。
我想研究和理解DN和AE之间的关联/关系。我正在考虑一种可视化R中的设置的方法,因为最好看图片。我不确定该怎么做...
我有两个变量:药品名称(DN)和相应的不良事件(AE),它们之间存在多对多关系。有33,556种药物名称和9,516种不良事件。样本量约为580万次观察。
我想研究和理解DN和AE之间的关联/关系。我正在考虑一种可视化R中的设置的方法,因为最好看图片。我不确定该怎么做...
Answers:
你可以做的是使用来自VCD残留阴影的想法在这里与稀疏矩阵可视化,例如49页的组合这本书的章节。想象一下带有残留阴影的后一个图,您就会明白。
稀疏矩阵/偶发性表通常会包含每种药物的出现次数以及每种副作用。然而,有了残留阴影的想法,您可以建立基线对数线性模型(例如,独立模型或您喜欢的任何其他模型),并使用配色方案找出哪种药物/效果组合发生的次数比模型预期的频繁/少。既然你有很多意见,你可以使用一个非常精细的颜色阈值,并得到一张地图,类似于在聚类分析芯片是如何经常可视化如在这里(但可能具有更强的颜色“渐变”)。或者,您可以构建阈值,以使得仅当观测值与预测值的差异超过阈值时,它才会变为彩色,其余的将保持白色。您将如何精确地执行此操作(例如,使用哪种模型或哪些阈值)取决于您的问题。
编辑 因此,这就是我的操作方法(假设我有足够的可用内存...)
然后,您得到的结果是这样的(当然,您的图片会大很多,像素大小会小得多,但是您应该明白这一点。通过巧妙地使用颜色,您可以形象地看到与独立有关的关联/偏离。有兴趣)。
带有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实用程序来处理此类数据和问题(不仅要可视化,还要查找模式)。在这里,您还将找到可以使用的级别之间的关联度量,而不是残留阴影。
您可能还希望查看表格,然后只调查几个不利影响。