曲线下面积

时间:2017-07-14 14:00:14

标签: r auc

我的数据是长格式的,有20个不同的变量(但它们都有相同的时间点):

   Time variable value
1    0       P1  0.07
2    1       P1  0.02
3    2       P1  0.12
4    3       P1  0.17
5    4       P1  0.10
6    5       P1  0.17


66     0      P12  0.02
67     1      P12  0.11
68     2      P12  0.20
69     3      P12  0.19
70     4      P12  0.07
71     5      P12  0.20
72     6      P12  0.19
73     7      P12  0.19
74     8      P12  0.12
75    10      P12  0.13
76    12      P12  0.08
77    14      P12    NA
78    24      P12  0.07
79     0      P13  0.14
80     1      P13  0.17
81     2      P13  0.24
82     3      P13  0.24
83     4      P13  0.26
84     5      P13  0.25
85     6      P13  0.21
86     7      P13  0.21
87     8      P13    NA
88    10      P13  0.19
89    12      P13  0.14
90    14      P13    NA
91    24      P13  0.12

我想计算time=0time=24之间每个变量的曲线下面积。理想情况下,我还想计算曲线下y>0.1

的面积

我已尝试过pracma包,但它只是出现了NA。

trapz(x=P2ROKIlong$Time, y=P2ROKIlong$value)

我是否必须将数据拆分为许多不同的向量,然后手动执行或者是否有办法将其从长格式数据中删除?

1 个答案:

答案 0 :(得分:1)

以下代码对我来说运行正常:

require(pracma)
df = data.frame(Time =c(0,1,2,3,4,5),value=c(0.07,0.02,0.12,0.17,0.10,0.17))
AUC = trapz(df$Time,df$value)

您的数据框的其余部分是否有任何异常(NA'?)?

  

编辑:基于评论的新代码

可能不是最有效的,但数据的大小似乎有限。这将返回带有每个变量AUC的向量AUC_result。这会解决您的问题吗?

require(pracma)
df = data.frame(Time =c(0,1,2,3,4,5),value=c(0.07,0.02,0.12,0.17,NA,0.17),variable = c("P1","P1","P1","P2","P2","P2"))
df=df[!is.na(df$value),]
unique_groups = as.character(unique(df$variable))
AUC_result = c()

for(i in 1:length(unique_groups))
{
  df_subset = df[df$variable %in% unique_groups[i],]
  AUC = trapz(df_subset$Time,df_subset$value)
  AUC_result[i] = AUC
  names(AUC_result)[i] = unique_groups[i]
}