Skip to contents

phpe: Fit Proportional Hazards Regression Model with Piecewise Exponential baseline distribution.

Usage

phpe(
  formula,
  data,
  n_int = NULL,
  rho = NULL,
  tau = NULL,
  hessian = TRUE,
  approach = c("mle", "bayes"),
  hyper_parms = list(h1_gamma = 0, h2_gamma = 4, mu_beta = 0, sigma_beta = 4),
  ...
)

Arguments

formula

an object of class "formula" (or one that can be coerced to that class): a symbolic description of the model to be fitted.

data

an optional data frame, list or environment (or object coercible by as.data.frame to a data frame) containing the variables in the model. If not found in data, the variables are taken from environment(formula), typically the environment from which phpe is called.

n_int

number of intervals of the PE distribution. If NULL, default value (square root of n) is used.

rho

the time grid of the PE distribution. If NULL, the function timeGrid is used to compute rho.

tau

the maximum time of follow-up. If NULL, tau = max(time), where time is the vector of observed survival times.

hessian

logical; If TRUE (default), the hessian matrix is returned when approach="mle".

approach

approach to be used to fit the model (mle: maximum likelihood; bayes: Bayesian approach).

hyper_parms

a list containing the hyper-parameters of the prior distributions (when approach = "bayes"). If not specified, default values are used.

...

Arguments passed to either `rstan::optimizing` or `rstan::sampling` .

Value

phpe returns an object of class "phpe" containing the fitted model.

Examples

# \donttest{
# ML approach:
library(YPPE)
mle <- phpe(Surv(time, status)~arm, data=ipass, n_int=10, approach="mle")
summary(mle)
#> Call:
#> phpe(formula = Surv(time, status) ~ arm, data = ipass, n_int = 10, 
#>     approach = "mle")
#> 
#> Proportional hazards coefficients:
#>      Estimate    StdErr z.value   p.value    
#> arm -0.310926  0.066011 -4.7102 2.475e-06 ***
#> ---
#> Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
#> 
#> --- 
#> loglik = -2810.835   AIC = 5643.671 

