• R语言已解决
  • 做生存分析时,分类变量直接作为factor还是转化为数字有什么讲究吗?

最近在学习临床数据的生存分析,用的是cancer的数据
代码如下:

rm(list=ls())
cat("\014") 
library(survminer)
library(survival)
data1=cancer
str(data1)
#上面的是number形式,再做个分类的factor
data1$ph.ecog.fac<-as.factor(data1$ph.ecog)
str(data1)

datasurv<- Surv(time=data1$time,event=data1$status==2)
data1$datasurv<-with(data1,datasurv)
colnames(data1)

Multicox1<- coxph(datasurv~age+sex+ph.ecog+ph.karno+meal.cal+wt.loss,data=data1)
summary(Multicox1)
testPH1 <- cox.zph(Multicox1) 
print(testPH1)
ggforest(model = Multicox1, data = data1, cpositions = c(0.05, 0.15, 0.35),refLabel = 'reference', noDigits = 3,fontsize = 0.8)

Multicox2<- coxph(datasurv~age+sex+ph.ecog.fac+ph.karno+meal.cal+wt.loss,data=data1)
summary(Multicox2)
testPH2 <- cox.zph(Multicox2) 
print(testPH2)
ggforest(model = Multicox2, data = data1, cpositions = c(0.05, 0.15, 0.35),refLabel = 'reference', noDigits = 3,fontsize = 0.8)

Multicox1中,ph.ecog只有一个HR值;而Multicox2中,ph.ecog可以得到(n-1)个HR值。
这两种形式有对错之分,或者优劣之分嘛?

    6_walnuts

    一个是用作连续变量,一个是连续变量离散化。各有优劣吧,连续变量的话保存了更多的信息。离散化肯定损失了不少信息而且消耗自由度,不过能够以阶跃函数的方式拟合非线性作用。

      songxiao 我明白了,非常感谢你的解答。
      如果是使用离散化的变量,比如这个变量是n个分类,我的结果会把这个变量的某一个类作为一个reference,得到(n-1)个HR。为什么网上有的结果是能够得到n个HR,且有一个overall的HR,他是以什么作为reference呢?
      我尝试发个图:

        6_walnuts

        根据我的理解,OVERALL的Hazard Ratio是绝对值,对于任何一个组别当然都能算出来一个Hazard Ratio。而系数的Hazard Ratio则是相对的,比如将性别设置成哑变量XX,女 X=0X= 0 ,男 X=1X= 1。参照组是女性, 这时算出来男性Hazard Ratio解释为比女性高出多少。如果是Overall则计算的是女性的绝对HR,由于女性X=0X = 0,算出来女性的Overall HR = β\beta。男性Overall HR = β+α \beta + \alpha

        YHR=β+αX{Y_{HR}} = \beta + \alpha X

          nan.xiao 我之前的理解是:比如对肿瘤的某个markerA进行mRNA检测得到的是连续型变量,但为了方便临床使用最后会找个cutoff进行分组,来预测预后或者决定治疗方法的选择。
          所以我一般这样处理:先A的连续数据单因素cox分析,A的连续数据+其他变量进行多因素cox,结果都证明A是一个significance的factor,我接下来可能就要找个cutoff进行离散化,再kaplan meier、cox regression了。如果不建议将连续变量离散化的话,您有什么建议嘛?

            6_walnuts

            「为了方便临床使用」恐怕不是挡箭牌。科技树都点到能在微观上精确测量基因表达量了,结果临床预测时要求手动纸笔查表摁计算器,这大概既不方便也不准确吧。

            所以我的建议是连续型变量保持连续型,在建模和预测的任何阶段都不要做离散化,特别是用仪器精确测量的数值。

            另外感觉以上建模的流程在逻辑上并不自洽:单变量回归下显著的变量可能在多元回归中不显著,同理,单变量回归下不显著的变量可能在多元回归中显著 (suppression effect)。所以这里单变量回归不仅不能说明多大问题,而且一旦出现和多元回归结果不一致的情形,还可能给解释带来麻烦。

              离散化有其优点也有缺点,怎么选择得看你问题的实际背景、数据来源,探索数据间的关系来确定,不能简单说好或者不好。

              离散化的缺点前面说得很清楚,就是会丢掉信息,而优点是提升鲁棒性,特别是如果数据本身就存在一定测量误差时候。

              个人建议:在做数据预处理的时候先不要处理,在最后根据散点图等数据分布的特点以及实际背景再考虑,也可以比较离散化和不离散化结果哪个更优。其实离散化也是个麻烦事,怎么对数据进行分割很麻烦。

                CMCai0104

                简单来说就是自变量与因变量之间的关系是一个连续函数呢还是一个阶梯函数?前者就不要离散化,或者就离散化。

                  CMCai0104 简单来说就是自变量与因变量之间的关系是一个连续函数呢还是一个阶梯函数?前者就不要离散化,或者就离散化。

                  那么对于生存数据我用什么方法能知道自变量和因变量之间到底关系如何呢?