首页 > 解决方案 > 截止值以上的累积曲线下面积

问题描述

我是一名非计算机/数学学生,对 R 非常陌生,需要一些帮助。我提供了一个虚拟数据集和示例来说明我的问题。

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

综上所述,任何大于 20 的 ICP 值都不是临床理想的。计算这种生理损伤的方法是通过称为 ICP-times-Time 负担的度量,它可以由 y-cutoff 20 以上的 ICP-Time 曲线的 AUC 表示。

因此,我想计算 ICP 时间曲线在 ICP = 20 的截止值之上的累积 AUC。但是,我的代码没有给我想要的输出,因为理想情况下,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)))  

你们能否指出我的代码中任何可能的错误,或者任何替代建议都会很棒!:) 非常感谢你的帮助; 非常感激!

标签: rmachine-learningauc

解决方案


推荐阅读