Learn R Programming

Multivariate Event Times (mets)

Implementation of various statistical models for multivariate event history data doi:10.1007/s10985-013-9244-x. Including multivariate cumulative incidence models doi:10.1002/sim.6016, and bivariate random effects probit models (Liability models) doi:10.1016/j.csda.2015.01.014. Modern methods for survival analysis, including regression modelling (Cox, Fine-Gray, Ghosh-Lin, Binomial regression) with fast computation of influence functions. Restricted mean survival time regression and years lost for competing risks. Average treatment effects and G-computation.

Installation

install.packages("mets")

The development version may be installed directly from github (requires Rtools on windows and development tools (+Xcode) for Mac OS X):

remotes::install_github("kkholst/mets", dependencies="Suggests")

or to get development version

remotes::install_github("kkholst/mets",ref="develop")

Citation

To cite the mets package please use one of the following references

Thomas H. Scheike and Klaus K. Holst and Jacob B. Hjelmborg (2013). Estimating heritability for cause specific mortality based on twin studies. Lifetime Data Analysis. http://dx.doi.org/10.1007/s10985-013-9244-x

Klaus K. Holst and Thomas H. Scheike Jacob B. Hjelmborg (2015). The Liability Threshold Model for Censored Twin Data. Computational Statistics and Data Analysis. http://dx.doi.org/10.1016/j.csda.2015.01.014

BibTeX:

