回读拟合生存模型的输出
Read back the output from fitted survival model
我正在使用生存数据来拟合灵活的生存模型(如下例)。我可以将拟合模型的输出捕获为 *.txt 文件并将其保存在我的目录中。我的问题是如何将输出读回 r 中的对象并使用它来绘制拟合模型并进行预测(不需要数据再次重新 运行 模型)。
我想要这个的原因是因为我在服务器上工作并且只能导出输出而不是数据并且想在我个人计算机上的 shinyapp 中使用拟合模型。
library(data.table)
library(flexsurv)
#load some data
data(pbc, package="randomForestSRC")
data <- as.data.table(na.omit(pbc))
data[, years := days/365.25]
fit <- flexsurvspline(Surv(years, status) ~ albumin, data=data, k=1, scale='hazard')
fit
capture.output(fit, file='fit.txt')
ndata <- data.frame(albumin = 3)
#plot
plot(fit, est=FALSE, ci=FALSE, col.obs = 'white')
lines(fit, newdata = ndata, ci=FALSE, col = 'green')
#predict
prob=summary(fit,type='survival',newdata=ndata, t=12)
prob
#how can I read the model output saved in .txt file and use
#read .txt model output
fit2 <- read #???
fit2
plot(fit2, est=FALSE, ci=FALSE, col.obs = 'white')
lines(fit2, newdata = ndata, ci=FALSE, col = 'green')
prob=summary(fit2,type='survival',newdata=ndata, t=12)
prob
@MrFlick推荐的方法示例:
library(data.table)
#install.packages("flexsurv")
library(flexsurv)
#> Loading required package: survival
#load some data
data(pbc, package="randomForestSRC")
data <- as.data.table(na.omit(pbc))
data[, years := days/365.25]
set.seed(123)
fit <- flexsurvspline(Surv(years, status) ~ albumin, data=data, k=1, scale='hazard')
saveRDS(fit, "fit_object.rds")
ndata <- data.frame(albumin = 3)
#plot
plot(fit, est=FALSE, ci=FALSE, col.obs = 'white')
lines(fit, newdata = ndata, ci=FALSE, col = 'green')
#predict
set.seed(234)
prob=summary(fit,type='survival',newdata=ndata, t=12)
prob
#> albumin=3
#> time est lcl ucl
#> 1 12 0.06864802 0.02431122 0.1567719
fit2 <- readRDS(file = "fit_object.rds")
fit2
#> Call:
#> flexsurvspline(formula = Surv(years, status) ~ albumin, data = data,
#> k = 1, scale = "hazard")
#>
#> Estimates:
#> data mean est L95% U95% se exp(est) L95%
#> gamma0 NA 2.7412 1.2590 4.2235 0.7563 NA NA
#> gamma1 NA 0.9900 0.5100 1.4701 0.2449 NA NA
#> gamma2 NA -0.0342 -0.0869 0.0186 0.0269 NA NA
#> albumin 3.5168 -1.6959 -2.1481 -1.2436 0.2307 0.1834 0.1167
#> U95%
#> gamma0 NA
#> gamma1 NA
#> gamma2 NA
#> albumin 0.2883
#>
#> N = 276, Events: 111, Censored: 165
#> Total time at risk: 1495.551
#> Log-likelihood = -374.4158, df = 4
#> AIC = 756.8316
identical(fit, fit2, ignore.environment = TRUE)
#> [1] FALSE
plot(fit2, est=FALSE, ci=FALSE, col.obs = 'white')
lines(fit2, newdata = ndata, ci=FALSE, col = 'green')
set.seed(234)
prob=summary(fit2,type='survival',newdata=ndata, t=12)
prob
#> albumin=3
#> time est lcl ucl
#> 1 12 0.06864802 0.02431122 0.1567719
由 reprex package (v2.0.0)
于 2021-08-25 创建
更新:如果您使用相同的种子(通过 set.seed()
),“fit”和“fit2”会得到相同的 est/lcl/ucl。此外,根据 MrFlick 的评论,即使对象不相同,我相信使用相同的种子获得相同的输出表明它们在功能上是相同的(即 'good enough')。您可以使用您的实际数据对此进行进一步测试,并比较服务器与本地的结果。
我正在使用生存数据来拟合灵活的生存模型(如下例)。我可以将拟合模型的输出捕获为 *.txt 文件并将其保存在我的目录中。我的问题是如何将输出读回 r 中的对象并使用它来绘制拟合模型并进行预测(不需要数据再次重新 运行 模型)。
我想要这个的原因是因为我在服务器上工作并且只能导出输出而不是数据并且想在我个人计算机上的 shinyapp 中使用拟合模型。
library(data.table)
library(flexsurv)
#load some data
data(pbc, package="randomForestSRC")
data <- as.data.table(na.omit(pbc))
data[, years := days/365.25]
fit <- flexsurvspline(Surv(years, status) ~ albumin, data=data, k=1, scale='hazard')
fit
capture.output(fit, file='fit.txt')
ndata <- data.frame(albumin = 3)
#plot
plot(fit, est=FALSE, ci=FALSE, col.obs = 'white')
lines(fit, newdata = ndata, ci=FALSE, col = 'green')
#predict
prob=summary(fit,type='survival',newdata=ndata, t=12)
prob
#how can I read the model output saved in .txt file and use
#read .txt model output
fit2 <- read #???
fit2
plot(fit2, est=FALSE, ci=FALSE, col.obs = 'white')
lines(fit2, newdata = ndata, ci=FALSE, col = 'green')
prob=summary(fit2,type='survival',newdata=ndata, t=12)
prob
@MrFlick推荐的方法示例:
library(data.table)
#install.packages("flexsurv")
library(flexsurv)
#> Loading required package: survival
#load some data
data(pbc, package="randomForestSRC")
data <- as.data.table(na.omit(pbc))
data[, years := days/365.25]
set.seed(123)
fit <- flexsurvspline(Surv(years, status) ~ albumin, data=data, k=1, scale='hazard')
saveRDS(fit, "fit_object.rds")
ndata <- data.frame(albumin = 3)
#plot
plot(fit, est=FALSE, ci=FALSE, col.obs = 'white')
lines(fit, newdata = ndata, ci=FALSE, col = 'green')
#predict
set.seed(234)
prob=summary(fit,type='survival',newdata=ndata, t=12)
prob
#> albumin=3
#> time est lcl ucl
#> 1 12 0.06864802 0.02431122 0.1567719
fit2 <- readRDS(file = "fit_object.rds")
fit2
#> Call:
#> flexsurvspline(formula = Surv(years, status) ~ albumin, data = data,
#> k = 1, scale = "hazard")
#>
#> Estimates:
#> data mean est L95% U95% se exp(est) L95%
#> gamma0 NA 2.7412 1.2590 4.2235 0.7563 NA NA
#> gamma1 NA 0.9900 0.5100 1.4701 0.2449 NA NA
#> gamma2 NA -0.0342 -0.0869 0.0186 0.0269 NA NA
#> albumin 3.5168 -1.6959 -2.1481 -1.2436 0.2307 0.1834 0.1167
#> U95%
#> gamma0 NA
#> gamma1 NA
#> gamma2 NA
#> albumin 0.2883
#>
#> N = 276, Events: 111, Censored: 165
#> Total time at risk: 1495.551
#> Log-likelihood = -374.4158, df = 4
#> AIC = 756.8316
identical(fit, fit2, ignore.environment = TRUE)
#> [1] FALSE
plot(fit2, est=FALSE, ci=FALSE, col.obs = 'white')
lines(fit2, newdata = ndata, ci=FALSE, col = 'green')
set.seed(234)
prob=summary(fit2,type='survival',newdata=ndata, t=12)
prob
#> albumin=3
#> time est lcl ucl
#> 1 12 0.06864802 0.02431122 0.1567719
由 reprex package (v2.0.0)
于 2021-08-25 创建更新:如果您使用相同的种子(通过 set.seed()
),“fit”和“fit2”会得到相同的 est/lcl/ucl。此外,根据 MrFlick 的评论,即使对象不相同,我相信使用相同的种子获得相同的输出表明它们在功能上是相同的(即 'good enough')。您可以使用您的实际数据对此进行进一步测试,并比较服务器与本地的结果。