Skip to main content
Skip table of contents

Joint models for non-continuous outcomes

Details on the different types of models for non-continuous data in Simulx and their syntax are given on these pages:

Detailed descriptions of the library of non-continuous data models integrated within Simulx are given here:

On the current page, we show examples of joint models combining continuous and non-continuous outcomes from the Simulx demos.

Joint model for continuous PK and categorical PD data

  • 7.2.categorical/PKcategorical.smlx

In this PK/PD demo, the PD is represented by three severity levels: 1 (Low), 2 (Medium) and 3 (High). The severity levels are modeled via a probability distribution for each category. As the categories are ordered, cumulative odds ratios are used in the model definition. The concentration of the PK model is affecting the probabilities via an effect compartment to mimic an effect delay.

Let be the PD level for patient i at time . We can then use a proportional odds model for modeling this categorical data:

where is the predicted concentration of warfarin in the effect compartment at time t for patient i with PK parameters . This model defines a probability distribution for if .
If , the probability of low PCA at time increases along with the predicted concentration .

The full model implemented in the model includes the joint structural model and a statistical model with random effects on the PK parameters and , and an effect of the wt covariate (weight) on V and Cl:

CODE
[COVARIATE]
input = wt

EQUATION:
lw70 = log(wt/70)

[INDIVIDUAL]
input = {Tlag_pop, omega_Tlag, ka_pop, omega_ka, V_pop, beta_V_lw70, lw70, omega_V, Cl_pop, beta_Cl_lw70, omega_Cl, ke0_pop, omega_ke0, alpha_pop, omega_alpha, beta_pop, gamma_pop}

DEFINITION:
Tlag = {distribution=logNormal, typical=Tlag_pop, sd=omega_Tlag}
ka = {distribution=logNormal, typical=ka_pop, sd=omega_ka}
V = {distribution=logNormal, typical=V_pop, covariate=lw70, coefficient=beta_V_lw70, sd=omega_V}
Cl = {distribution=logNormal, typical=Cl_pop, covariate=lw70, coefficient=beta_Cl_lw70, sd=omega_Cl}
ke0 = {distribution=logNormal, typical=ke0_pop, sd=omega_ke0}
alpha = {distribution=normal, typical=alpha_pop, sd=omega_alpha}
beta = {distribution=normal, typical=beta_pop, no-variability}
gamma = {distribution=logNormal, typical=gamma_pop, no-variability}

[LONGITUDINAL]
input = {Tlag, ka, V, Cl, ke0, alpha, beta, gamma, a, b}

EQUATION:
{Cc,Ce} = pkmodel(Tlag,ka,V,Cl,ke0)
lp1 = alpha + beta*Ce
lp2 = lp1+ gamma         ; gamma >= 0

DEFINITION:
Level = {type = categorical, categories={1,2,3}, logit(P(Level<=1)) = lp1, logit(P(Level<=2)) = lp2}
Conc = {distribution=normal, prediction=Cc, errorModel=combined1(a, b)}

OUTPUT:
output = {Cc, Conc, Level}

Two simulation groups are defined: multiple and single dose.

See Categorical data models for more details about categorical data models.

Joint model for continuous PK and count PD data

  • 7.3.count/PKcount.smlx

In this demo, we observe how the number of seizures per week decreases when two different dosing regimens of a drug are given. The number of seizures per week is described using a Poisson distribution, assuming that the Poisson parameter is function of the predicted concentration. For any individual i, we have

where is the predicted concentration for individual i at time t and

The joint model is implemented in the model file, along with a statistical model with random effect on the PK parameters and :

CODE
[INDIVIDUAL]
input = {V_pop, omega_V, k_pop, omega_k, ke0_pop, lambda0_pop, omega_lambda0, IC50_pop}

DEFINITION:
V= {distribution=logNormal, typical=V_pop, sd=omega_V}
k = {distribution=logNormal, typical=k_pop, sd=omega_k}
ke0 = {distribution=logNormal, typical=ke0_pop, no-variability}
lambda0 = {distribution=logNormal, typical=lambda0_pop, sd=omega_lambda0}
IC50 = {distribution=logNormal, typical=IC50_pop, no-variability}

[LONGITUDINAL]
input = {V, k, ke0, lambda0, IC50}

PK:
{Cc,Ce} = pkmodel(V, k, ke0)

EQUATION:
; time evolution
lambda = lambda0 * (1 - Ce/(Ce+IC50))

DEFINITION:
CountNumber = {type=count, log(P(CountNumber=k)) = k*log(lambda) - lambda - factln(k)}

OUTPUT:
output = CountNumber

See Count data models for more details about count data models.

Joint model for continuous PK and time-to-event data

  • 7.1.tte/PKrtte.smlx

In this demo, a joint PK-TTE model is used to capture Hemorrhaging adverse events induced by drug concentration following multiple doses.

We use a Weibull model for the events count data, assuming that the baseline is function of the predicted concentration. For any individual i, we define the hazard function as

where is the predicted concentration for individual i at time t. The joint model is implemented in the model file, that includes also a statistical model with random effects on the PK parameters and a proportional error model for the simulated PK:

CODE
[INDIVIDUAL]
input = {ka_pop, omega_ka, V_pop, omega_V, Cl_pop, omega_Cl, gamma_pop, beta_pop}

DEFINITION:
ka = {distribution=logNormal, typical=ka_pop, sd=omega_ka}
V = {distribution=logNormal, typical=V_pop, sd=omega_V}
Cl = {distribution=logNormal, typical=Cl_pop, sd=omega_Cl}
gamma = {distribution=logNormal, typical=gamma_pop, no-variability}
beta = {distribution=logNormal, typical=beta_pop, no-variability}

[LONGITUDINAL]
input = {b}

DESCRIPTION: PK + repeated event 
input  = {ka, V, Cl, gamma, beta}  

EQUATION:
Cc = pkmodel(ka, V, Cl)
if t<0.1
  h = 0
else
  h = gamma*Cc*(t^(beta-1))
end

DEFINITION:
Hemorrhaging  = {type=event, hazard=h}

OUTPUT:
output = {Cc, Hemorrhaging}


DEFINITION:
y = {distribution=normal, prediction=Cc, errorModel=proportional(b)}

See Time-to-event data models for more details about time-to-event data models.

JavaScript errors detected

Please note, these errors can depend on your browser setup.

If this problem persists, please contact our support.