@Article{,
  title={Estimating heritability for cause specific mortality based on twin studies},
  author={Scheike, Thomas H. and Holst, Klaus K. and Hjelmborg, Jacob B.},
  year={2013},
  issn={1380-7870},
  journal={Lifetime Data Analysis},
  doi={10.1007/s10985-013-9244-x},
  url={http://dx.doi.org/10.1007/s10985-013-9244-x},
  publisher={Springer US},
  keywords={Cause specific hazards; Competing risks; Delayed entry;
	    Left truncation; Heritability; Survival analysis},
  pages={1-24},
  language={English}

}

@Article{,
  title={The Liability Threshold Model for Censored Twin Data},
  author={Holst, Klaus K. and Scheike, Thomas H. and Hjelmborg, Jacob B.},
  year={2015},
  doi={10.1016/j.csda.2015.01.014},
  url={http://dx.doi.org/10.1016/j.csda.2015.01.014},
  journal={Computational Statistics and Data Analysis}
}

Examples: Twins Polygenic modelling

First considering standard twin modelling (ACE, AE, ADE, and more models)

 ace <- twinlm(y ~ 1, data=d, DZ="DZ", zyg="zyg", id="id")
 ace
 ## An AE-model could be fitted as
 ae <- twinlm(y ~ 1, data=d, DZ="DZ", zyg="zyg", id="id", type="ae")
 ## LRT:
 lava::compare(ae,ace)
 ## AIC
 AIC(ae)-AIC(ace)
 ## To adjust for the covariates we simply alter the formula statement
 ace2 <- twinlm(y ~ x1+x2, data=d, DZ="DZ", zyg="zyg", id="id", type="ace")
 ## Summary/GOF
 summary(ace2)

Examples: Twins Polygenic modelling time-to-events Data

In the context of time-to-events data we consider the "Liabilty Threshold model" with IPCW adjustment for censoring.

First we fit the bivariate probit model (same marginals in MZ and DZ twins but different correlation parameter). Here we evaluate the risk of getting cancer before the last double cancer event (95 years)

data(prt)
prt0 <-  force.same.cens(prt, cause="status", cens.code=0, time="time", id="id")
prt0$country <- relevel(prt0$country, ref="Sweden")
prt_wide <- fast.reshape(prt0, id="id", num="num", varying=c("time","status","cancer"))
prt_time <- subset(prt_wide,  cancer1 & cancer2, select=c(time1, time2, zyg))
tau <- 95
tt <- seq(70, tau, length.out=5) ## Time points to evaluate model in

b0 <- bptwin.time(cancer ~ 1, data=prt0, id="id", zyg="zyg", DZ="DZ", type="cor",
              cens.formula=Surv(time,status==0)~zyg, breaks=tau)
summary(b0)

Liability threshold model with ACE random effects structure

b1 <- bptwin.time(cancer ~ 1, data=prt0, id="id", zyg="zyg", DZ="DZ", type="ace",
           cens.formula=Surv(time,status==0)~zyg, breaks=tau)
summary(b1)

Examples: Twins Concordance for time-to-events Data


data(prt) ## Prostate data example (sim)

## Bivariate competing risk, concordance estimates
p33 <- bicomprisk(Event(time,status)~strata(zyg)+id(id),
                  data=prt, cause=c(2,2), return.data=1, prodlim=TRUE)

p33dz <- p33$model$"DZ"$comp.risk
p33mz <- p33$model$"MZ"$comp.risk

## Probability weights based on Aalen's additive model (same censoring within pair)
prtw <- ipw(Surv(time,status==0)~country+zyg, data=prt,
            obs.only=TRUE, same.cens=TRUE, 
            cluster="id", weight.name="w")

## Marginal model (wrongly ignoring censorings)
bpmz <- biprobit(cancer~1 + cluster(id), 
                 data=subset(prt,zyg=="MZ"), eqmarg=TRUE)

## Extended liability model
bpmzIPW <- biprobit(cancer~1 + cluster(id),
                    data=subset(prtw,zyg=="MZ"),
                    weights="w")
smz <- summary(bpmzIPW)

## Concordance
plot(p33mz,ylim=c(0,0.1),axes=FALSE, automar=FALSE,atrisk=FALSE,background=TRUE,background.fg="white")
axis(2); axis(1)

abline(h=smz$prob["Concordance",],lwd=c(2,1,1),col="darkblue")
## Wrong estimates:
abline(h=summary(bpmz)$prob["Concordance",],lwd=c(2,1,1),col="lightgray", lty=2)

Examples: Cox model, RMST

We can fit the Cox model and compute many useful summaries, such as restricted mean survival and stanardized treatment effects (G-estimation). First estimating the standardized survival

 data(bmt); bmt$time <- bmt$time+runif(408)*0.001
 bmt$event <- (bmt$cause!=0)*1
 dfactor(bmt) <- tcell.f~tcell

 ss <- phreg(Surv(time,event)~tcell.f+platelet+age,bmt) 
 summary(survivalG(ss,bmt,50))

 sst <- survivalGtime(ss,bmt,n=50)
 plot(sst,type=c("survival","risk","survival.ratio")[1])

Based on the phreg, that can be used to get the the Kaplan-Meier, we can also compute restricted mean survival times and years lost

 out1 <- phreg(Surv(time,cause!=0)~strata(tcell,platelet),data=bmt)
 
 rm1 <- resmean.phreg(out1,times=50)
 summary(rm1)
 par(mfrow=c(1,2))
 plot(rm1,se=1)
 plot(rm1,years.lost=TRUE,se=1)

and for competing risks the years lost can be decomposed into different causes

 ## years.lost decomposed into causes
 drm1 <- cif.yearslost(Event(time,cause)~strata(tcell,platelet),data=bmt,times=10*(1:6))
 par(mfrow=c(1,2)); plot(drm1,cause=1,se=1); plot(drm1,cause=2,se=1);
 summary(drm1)

Examples: Cox model IPTW

We can fit the Cox model with inverse probabilty of treatment weights based on logistic regression. The treatment weights can be time-dependent and then mutiplicative weights are applied.

library(mets)
 data(bmt); bmt$time <- bmt$time+runif(408)*0.001
 bmt$event <- (bmt$cause!=0)*1
 dfactor(bmt) <- tcell.f~tcell

 ss <- phreg_IPTW(Surv(time,event)~tcell.f,data=bmt,treat.model=tcell.f~platelet+age) 
 summary(ss)

Examples: Competing risks regression, Binomial Regression

We can fit the logistic regression model at a specific time-point with IPCW adjustment

 data(bmt); bmt$time <- bmt$time+runif(408)*0.001
 # logistic regresion with IPCW binomial regression 
 out <- binreg(Event(time,cause)~tcell+platelet,bmt,time=50)
 summary(out)

 predict(out,data.frame(tcell=c(0,1),platelet=c(1,1)),se=TRUE)

Examples: Competing risks regression, Fine-Gray/Logistic link

We can fit the Fine-Gray model and the logit-link competing risks model (using IPCW adjustment). Starting with the logit-link model

 data(bmt)
 bmt$time <- bmt$time+runif(nrow(bmt))*0.01
 bmt$id <- 1:nrow(bmt)

 ## logistic link  OR interpretation
 or=cifreg(Event(time,cause)~strata(tcell)+platelet+age,data=bmt,cause=1)
 summary(or)
 par(mfrow=c(1,2))
 ## to see baseline 
 plot(or)

 # predictions 
 nd <- data.frame(tcell=c(1,0),platelet=0,age=0)
 pll <- predict(or,nd)
 plot(pll)

Similarly, the Fine-Gray model can be estimated using IPCW adjustment

 ## Fine-Gray model
 fg=cifreg(Event(time,cause)~strata(tcell)+platelet+age,data=bmt,cause=1,propodds=NULL)
 summary(fg)
 ## baselines 
 plot(fg)
 nd <- data.frame(tcell=c(1,0),platelet=0,age=0)
 pfg <- predict(fg,nd,se=1)
 plot(pfg,se=1)

 ## influence functions of regression coefficients
 head(iid(fg))

and we can get standard errors for predictions based on the influence functions of the baseline and the regression coefiicients

baseid <- IIDbaseline.cifreg(fg,time=40)
FGprediid(baseid,nd)

further G-estimation can be done

 dfactor(bmt) <- tcell.f~tcell
 fg1 <- cifreg(Event(time,cause)~tcell.f+platelet+age,bmt,cause=1,propodds=NULL)
 summary(survivalG(fg1,bmt,50))

Examples: Marginal mean for recurrent events

We can estimate the expected number of events non-parametrically and get standard errors for this estimator

data(hfactioncpx12)
dtable(hfactioncpx12,~status)

gl1 <- recurrentMarginal(Event(entry,time,status)~strata(treatment)+cluster(id),hfactioncpx12,cause=1,death.code=2)
summary(gl1,times=1:5)
plot(gl1,se=1)

Examples: Ghosh-Lin for recurrent events

We can fit the Ghosh-Lin model for the expected number of events observed before dying (using IPCW adjustment and get predictions)

data(hfactioncpx12)
dtable(hfactioncpx12,~status)

gl1 <- recreg(Event(entry,time,status)~treatment+cluster(id),hfactioncpx12,cause=1,death.code=2)
summary(gl1)

## influence functions of regression coefficients
head(iid(gl1))

and we can get standard errors for predictions based on the influence functions of the baseline and the regression coefiicients

 nd=data.frame(treatment=levels(hfactioncpx12$treatment),id=1)
 pfg <- predict(gl1,nd,se=1)
 summary(pfg,times=1:5)
 plot(pfg,se=1)

and we can get the influence functions of the baseline and regression coefficients at a specific time-point

baseid <- IIDbaseline.recreg(gl1,time=2)
dd <- data.frame(treatment=levels(hfactioncpx12$treatment),id=1)
GLprediid(baseid,dd)

Examples: Fixed time modelling for recurrent events

We can fit a log-link regression model at 2 yeas for the expected number of events observed before dying (using IPCW adjustment)

data(hfactioncpx12)

e2 <- recregIPCW(Event(entry,time,status)~treatment+cluster(id),hfactioncpx12,cause=1,death.code=2,time=2)
summary(e2)

Examples: Regression for RMST/Restricted mean survival for survival and competing risks using IPCW

RMST can be computed using the Kaplan-Meier (via phreg) and the for competing risks via the cumulative incidence functions, but we can also get these estimates via IPCW adjustment and then we can do regression

 ### same as Kaplan-Meier for full censoring model 
 bmt$int <- with(bmt,strata(tcell,platelet))
 out <- resmeanIPCW(Event(time,cause!=0)~-1+int,bmt,time=30,
                         cens.model=~strata(platelet,tcell),model="lin")
 estimate(out)
 ## same as 
 out1 <- phreg(Surv(time,cause!=0)~strata(tcell,platelet),data=bmt)
 rm1 <- resmean.phreg(out1,times=30)
 summary(rm1)
 
 ## competing risks years-lost for cause 1  
 out1 <- resmeanIPCW(Event(time,cause)~-1+int,bmt,time=30,cause=1,
                       cens.model=~strata(platelet,tcell),model="lin")
 estimate(out1)
 ## same as 
 drm1 <- cif.yearslost(Event(time,cause)~strata(tcell,platelet),data=bmt,times=30)
 summary(drm1)

Examples: Average treatment effects (ATE) for survival or competing risks

We can compute ATE for survival or competing risks data for the probabilty of dying

 bmt$event <- bmt$cause!=0; dfactor(bmt) <- tcell~tcell
 brs <- binregATE(Event(time,cause)~tcell+platelet+age,bmt,time=50,cause=1,
	  treat.model=tcell~platelet+age)
 summary(brs)

or the the restricted mean survival (years-lost to different causes)

 out <- resmeanATE(Event(time,event)~tcell+platelet,data=bmt,time=40,treat.model=tcell~platelet)
 summary(out)
 
 out1 <- resmeanATE(Event(time,cause)~tcell+platelet,data=bmt,cause=1,time=40,
                    treat.model=tcell~platelet)
 summary(out1)

Copy Link

Version

Install

install.packages('mets')

Monthly Downloads

11,277

Version

1.3.6

License

GPL (>= 2)

Maintainer

Klaus Holst

Last Published

April 23rd, 2025

Functions in mets (1.3.6)

aalenfrailty

Aalen frailty model
base4cumhaz

rate of Mechanical (hole/defect) complication for catheter of HPN patients of Copenhagen
back2timereg

Convert to timereg object
WA_recurrent

While-Alive estimands for recurrent events
aalenMets

Fast additive hazards model with robust standard errors
TRACE

The TRACE study group of myocardial infarction
base44cumhaz

rate of Occlusion/Thrombosis complication for catheter of HPN patients of Copenhagen
LinSpline

Simple linear spline
base1cumhaz

rate of CRBSI for HPN patients of Copenhagen
blocksample

Block sampling
biprobit

Bivariate Probit model
basehazplot.phreg

Plotting the baselines of stratified Cox
bicomprisk

Estimation of concordance in bivariate competing risks data
binregCasewise

Estimates the casewise concordance based on Concordance and marginal estimate using binreg
binregATE

Average Treatment effect for censored competing risks data using Binomial Regression
binomial.twostage

Fits Clayton-Oakes or bivariate Plackett (OR) models for binary data using marginals that are on logistic form. If clusters contain more than two times, the algoritm uses a compososite likelihood based on all pairwise bivariate models.
binregG

G-estimator for binomial regression model (Standardized estimates)
binregTSR

2 Stage Randomization for Survival Data or competing Risks Data
binreg

Binomial Regression for censored competing risks data
cluster.index

Finds subjects related to same cluster
calgb8923

CALGB 8923, twostage randomization SMART design
cif

Cumulative incidence with robust standard errors
casewise.test

Estimates the casewise concordance based on Concordance and marginal estimate using timereg and performs test for independence
cifreg

CIF regression
bptwin

Liability model for twin data
casewise

Estimates the casewise concordance based on Concordance and marginal estimate using prodlim but no testing
concordanceCor

Concordance Computes concordance and casewise concordance
bmt

The Bone Marrow Transplant Data
cor.cif

Cross-odds-ratio, OR or RR risk regression for competing risks
daggregate

aggregating for for data frames
dcor

summary, tables, and correlations for data frames
dcut

Cutting, sorting, rm (removing), rename for data frames
count.history

Counts the number of previous events of two types for recurrent events processes
dermalridgesMZ

Dermal ridges data (monozygotic twins)
dby

Calculate summary statistics grouped by
divide.conquer

Split a data set and run function
dermalridges

Dermal ridges data (families)
diabetes

The Diabetic Retinopathy Data
divide.conquer.timereg

Split a data set and run function from timereg and aggregate
doubleFGR

Double CIF Fine-Gray model with two causes
dprint

list, head, print, tail
dsort

Sort data frame
dlag

Lag operator
dtransform

Transform that allows condition
drcumhaz

Rate for leaving HPN program for patients of Copenhagen
dtable

tables for data frames
drelevel

relev levels for data frames
dspline

Simple linear spline
dreg

Regression for data frames with dutility call
fast.approx

Fast approximation
ghaplos

ghaplos haplo-types for subjects of haploX data
fast.reshape

Fast reshape
familyclusterWithProbands.index

Finds all pairs within a cluster (famly) with the proband (case/control)
fast.pattern

Fast pattern
evalTerminal

Evaluates piece constant covariates at min(D,t) where D is a terminal event
familycluster.index

Finds all pairs within a cluster (family)
eventpois

Extract survival estimates from lifetable analysis
glm_IPTW

IPTW GLM, Inverse Probaibilty of Treatment Weighted GLM
gofZ.phreg

GOF for Cox covariates in PH regression
gof.phreg

GOF for Cox PH regression
gofM.phreg

GOF for Cox covariates in PH regression
hapfreqs

hapfreqs data set
haplo.surv.discrete

Discrete time to event haplo type analysis
gofG.phreg

Stratified baseline graphical GOF test for Cox covariates in PH regression
ipw2

Inverse Probability of Censoring Weights
km

Kaplan-Meier with robust standard errors
event.split

event.split (SurvSplit).
logitSurv

Proportional odds survival model
ipw

Inverse Probability of Censoring Weights
medweight

Computes mediation weights
easy.binomial.twostage

Fits two-stage binomial for describing depdendence in binomial data using marginals that are on logistic form using the binomial.twostage funcion, but call is different and easier and the data manipulation is build into the function. Useful in particular for family design data.
interval.logitsurv.discrete

Discrete time to event interval censored data
lifecourse

Life-course plot
lifetable.matrix

Life table
mediatorSurv

Mediation analysis in survival context
hfactioncpx12

hfaction, subset of block randmized study HF-ACtion from WA package
mena

Menarche data set
npc

For internal use
haploX

haploX covariates and response for haplo survival discrete survival
phregR

Fast Cox PH regression and calculations done in R to make play and adjustments easy
mlogit

Multinomial regression based on phreg regression
phreg_IPTW

IPTW Cox, Inverse Probaibilty of Treatment Weighted Cox regression
melanoma

The Melanoma Survival Data
plack.cif

plack Computes concordance for or.cif based model, that is Plackett random effects model
predictRisk.binreg

Risk predictions to work with riskRegression package
predict.phreg

Predictions from proportional hazards model
prob.exceed.recurrent

Estimation of probability of more that k events for recurrent events process
phreg

Fast Cox PH regression
phreg_rct

Lu-Tsiatis More Efficient Log-Rank for Randomized studies with baseline covariates
mets.options

Set global options for mets
multcif

Multivariate Cumulative Incidence Function example data set
np

np data set
mets-package

mets: Analysis of Multivariate Event Times
migr

Migraine data
plot.phreg

Plotting the baselines of stratified Cox
print.casewise

prints Concordance test
pmvn

Multivariate normal distribution function
predictRisk

Risk predictions to work with riskRegression package
prt

Prostate data set
resmean.phreg

Restricted mean for stratified Kaplan-Meier or Cox model with martingale standard errors
recurrentMarginal

Fast recurrent marginal mean when death is possible
rcrisk

Simulation of Piecewise constant hazard models with two causes (Cox).
recreg

Recurrent events regression with terminal event
rchazC

Piecewise constant hazard distribution
resmeanATE

Average Treatment effect for Restricted Mean for censored competing risks data using IPCW
resmeanIPCW

Restricted IPCW mean for censored survival data
rchaz

Simulation of Piecewise constant hazard model (Cox).
reexports

Objects exported from other packages
random.cif

Random effects model for competing risks data
simRecurrentTS

Simulation of recurrent events data based on cumulative hazards: Two-stage model
sim.cox

Simulation of output from Cox model.
simClaytonOakesWei

Simulate from the Clayton-Oakes frailty model
simAalenFrailty

Simulate from the Aalen Frailty model
simClaytonOakes

Simulate from the Clayton-Oakes frailty model
rpch

Piecewise constant hazard distribution
simMultistate

Simulation of illness-death model
simRecurrentII

Simulation of recurrent events data based on cumulative hazards II
sim.cause.cox

Simulation of cause specific from Cox models.
sim.cif

Simulation of output from Cumulative incidence regression model
twin.clustertrunc

Estimation of twostage model with cluster truncation in bivariate situation
twinlm

Classic twin model for quantitative traits
tetrachoric

Estimate parameters from odds-ratio
test.conc

Concordance test Compares two concordance estimates
summaryGLM

Reporting OR (exp(coef)) from glm with binomial link and glm predictions
survivalG

G-estimator for Cox and Fine-Gray model
survival.twostage

Twostage survival model for multivariate survival data
ttpd

ttpd discrete survival data on interval form
twinbmi

BMI data set
summary.cor

Summary for dependence models for competing risks
twinstut

Stutter data set
twostageMLE

Twostage survival model fitted by pseudo MLE
twinsim

Simulate twin data
ClaytonOakes

Clayton-Oakes model with piece-wise constant hazards
Bootphreg

Wild bootstrap for Cox PH regression
EventSplit2

Event split with two time-scales, time and gaptime
Event

Event history object
Dbvn

Derivatives of the bivariate normal cumulative distribution function
EVaddGam

Relative risk for additive gamma model
FG_AugmentCifstrata

Augmentation for Fine-Gray model based on stratified NPMLE Cif (Aalen-Johansen)
Effbinreg

Efficient IPCW for binary data
BinAugmentCifstrata

Augmentation for Binomial regression based on stratified NPMLE Cif (Aalen-Johansen)
ACTG175

ACTG175, block randmized study from speff2trial package
Grandom.cif

Additive Random effects model for competing risks data for polygenetic modelling