Fits Gamma-Gompertz/NBD models on transactional data with static and without covariates.
# S4 method for clv.data
ggomnbd(
clv.data,
start.params.model = c(),
optimx.args = list(),
verbose = TRUE,
...
)
# S4 method for clv.data.static.covariates
ggomnbd(
clv.data,
start.params.model = c(),
optimx.args = list(),
verbose = TRUE,
names.cov.life = c(),
names.cov.trans = c(),
start.params.life = c(),
start.params.trans = c(),
names.cov.constr = c(),
start.params.constr = c(),
reg.lambdas = c(),
...
)
The data object on which the model is fitted.
Named start parameters containing the optimization start parameters for the model without covariates.
Additional arguments to control the optimization which are forwarded to optimx::optimx
.
If multiple optimization methods are specified, only the result of the last method is further processed.
Show details about the running of the function.
Ignored
Which of the set Lifetime covariates should be used. Missing parameter indicates all covariates shall be used.
Which of the set Transaction covariates should be used. Missing parameter indicates all covariates shall be used.
Named start parameters containing the optimization start parameters for all lifetime covariates.
Named start parameters containing the optimization start parameters for all transaction covariates.
Which covariates should be forced to use the same parameters for the lifetime and transaction process. The covariates need to be present as both, lifetime and transaction covariates.
Named start parameters containing the optimization start parameters for the constraint covariates.
Named lambda parameters used for the L2 regularization of the lifetime and the transaction covariate parameters. Lambdas have to be >= 0.
Depending on the data object on which the model was fit, ggomnbd
returns either an object of
class clv.ggomnbd or clv.ggomnbd.static.cov.
The function summary
can be used to obtain and print a summary of the results.
The generic accessor functions coefficients
, vcov
, fitted
,
logLik
, AIC
, BIC
, and nobs
are available.
Model parameters for the GGompertz/NBD model are r, alpha, beta, b and s
. r
: shape parameter of the Gamma distribution of the purchase process.
The smaller r
, the stronger the heterogeneity of the purchase process.alpha
: scale parameter of the Gamma distribution of the purchase process.beta
: scale parameter for the Gamma distribution for the lifetime process.b
: scale parameter of the Gompertz distribution (constant across customers).s
: shape parameter of the Gamma distribution for the lifetime process.
The smaller s
, the stronger the heterogeneity of customer lifetimes.
If no start parameters are given, r = 1, alpha = 1, beta = 1, b = 1, s = 1 is used. All model start parameters are required to be > 0. If no start values are given for the covariate parameters, 0.1 is used.
Note that the DERT expression has not been derived (yet) and it consequently is not possible to calculated values for DERT and CLV.
There are two key differences of the gamma/Gompertz/NBD (GGompertz/NBD) model compared to the relative to the well-known Pareto/NBD model: (i) its probability density function can exhibit a mode at zero or an interior mode, and (ii) it can be skewed to the right or to the left. Therefore, the GGompertz/NBD model is more flexible than the Pareto/NBD model. According to Bemmaor and Glady (2012) can indicate substantial differences in expected residual lifetimes compared to the Pareto/NBD. The GGompertz/NBD tends to be appropriate when firms are reputed and their offerings are differentiated.
Bemmaor AC, Glady N (2012). “Modeling Purchasing Behavior with Sudden “Death”: A Flexible Customer Lifetime Model” Management Science, 58(5), 1012-1021.
clvdata
to create a clv data object, SetStaticCovariates
to add static covariates to an existing clv data object.
gg to fit customer's average spending per transaction with the Gamma-Gamma
model
predict
to predict expected transactions, probability of being alive, and customer lifetime value for every customer
plot
to plot the unconditional expectation as predicted by the fitted model
pmf
for the probability to make exactly x transactions in the estimation period, given by the probability mass function (PMF).
# \donttest{
data("apparelTrans")
clv.data.apparel <- clvdata(apparelTrans, date.format = "ymd",
time.unit = "w", estimation.split = 40)
# Fit standard ggomnbd model
ggomnbd(clv.data.apparel)
#> Starting estimation...
#> Estimation finished!
#> GGompertz/NBD Standard Model
#>
#> Call:
#> ggomnbd(clv.data = clv.data.apparel)
#>
#> Coefficients:
#> r alpha b s beta
#> 7.865e-01 5.334e+00 4.903e-07 3.573e-01 5.703e-06
#> KKT1: TRUE
#> KKT2: FALSE
# Give initial guesses for the model parameters
ggomnbd(clv.data.apparel,
start.params.model = c(r=0.5, alpha=15, b=5, beta=10, s=0.5))
#> Starting estimation...
#> Estimation finished!
#> GGompertz/NBD Standard Model
#>
#> Call:
#> ggomnbd(clv.data = clv.data.apparel, start.params.model = c(r = 0.5,
#> alpha = 15, b = 5, beta = 10, s = 0.5))
#>
#> Coefficients:
#> r alpha b s beta
#> 0.694315 4.918703 9.074435 0.001513 0.625261
#> KKT1: TRUE
#> KKT2: FALSE
# pass additional parameters to the optimizer (optimx)
# Use Nelder-Mead as optimization method and print
# detailed information about the optimization process
apparel.ggomnbd <- ggomnbd(clv.data.apparel,
optimx.args = list(method="Nelder-Mead",
control=list(trace=6)))
#> Starting estimation...
#> fn is fn1
#> Looking for method = Nelder-Mead
#> Methods to be used:[1] "Nelder-Mead"
#> optcfg:$fname
#> [1] "fn1"
#>
#> $npar
#> [1] 5
#>
#> $ctrl
#> $ctrl$follow.on
#> [1] FALSE
#>
#> $ctrl$save.failures
#> [1] TRUE
#>
#> $ctrl$trace
#> [1] 6
#>
#> $ctrl$kkt
#> [1] TRUE
#>
#> $ctrl$all.methods
#> [1] FALSE
#>
#> $ctrl$starttests
#> [1] FALSE
#>
#> $ctrl$maximize
#> [1] FALSE
#>
#> $ctrl$dowarn
#> [1] TRUE
#>
#> $ctrl$usenumDeriv
#> [1] FALSE
#>
#> $ctrl$kkttol
#> [1] 0.001
#>
#> $ctrl$kkt2tol
#> [1] 1e-06
#>
#> $ctrl$badval
#> [1] 8.988466e+307
#>
#> $ctrl$scaletol
#> [1] 3
#>
#> $ctrl$have.bounds
#> [1] FALSE
#>
#>
#> $usenumDeriv
#> [1] FALSE
#>
#> $ufn
#> function (par)
#> fn(par, ...)
#> <bytecode: 0x7fb5826c0950>
#> <environment: 0x7fb59ed59098>
#>
#> $have.bounds
#> [1] FALSE
#>
#> $method
#> [1] "Nelder-Mead"
#>
#> Method: Nelder-Mead
#> Nelder-Mead direct search function minimizer
#> function value for initial parameters = 7135.028461
#> Scaled convergence tolerance is 0.00010632
#> Stepsize computed as 0.100000
#> BUILD 6 7601.506541 7119.715103
#> EXTENSION 8 7601.506541 6551.338914
#> EXTENSION 10 7158.281161 6037.513352
#> LO-REDUCTION 12 7135.028461 6037.513352
#> LO-REDUCTION 14 7120.679158 6037.513352
#> EXTENSION 16 7119.715103 5383.511468
#> EXTENSION 18 6551.338914 4690.867542
#> LO-REDUCTION 20 6407.902236 4690.867542
#> EXTENSION 22 6168.906218 4191.553467
#> LO-REDUCTION 24 6037.513352 4191.553467
#> EXTENSION 26 5383.511468 3460.012466
#> LO-REDUCTION 28 4978.908267 3460.012466
#> LO-REDUCTION 30 4690.867542 3460.012466
#> REFLECTION 32 4211.205075 3420.897750
#> REFLECTION 34 4191.553467 3347.024278
#> REFLECTION 36 3564.368966 3306.075340
#> LO-REDUCTION 38 3484.060645 3306.075340
#> LO-REDUCTION 40 3460.012466 3306.075340
#> HI-REDUCTION 42 3420.897750 3306.075340
#> EXTENSION 44 3360.906285 3249.494945
#> EXTENSION 46 3355.169338 3177.258603
#> LO-REDUCTION 48 3347.024278 3177.258603
#> LO-REDUCTION 50 3320.849704 3177.258603
#> LO-REDUCTION 52 3306.075340 3177.258603
#> EXTENSION 54 3273.448592 3126.508670
#> LO-REDUCTION 56 3249.494945 3126.508670
#> EXTENSION 58 3244.766463 3053.745820
#> EXTENSION 60 3213.848103 2976.546260
#> LO-REDUCTION 62 3177.258603 2976.546260
#> EXTENSION 64 3132.215016 2966.834537
#> REFLECTION 66 3126.508670 2947.715342
#> LO-REDUCTION 68 3053.745820 2943.458875
#> LO-REDUCTION 70 2984.745015 2943.458875
#> HI-REDUCTION 72 2976.546260 2943.458875
#> HI-REDUCTION 74 2966.834537 2943.458875
#> REFLECTION 76 2959.194063 2931.290958
#> LO-REDUCTION 78 2955.728569 2931.290958
#> LO-REDUCTION 80 2947.715342 2931.290958
#> EXTENSION 82 2945.749591 2910.691924
#> LO-REDUCTION 84 2943.458875 2910.691924
#> REFLECTION 86 2939.904064 2910.078049
#> LO-REDUCTION 88 2938.148136 2910.078049
#> HI-REDUCTION 90 2931.290958 2910.078049
#> EXTENSION 92 2925.652202 2899.477011
#> LO-REDUCTION 94 2921.692144 2899.477011
#> EXTENSION 96 2913.280407 2889.676951
#> LO-REDUCTION 98 2910.691924 2889.676951
#> LO-REDUCTION 100 2910.078049 2889.676951
#> LO-REDUCTION 102 2903.117478 2889.676951
#> LO-REDUCTION 104 2899.477011 2889.676951
#> LO-REDUCTION 106 2893.310771 2889.595748
#> LO-REDUCTION 108 2893.204167 2889.595748
#> HI-REDUCTION 110 2891.149473 2889.595748
#> LO-REDUCTION 112 2890.442814 2888.986058
#> HI-REDUCTION 114 2889.977167 2888.986058
#> HI-REDUCTION 116 2889.970098 2888.986058
#> HI-REDUCTION 118 2889.676951 2888.986058
#> HI-REDUCTION 120 2889.595748 2888.986058
#> HI-REDUCTION 122 2889.178411 2888.983546
#> HI-REDUCTION 124 2889.113981 2888.915364
#> HI-REDUCTION 126 2889.089142 2888.892026
#> LO-REDUCTION 128 2888.992848 2888.856251
#> HI-REDUCTION 130 2888.986058 2888.851384
#> HI-REDUCTION 132 2888.983546 2888.828646
#> REFLECTION 134 2888.915364 2888.803918
#> LO-REDUCTION 136 2888.892026 2888.798226
#> REFLECTION 138 2888.856251 2888.789774
#> LO-REDUCTION 140 2888.851384 2888.765020
#> LO-REDUCTION 142 2888.828646 2888.765020
#> EXTENSION 144 2888.803918 2888.676231
#> LO-REDUCTION 146 2888.798226 2888.676231
#> LO-REDUCTION 148 2888.789774 2888.676231
#> LO-REDUCTION 150 2888.769507 2888.676231
#> LO-REDUCTION 152 2888.765020 2888.676231
#> EXTENSION 154 2888.736045 2888.597050
#> LO-REDUCTION 156 2888.715116 2888.597050
#> HI-REDUCTION 158 2888.707924 2888.597050
#> LO-REDUCTION 160 2888.690153 2888.597050
#> EXTENSION 162 2888.676231 2888.502717
#> LO-REDUCTION 164 2888.663956 2888.502717
#> LO-REDUCTION 166 2888.640703 2888.502717
#> LO-REDUCTION 168 2888.609471 2888.502717
#> EXTENSION 170 2888.597050 2888.382369
#> LO-REDUCTION 172 2888.543721 2888.382369
#> EXTENSION 174 2888.535603 2888.309287
#> LO-REDUCTION 176 2888.514759 2888.309287
#> EXTENSION 178 2888.502717 2888.127086
#> EXTENSION 180 2888.385486 2887.907764
#> LO-REDUCTION 182 2888.382369 2887.907764
#> EXTENSION 184 2888.316554 2887.664092
#> LO-REDUCTION 186 2888.309287 2887.664092
#> EXTENSION 188 2888.127086 2887.039334
#> LO-REDUCTION 190 2888.014226 2887.039334
#> EXTENSION 192 2887.907764 2886.518976
#> LO-REDUCTION 194 2887.679675 2886.518976
#> EXTENSION 196 2887.664092 2885.899786
#> EXTENSION 198 2887.259417 2884.907469
#> LO-REDUCTION 200 2887.039334 2884.907469
#> EXTENSION 202 2886.574065 2884.328374
#> EXTENSION 204 2886.518976 2883.794179
#> LO-REDUCTION 206 2885.899786 2883.794179
#> REFLECTION 208 2885.210263 2883.541083
#> LO-REDUCTION 210 2884.907469 2883.541083
#> LO-REDUCTION 212 2884.328374 2883.541083
#> LO-REDUCTION 214 2883.934387 2883.541083
#> LO-REDUCTION 216 2883.829988 2883.541083
#> LO-REDUCTION 218 2883.794179 2883.541083
#> LO-REDUCTION 220 2883.782612 2883.541083
#> EXTENSION 222 2883.685721 2883.400072
#> LO-REDUCTION 224 2883.642556 2883.400072
#> LO-REDUCTION 226 2883.599999 2883.400072
#> EXTENSION 228 2883.564787 2883.308266
#> LO-REDUCTION 230 2883.541083 2883.308266
#> LO-REDUCTION 232 2883.468012 2883.308266
#> LO-REDUCTION 234 2883.418052 2883.306199
#> LO-REDUCTION 236 2883.400072 2883.306199
#> LO-REDUCTION 238 2883.323743 2883.306199
#> HI-REDUCTION 240 2883.311312 2883.305223
#> REFLECTION 242 2883.310127 2883.304818
#> HI-REDUCTION 244 2883.308335 2883.302027
#> HI-REDUCTION 246 2883.308266 2883.300185
#> LO-REDUCTION 248 2883.306199 2883.300090
#> LO-REDUCTION 250 2883.305223 2883.300090
#> HI-REDUCTION 252 2883.304818 2883.300090
#> HI-REDUCTION 254 2883.302027 2883.299983
#> HI-REDUCTION 256 2883.300344 2883.299669
#> REFLECTION 258 2883.300317 2883.299194
#> LO-REDUCTION 260 2883.300185 2883.299057
#> HI-REDUCTION 262 2883.300090 2883.298750
#> HI-REDUCTION 264 2883.299983 2883.298750
#> LO-REDUCTION 266 2883.299669 2883.298750
#> EXTENSION 268 2883.299194 2883.298015
#> HI-REDUCTION 270 2883.299057 2883.298015
#> LO-REDUCTION 272 2883.299025 2883.298015
#> LO-REDUCTION 274 2883.298804 2883.298015
#> LO-REDUCTION 276 2883.298750 2883.298015
#> EXTENSION 278 2883.298553 2883.297571
#> HI-REDUCTION 280 2883.298422 2883.297571
#> LO-REDUCTION 282 2883.298380 2883.297571
#> LO-REDUCTION 284 2883.298279 2883.297571
#> EXTENSION 286 2883.298148 2883.296809
#> LO-REDUCTION 288 2883.298015 2883.296809
#> LO-REDUCTION 290 2883.297743 2883.296809
#> LO-REDUCTION 292 2883.297632 2883.296809
#> EXTENSION 294 2883.297571 2883.296772
#> EXTENSION 296 2883.297233 2883.295620
#> LO-REDUCTION 298 2883.297112 2883.295620
#> LO-REDUCTION 300 2883.296827 2883.295620
#> EXTENSION 302 2883.296809 2883.295605
#> LO-REDUCTION 304 2883.296772 2883.295605
#> EXTENSION 306 2883.295826 2883.293410
#> LO-REDUCTION 308 2883.295782 2883.293410
#> LO-REDUCTION 310 2883.295776 2883.293410
#> LO-REDUCTION 312 2883.295620 2883.293410
#> EXTENSION 314 2883.295605 2883.292723
#> EXTENSION 316 2883.294609 2883.289572
#> LO-REDUCTION 318 2883.293997 2883.289572
#> LO-REDUCTION 320 2883.293762 2883.289572
#> EXTENSION 322 2883.293410 2883.286270
#> LO-REDUCTION 324 2883.292723 2883.286270
#> LO-REDUCTION 326 2883.290936 2883.286270
#> EXTENSION 328 2883.290621 2883.283268
#> EXTENSION 330 2883.289572 2883.278231
#> LO-REDUCTION 332 2883.286998 2883.278231
#> LO-REDUCTION 334 2883.286272 2883.278231
#> EXTENSION 336 2883.286270 2883.270565
#> LO-REDUCTION 338 2883.283268 2883.270565
#> LO-REDUCTION 340 2883.280953 2883.270565
#> EXTENSION 342 2883.278967 2883.263534
#> LO-REDUCTION 344 2883.278231 2883.263534
#> EXTENSION 346 2883.272985 2883.251432
#> LO-REDUCTION 348 2883.270853 2883.251432
#> EXTENSION 350 2883.270565 2883.238136
#> LO-REDUCTION 352 2883.263964 2883.238136
#> EXTENSION 354 2883.263534 2883.229625
#> EXTENSION 356 2883.255152 2883.216446
#> EXTENSION 358 2883.251432 2883.204430
#> EXTENSION 360 2883.242396 2883.202079
#> EXTENSION 362 2883.238136 2883.169805
#> LO-REDUCTION 364 2883.229625 2883.169805
#> LO-REDUCTION 366 2883.216446 2883.169805
#> LO-REDUCTION 368 2883.204430 2883.169805
#> LO-REDUCTION 370 2883.202079 2883.169805
#> LO-REDUCTION 372 2883.197022 2883.169805
#> LO-REDUCTION 374 2883.191411 2883.169805
#> EXTENSION 376 2883.190426 2883.165323
#> EXTENSION 378 2883.186334 2883.141877
#> EXTENSION 380 2883.180422 2883.122569
#> EXTENSION 382 2883.170577 2883.100133
#> EXTENSION 384 2883.169805 2883.063949
#> LO-REDUCTION 386 2883.165323 2883.063949
#> EXTENSION 388 2883.141877 2883.011666
#> EXTENSION 390 2883.122569 2882.937129
#> LO-REDUCTION 392 2883.100133 2882.937129
#> EXTENSION 394 2883.070135 2882.831742
#> EXTENSION 396 2883.063949 2882.738245
#> EXTENSION 398 2883.011666 2882.630856
#> EXTENSION 400 2882.941382 2882.528348
#> EXTENSION 402 2882.937129 2882.420613
#> EXTENSION 404 2882.831742 2882.302142
#> EXTENSION 406 2882.738245 2882.020821
#> LO-REDUCTION 408 2882.630856 2882.020821
#> LO-REDUCTION 410 2882.528348 2882.020821
#> LO-REDUCTION 412 2882.420613 2882.020821
#> REFLECTION 414 2882.302142 2882.012199
#> REFLECTION 416 2882.170239 2882.005497
#> REFLECTION 418 2882.135074 2881.990807
#> REFLECTION 420 2882.043244 2881.926713
#> EXTENSION 422 2882.020821 2881.851125
#> HI-REDUCTION 424 2882.012199 2881.851125
#> LO-REDUCTION 426 2882.005497 2881.851125
#> LO-REDUCTION 428 2881.990807 2881.851125
#> LO-REDUCTION 430 2881.926713 2881.846532
#> REFLECTION 432 2881.919198 2881.819054
#> LO-REDUCTION 434 2881.905029 2881.819054
#> LO-REDUCTION 436 2881.851619 2881.819054
#> LO-REDUCTION 438 2881.851125 2881.819054
#> LO-REDUCTION 440 2881.848764 2881.819054
#> LO-REDUCTION 442 2881.846532 2881.819054
#> REFLECTION 444 2881.825776 2881.803843
#> LO-REDUCTION 446 2881.823536 2881.803843
#> HI-REDUCTION 448 2881.823029 2881.803843
#> LO-REDUCTION 450 2881.820846 2881.803843
#> EXTENSION 452 2881.819054 2881.800244
#> EXTENSION 454 2881.813008 2881.788903
#> LO-REDUCTION 456 2881.810210 2881.788903
#> EXTENSION 458 2881.808841 2881.782684
#> EXTENSION 460 2881.803843 2881.774659
#> EXTENSION 462 2881.800244 2881.761178
#> LO-REDUCTION 464 2881.795478 2881.761178
#> REFLECTION 466 2881.788903 2881.758899
#> LO-REDUCTION 468 2881.782684 2881.758899
#> LO-REDUCTION 470 2881.774659 2881.758899
#> REFLECTION 472 2881.769603 2881.749476
#> HI-REDUCTION 474 2881.768143 2881.749476
#> LO-REDUCTION 476 2881.761178 2881.749476
#> LO-REDUCTION 478 2881.760836 2881.749476
#> HI-REDUCTION 480 2881.759550 2881.749476
#> LO-REDUCTION 482 2881.758899 2881.749476
#> REFLECTION 484 2881.755954 2881.746958
#> HI-REDUCTION 486 2881.754370 2881.746958
#> LO-REDUCTION 488 2881.753467 2881.746958
#> LO-REDUCTION 490 2881.752460 2881.746958
#> REFLECTION 492 2881.750015 2881.746107
#> LO-REDUCTION 494 2881.749476 2881.746107
#> LO-REDUCTION 496 2881.748688 2881.746107
#> HI-REDUCTION 498 2881.748420 2881.746107
#> REFLECTION 500 2881.747639 2881.745752
#> HI-REDUCTION 502 2881.747257 2881.745752
#> LO-REDUCTION 504 2881.747126 2881.745752
#> EXTENSION 506 2881.746958 2881.745432
#> LO-REDUCTION 508 2881.746951 2881.745432
#> HI-REDUCTION 510 2881.746609 2881.745432
#> HI-REDUCTION 512 2881.746247 2881.745432
#> HI-REDUCTION 514 2881.746107 2881.745432
#> LO-REDUCTION 516 2881.746028 2881.745432
#> LO-REDUCTION 518 2881.745901 2881.745392
#> HI-REDUCTION 520 2881.745752 2881.745392
#> HI-REDUCTION 522 2881.745638 2881.745392
#> HI-REDUCTION 524 2881.745574 2881.745392
#> HI-REDUCTION 526 2881.745573 2881.745392
#> HI-REDUCTION 528 2881.745567 2881.745392
#> HI-REDUCTION 530 2881.745509 2881.745392
#> REFLECTION 532 2881.745471 2881.745359
#> HI-REDUCTION 534 2881.745467 2881.745359
#> Exiting from Nelder Mead minimizer
#> 536 function evaluations used
#> Post processing for method Nelder-Mead
#> Successful convergence!
#> Compute Hessian approximation at finish of Nelder-Mead
#> Compute gradient approximation at finish of Nelder-Mead
#> Save results from method Nelder-Mead
#> $par
#> log.r log.alpha log.b log.s log.beta
#> -0.3673579 1.5919801 -8.9486321 6.0617963 1.4036926
#>
#> $value
#> [1] 2881.745
#>
#> $message
#> NULL
#>
#> $convcode
#> [1] 0
#>
#> $fevals
#> function
#> 536
#>
#> $gevals
#> gradient
#> NA
#>
#> $nitns
#> [1] NA
#>
#> $kkt1
#> [1] TRUE
#>
#> $kkt2
#> [1] FALSE
#>
#> $xtimes
#> user.self
#> 0.523
#>
#> Assemble the answers
#> Estimation finished!
# estimated coefs
coef(apparel.ggomnbd)
#> r alpha b s beta
#> 6.925617e-01 4.913469e+00 1.299148e-04 4.291456e+02 4.070202e+00
# summary of the fitted model
summary(apparel.ggomnbd)
#> GGompertz/NBD Standard Model
#>
#> Call:
#> ggomnbd(clv.data = clv.data.apparel, optimx.args = list(method = "Nelder-Mead",
#> control = list(trace = 6)))
#>
#> Fitting period:
#> Estimation start 2005-01-03
#> Estimation end 2005-10-10
#> Estimation length 40.0000 Weeks
#>
#> Coefficients:
#> Estimate Std. Error z-val Pr(>|z|)
#> r 6.926e-01 1.098e-01 6.306 2.86e-10 ***
#> alpha 4.913e+00 8.493e-01 5.785 7.23e-09 ***
#> b 1.299e-04 8.552e-05 1.519 0.129
#> s 4.291e+02 5.410e-02 7932.865 < 2e-16 ***
#> beta 4.070e+00 5.758e-01 7.068 1.57e-12 ***
#> ---
#> Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
#>
#> Optimization info:
#> LL -2881.7454
#> AIC 5773.4907
#> BIC 5791.0980
#> KKT 1 TRUE
#> KKT 2 FALSE
#> fevals 536.0000
#> Method Nelder-Mead
# predict CLV etc for holdout period
predict(apparel.ggomnbd)
#> Predicting from 2005-10-11 until (incl.) 2006-07-16 (39.86 Weeks).
#> Estimating gg model to predict spending...
#> Starting estimation...
#> Estimation finished!
#> Id period.first period.last period.length actual.x actual.total.spending
#> 1: 1 2005-10-11 2006-07-16 39.85714 0 0.00
#> 2: 10 2005-10-11 2006-07-16 39.85714 0 0.00
#> 3: 100 2005-10-11 2006-07-16 39.85714 23 737.53
#> 4: 1000 2005-10-11 2006-07-16 39.85714 23 1069.91
#> 5: 1001 2005-10-11 2006-07-16 39.85714 11 364.00
#> ---
#> 246: 1219 2005-10-11 2006-07-16 39.85714 14 413.76
#> 247: 122 2005-10-11 2006-07-16 39.85714 0 0.00
#> 248: 1220 2005-10-11 2006-07-16 39.85714 0 0.00
#> 249: 1221 2005-10-11 2006-07-16 39.85714 9 302.65
#> 250: 1222 2005-10-11 2006-07-16 39.85714 0 0.00
#> predicted.mean.spending CET PAlive
#> 1: 39.95483 1.799972 0.4157734
#> 2: 55.23031 4.370424 0.3653550
#> 3: 43.57390 21.278243 0.8492175
#> 4: 41.60921 24.359085 0.9936311
#> 5: 45.58153 7.927577 0.3834394
#> ---
#> 246: 33.58728 14.914337 0.9223629
#> 247: 39.95483 1.799972 0.4157734
#> 248: 39.95483 1.799972 0.4157734
#> 249: 34.28958 15.832742 0.8977081
#> 250: 47.35500 3.413481 0.3882902
# predict CLV etc for the next 15 periods
predict(apparel.ggomnbd, prediction.end = 15)
#> Predicting from 2005-10-11 until (incl.) 2006-01-23 (15 Weeks).
#> Estimating gg model to predict spending...
#> Starting estimation...
#> Estimation finished!
#> Id period.first period.last period.length actual.x actual.total.spending
#> 1: 1 2005-10-11 2006-01-23 15 0 0.00
#> 2: 10 2005-10-11 2006-01-23 15 0 0.00
#> 3: 100 2005-10-11 2006-01-23 15 10 224.71
#> 4: 1000 2005-10-11 2006-01-23 15 10 343.11
#> 5: 1001 2005-10-11 2006-01-23 15 6 206.65
#> ---
#> 246: 1219 2005-10-11 2006-01-23 15 11 325.05
#> 247: 122 2005-10-11 2006-01-23 15 0 0.00
#> 248: 1220 2005-10-11 2006-01-23 15 0 0.00
#> 249: 1221 2005-10-11 2006-01-23 15 7 158.46
#> 250: 1222 2005-10-11 2006-01-23 15 0 0.00
#> predicted.mean.spending CET PAlive
#> 1: 39.95483 0.7946941 0.4157734
#> 2: 55.23031 1.9295576 0.3653550
#> 3: 43.57390 9.3944194 0.8492175
#> 4: 41.60921 10.7546219 0.9936311
#> 5: 45.58153 3.5000533 0.3834394
#> ---
#> 246: 33.58728 6.5847324 0.9223629
#> 247: 39.95483 0.7946941 0.4157734
#> 248: 39.95483 0.7946941 0.4157734
#> 249: 34.28958 6.9902115 0.8977081
#> 250: 47.35500 1.5070640 0.3882902
# }
# \donttest{
# To estimate the ggomnbd model with static covariates,
# add static covariates to the data
data("apparelStaticCov")
clv.data.static.cov <-
SetStaticCovariates(clv.data.apparel,
data.cov.life = apparelStaticCov,
names.cov.life = c("Gender", "Channel"),
data.cov.trans = apparelStaticCov,
names.cov.trans = c("Gender", "Channel"))
# Fit ggomnbd with static covariates
ggomnbd(clv.data.static.cov)
#> Starting estimation...
#> Estimation finished!
#> GGompertz/NBD with Static Covariates Model
#>
#> Call:
#> ggomnbd(clv.data = clv.data.static.cov)
#>
#> Coefficients:
#> r alpha b s beta
#> 1.43123 35.57345 0.05532 0.15114 0.24512
#> life.Gender life.Channel trans.Gender trans.Channel
#> 2.22430 -2.67448 1.43832 0.37309
#> KKT1: TRUE
#> KKT2: TRUE
#> Constraints: FALSE
#> Regularization: FALSE
# Give initial guesses for both covariate parameters
ggomnbd(clv.data.static.cov, start.params.trans = c(Gender=0.75, Channel=0.7),
start.params.life = c(Gender=0.5, Channel=0.5))
#> Starting estimation...
#> Estimation finished!
#> GGompertz/NBD with Static Covariates Model
#>
#> Call:
#> ggomnbd(clv.data = clv.data.static.cov, start.params.life = c(Gender = 0.5,
#> Channel = 0.5), start.params.trans = c(Gender = 0.75, Channel = 0.7))
#>
#> Coefficients:
#> r alpha b s beta
#> 1.42882 35.57508 0.05692 0.14949 0.25683
#> life.Gender life.Channel trans.Gender trans.Channel
#> 2.26738 -2.69762 1.44023 0.37271
#> KKT1: TRUE
#> KKT2: TRUE
#> Constraints: FALSE
#> Regularization: FALSE
# Use regularization
ggomnbd(clv.data.static.cov, reg.lambdas = c(trans = 5, life=5))
#> Starting estimation...
#> Estimation finished!
#> GGompertz/NBD with Static Covariates Model
#>
#> Call:
#> ggomnbd(clv.data = clv.data.static.cov, reg.lambdas = c(trans = 5,
#> life = 5))
#>
#> Coefficients:
#> r alpha b s beta
#> 0.7926996 5.4497686 0.0000601 0.3591047 0.0007010
#> life.Gender life.Channel trans.Gender trans.Channel
#> -0.0004862 -0.0023863 0.0106830 0.0087755
#> KKT1: TRUE
#> KKT2: FALSE
#> Constraints: FALSE
#> Regularization: TRUE
# Force the same coefficient to be used for both covariates
ggomnbd(clv.data.static.cov, names.cov.constr = "Gender",
start.params.constr = c(Gender=0.5))
#> Starting estimation...
#> Estimation finished!
#> GGompertz/NBD with Static Covariates Model
#>
#> Call:
#> ggomnbd(clv.data = clv.data.static.cov, names.cov.constr = "Gender",
#> start.params.constr = c(Gender = 0.5))
#>
#> Coefficients:
#> r alpha b s beta
#> 1.44975 34.82124 0.03625 0.18018 0.11832
#> life.Channel trans.Channel constr.Gender
#> -2.27283 0.37961 1.39891
#> KKT1: TRUE
#> KKT2: TRUE
#> Constraints: TRUE
#> Regularization: FALSE
# Fit model only with the Channel covariate for life but
# keep all trans covariates as is
ggomnbd(clv.data.static.cov, names.cov.life = c("Channel"))
#> Starting estimation...
#> Estimation finished!
#> GGompertz/NBD with Static Covariates Model
#>
#> Call:
#> ggomnbd(clv.data = clv.data.static.cov, names.cov.life = c("Channel"))
#>
#> Coefficients:
#> r alpha b s beta
#> 1.52883 32.06390 0.09904 0.10168 0.01608
#> life.Channel trans.Gender trans.Channel
#> -3.51559 1.28502 0.35036
#> KKT1: TRUE
#> KKT2: TRUE
#> Constraints: FALSE
#> Regularization: FALSE
# }