我有一些研究参与者的数据,生物标志物的变化百分比及其最终结果。我想使用ROC曲线找到生物标记物的最佳截断值,用于预测结果,使用Youden方法,但从不同的包中获得不同的答案,并需要知道我哪里出错了。 要设置数据集:
ID <- c(1:17)
PercentChange <- c(-85.5927051671732, -85.4849965108165,
-63.302752293578, -33.5509138381201, -75, -87.0988867059594,
-93.2523616734143, 65.2037617554859, -19.226393629124,
-44.7095435684647, -65.7342657342657, -43.7831467295227,
-37.0022539444027, 518.75, -77.1014492753623, 20.6572769953052,
-72.0742534301856)
Outcome <- c(1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1)
df <- data.frame(ID, PercentChange, Outcome)
对于结果,1是有利的,0是不利的。
现在使用包pROC我做了:
library(pROC)
roc <- roc(df$Outcome, df$PercentChange, auc= TRUE, plot = TRUE)
coords(roc, "b", ret="t", best.method="youden")
plot(roc, print.thres="best", print.thres.best.method="youden",main = "Percent change")
这给了我一个合理的曲线和截止值(通过Youden指数)-44.246,我验证了它具有正确的灵敏度和特异性。切点似乎有点奇怪,因为它位于两个实际值之间,而不是实际值,但它可以工作。
然后使用OptimalCutpoints我试过
library(OptimalCutpoints)
optimal.cutpoint.Youden <- optimal.cutpoints(X = "PercentChange", status = "Outcome", tag.healthy = 1, methods = "Youden", data = df)
summary(optimal.cutpoint.Youden)
plot(optimal.cutpoint.Youden)
这给了我一条不同的曲线,以及-43.783的不同切点,这是pROC占据中点的两个点之一。灵敏度和特异性也与我使用该切点计算的结果相反。
最后我尝试了Epi包中的roc功能
library(Epi)
ROC(form=Outcome~PercentChange, data=df, plot="ROC", PV=TRUE, MX=TRUE)
这给了我第三个完全不同的曲线,并在切点处说“24”,这没有任何意义。任何人都可以帮我解决这个问题吗?我不是在询问stats stackexchange因为他们想要了解Youden是否合适而不是这些函数的技术应用。