如何在R语言中计算C-index

Python019

如何在R语言中计算C-index,第1张

利用Hmisc包中的rcorr.cens函数 局限: - 只能处理一个预测变量 - 对超过2分类的分类变量处理粗糙

# 加载包及生成数据框,这里生成数据框主要是为了方便大家理解,因为大家通常都是将Excel的数据读进R,存储为数据框格式

library(survival)

library(Hmisc)

age <- rnorm(200, 50, 10)

bp <- rnorm(200,120, 15)

d.time <- rexp(200)

cens <- runif(200,.5,2)

death <- d.time <= cens

os <- pmin(d.time, cens)

sample.data <- data.frame(age = age,bp = bp,os = os,death = death)

#让我们看一下生成的例子数据的前6行

head(sample.data)

##age bp os death

## 1 33.18822 114.6965 1.106501 FALSE

## 2 41.86970 123.2265 1.365944 FALSE

## 3 50.41484 124.9522 0.867119 FALSE

## 4 45.66936 127.3237 1.155765 TRUE

## 5 39.79024 134.8846 1.257501 TRUE

## 6 31.89088 140.9382 1.125504 FALSE

rcorr.cens的代码及结果,第一个值就是C指数,同时也有Dxy的值

rcorr.cens(sample.data$age, Surv(sample.data$os, sample.data$death))

##C IndexDxy S.D. nmissing

## 4.528492e-01 -9.430156e-02 5.565299e-02 2.000000e+02 0.000000e+00

## uncensored Relevant Pairs Concordant Uncertain

## 1.290000e+02 3.172800e+04 1.436800e+04 8.072000e+03

rcorrcens的代码及结果,注意rcorrcens的写法是写成formula(公式)的形式,较为方便;而rcorr.cens的 写法是只能在前面写上一个自变量,并且不支持data = ...的写法,有点繁琐。较为遗憾的是这两种方法得到的C指数的标准误需要通过S.D./2间接得到。

r <- rcorrcens(Surv(os, death) ~ age + bp,data = sample.data)

r

## Somers' Rank Correlation for Censored DataResponse variable:Surv(os, death)

##

## CDxy aDxySDZ P n

## age 0.453 -0.094 0.094 0.056 1.69 0.0902 200

## bp 0.498 -0.003 0.003 0.054 0.06 0.9517 200

指数函数比较大小:比差(商)法;函数单调性法;中间值法。指数函数是重要的基本初等函数之一。

指数函数如何比大小

你可以根据图像判断:当底都大于1时,底较大的那个图像陡一些,此时,在第一象限即x>0时,底大的函数值大;在第三象限即x<0时,底小的函数值大;x=0时,函数值都为1.底大于1时函数是增函数。当底都小于1时,底较小的那个图像陡些,此时,在第二象限即x<0时,底小的函数值大;在第四象限即x>0时,底较大的函数值大;x=0时,函数值都为1。底小于1时函数是减函数。

指数函数幂的比较

比较大小常用方法

(1)做差(商)法:A-B大于0即A大于B,A-B等于0即A=B,A-B小于0即A小于B。

步骤:做差—变形—定号—下结论;A\B大于1即A大于B,A\B等于1即A等于B,A/B小于1即A小于B(A,B大于0)

(2)函数单调性法;

(3)中间值法:要比较A与B的大小,先找一个中间值C,再比较A与C、B与C的大小,由不等式的传递性得到A与B之间的大小。

注意事项

比较两个幂的大小时,除了上述一般方法之外,还应注意:

(1)对于底数相同,指数不同的两个幂的大小比较,可以利用指数函数的单调性来判断。

(2)对于底数不同,指数相同的两个幂的大小比较,可以利用指数函数图像的变化规律来判断。

(3)对于底数不同,且指数也不同的幂的大小比较,则可以利用中间值来比较。

<1>对于三个(或三个以上)的数的大小比较,则应该先根据值的大小(特别是与0、1的大小)进行分组,再比较各组数的大小即可。

<2>在比较两个幂的大小时,如果能充分利用“1”来搭“桥”(即比较它们与“1”的大小),就可以快速的得到答案。由指数函数的图像和性质可知“同大异小”。即当底数a和1与指数x与0之间的不等号同向时,a的x次幂大于1,异向时a的x次幂小于1。

r语言是统计用的,c语言是一种计算机高级语言,可以写各种程序。其实两者不是一个层面的东西,r语言更像是一种应用程序提供的功能,如果非要分个难易,在你用来搞统计的情况下,r语言应该要容易一些。