| Type: | Package |
| Title: | Model Diagnostics for Accelerated Failure Time Models |
| Version: | 4.5.3 |
| Date: | 2026-3-20 EDT |
| Maintainer: | Woojung Bae <matt.woojung@gmail.com> |
| Description: | A collection of model checking methods for semiparametric accelerated failure time (AFT) models under the rank-based approach. For the (computational) efficiency, Gehan's weight is used. It provides functions to verify whether the observed data fit the specific model assumptions such as a functional form of each covariate, a link function, and an omnibus test. The p-value offered in this package is based on the Kolmogorov-type supremum test and the variance of the proposed test statistics is estimated through the re-sampling method. Furthermore, a graphical technique to compare the shape of the observed residual to a number of the approximated realizations is provided. See the following references; A general model-checking procedure for semiparametric accelerated failure time models, Statistics and Computing, 34 (3), 117 <doi:10.1007/s11222-024-10431-7>; Diagnostics for semiparametric accelerated failure time models with R package 'afttest', arXiv, <doi:10.48550/arXiv.2511.09823>. |
| Depends: | R (≥ 3.4.0) |
| Imports: | survival, aftgee, ggplot2, gridExtra |
| LinkingTo: | Rcpp, RcppArmadillo |
| Suggests: | knitr, rmarkdown, testthat (≥ 3.0.0) |
| Config/testthat/edition: | 3 |
| License: | GPL (≥ 3) |
| URL: | https://github.com/WooJungBae/afttest |
| BugReports: | https://github.com/WooJungBae/afttest/issues |
| Encoding: | UTF-8 |
| Language: | en-US |
| RoxygenNote: | 7.3.2 |
| NeedsCompilation: | yes |
| Packaged: | 2026-03-22 15:14:20 UTC; woojung |
| Author: | Woojung Bae |
| Repository: | CRAN |
| Date/Publication: | 2026-03-22 15:40:02 UTC |
afttest: Diagnostics for Semiparametric Accelerated Failure Time Models
Description
The afttest package provides diagnostic tools for semiparametric accelerated failure time (AFT) models. It supports formal model checking and graphical assessment for fitted AFT models, providing a unified framework for evaluating model adequacy and interpreting results.
Details
The main interface is the generic function afttest, which
accepts either a formula or fitted model objects from the aftgee
package, including aftsrr and aftgee.
Implemented diagnostic procedures include:
-
Omnibus test (
testType = "omnibus"), for assessing overall model adequacy; -
Link function test (
testType = "link"), for evaluating the specified link function; -
Functional form test (
testType = "covForm"), for checking whether a continuous covariate is correctly specified.
The package supports diagnostic inference for:
rank-based estimators with non-smooth (
eqType = "ns") and induced-smoothed (eqType = "is") estimating equations;least-squares estimators (
estMethod = "ls") fit through generalized estimating equations.
For computational efficiency, afttest implements a fast multiplier
bootstrap procedure. When linApprox = TRUE, an asymptotic linear
approximation is used to avoid repeated iterative model fitting, substantially
reducing computation time relative to standard resampling with
linApprox = FALSE.
Author(s)
Maintainer: Woojung Bae matt.woojung@gmail.com (ORCID)
Authors:
References
Bae, W., Choi, D., Yan, J., & Kang, S. (2025). afttest: Model diagnostics for semiparametric accelerated failure time models in R. arXiv preprint arXiv:2511.09823.
Choi, D., Bae, W., Yan, J., & Kang, S. (2024). A general model-checking procedure for semiparametric accelerated failure time models. Statistics and Computing, 34(3), 117.
See Also
Useful links:
Model Diagnostics for Semiparametric AFT Models
Description
Performs model-checking procedures for a semiparametric AFT model. This is a generic function with methods for formulas and fitted objects from the aftgee package.
Usage
afttest(object, ...)
Arguments
object |
A formula or a fitted model object (e.g., from |
... |
Other arguments passed to methods. See the documentation for
|
Value
An object of class afttest or htest.
An object is a list containing at least the following components:
- beta
a vector of beta estimates based on
estMethod- hypothesis
null hypothesis for each
testType- SE_process
estimated standard error of the observed process
- obs_process
observed process
- apprx_process
approximated process
- obs_std_process
standardized observed process
- apprx_std_process
standardized approximated processes
- p_value
obtained by the unstandardized test
- p_std_value
obtained by the standardized test
- DF
a data frame of observed failure time, right censoring indicator, covariates (scaled), time-transformed residual based on beta estimates
- npath
the number of sample paths
- testType
testType
- eqType
eqType
- estMethod
estMethod
- npathsave
npathsave
For an omnibus test, the observed process and the realizations are composed of the n by n matrix where rows represent the t and columns represent the x in the time-transformed residual order. The observed process and the simulated processesfor checking a functional form and a link function are given by the n by 1 vectorwhich is a function of x in the time-transformed residual order.
Examples
library(survival)
library(aftgee)
library(afttest)
datgen <- function(n = 100) {
z1 <- rbinom(n, 1, 0.5)
z2 <- rnorm(n)
e <- rnorm(n)
tt <- exp(2 + z1 + z2 + 0.5 * z2^2 + e)
cen <- runif(n, 0, 100)
data.frame(Time = pmin(tt, cen), status = 1 * (tt < cen),
z1 = z1, z2 = z2, id = 1:n)
}
set.seed(1)
simdata <- datgen(300)
# --------------------------------------------------
# Method 1: Formula (Runs quickly for CRAN tests)
# --------------------------------------------------
result_form <- afttest(Surv(Time, status) ~ z1 + z2, data = simdata,
npath = 50, testType = "covForm", estMethod = "rr",
eqType = "ns", covTested = "z2", npathsave = 50,
linApprox = TRUE, seed = 1)
print(result_form)
plot(result_form, std = TRUE)
# --------------------------------------------------
# Method 2: Fitted aftsrr object (Induced Smoothing)
# --------------------------------------------------
fit_srr <- aftsrr(Surv(Time, status) ~ z1 + z2, data = simdata,
eqType = "is", rankWeights = "gehan")
result_srr <- afttest(fit_srr, data = simdata, npath = 100, testType = "covForm",
covTested = "z2", npathsave = 50,
linApprox = TRUE, seed = 1)
summary(result_srr)
plot(result_srr, std = FALSE)
# --------------------------------------------------
# Method 3: Fitted aftgee object (Least Squares)
# --------------------------------------------------
fit_gee <- aftgee(Surv(Time, status) ~ z1 + z2, data = simdata)
result_gee <- afttest(fit_gee, data = simdata, npath = 100, testType = "covForm",
covTested = "z2", npathsave = 50,
linApprox = TRUE, seed = 1)
print(result_gee)
# --------------------------------------------------
# Method 4: Standard Resampling (linApprox = FALSE)
# --------------------------------------------------
result_resamp <- afttest(Surv(Time, status) ~ z1 + z2, data = simdata,
npath = 100, testType = "covForm", estMethod = "rr",
eqType = "ns", covTested = "z2", npathsave = 50,
linApprox = FALSE, seed = 1)
summary(result_resamp)
Model Diagnostics for Generalized Estimating Equation (aftgee) Objects
Description
Model Diagnostics for Generalized Estimating Equation (aftgee) Objects
Usage
## S3 method for class 'aftgee'
afttest(
object,
data,
npath = 200,
testType = "omnibus",
eqType = "ls",
covTested = 1,
npathsave = 50,
linApprox = TRUE,
seed = NULL,
...
)
Arguments
object |
A fitted model object of class |
data |
An optional data frame in which to interpret the variables occurring in the formula. |
npath |
An integer value specifying the number of approximated processes. The default is given by 200. |
testType |
A character string specifying the type of the test. The following are permitted:
|
eqType |
A character string specifying the type of the estimating equation used to obtain the regression parameters. The readers are referred to the aftgee package for details. The following are permitted:
|
covTested |
A character string specifying the covariate which will be tested.
The argument |
npathsave |
An integer value specifying the number of paths saved among all the paths. The default is given by 50. Note that it requires a lot of memory if saving all sampled paths (N by N matrix for each npath, and so npath*N*N elements). |
linApprox |
A logical value. If |
seed |
An optional integer specifying the random seed for reproducibility. |
... |
Other arguments passed to methods. |
Model Diagnostics for Smooth Rank Regression (aftsrr) Objects
Description
Model Diagnostics for Smooth Rank Regression (aftsrr) Objects
Usage
## S3 method for class 'aftsrr'
afttest(
object,
data,
npath = 200,
testType = "omnibus",
eqType = "ns",
covTested = 1,
npathsave = 50,
linApprox = TRUE,
seed = NULL,
...
)
Arguments
object |
A fitted model object of class |
data |
An optional data frame in which to interpret the variables occurring in the formula. |
npath |
An integer value specifying the number of approximated processes. The default is given by 200. |
testType |
A character string specifying the type of the test. The following are permitted:
|
eqType |
A character string specifying the type of the estimating equation used to obtain the regression parameters. The readers are referred to the aftgee package for details. The following are permitted:
|
covTested |
A character string specifying the covariate which will be tested.
The argument |
npathsave |
An integer value specifying the number of paths saved among all the paths. The default is given by 50. Note that it requires a lot of memory if saving all sampled paths (N by N matrix for each npath, and so npath*N*N elements). |
linApprox |
A logical value. If |
seed |
An optional integer specifying the random seed for reproducibility. |
... |
Other arguments passed to methods. |
Model Diagnostics for AFT Models using Formulas
Description
Model Diagnostics for AFT Models using Formulas
Usage
## S3 method for class 'formula'
afttest(
object,
data,
npath = 200,
testType = "omnibus",
estMethod = "rr",
eqType = "ns",
covTested = 1,
npathsave = 50,
linApprox = TRUE,
seed = NULL,
...
)
Arguments
object |
A formula expression, of the form |
data |
An optional data frame in which to interpret the variables occurring in the formula. |
npath |
An integer value specifying the number of approximated processes. The default is given by 200. |
testType |
A character string specifying the type of the test. The following are permitted:
|
estMethod |
A character string specifying the type of the estimator used. The readers are referred to the aftgee package for details. The following are permitted:
|
eqType |
A character string specifying the type of the estimating equation used to obtain the regression parameters. The readers are referred to the aftgee package for details. The following are permitted:
|
covTested |
A character string specifying the covariate which will be tested.
The argument |
npathsave |
An integer value specifying the number of paths saved among all the paths. The default is given by 50. Note that it requires a lot of memory if saving all sampled paths (N by N matrix for each npath, and so npath*N*N elements). |
linApprox |
A logical value. If |
seed |
An optional integer specifying the random seed for reproducibility. |
... |
Other arguments passed to methods. |
Plotting Method for Semiparametric AFT Model Diagnostics
Description
Plotting Method for Semiparametric AFT Model Diagnostics
Usage
## S3 method for class 'afttest'
plot(x, npath = 50, std = TRUE, quantile = NULL, ...)
Arguments
x |
An object of class |
npath |
A numeric value specifying the number of approximated processes to plot. The default is set to 50. |
std |
A logical value specifying if the graph is based on
the standardized test statistics ( |
quantile |
A numeric vector specifying 5 quantiles within the range [0,1].
The default is set to |
... |
Other arguments passed to methods for future extension. |
Value
plot.afttest returns a plot based on the testType:
- omnibus
an x of the omnibus test is the form of n by n matrix, some quantiles of x, which are used in weight, are plotted for graphs, i.e. 10%, 25%, 50%, 75%, and 90% are used by default.
- link
an x of the link function test is the form of n by 1 matrix
- covForm
an x of the functional form test is the form of n by 1 matrix
See the documentation of ggplot2 and gridExtra for details.
Examples
library(survival)
library(aftgee)
library(afttest)
datgen <- function(n = 100) {
z1 <- rbinom(n, 1, 0.5)
z2 <- rnorm(n)
e <- rnorm(n)
tt <- exp(2 + z1 + z2 + 0.5 * z2^2 + e)
cen <- runif(n, 0, 100)
data.frame(Time = pmin(tt, cen), status = 1 * (tt < cen),
z1 = z1, z2 = z2, id = 1:n)
}
set.seed(1)
simdata <- datgen(300)
# --------------------------------------------------
# Method 1: Formula (Runs quickly for CRAN tests)
# --------------------------------------------------
result_form <- afttest(Surv(Time, status) ~ z1 + z2, data = simdata,
npath = 50, testType = "covForm", estMethod = "rr",
eqType = "ns", covTested = "z2", npathsave = 50,
linApprox = TRUE, seed = 1)
print(result_form)
plot(result_form, std = TRUE)
# --------------------------------------------------
# Method 2: Fitted aftsrr object (Induced Smoothing)
# --------------------------------------------------
fit_srr <- aftsrr(Surv(Time, status) ~ z1 + z2, data = simdata,
eqType = "is", rankWeights = "gehan")
result_srr <- afttest(fit_srr, data = simdata, npath = 100, testType = "covForm",
covTested = "z2", npathsave = 50,
linApprox = TRUE, seed = 1)
summary(result_srr)
plot(result_srr, std = FALSE)
# --------------------------------------------------
# Method 3: Fitted aftgee object (Least Squares)
# --------------------------------------------------
fit_gee <- aftgee(Surv(Time, status) ~ z1 + z2, data = simdata)
result_gee <- afttest(fit_gee, data = simdata, npath = 100, testType = "covForm",
covTested = "z2", npathsave = 50,
linApprox = TRUE, seed = 1)
print(result_gee)
# --------------------------------------------------
# Method 4: Standard Resampling (linApprox = FALSE)
# --------------------------------------------------
result_resamp <- afttest(Surv(Time, status) ~ z1 + z2, data = simdata,
npath = 100, testType = "covForm", estMethod = "rr",
eqType = "ns", covTested = "z2", npathsave = 50,
linApprox = FALSE, seed = 1)
summary(result_resamp)
Print Method for Semiparametric AFT Model Diagnostics
Description
Print Method for Semiparametric AFT Model Diagnostics
Usage
## S3 method for class 'afttest'
print(x, ...)
Arguments
x |
An object of class |
... |
Other arguments passed to methods. |
Value
print.afttest returns a summary of an afttest fit.
Examples
library(survival)
library(aftgee)
library(afttest)
datgen <- function(n = 100) {
z1 <- rbinom(n, 1, 0.5)
z2 <- rnorm(n)
e <- rnorm(n)
tt <- exp(2 + z1 + z2 + 0.5 * z2^2 + e)
cen <- runif(n, 0, 100)
data.frame(Time = pmin(tt, cen), status = 1 * (tt < cen),
z1 = z1, z2 = z2, id = 1:n)
}
set.seed(1)
simdata <- datgen(300)
# --------------------------------------------------
# Method 1: Formula (Runs quickly for CRAN tests)
# --------------------------------------------------
result_form <- afttest(Surv(Time, status) ~ z1 + z2, data = simdata,
npath = 50, testType = "covForm", estMethod = "rr",
eqType = "ns", covTested = "z2", npathsave = 50,
linApprox = TRUE, seed = 1)
print(result_form)
plot(result_form, std = TRUE)
# --------------------------------------------------
# Method 2: Fitted aftsrr object (Induced Smoothing)
# --------------------------------------------------
fit_srr <- aftsrr(Surv(Time, status) ~ z1 + z2, data = simdata,
eqType = "is", rankWeights = "gehan")
result_srr <- afttest(fit_srr, data = simdata, npath = 100, testType = "covForm",
covTested = "z2", npathsave = 50,
linApprox = TRUE, seed = 1)
summary(result_srr)
plot(result_srr, std = FALSE)
# --------------------------------------------------
# Method 3: Fitted aftgee object (Least Squares)
# --------------------------------------------------
fit_gee <- aftgee(Surv(Time, status) ~ z1 + z2, data = simdata)
result_gee <- afttest(fit_gee, data = simdata, npath = 100, testType = "covForm",
covTested = "z2", npathsave = 50,
linApprox = TRUE, seed = 1)
print(result_gee)
# --------------------------------------------------
# Method 4: Standard Resampling (linApprox = FALSE)
# --------------------------------------------------
result_resamp <- afttest(Surv(Time, status) ~ z1 + z2, data = simdata,
npath = 100, testType = "covForm", estMethod = "rr",
eqType = "ns", covTested = "z2", npathsave = 50,
linApprox = FALSE, seed = 1)
summary(result_resamp)
Summary Method for Semiparametric AFT Model Diagnostics
Description
Summary Method for Semiparametric AFT Model Diagnostics
Usage
## S3 method for class 'afttest'
summary(object, ...)
Arguments
object |
An object of class |
... |
Other arguments passed to methods. |
Value
summary.afttest returns a detailed summary of an afttest fit.
Examples
library(survival)
library(aftgee)
library(afttest)
datgen <- function(n = 100) {
z1 <- rbinom(n, 1, 0.5)
z2 <- rnorm(n)
e <- rnorm(n)
tt <- exp(2 + z1 + z2 + 0.5 * z2^2 + e)
cen <- runif(n, 0, 100)
data.frame(Time = pmin(tt, cen), status = 1 * (tt < cen),
z1 = z1, z2 = z2, id = 1:n)
}
set.seed(1)
simdata <- datgen(300)
# --------------------------------------------------
# Method 1: Formula (Runs quickly for CRAN tests)
# --------------------------------------------------
result_form <- afttest(Surv(Time, status) ~ z1 + z2, data = simdata,
npath = 50, testType = "covForm", estMethod = "rr",
eqType = "ns", covTested = "z2", npathsave = 50,
linApprox = TRUE, seed = 1)
print(result_form)
plot(result_form, std = TRUE)
# --------------------------------------------------
# Method 2: Fitted aftsrr object (Induced Smoothing)
# --------------------------------------------------
fit_srr <- aftsrr(Surv(Time, status) ~ z1 + z2, data = simdata,
eqType = "is", rankWeights = "gehan")
result_srr <- afttest(fit_srr, data = simdata, npath = 100, testType = "covForm",
covTested = "z2", npathsave = 50,
linApprox = TRUE, seed = 1)
summary(result_srr)
plot(result_srr, std = FALSE)
# --------------------------------------------------
# Method 3: Fitted aftgee object (Least Squares)
# --------------------------------------------------
fit_gee <- aftgee(Surv(Time, status) ~ z1 + z2, data = simdata)
result_gee <- afttest(fit_gee, data = simdata, npath = 100, testType = "covForm",
covTested = "z2", npathsave = 50,
linApprox = TRUE, seed = 1)
print(result_gee)
# --------------------------------------------------
# Method 4: Standard Resampling (linApprox = FALSE)
# --------------------------------------------------
result_resamp <- afttest(Surv(Time, status) ~ z1 + z2, data = simdata,
npath = 100, testType = "covForm", estMethod = "rr",
eqType = "ns", covTested = "z2", npathsave = 50,
linApprox = FALSE, seed = 1)
summary(result_resamp)