我正在开发一个有多种疾病的患者数据库,我正在尝试创建一个显示这些疾病之间关联的图形。更具体地说,我想获得如下内容:
我的数据组织为:
<input type="datetime-local" name="pub_date" value="2013-10-09T15:38:15" />
我创建数据,因为我希望它使用以下代码显示:
mal1 mal2 mal3 etc.
0 0 1
1 1 0
0 1 0 etc.
我用以下内容创建情节:
X <- as.matrix(hdat2)
out <- crossprod(X)
diag(out) <- 0
结果我得到了这个情节
我想要隐藏对称的一半,我认为这是误导性的(类似于如何,i相关矩阵我可以隐藏对称的一半)。但是,我不知道该怎么做。
有人可以帮忙吗? 感谢
答案 0 :(得分:0)
首先,一些可重复的数据:
mat <-
data.frame(
malA = sample(0:1, 100, TRUE, c(0.2,0.8))
, malB = sample(0:1, 100, TRUE, c(0.3,0.7))
, malC = sample(0:1, 100, TRUE, c(0.4,0.6))
, malD = sample(0:1, 100, TRUE, c(0.5,0.5))
)
out <- crossprod(as.matrix(mat))
diag(out) <- 0
以下是使用dplyr
限制您感兴趣的一半的示例:
toPlotHalf <-
melt(out) %>%
mutate_each(funs(factor(.))
, starts_with("Var")) %>%
filter(as.numeric(Var1) < as.numeric(Var2))
ggplot(toPlotHalf
, aes(Var1, Var2)) +
geom_point(aes(size = value), colour = "black") +
theme_bw() + xlab("") + ylab("") +
scale_size_continuous(range=c(2,10))
然而,请注意,通过这种方式,你的情节将由非常常见的特定疾病所主导。或者,您可以显示患有其他疾病的每个疾病患者的百分比(请注意,现在互惠点不是(必然)相同的大小:
toPlot <-
prop.table(out, 1) %>%
melt() %>%
filter(value > 0)
ggplot(toPlot
, aes(Var1, Var2)) +
geom_point(aes(size = value), colour = "black") +
theme_bw() + xlab("") + ylab("") +
scale_size_continuous(range=c(2,10))