bootstrap自采样目前广泛应用与统计学中,其原理很简单就是通过自身原始数据抽取一定量的样本(也就是取子集),通过对抽取的样本进行统计学分析,然后继续重新抽取样本进行分析,不断的重复这一过程N(大于500次以上)次,然后得到N个统计结果,然后进行区间分析,得到最终结果。

上一章我们简单介绍了BOOT重抽样获取回归方程系数95%可信区间,可能大家对BOOT重抽样的用处感觉还不是很明显。BOOT重抽样在我们统计中处理数据还是很有用的,本期我们来介绍一下怎么使用BOOT重抽样获取cox回归方程C-index(C指数)可信区间,这也是一个粉丝向我问的问题,我觉得蛮有典型性和实用性的,因此就拿出来讲讲。首先我们看看什么是C-index(C指数),C-index,C指数即一致性指数(concordance index),用来评价模型的预测能力。c指数是指所有病人对子中预测结果与实际结果一致的对子所占的比例。我们在既往的文章《手把手教你使用R语言建立COX回归并画出列线图(Nomogram)》中已经介绍了怎么计算C指数,我们继续以原来文章的数据和方法为例进行演示。
我们先导入数据和R包,这里使用的是survival包的肺癌数据,为什么我们要导入rms包呢,因为我们等会需要Hmisc包的rcorrcens函数来计算C指数

library(survival)
library(foreign)
library(rms)
bc<-cancer
bc <- na.omit(bc)


我们来看看数据,inst: 机构代码,time: 以天为单位的生存时间,status: 状态:审查状态 1=审查,2=死亡,age: 年龄,sex: 男=1 女=2,ph.ecog:由医师评定的 ECOG 表现评分。ph.karno:由医师评定的 Karnofsky 表现评分(差=0-好=100),pat.karno:由患者评定的 Karnofsky 性能评分,meal.cal:用餐时消耗的卡路里,wt.loss:过去六个月的体重减轻。
我们随便挑几个变量组成COX回归方程

f <- cph(Surv(time, status) ~ age + sex + ph.ecog + pat.karno +wt.loss, x=T, y=T, surv=T, data=bc)

计算C指数

rcorrcens(Surv(time, status) ~ predict(f), data = bc)


1-0.344=0.656,即为C-index
虽然我们算出C指数了,但是rcorrcens函数并没有提供它的可信区间,如果您的论文需要提供这个数据,我们可以通过BOOT重抽样获取。
BOOT重抽样其实就是对函数的反复抽样,因此关键在于设计好抽样函数,这是后台粉丝发给我的代码,说计算不出来结果

c_index <- function(formula, data, indices) {tran.data <- data[indices,]
vali.data <- data[-indices,]
fit <- coxph(formula, data=tran.data)
result<-survConcordance(Surv(vali.data$time,vali.data$death)~predict(fit,vali.data))
index<-as.numeric(result$concordance)
return(index)
}

我觉得问题主要在分成验证集和建模集这一句,

tran.data <- data[indices,]
vali.data <- data[-indices,]

BOOT重抽样本来就是取子集,没有必要再分成两个数据集,如果你一定要这样取也是可以的,换成另外的方法,我后期会说到。
现在我对粉丝的函数稍稍修改,改成如下:

c_index <- function(data,indices){dat <- data[indices,]vames<-c("age", "sex", "ph.ecog","pat.karno","wt.loss")FML <- as.formula(paste('Surv(time, status)~',paste(vames, collapse = "+")))fit<- coxph(FML,data =dat )pr1<-predict(fit,newdata=dat)Cindex=rcorrcens(Surv(time, status) ~ pr1, data =dat)[1]Cindex=1-CindexCindex
}

大家注意一下,这个函数有两个重要的地方,dat <- data[indices,]这句话是一定要有的,因为boot函数就是靠它来重抽样的,第二就是在function中cox回归不能直接写出来,大家看看我是怎么表达出来的。写好函数我们来调试一下,给它取个子集,也就是重抽样1次

c_index(bc,1:100)


调试成功后就可以重抽样了,

results <- boot(data=bc, statistic=c_index, R=500)


导出结果,后面的是标准误

print(results)


如果你想查看每个抽样的结果

results$t


可以查看抽样分布,可以看出,我们的抽样分布还是不错的

plot(results)


计算可信区间

boot.ci(results,conf = 0.95)


OK,介绍完毕,觉得有用的话多多分享哟。

