Смешение значения 'litt' в функции 'elog2cbs' пакета "BTYDplus" - PullRequest
0 голосов
/ 14 сентября 2018

Недавно я изучаю анализ клиентов с помощью пакета BTYDplus. Что-то меня смущает, как вычисляется значение 'litt' в функции 'elog2cbs'. Вот код:

#install.packages('BTYDplus')
library(BTYDplus)
library(tidyverse)
data("groceryElog")
elog2cbs(groceryElog) %>% 
filter(cust == 10)

Результаты:

  cust x      t.x     litt      first    T.cal
   10  2  13.85714  2.782741  2006-01-03 103.7143

Примечания: лит = 2.782741. Как говорит справка (elog2cbs):

лит: сумма логарифмических моментов межоперационных транзакций в течение периода калибровки.

Но согласно этому определению, я действую с пакетом 'tidyverse', получая другое значение:

groceryElog %>% 
  filter(cust == 10) %>% 
  mutate(first = min(date),
         difftime = as.numeric(difftime(date, first, units = 'week')),
         ln_dif = log(difftime))  

Результаты:

  cust       date      first  difftime    ln_dif
1   10 2006-01-03 2006-01-03  0.000000      -Inf
2   10 2006-01-12 2006-01-03  1.285714 0.2513144
3   10 2006-04-10 2006-01-03 13.857143 2.6288008

Литт должен быть 0,2513144 + 2,6288008 = 2,880115 НЕ 2,782741.

Затем я проверил код функции:

....
elog_dt[, `:=`(t, as.numeric(difftime(date, first, units = units))), 
    by = "cust"]
elog_dt[, `:=`(itt, c(0, diff(t))), by = "cust"]
cbs <- elog_dt[date <= T.cal, list(x = .N - 1, t.x = max(t), 
    litt = sum(log(itt[itt > 0])), sales = sum(sales)), by = "cust,first"]
....

С пакетом «datatable», все еще

litt = sum(log(itt[itt >0])

результат 2,88.

Любой мог просветить меня, большое спасибо.

1 Ответ

0 голосов
/ 15 сентября 2018

Я разобрался сам. «itt» - это peroid времени «intertransaction», что означает, что оно должно быть

  groceryElog %>% 
  group_by(cust) %>% 
  mutate(first = min(date),
         difftime = as.numeric(difftime(date, first, units = 'week')),
         lag_time = c(0, diff(difftime)), #INTERTRANSACTION PEROID
         ln_dif = log(lag_time)) %>% 
  filter(cust == 10)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...