在R中的增量曲线下面积(iAUC)

4

可以使用R中的pracma包中的trapz函数来计算曲线下面积。在许多情况下,iAUC更准确,尤其是在生物学中。然而,我不知道有没有可用于计算它的R函数。trap函数如下:

例子:

a <- c(1, 4, 5, 6)
b <- c(2, 4, 6, 8)
plot(a, b)
trapz(a, b)

答案:21

有人知道如何使用R计算iAUC吗?可以在这里找到指南。

提前致谢。

更新 回应下面Cheng-Yow的答案: 另一个例子

# Recall that trapz-function is available in the pracma package
# Here is the function kindly provided by Cheng-Yow Timothy Lin
library(pracma) # should be loaded already
traps <- function(a, b) {
     for (i in 1:length(b)-1){
          iAUC[i] <-((b[i]+b[i+1])/2)*(a[i+1]-a[i])
     }
     return(sum(iAUC))
}

# Data example
a <- c(-15,  -5,   1,   2,   3,   5,   8,  10,  15,  20,  30,  45,  60,  90, 120)
b <- c(50.20604,  49.59338,  47.39944,  56.38831,  69.43493,  73.92512,  61.92072,  67.92632, 115.45669,
195.03242, 322.15894, 291.30094, 289.20284, 238.70562, 156.23798)

traps(a, b)

trapz(a, b)

它们产生相同的结果,这是曲线下面积的增量吗?这不是他们解释trapz函数的方式...

感谢任何启示!

1个回答

4
    a <- c(1,2,3,4,5)
b <- c(1,2,-1,-2,2)
plot(a,b)
lines(a, b)
abline(b[1],0)
iAUC <- vector()

for (i in 1:(length(a)-1)){

  if((b[i+1]-b[1] >= 0) && (b[i]-b[1] >= 0))
  {iAUC[i] <-((b[i]-b[1]+b[i+1]-b[1])/2)*(a[i+1]-a[i])} 

  else if((b[i+1]-b[1] < 0) && (b[i]-b[1] >= 0))
  {iAUC[i] <-(b[i]-b[1])*((b[i]-b[1])/(b[i]-b[i+1])*(a[i+1]-a[i])/2)} 

  else if((b[i+1]-b[1] >= 0) && (b[i]-b[1] < 0))
  {iAUC[i] <-(b[i+1]-b[1])*((b[i+1]-b[1])/(b[i+1]-b[i])*(a[i+1]-a[i])/2)} 

  else if((b[i]-b[1] < 0) && (b[i+1]-b[1] < 0))
  {iAUC[i] <- 0}
}
sum(iAUC)
iAUC    

非常感谢Cheng-Yow提供的优秀函数。请查看我在上面问题中的更新,作为对你的函数的回应。 - Adam Robinsson
非常感谢@Cheng-Yow,但是你的陷阱函数是否提供增量AUC(对于重复可能愚蠢的问题我很抱歉)? - Adam Robinsson
因为它提供与pracma相同的答案,而pracma并未说明它计算增量AUC... =) - Adam Robinsson
将代码应用于我提供的向量(原帖中的a和b)会返回一个不可信的值。如果我误解了代码,我很抱歉。 - Adam Robinsson
我进行了快速检查,现在看起来是正确的!非常感谢! - Adam Robinsson
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接