R:如何可视化二进制/分类数据随时间的变化

时间:2015-05-04 08:22:12

标签: r plot visualization

ModelView

假设我有上述data.frame。我有3名患者(>dput(data) structure(list(ID = c(1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3), Dx = c(1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1), Month = c(0, 6, 12, 18, 24, 0, 6, 12, 18, 24, 0, 6, 12, 18, 24), score = c(0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0)), .Names = c("ID", "Dx", "Month", "score"), row.names = c(NA, -15L), class = "data.frame") >data ID Dx Month score 1 1 1 0 0 2 1 1 6 0 3 1 1 12 0 4 1 1 18 1 5 1 1 24 1 6 2 1 0 1 7 2 1 6 1 8 2 2 12 1 9 2 2 18 0 10 2 2 24 1 11 3 1 0 0 12 3 1 6 0 13 3 1 12 0 14 3 1 18 0 15 3 1 24 0 = 1,2或3)。 ID是诊断(Dx = 1是正常的,= 2是患病的)。有一个月变量。最后但并非最不重要的是,它是一个测试分数变量。参与者'测试分数是二进制的,它可以从0或1更改或从1还原为0.我无法想出一种可视化此数据的方法。我想看一个信息图:

  1. 参与者的趋势'随着时间的推移测试分数。
  2. 这种趋势与参与者的比较'诊断随着时间的推移
  3. 在我的真实数据集中,我有超过800个参与者,所以我不想构建800个单独的图...我认为测试分数变量是二进制的确让我难过。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

注意:需要对第2部分进行大量以下数据操作。第1部分不太复杂,您可以在下面看到它。

用途

library(data.table)
library(ggplot2)
library(reshape2)

进行比较

首先,将Dx从1更改为2,将0更改为1(假设分数中的0对应于Dx中的1)

data$Dx <- data$Dx - 1

现在,创建一个矩阵,对于0诊断的1诊断返回1,对0诊断的1检验返回-1。

compare <- matrix(c(0,1,-1,0),ncol = 2,dimnames = list(c(0,1),c(0,1)))
> compare
  0  1
0 0 -1
1 1  0

现在,让我们为每个赛事打分。这只是查找矩阵中每个条目的上面的矩阵:

data$calc <- diag(compare[as.character(data$Dx),as.character(data$score)])

*注意:对于使用匹配的大型矩阵,可以加快速度,但对于像您这样的小型集合,它可以快速修复

允许我们使用data.table聚合:

data <- data.table(data)

现在我们需要创建变量:

tograph <- melt(data[, list(ScoreTrend = sum(score)/.N, 
                            Type = sum(calc)/length(calc[calc != 0]), 
                            Measure = sum(abs(calc))), 
                     by = Month],
                id.vars = c("Month"))
  • ScoreTrend:计算每个分数的正分数 月。显示随时间变化的分数趋势
  • 类型:显示-1对1随时间的比例。如果返回-1, 所有事件都是得分= 1,诊断= 0.如果它返回1,则所有事件都是 diag = 1,得分= 0.零意味着两者之间的平衡
  • 测量:不正确事件的原始数量。

我们在一个月内融化这个数据框,以便我们可以创建一个方面图。

如果没有不正确的事件,我们将获得NaN for Type。要将其设置为0:

tograph[value == NaN, value := 0]

最后,我们可以绘制

ggplot(tograph, aes(x = Month, y = value)) + geom_line() + facet_wrap(~variable, ncol = 1)

我们现在可以在一个情节中看到:

  • 按月分数的正面分数
  • 不足与过度诊断的比例
  • 错误诊断的数量。