错误BTYD:pnbd.EstimateParameters:L-BFGS-B需要有限值';fn';
使用 >params你能试试这个吗:错误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()函数重试。它适用于我的情况(我和
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)
}