2017-12-30 20 views
0

私はRでBTYD BG NBDを使用しており、個々のレベル推定を行っています。データ準備のため BTYD WalkthroughBTYDすべての観測について個別レベル推定

コード:20ページのドキュメント次たとえば

system.file("data/cdnowElog.csv", package = "BTYD")%>% 
dc.ReadLines(., cust.idx = 2, date.idx = 3, sales.idx = 5)%>% 
dc.MergeTransactionsOnSameDate()%>% 
mutate(date = parse_date_time(date, "%Y%m%d")) -> elog 
end.of.cal.period <- as.Date("1997-09-30") 
elog.cal <- elog[which(elog$date <= end.of.cal.period), ] 
split.data <- dc.SplitUpElogForRepeatTrans(elog.cal); 
birth.periods <- split.data$cust.data$birth.per 
last.dates <- split.data$cust.data$last.date 
clean.elog <- split.data$repeat.trans.elog; 
freq.cbt <- dc.CreateFreqCBT(clean.elog); 
tot.cbt <- dc.CreateFreqCBT(elog) 
cal.cbt <- dc.MergeCustomers(tot.cbt, freq.cbt) 
cal.cbs.dates <- data.frame(birth.periods, last.dates, end.of.cal.period) 
cal.cbs <- dc.BuildCBSFromCBTAndDates(cal.cbt, cal.cbs.dates,per="week") 
params <- pnbd.EstimateParameters(cal.cbs); 

1は、特定の観測のための推定値を得ることができます。個人レベル推定のための コード:

cal.cbs["1516",] 
# x t.x T.cal 
# 26.00 30.86 31.00 
x <- cal.cbs["1516", "x"] 
t.x <- cal.cbs["1516", "t.x"] 
T.cal <- cal.cbs["1516", "T.cal"] 
bgnbd.ConditionalExpectedTransactions(params, T.star = 52, 
x, t.x, T.cal) 
# [1] 25.76 

私の質問は、それは私がハードのような特定のID番号をコーディングするのではなく、各行の期待を含むデータフレームを得ることができることを再帰的にこのように実行することが可能です」この場合は1516になりますか?

ありがとうございます!

+0

と簡単です。次に質問をするときは、一般的な視聴者があなたの後ろにあるデータセットでおもしろくするために、より適切な情報を提供してください。ご多幸を祈る。 – InfiniteFlashChess

答えて

0

提案(非常にあなたがこれを行うに助言):

あなたが質問をする次回は、あなたがしたい場所に到達するために必要なコードを投稿してください。それが適切OPランでコードを作成するドキュメントから各行をつかむために私にかなり長い時間がかかった

system.file("data/cdnowElog.csv", package = "BTYD")%>% 
dc.ReadLines(., cust.idx = 2, date.idx = 3, sales.idx = 5)%>% 
dc.MergeTransactionsOnSameDate()%>% 
mutate(date = parse_date_time(date, "%Y%m%d")) -> elog 
end.of.cal.period <- as.Date("1997-09-30") 
elog.cal <- elog[which(elog$date <= end.of.cal.period), ] 
split.data <- dc.SplitUpElogForRepeatTrans(elog.cal); 
birth.periods <- split.data$cust.data$birth.per 
last.dates <- split.data$cust.data$last.date 
clean.elog <- split.data$repeat.trans.elog; 
freq.cbt <- dc.CreateFreqCBT(clean.elog); 
tot.cbt <- dc.CreateFreqCBT(elog) 
cal.cbt <- dc.MergeCustomers(tot.cbt, freq.cbt) 
cal.cbs.dates <- data.frame(birth.periods, last.dates, end.of.cal.period) 
cal.cbs <- dc.BuildCBSFromCBTAndDates(cal.cbt, cal.cbs.dates,per="week") 
params <- pnbd.EstimateParameters(cal.cbs); 

:あなたはcal.cbs["1516",]と一緒にいたところだけを取得する

のコードは、以下の本でした。次回質問をするときに、この発言の上にコードを含めてください!人々が文書を読み、これを理解しなければならないのはひどいことです。通常、人々は、明快さとダミーデータが不足しているため、あなたの質問に投票します。次回提供してください。

回答:

はい、私はあなたのポストはdownvotedされませんでした驚いdplyrさんmutate()

cal.cbs%>% 
data.frame()%>% 
mutate(`Conditional Expectation` = bgnbd.ConditionalExpectedTransactions(params, T.star = 52, x, t.x, T.cal)) 

    x  t.x T.cal Conditional Expectation 
1 2 30.428571 38.85714    2.3224971 
2 1 1.714286 38.85714    1.0646350 
3 0 0.000000 38.85714    0.5607707 
4 0 0.000000 38.85714    0.5607707 
5 0 0.000000 38.85714    0.5607707 
6 7 29.428571 38.85714    6.0231497 
関連する問題