Skip to contents

Estimates the terminal half-life of a drug using pooled pharmacokinetic data. The method supports analysis based on first-dose, repeated-dose, or combined dosing profiles.

Usage

get_hf(dat, dose_type = "first_dose", pooled = NULL, verbose = TRUE, ...)

Arguments

dat

A data frame containing raw time–concentration data in the standard nlmixr2 format.

dose_type

Specifies the dosing context of the pharmacokinetic observations. Classified as:

  • first_dose: observations occur only after the initial administration

  • repeated_doses: observations occur only after multiple administrations or at steady state

  • combined_doses: observations include both first-dose and repeated-dose intervals

pooled

Optional pooled data object generated by get_pooled_data. If not provided, pooled data are automatically created using the input dataset.

verbose

Logical; if TRUE (default), progress and completion messages are printed to the console. Set to FALSE to suppress all informational messages, for example when running automated scripts or tests.

...

Additional arguments passed to bin.time for pooling operations or to find_best_lambdaz for elimination slope estimation.

Value

A list containing individual and median half-life estimates for first-dose, repeated-dose, and combined dosing profiles.

Details

The function estimates terminal half-life using the following procedure:

  • Generate or use existing pooled pharmacokinetic data

  • Identify the terminal phase using elimination slope estimation

  • Calculate the terminal elimination rate constant (lambda_z)

  • Derive half-life using:

$$ t_{1/2} = \frac{\log(2)}{\lambda_z} $$

Author

Zhonghui Huang

Examples

dat <- Bolus_1CPT
dat <- processData(dat)$dat
#> 
#> 
#> Infometrics                               Value          
#> ----------------------------------------  ---------------
#> Dose Route                                bolus          
#> Dose Type                                 combined_doses 
#> Number of Subjects                        120            
#> Number of Observations                    6951           
#> Subjects with First-Dose Interval Data    120            
#> Observations in the First-Dose Interval   2276           
#> Subjects with Multiple-Dose Data          120            
#> Observations after Multiple Doses         4675           
#> ----------------------------------------  ------
get_hf(dat, dose_type = "combined_doses")
#> Estimating half-life....................
#> Half-life estimation complete: Estimated t1/2 = 11.26 h
#> $half_life_median
#> [1] 11.26
#> 
#> $half_life_fd
#> [1] 11.00072
#> 
#> $half_life_md
#> [1] 11.47287
#> 
#> $half_life_all
#> [1] 11.26485
#> 
#> $slope_results_fd
#> $slope_results_fd$lambdaz
#> [1] 0.06300926
#> 
#> $slope_results_fd$intercept
#> [1] -4.199239
#> 
#> $slope_results_fd$method
#> [1] "find_best_lambdaz"
#> 
#> $slope_results_fd$UsedPoints
#> [1] 9
#> 
#> $slope_results_fd$adj.r.squared
#> [1] 0.9973679
#> 
#> $slope_results_fd$message
#> [1] "Selected 9 points (higher Rsquare) Rsquare=0.9974 lambdaz=0.0630"
#> 
#> $slope_results_fd$slopefit
#> 
#> Call:
#> lm(formula = log(conc[subset]) ~ time[subset])
#> 
#> Coefficients:
#>  (Intercept)  time[subset]  
#>     -4.19924      -0.06301  
#> 
#> 
#> 
#> $slope_results_md
#> $slope_results_md$lambdaz
#> [1] 0.06041619
#> 
#> $slope_results_md$intercept
#> [1] -3.929461
#> 
#> $slope_results_md$method
#> [1] "find_best_lambdaz"
#> 
#> $slope_results_md$UsedPoints
#> [1] 9
#> 
#> $slope_results_md$adj.r.squared
#> [1] 0.9956069
#> 
#> $slope_results_md$message
#> [1] "Selected 9 points (higher Rsquare) Rsquare=0.9956 lambdaz=0.0604"
#> 
#> $slope_results_md$slopefit
#> 
#> Call:
#> lm(formula = log(conc[subset]) ~ time[subset])
#> 
#> Coefficients:
#>  (Intercept)  time[subset]  
#>     -3.92946      -0.06042  
#> 
#> 
#> 
#> $slope_results_all
#> $slope_results_all$lambdaz
#> [1] 0.06153184
#> 
#> $slope_results_all$intercept
#> [1] -4.021999
#> 
#> $slope_results_all$method
#> [1] "find_best_lambdaz"
#> 
#> $slope_results_all$UsedPoints
#> [1] 9
#> 
#> $slope_results_all$adj.r.squared
#> [1] 0.9904207
#> 
#> $slope_results_all$message
#> [1] "Selected 9 points (higher Rsquare) Rsquare=0.9904 lambdaz=0.0615"
#> 
#> $slope_results_all$slopefit
#> 
#> Call:
#> lm(formula = log(conc[subset]) ~ time[subset])
#> 
#> Coefficients:
#>  (Intercept)  time[subset]  
#>     -4.02200      -0.06153  
#> 
#> 
#>