错误BTYD:pnbd.EstimateParameters:L-BFGS-B需要有限值';fn';

错误BTYD:pnbd.EstimateParameters:L-BFGS-B需要有限值';fn';,r,package,R,Package,使用 >params你能试试这个吗: R> cal.cbs1 = subset(cal.cbs, x<100) R> params <- pnbd.EstimateParameters(cal.cbs1) R>cal.cbs1=subset(cal.cbs,x params我花了一些时间阅读和更改源代码,最后在计算对数似然的过程中发现了计算错误并修复了。您可以运行下面的代码并调用pnbd.EstimateParameters.ori()函数重试。它适用于我的情况(我和

使用 >params你能试试这个吗:

R> cal.cbs1 = subset(cal.cbs, x<100)

R> params <- pnbd.EstimateParameters(cal.cbs1)

R>cal.cbs1=subset(cal.cbs,x params我花了一些时间阅读和更改源代码,最后在计算对数似然的过程中发现了计算错误并修复了。您可以运行下面的代码并调用pnbd.EstimateParameters.ori()函数重试。它适用于我的情况(我和你犯了完全相同的错误)

pnbd.cbs.LL.ori=
功能(参数,校准cbs)
{
dc.check.model.params(c(“r”、“alpha”、“s”、“beta”)、params、,
“pnbd.cbs.LL”)

tryCatch(x对于大型数据集,该函数将失败。因此,有一个名为BTYD2的BTYD包的修补版本。它不在CRAN上,您需要在R中使用之前构建该包


使用BTYD软件包的补丁版本解决了我的问题。

首先,更改为代码源:

trace("bgnbd.EstimateParameters",edit=TRUE)
第二,改变方法:

在以下代码中:

       function (cal.cbs, par.start = c(1, 3, 1, 3), max.param.value = 10000) 
{
  dc.check.model.params(c("r", "alpha", "a", "b"), par.start, 
    "bgnbd.EstimateParameters")
  bgnbd.eLL <- function(params, cal.cbs, max.param.value) {
    params <- exp(params)
    params[params > max.param.value] = max.param.value
    return(-1 * bgnbd.cbs.LL(params, cal.cbs))
  }
  logparams = log(par.start)
  results = optim(logparams, bgnbd.eLL, cal.cbs = cal.cbs, 
    max.param.value = max.param.value, method = "BFGS")  # j ai changé cela (I change the methode )
  estimated.params <- exp(results$par)
  estimated.params[estimated.params > max.param.value] <- max.param.value
  return(estimated.params)
} 
<代码>函数(Cal.CBS,PARART=C(1, 3, 1,3),Max,PARAM.Valuy=10000) { DC。检查。模型PARAMS(C(“R”),“alpha”,“A”,“B”),PAR. “bgnbd.估计参数”)
bgnbd.eLL您能解释一下您在估算代码中发现的错误是什么吗?这只是您在其他答案中提到的检查xhyperg_2F1
在包gsl中,请参阅。只需安装包,将
gsl::
放在函数调用前面(即
gsl::hyperg_2F1
;注意,函数出现两次!)并重新运行代码。我也遇到了同样的问题。但是使用修改后的函数会引发另一个错误,即`error in pnbd.cbs.LL.ori(params,cal.cbs):找不到函数“pnbd.cbs.LL.ori” ` @fdetsch@AashishGulabani该函数在上述代码块的第一行中定义。您可以尝试使用
bgnbd
。Fader等人开发了一个计算更简单的函数,得到了类似的结果。我遇到了这个问题,但从
pnbd
切换到
bgnbd
,这解决了我的问题。
       function (cal.cbs, par.start = c(1, 3, 1, 3), max.param.value = 10000) 
{
  dc.check.model.params(c("r", "alpha", "a", "b"), par.start, 
    "bgnbd.EstimateParameters")
  bgnbd.eLL <- function(params, cal.cbs, max.param.value) {
    params <- exp(params)
    params[params > max.param.value] = max.param.value
    return(-1 * bgnbd.cbs.LL(params, cal.cbs))
  }
  logparams = log(par.start)
  results = optim(logparams, bgnbd.eLL, cal.cbs = cal.cbs, 
    max.param.value = max.param.value, method = "BFGS")  # j ai changé cela (I change the methode )
  estimated.params <- exp(results$par)
  estimated.params[estimated.params > max.param.value] <- max.param.value
  return(estimated.params)
}