Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 如何使用bbmle从BG/NBD模型中估计参数?_R - Fatal编程技术网

R 如何使用bbmle从BG/NBD模型中估计参数?

R 如何使用bbmle从BG/NBD模型中估计参数?,r,R,我试图估计客户在一段时间后存活的概率。我有一家公司500名客户的数据。对于我知道的每个客户,x(给定客户在所有时间段内的交易数量)、tx(最后一笔交易的时间)和T(首次购买和观察窗口结束之间的总时间) 我使用BG/NBD模型。为了估计存活的概率,我首先需要估计这个模型中包含的4个参数(r、alpha、a和b)。为了优化这些参数的值,我使用«bbmle»包(如下所示) 但是,当我运行代码时,它不会给出任何结果。此外,R似乎也无法识别以下函数中包含的许多«对象» 有人注意到我在代码中犯的任何错误吗?

我试图估计客户在一段时间后存活的概率。我有一家公司500名客户的数据。对于我知道的每个客户,x(给定客户在所有时间段内的交易数量)、tx(最后一笔交易的时间)和T(首次购买和观察窗口结束之间的总时间)

我使用BG/NBD模型。为了估计存活的概率,我首先需要估计这个模型中包含的4个参数(r、alpha、a和b)。为了优化这些参数的值,我使用«bbmle»包(如下所示)

但是,当我运行代码时,它不会给出任何结果。此外,R似乎也无法识别以下函数中包含的许多«对象»

有人注意到我在代码中犯的任何错误吗?还有别的方法写吗

bgLlh <- function(mydata, r, alpha, a, b) {
  with (mydata, {
    if (a<=0 | b<=0 | r<=0 | alpha<=0) return (NaN)
    term1 <-log(gamma(r+mydata$x)) - log(gamma(r)) + r*log(alpha)
    term2 <-log(gamma(a+b))+log(gamma(b+mydata$x))-log(gamma(b))-log(gamma(a+b+mydata$x))
    term3<- -(r+mydata$x)*log(alpha+mydata$T)
    term4 <- if(mydata$x > 1) {log(a)-log(b+mydata$x-1)-(r+mydata$x)*log(alpha+mydata$tx)
                              } else {0}

    llh <- term1 + term2 +log(exp(term3)+(mydata$x>0)*exp(term4))
    f <- -sum(llh)
    return(f)
  })
}

bgEstimateParameters <- function(mydata, initValues, safeMode=FALSE) {
  llhd <- function(r, alpha, a, b) {    
    return (bgLlh(data, r, alpha, a, b))
  }
  library(bbmle)
  if (safeMode) {
    fit <- mle2(llhd, initValues, skip.hessian=TRUE, method="Nelder-Mead")
  } else {
    fit <- mle2(llhd, initValues)
  }
  return (fit)
}

bgLlh您需要在这些输入对象上包含str(.)输出以及用于调用函数的代码。您不应该在
bgestimatedParameters
中包含
bgLlh(mydata…
?一个可复制的示例肯定很好。。。