我是一位非计算/数学专业的学生,真的是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)))
请大家指出我的代码中可能存在的任何错误,否则任何其他建议都将非常有用! :) 非常感谢你的帮助;非常感激!