BTYD(买'直到你死)。演练。 pnbd.EstimateParameters()

时间:2014-10-17 16:02:43

标签: r statistics

这是我第一次使用BTYD程序。我在运行参数估计时遇到错误。我在下面提供了错误消息。我一直关注BTYD - Walkthrough

有人知道如何解决这个问题吗?我研究了样本数据集并且工作正常。我以相同的格式上传了我的文件,它不会起作用。没有丢失或空行/值。非常感谢帮助!!!

end.of.cal.period <- as.Date("2013-08-18")
elog.cal <- elog[which(elog$date <= end.of.cal.period), ]

split.data <- dc.SplitUpElogForRepeatTrans(elog.cal);
clean.elog <- split.data$repeat.trans.elog; 
#clean.elog
freq.cbt <- dc.CreateFreqCBT(clean.elog); 
freq.cbt[1:3,1:5]

tot.cbt <- dc.CreateFreqCBT(elog.cal) #used elog.cal instead of elog
cal.cbt <- dc.MergeCustomers(tot.cbt, freq.cbt)

birth.periods <- split.data$cust.data$birth.per
last.dates <- split.data$cust.data$last.date
cal.cbs.dates <- data.frame(birth.periods, last.dates, end.of.cal.period)
cal.cbs <- dc.BuildCBSFromCBTAndDates(cal.cbt, cal.cbs.dates,per="week") #works. no errors
head(cal.cbs, n=10)

sel <- cbind(cal.cbs)
colnames(sel) <-c('x', 't.x', 'T.cal')
head(sel, n=10)

params <- pnbd.EstimateParameters(sel)
  

optim中的错误(logparams,pnbd.eLL,cal.cbs = cal.cbs,max.param.value   = max.param.value ,:         L-BFGS-B需要有限的“fn&#39;

2 个答案:

答案 0 :(得分:1)

事实证明,在估算参数时,sel $ x中的较大值将导致取幂爆炸和错误。

这家伙在这里修复了github:https://github.com/theofilos/BTYD

我基本上把他所有的代码都放在了pnbd.R中,然后将它添加到我的代码中进行Pareto / NBD分析,它似乎解决了这个问题。

答案 1 :(得分:0)

您是否尝试过调整启动参数?它们默认为1,1,1,1。类似的东西:

startingparams <- c(.1, 3, .1, .1)
params <- pnbd.EstimateParameters(sel, startingparams)

玩不同的数量级,看是否有任何棍子。或者,检查cbs矩阵中的最大“x”值。如果存在极端异常值,您可能需要删除它们并尝试再次估算参数。