首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用广义伽马函数估计挠曲冲浪的生存失败

用广义伽马函数估计挠曲冲浪的生存失败
EN

Stack Overflow用户
提问于 2017-11-03 16:15:03
回答 1查看 827关注 0票数 1

我有病人的生存数据。其中一些被审查了。我想用R中的flexsruv包对经验数据拟合一个广义伽玛函数,而我想要拟合的所有其他函数(如指数、威布尔等)。工作正常,我得到了dist = "gengamma"的以下错误代码

代码语言:javascript
复制
Error in optim(method = "BFGS", par = c(5.02274354115438, -0.0670900421918298,  : 
  non-finite finite-difference value [2]

以下是我掌握的数据:

代码语言:javascript
复制
db.survival <- data.frame(time =  c(101, 111, 185, 707, 85, 58, 427, 672, 90,
                                1452, 608, 99, 556, 62, 60, 1445, 563, 246,
                                163, 276, 216, 64, 61, 66, 67, 68, 81, 83,
                                99, 100, 100, 100, 100, 100, 100, 100, 100),
                      status = c(1, 0, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1,
                                 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1,
                                 0, 0, 0, 0, 0, 0, 0, 0, 0))

我收到一个错误代码,用于:

代码语言:javascript
复制
library(flexsurv)
flexsurvreg(Surv(time, status) ~ 1, data = db.survival, dist="gengamma")

然而,当我选择"CG""SANN"方法时,我会得到结果(但它们不同)。

我的问题是:为什么我一开始就有一个错误?我编码错误吗?

谢谢您的任何帮助!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-11-03 21:58:14

我不认为你的代码有什么问题。错误来自flexsurvreg使用的flexsurvreg。默认情况下,optim使用help("optim")中所述梯度的有限差分近似。

gr函数,用于返回"BFGS""CG""L-BFGS-B"方法的梯度。如果是NULL,则采用有限差分近似.对于"SANN"方法,它指定一个函数来生成一个新的候选点。如果为空,则使用默认的高斯马尔可夫核。

通过以下调用,您可以看到代码在哪里失败

代码语言:javascript
复制
> options(error = recover)
> flexsurvreg(Surv(time, status) ~ 1, data = db.survival, dist="gengamma", control = list(trace = 100))
initial  value 144.298116 
iter  10 value 131.067771
iter  20 value 128.013812
iter  30 value 127.761461
iter  40 value 127.753269
Error in optim(control = list(trace = 100), method = "BFGS", par = c(5.02274354115438,  : 
  non-finite finite-difference value [2]

Enter a frame number, or 0 to exit   

1: flexsurvreg(Surv(time, status) ~ 1, data = db.survival, dist = "gengamma", control = list(trace = 100))
2: do.call("optim", optim.args)
3: optim(control = list(trace = 100), method = "BFGS", par = c(5.02274354115438, -0.0670900421918298, 0), fn = function (optpars, .

Selection: 3

之后,您将看到optim确实运行了很少的迭代,但在某些C代码中却失败了。此外,您可以看到flexsurv没有向optim提供lowerupper参数,这些参数可以与方法"L-BFGS-B"一起使用。您可以在这个小故事中看到其中一个参数具有有限的支持,这可能会对您有所帮助。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47100140

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档