【问题标题】:Similar to cox regression hazard model, can we get survival curves and hazard ratios using survivalsvm?类似于cox回归风险模型,我们可以使用survivalsvm得到生存曲线和风险比吗?
【发布时间】:2021-01-27 00:41:47
【问题描述】:

我是一名初学者,正在尝试使用机器学习对肺癌数据集进行生存分析。我知道如何使用 Cox 比例风险模型进行生存分析。 Cox 比例风险模型为我们提供了风险比,它只是回归系数的指数。我想知道,我们是否可以使用机器学习来做同样的事情。作为初学者,我正在尝试 R 语言中的survivalsvm。请参阅link。我正在使用内置的癌症数据进行生存分析。以下是 R 代码,在 link 处给出。

library(survival)
library(survivalsvm)

set.seed(123)
n <- nrow(veteran)
train.index <- sample(1:n, 0.7 * n, replace = FALSE)
test.index <- setdiff(1:n, train.index)
survsvm.reg <- survivalsvm(Surv(diagtime, status) ~ ., 
                            subset = train.index, data = veteran,
                            type = "regression", gamma.mu = 1,
                            opt.meth = "quadprog", kernel = "add_kernel")
print(survsvm.reg)
pred.survsvm.reg <- predict(object = survsvm.reg,
                             newdata = veteran, subset = test.index)
print(pred.survsvm.reg)

谁能帮我得到这个数据集的风险比或生存曲线?另外,如何解释这个函数的输出

【问题讨论】:

    标签: r machine-learning svm survival-analysis hazard


    【解决方案1】:

    这个问题现在有点老了,但我还是要回答,因为这是一个难题,而且我第一次使用 {survivalsvm} 时遇到了困难。

    因此,根据 type 参数,您会得到不同的输出。在您的情况下,type = "regression" 表示您正在绘制 Shivaswamy 的(希望我拼写正确)SVCR,它预测事件发生的时间,所以这些是生存时间预测。

    为了将其转换为生存曲线,您必须对生存分布的形状做出一些假设。例如,假设您认为生存时间与N(mu, sigma) 呈正态分布。然后你可以使用你的预测生存时间作为mu,并预测或假设sigma

    以下是使用您的代码和我的 {distr6} 包的示例,它可以快速计算许多分布以及打印和绘制函数:

    library(survival)
    library(survivalsvm)
    set.seed(123)
    n <- nrow(veteran)
    train.index <- sample(1:n, 0.7 * n, replace = FALSE)
    test.index <- setdiff(1:n, train.index)
    survsvm.reg <- survivalsvm(Surv(diagtime, status) ~ ., 
                               subset = train.index, data = veteran,
                               type = "regression", gamma.mu = 1,
                               opt.meth = "quadprog", kernel = "add_kernel")
    print(survsvm.reg)
    pred.survsvm.reg <- predict(object = survsvm.reg,
                                newdata = veteran, subset = test.index)
    
    
    # load distr6
    library(distr6)
    
    # create a vector of normal distributions each with
    # mean as the predicted time and with variance 1
    # `decorators = "ExoticStatistics"` adds survival function
    v = VectorDistribution$new(distribution = "Normal",
                           params = data.frame(mean = as.numeric(pred.survsvm.reg$predicted)),
                           shared_params = list(var = 1),
                           decorators = "ExoticStatistics")
    # survival function evaluated at times = 1:10
    v$survival(1:10)
    # plot survival function for first individual
    plot(v[1], fun = "survival")
    # plot hazard function for first individual
    plot(v[1], fun = "hazard")
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-06-03
      • 1970-01-01
      • 1970-01-01
      • 2016-03-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多