# Bayesian approach:
bayes <- phpe(Surv(time, status)~arm, data=ipass, n_int=10, approach="bayes")
#> 
#> SAMPLING FOR MODEL 'yppe' NOW (CHAIN 1).
#> Chain 1: 
#> Chain 1: Gradient evaluation took 0.000373 seconds
#> Chain 1: 1000 transitions using 10 leapfrog steps per transition would take 3.73 seconds.
#> Chain 1: Adjust your expectations accordingly!
#> Chain 1: 
#> Chain 1: 
#> Chain 1: Iteration:    1 / 2000 [  0%]  (Warmup)
#> Chain 1: Iteration:  200 / 2000 [ 10%]  (Warmup)
#> Chain 1: Iteration:  400 / 2000 [ 20%]  (Warmup)
#> Chain 1: Iteration:  600 / 2000 [ 30%]  (Warmup)
#> Chain 1: Iteration:  800 / 2000 [ 40%]  (Warmup)
#> Chain 1: Iteration: 1000 / 2000 [ 50%]  (Warmup)
#> Chain 1: Iteration: 1001 / 2000 [ 50%]  (Sampling)
#> Chain 1: Iteration: 1200 / 2000 [ 60%]  (Sampling)
#> Chain 1: Iteration: 1400 / 2000 [ 70%]  (Sampling)
#> Chain 1: Iteration: 1600 / 2000 [ 80%]  (Sampling)
#> Chain 1: Iteration: 1800 / 2000 [ 90%]  (Sampling)
#> Chain 1: Iteration: 2000 / 2000 [100%]  (Sampling)
#> Chain 1: 
#> Chain 1:  Elapsed Time: 2.38 seconds (Warm-up)
#> Chain 1:                2.212 seconds (Sampling)
#> Chain 1:                4.592 seconds (Total)
#> Chain 1: 
#> 
#> SAMPLING FOR MODEL 'yppe' NOW (CHAIN 2).
#> Chain 2: 
#> Chain 2: Gradient evaluation took 0.000314 seconds
#> Chain 2: 1000 transitions using 10 leapfrog steps per transition would take 3.14 seconds.
#> Chain 2: Adjust your expectations accordingly!
#> Chain 2: 
#> Chain 2: 
#> Chain 2: Iteration:    1 / 2000 [  0%]  (Warmup)
#> Chain 2: Iteration:  200 / 2000 [ 10%]  (Warmup)
#> Chain 2: Iteration:  400 / 2000 [ 20%]  (Warmup)
#> Chain 2: Iteration:  600 / 2000 [ 30%]  (Warmup)
#> Chain 2: Iteration:  800 / 2000 [ 40%]  (Warmup)
#> Chain 2: Iteration: 1000 / 2000 [ 50%]  (Warmup)
#> Chain 2: Iteration: 1001 / 2000 [ 50%]  (Sampling)
#> Chain 2: Iteration: 1200 / 2000 [ 60%]  (Sampling)
#> Chain 2: Iteration: 1400 / 2000 [ 70%]  (Sampling)
#> Chain 2: Iteration: 1600 / 2000 [ 80%]  (Sampling)
#> Chain 2: Iteration: 1800 / 2000 [ 90%]  (Sampling)
#> Chain 2: Iteration: 2000 / 2000 [100%]  (Sampling)
#> Chain 2: 
#> Chain 2:  Elapsed Time: 2.507 seconds (Warm-up)
#> Chain 2:                2.186 seconds (Sampling)
#> Chain 2:                4.693 seconds (Total)
#> Chain 2: 
#> 
#> SAMPLING FOR MODEL 'yppe' NOW (CHAIN 3).
#> Chain 3: 
#> Chain 3: Gradient evaluation took 0.000308 seconds
#> Chain 3: 1000 transitions using 10 leapfrog steps per transition would take 3.08 seconds.
#> Chain 3: Adjust your expectations accordingly!
#> Chain 3: 
#> Chain 3: 
#> Chain 3: Iteration:    1 / 2000 [  0%]  (Warmup)
#> Chain 3: Iteration:  200 / 2000 [ 10%]  (Warmup)
#> Chain 3: Iteration:  400 / 2000 [ 20%]  (Warmup)
#> Chain 3: Iteration:  600 / 2000 [ 30%]  (Warmup)
#> Chain 3: Iteration:  800 / 2000 [ 40%]  (Warmup)
#> Chain 3: Iteration: 1000 / 2000 [ 50%]  (Warmup)
#> Chain 3: Iteration: 1001 / 2000 [ 50%]  (Sampling)
#> Chain 3: Iteration: 1200 / 2000 [ 60%]  (Sampling)
#> Chain 3: Iteration: 1400 / 2000 [ 70%]  (Sampling)
#> Chain 3: Iteration: 1600 / 2000 [ 80%]  (Sampling)
#> Chain 3: Iteration: 1800 / 2000 [ 90%]  (Sampling)
#> Chain 3: Iteration: 2000 / 2000 [100%]  (Sampling)
#> Chain 3: 
#> Chain 3:  Elapsed Time: 2.372 seconds (Warm-up)
#> Chain 3:                2.195 seconds (Sampling)
#> Chain 3:                4.567 seconds (Total)
#> Chain 3: 
#> 
#> SAMPLING FOR MODEL 'yppe' NOW (CHAIN 4).
#> Chain 4: 
#> Chain 4: Gradient evaluation took 0.000344 seconds
#> Chain 4: 1000 transitions using 10 leapfrog steps per transition would take 3.44 seconds.
#> Chain 4: Adjust your expectations accordingly!
#> Chain 4: 
#> Chain 4: 
#> Chain 4: Iteration:    1 / 2000 [  0%]  (Warmup)
#> Chain 4: Iteration:  200 / 2000 [ 10%]  (Warmup)
#> Chain 4: Iteration:  400 / 2000 [ 20%]  (Warmup)
#> Chain 4: Iteration:  600 / 2000 [ 30%]  (Warmup)
#> Chain 4: Iteration:  800 / 2000 [ 40%]  (Warmup)
#> Chain 4: Iteration: 1000 / 2000 [ 50%]  (Warmup)
#> Chain 4: Iteration: 1001 / 2000 [ 50%]  (Sampling)
#> Chain 4: Iteration: 1200 / 2000 [ 60%]  (Sampling)
#> Chain 4: Iteration: 1400 / 2000 [ 70%]  (Sampling)
#> Chain 4: Iteration: 1600 / 2000 [ 80%]  (Sampling)
#> Chain 4: Iteration: 1800 / 2000 [ 90%]  (Sampling)
#> Chain 4: Iteration: 2000 / 2000 [100%]  (Sampling)
#> Chain 4: 
#> Chain 4:  Elapsed Time: 2.509 seconds (Warm-up)
#> Chain 4:                2.237 seconds (Sampling)
#> Chain 4:                4.746 seconds (Total)
#> Chain 4: 
summary(bayes)
#> Call:
#> phpe(formula = Surv(time, status) ~ arm, data = ipass, n_int = 10, 
#>     approach = "bayes")
#> 
#> Proportional hazards coefficients:
#>       mean se_mean    sd   2.5%    25%    50%    75%  97.5%   n_eff Rhat
#> arm -0.311   0.001 0.066 -0.442 -0.356 -0.311 -0.265 -0.185 3636.82    1
#> --- 
#> Inference for Stan model: yppe.
#> 4 chains, each with iter=2000; warmup=1000; thin=1; 
#> post-warmup draws per chain=1000, total post-warmup draws=4000.
#> 
# }