1

我想根据梯度提升模型分析我的数据。

另一方面,由于我的数据是一种队列,我很难理解这个模型的结果。

这是我的代码。基于示例数据进行分析。

install.packages("randomForestSRC")
install.packages("gbm")
install.packages("survival")

library(randomForestSRC)
library(gbm)
library(survival)

data(pbc, package="randomForestSRC")
data <- na.omit(pbc)

set.seed(9512)
train <- sample(1:nrow(data), round(nrow(data)*0.7))
data.train <- data[train, ]
data.test <- data[-train, ]

set.seed(9741)
gbm <- gbm(Surv(days, status)~.,
           data.train,
           interaction.depth=2,
           shrinkage=0.01,
           n.trees=500,
           distribution="coxph")

summary(gbm)


set.seed(9741)
gbm.pred <- predict.gbm(gbm, 
                        n.trees=500,
                        newdata=data.test, 
                        type="response") 

当我阅读包文档时,“gbm.pred”是 cox 部分可能性的结果。

set.seed(9741)
lambda0 = basehaz.gbm(t=data.test$days, 
                      delta=data.test$status,  
                      t.eval=sort(data.test$days), 
                      cumulative = FALSE, 
                      f.x=gbm.pred, 
                      smooth=T)

hazard=lambda0*exp(gbm.pred)

在此代码中,lambda0 是基线风险函数。

所以,根据公式:h(t/x)=lambda0(t)*exp(f(x))

“危险”是危险函数。

但是,我想计算的是“生存函数”。

因为,我想将原始数据(data$status)的结果与预测结果(生存函数)进行比较。

请让我知道如何计算生存函数。

谢谢

4

1 回答 1

1

实际上,收益是累积基线风险函数(积分部分:)\int^t\lambda(z)dz,生存函数可以计算如下:

s(t|X)=exp{-e^f(X)\int^t\lambda(z)dz}

f(X) 是对 的预测gbm,等于对数风险比例。

我认为这个关于基于 gbm 的生存分析的教程会对你有所帮助!

https://github.com/liupei101/Tutorial-Machine-Learning-Based-Survival-Analysis/blob/master/Tutorial_Survival_GBM.ipynb

于 2018-12-04T10:17:35.813 回答