簡體   English   中英

與 cox 回歸風險模型類似,我們可以使用 survivalsvm 獲得生存曲線和風險比嗎?

[英]Similar to cox regression hazard model, can we get survival curves and hazard ratios using survivalsvm?

我是初學者,嘗試使用機器學習對肺癌數據集進行生存分析。 我知道如何使用 Cox 比例風險模型進行生存分析。 Cox 比例風險模型為我們提供了風險比,它只是回歸系數的指數。 我想知道我們是否可以使用機器學習來做同樣的事情。 作為一個初學者,我想survivalsvm從R語言。 請參閱此鏈接 我正在使用內置的癌症數據進行生存分析。 以下是此鏈接中給出的 R 代碼。

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)

誰能幫我得到這個數據集的風險比或生存曲線? 另外,如何解釋這個函數的輸出

這個問題現在有點老了,但我還是要回答,因為這是一個難題,我第一次使用 {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")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM