高于临界值的曲线下累积面积

时间:2018-06-29 15:46:58

标签: r machine-learning auc

我是一位非计算/数学专业的学生,​​真的是R的新手,需要一些帮助。我提供了一个虚拟数据集和示例来说明我的问题。

注:AUC =曲线下面积; ICP =颅内压; cumAUC =累积AUC;

总而言之,任何大于20的ICP值在临床上都不理想。一种计算这种生理侮辱的方法是通过一种称为ICP-Time-Time负担的方法,可以用y-cutoff大于20的ICP-Time曲线的AUC表示。

因此,我想计算出ICP的临界值以上的ICP时间曲线的累积AUC =20。但是,我的代码无法提供所需的输出,因为理想情况下,cumAUC应该在ICP处保持恒定值<20并且不会增加。这是我创建的虚拟数据集和代码:

require(MASS) #Using the area function in MASS 
require(dplyr)
require(ggplot2)

df <- data.frame(time=seq(1,20,by=1),
                 ICP=c(7,9,15,14,16,20,25,23,26,27,18,15,10,9,7,13,22,24,26,20))

ggplot(data=df, mapping=aes(x=time,y=ICP)) + geom_line() + geom_hline(yintercept = 20)

func_test <- approxfun(df$time, df$ICP, method="linear", rule=2)

area_single <- function(x) {area(func_test,0,x)}
area_multiple <- Vectorize(area_single)

area_cutoff <- function(x, level=20){
  tmp <- area_multiple(x)-lag(area_multiple(x))-level*(x-lag(x))
  tmp_test <- tmp>0
  tmp_test <- ifelse(is.na(tmp), FALSE, tmp_test)
  out <- ifelse(tmp_test, tmp, 0)
  return(out)
}

df_auc <- df %>%
  mutate(cumAUC = cumsum(area_cutoff(time)))  

请大家指出我的代码中可能存在的任何错误,否则任何其他建议都将非常有用! :) 非常感谢你的帮助;非常感激!

0 个答案:

没有答案