楼主: Gin1994
3207 15

[问答] 请问各位大大:如何绘制生存树的ROC曲线并求AUC [推广有奖]

  • 1关注
  • 0粉丝

等待验证会员

初中生

33%

还不是VIP/贵宾

-

威望
0
论坛币
10 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
71 点
帖子
9
精华
0
在线时间
16 小时
注册时间
2020-7-27
最后登录
2021-9-14

相似文件 换一批

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
请问各位大大,生存树的roc曲线应该怎么画啊。
之前只画过分类树的roc曲线,用的predict函数里的prob类型,但是换生存树就一脸懵逼,查了好久资料都没找到ROC怎么画

拟合生存树的代码如下:

  1. library(survival) #用以拟合生存函数
  2. library("rpart") #构建生存树
  3. library("partykit") #以标准化的方式绘制生存树
  4. library(rattle)
  5. library(rpart.plot)

  6. temp = coxph(Surv(pgtime, pgstat) ~ 1, stagec)
  7. newtime = predict(temp, type = 'expected')


  8. fit <- rpart(Surv(pgtime, pgstat) ~ ., data = stagec)

  9. cp=fit$cptable[which.min(fit$cptable[,"xerror"]),"CP"] #剪枝
  10. pfit <- prune(fit, cp)

  11. fancyRpartPlot(pfit)

  12. tfit <- as.party(pfit) #转换成party类型

  13. predtree<-predict(tfit,newdata=stagec,type="prob") #预测
复制代码


二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:ROC曲线 ROC AUC Expected Survival

本帖被以下文库推荐

沙发
Gin1994 发表于 2020-7-31 17:26:18 |只看作者 |坛友微信交流群
剪枝那一段代码不知道怎么回事显示有错。。
剪枝的代码如下:
uuu.png

使用道具

藤椅
llb_321 在职认证  发表于 2020-8-3 14:23:37 |只看作者 |坛友微信交流群
我没细看阿,只是感觉你要做的是pfit和predtree两个数据的roc,
试试library(pROC),类似代码:
#先生成roc
data_roc<-roc(pfit的变量,predtree的变量,direction="<")
#绘制roc曲线
plot(data_roc,print.auc=TRUE,auc.polygon=TRUE,grid=c(0.1,0.2),grid.col=c("green","green"),max.auc.polygon=TRUE,auc.polygon.col="yellow",print.thres=TRUE,print.thres.col="blue")

使用道具

板凳
Gin1994 发表于 2020-8-4 21:25:27 来自手机 |只看作者 |坛友微信交流群
llb_321 发表于 2020-8-3 14:23
我没细看阿,只是感觉你要做的是pfit和predtree两个数据的roc,
试试library(pROC),类似代码:
#先生成r ...
大佬这个pROC我看过了..他要提供一个预测变量像是风险评分的东西,而且要是连续变量. 生存树预测出来的是分类...这就很尴尬没法用常规的方法算auc。

使用道具

报纸
llb_321 在职认证  发表于 2020-8-5 12:07:01 |只看作者 |坛友微信交流群
Gin1994 发表于 2020-8-4 21:25
大佬这个pROC我看过了..他要提供一个预测变量像是风险评分的东西,而且要是连续变量. 生存树预测出来的是 ...
不好意思,我没考虑清楚。
roc确实需要找到对应的预测值和观察值两类数据。

使用道具

地板
Gin1994 发表于 2020-8-6 14:20:24 来自手机 |只看作者 |坛友微信交流群
llb_321 发表于 2020-8-5 12:07
不好意思,我没考虑清楚。
roc确实需要找到对应的预测值和观察值两类数据。
嗯嗯还是谢谢大佬了!请问大佬像我这种情况能有啥办法画出来roc吗

使用道具

7
llb_321 在职认证  发表于 2020-8-6 18:45:56 |只看作者 |坛友微信交流群
I am working at it. guess there must be some way out. if we could get both the predicted and observed data set.

使用道具

8
llb_321 在职认证  发表于 2020-8-6 18:47:26 |只看作者 |坛友微信交流群
let us start from the outcome of the functions

使用道具

9
llb_321 在职认证  发表于 2020-8-6 22:25:03 |只看作者 |坛友微信交流群
我用survival包中的lung数据集试了你的代码。
coxph模型和用这个模型predict的结果,与后面分类树操作没有关系。
后面的代码,rpart构造了一个分类树fit,但是可能因为rpart包和survival包的predict函数冲突,不能直接用rpart包里的predict函数对surv类型数据分类树预测,而要改成party类型才能预测。这是你代码的意图。我感觉矛盾形成于surv类型数据和rpart函数。
而改成party类型后,分类树预测的结果,也就是你最后一行代码,形成的是对每一个样本预测的生存曲线,也就是说每一个样本的预测值都不是一个确定的单一数值。
所以,你设想的ROC对生存曲线数据没有办法实现。
但是,rpart函数,也可以对特定的变量进行分类,比如说lung数据集中的statu,kyphosis数据集中的Kyphosis,只不过函数采用的分类公式不是生存曲线数据。依据这种分类树,也可以作预测,结果是每一个样本的目标变量的单一数值。针对这种结果,就可以做出ROC,类似一下代码。但是,这种结果我想不是你要的。

  1. library(rpart)
  2. library(pROC)

  3. fit <- rpart(Kyphosis ~ Age + Number + Start, data = kyphosis)
  4. x<-predict(fit, type = "class")
  5. levels(x)<-c(0,1)
  6. y<-kyphosis[,"Kyphosis"]
  7. levels(y)<-c(0,1)
  8. data_roc<-roc(x,y,direction="<")
  9. plot(data_roc,print.auc=TRUE,auc.polygon=TRUE,grid=c(0.1,0.2),grid.col=c("green","green"),max.auc.polygon=TRUE,auc.polygon.col="yellow",print.thres=TRUE,print.thres.col="blue")
复制代码


另外,survival包里的concordance函数可以计算观察值和预测值的符合程度,你试一下是否可用。示例代码:
  1. fit1 <- coxph(Surv(ptime, pstat) ~ age + sex + mspike, mgus2)
  2. concordance(fit1, timewt="n")
复制代码

使用道具

10
llb_321 在职认证  发表于 2020-8-6 22:43:50 |只看作者 |坛友微信交流群
另外,有几个包我们一起学习一下阿。看看有没有你需要的。
intcensROC
risksetROC
survivalROC
timeROC

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-20 08:39