[英]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.