R语言绘制校正协变量后的ROC曲线

ROC曲线也叫受试者工作曲线,原来用在军事雷达中,后面广泛应用于医学统计中。ROC曲线是根据一系列不同的二分类方式(分界值或决定阈),以真阳性率(灵敏度)为纵坐标,假阳性率(1-特异度)为横坐标绘制的曲线。
ROC曲线主要应用于二分类结局,比如是否死亡,疾病诊断,肿瘤复发等等,可以用于自变量为连续变量的截点判定。
在这里插入图片描述
目前有部分SCI文章中使用了校正协变量的ROC曲线,后台有粉丝问校正协变量的ROC曲线怎么做,今天我们来演示一下,使用的是一个肾移植的数据(公众号回复:肾移植数据,可以获得该数据),我们先导入数据和R包看一下看

library(RISCA)
dataDIVAT3<-read.csv("E:/r/test/shenyizhi.csv",sep=',',header=TRUE) 

在这里插入图片描述
这是一个4267 名法国肾移植受者的数据,ageR:接受肾移植患者年龄,sexeR:患者性别,year.tx:肾移植的时间,ante.diab:是否有糖尿病,pra:患者移植前的免疫反应(1 = 可检测,0 = 不可检测),ageD:捐献肾脏的捐献者的年龄,death.time;生存时间,death:死亡,结局变量
我们取一部分数据来分析,这样数据没有这么大,好分析一点

dataDIVAT3 <- dataDIVAT3[1:400,]

假设我们想知道患者年龄和死亡的ROC关系,我们先来个没有进行校正的ROC,confounders是混杂因素的意思,没有校正的时候这里填入1,precision是ROC曲线的步长,一般都是固定的

roc1 <- roc.binary(status="death", variable="ageR", confounders=~1,
                   data=dataDIVAT3, precision=seq(0.1,0.9, by=0.1) )

绘图

plot(roc1, xlab="1-specificity", ylab="sensibility")

在这里插入图片描述
假设我们想对患者性别和捐献者年龄这两个指标进行校正,校正的思想主要是通过逆概率加权,生一个加权后的标准化年龄指标进行校准,先建立模型

lm1 <- lm(ageR ~ ageD + sexeR, data=dataDIVAT3[dataDIVAT3$death == 0,])

生成校正后的标准化年龄指标

dataDIVAT3$ageR_std <- (dataDIVAT3$ageR - (lm1$coef[1] + lm1$coef[2] *
                                             dataDIVAT3$ageD + lm1$coef[3] * dataDIVAT3$sexeR)) / sd(lm1$residuals)

生成ROC数据

roc2 <- roc.binary(status="death", variable="ageR_std",
                   confounders=~bs(ageD, df=3) + sexeR, data=dataDIVAT3, precision=seq(0.1,0.9, by=0.1))

最后绘图

plot(roc2, col=2, pch=2, lty=2, type="b", xlab="1-specificity", ylab="sensibility")
lines(roc1, col=1, pch=1, type="b")
legend("bottomright", lty=1:2, lwd=1, pch=1:2, col=1:2,
       c(paste("Crude estimation, (AUC=", round(roc1$auc, 2), ")", sep=""),
         paste("Adjusted estimation, (AUC=", round(roc2$auc, 2), ")", sep="") ) )

在这里插入图片描述
可以看出,经过校正后,AUC面积和曲线变化并不大,说明说明校准因素影响很小,支持了原结论。

  • 7
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
当使用R语言绘制支持向量机(SVM)的ROC曲线时,您可以遵循以下步骤: 1. 安装必要的包:首先,请确保您已安装以下R包:`caret`(用于建立模型和预测)、`pROC`(用于绘制ROC曲线)和`e1071`(用于支持向量机)。 ```R install.packages("caret") install.packages("pROC") install.packages("e1071") ``` 2. 加载所需的库: ```R library(caret) library(pROC) library(e1071) ``` 3. 准备数据:加载您的数据集并将其划分为训练集和测试集。 4. 构建SVM模型:使用`svm()`函数构建SVM模型,并使用训练集进行训练。 ```R model <- svm(formula, data = train_data, kernel = "linear", probability = TRUE) ``` 在这里,`formula`是您要构建模型的公式,`data`是训练数据,`kernel`指定SVM的内核类型(此处选择线性核),`probability`设置为TRUE以允许生成概率预测。 5. 预测概率:使用训练好的模型对测试集进行预测,并获取正类别的概率预测。 ```R predictions <- predict(model, newdata = test_data, probability = TRUE) scores <- attr(predictions, "probabilities")[, 2] ``` 6. 计算ROC曲线:使用`roc()`函数计算ROC曲线的真阳性率(TPR)和假阳性率(FPR)。 ```R roc_obj <- roc(test_labels, scores) ``` 在这里,`test_labels`是测试集的真实标签。 7. 绘制ROC曲线:使用`plot()`函数绘制ROC曲线,并使用`lines()`函数添加参考线。 ```R plot(roc_obj, main = "ROC Curve", print.auc = TRUE, auc.polygon = TRUE, grid = TRUE, legacy.axes = TRUE, max.auc.polygon = TRUE) abline(0, 1, lty = 2) ``` 这将绘制ROC曲线,并添加一条对角线作为参考。您可以根据需要进行自定义,例如修改标题、添加网格线等。 以上是用R语言绘制支持向量机的ROC曲线的基本步骤。您可以根据您的数据和需求进行进一步的定制和调整
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天桥下的卖艺者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值