R语言使用BOOT重抽样获取cox回归方程C-index(C指数)可信区间(2)相关推荐

  1. R语言临床预测模型:分层构建COX生存回归模型STRATIFIED COX MODEL、KM生存曲线、PH假设检验...

    全文链接:http://tecdat.cn/?p=32046 stratified cox model是针对协变量不满足PHA提出的,这里的思想是对协变量分层(点击文末"阅读原文" ...

  2. R语言构建回归模型并获取对于新数据预测的预测区间实战:给出预测区间而不是一个具体的预测值、置信区间与预测区间的异同

    R语言构建回归模型并获取对于新数据预测的预测区间实战:95%或者99%预测区间而不是一个具体的预测值.置信区间与预测区间的异同 目录

  3. R语言survival包coxph函数构建cox回归模型、ggrisk包ggrisk函数可视化Cox回归的风险评分图、使用风险得分的中位数计算最佳截断值cutoff(基于LIRI基因数据集)

    R语言survival包coxph函数构建cox回归模型.ggrisk包ggrisk函数可视化Cox回归的风险评分图.使用风险得分的中位数计算最佳截断值cutoff(基于LIRI基因数据集) 目录

  4. R语言时间序列(time series)分析实战:霍尔特指数Holt‘s平滑法预测

    R语言时间序列(time series)分析实战:霍尔特指数Holt's平滑法预测 目录

  5. 使用R语言从网易财经批量获取股票数据并进行整合的方法

    最近因为投资分析需要接触R语言,需要获取A股上市公司数据.从同花顺下载效率太低,就到处找途径.分享下方法,共其他小白参考,请大神指正. R语言自带的quantmod数据不错,不过国内A股数据不全,而且 ...

  6. R语言基础(3)——获取金融数据及处理分析

    文章目录 quantmod包 getSymbols()函数 getSymbols()函数参数的特例 获取股票数据 1. 股票日交易数据 2. 各种指数的日数据 3. 股息数据 4. 除权除息数据 5. ...

  7. R语言如何在生存分析与Cox回归中计算IDI,NRI指标

    在诊断试验中,我们比较两个模型的优劣时,除了可以比较两个模型roc外,还可以用定量的指标来比较一个模型比另外一个模型诊断准确率改进的程度.我们围绕生存分析技术进行一些咨询,帮助解决独特的业务问题.   ...

  8. R语言GARCH建模常用软件包比较、拟合标准普尔SP 500指数波动率时间序列和预测可视化...

    原文链接:http://tecdat.cn/?p=24441 我们研究波动聚集,以及使用单变量 GARCH(1,1) 模型对其进行建模. 波动聚集 波动聚集--存在相对平稳时期和高波动时期的现象--是 ...

  9. R语言hdnom包进行高维惩罚 Cox 回归模型绘制列线图-校准曲线-时间依赖ROC-外部验证

    Hdnom包可以用于用于给高维数据构建Cox 模型.绘制列线图-校准曲线-时间依赖ROC-外部验证,而且Hdnom包简化了建模过程,带有自动选择变量功能,将用户从繁琐且容易出错的调参过程中解放出来. ...

最新文章

  1. Ascend学习资源
  2. iOS 动画之CoreAnimation(CALayer)
  3. 智源社区AI周刊·第二期:过去一周AI领域的新鲜事
  4. MyBatisPlus中通用CRUD的updateById方法
  5. php分页功能乱码了怎么办,51、PHP文件内容分页操作,避免乱码
  6. 服务器和客户端免密登录
  7. OpenGL使用链表进行顺序独立的透明度
  8. 基于华为云的Django网站部署
  9. sharepoint timer job 读取config文件内容
  10. 注解 @CrossOrigin
  11. linux-tar压缩与解压缩
  12. 【CSS】学习笔记2 字体设置
  13. Android技巧:003使用Intent连接多个活动
  14. 2月11日 TensorBoard+DNN+CNN
  15. 金庸群侠传修改器链接服务器,《金庸群侠传》6合1版修改器
  16. 如何获取网络标准时间
  17. ZZULIOJ:1000: 从今天开始入坑C语言
  18. 古建筑测绘任重道远,三维实景建模是唯一突破口?
  19. cc2530单片机的内核是什么_一位15年经验的老司机教你学习单片机
  20. 重磅开源:带屏幕LCD脱机下载器离线下载器!

热门文章

  1. 学用ORACLE AWR和ASH特性(4)-生成指定SQL的统计报表
  2. Vissim11二次开发之C#---实现仿真时间内实施不同信号控制方案
  3. 【Proteus仿真】【51单片机】智能雨刷器设计
  4. python匿名函数可以赋值给变量_python3的匿名函数 | 吴老二
  5. 休闲零食加盟店项目该如何选择品牌?
  6. 阿里云区块链平台相关研究
  7. AD18使用的简单介绍,添加库,添加PCB封装库,快速添加引脚,绘制器件
  8. appium 1.9.0下载地址
  9. lua sha256算法函数封装
  10. 51单片机c语言按键扫描程序,单片机按键扫描数码管显示C语言程序