knitr::opts_chunk$set(collapse = TRUE, comment = "#") knitr::opts_chunk$set(dev = "png", dev.args = list(type = "cairo-png"))
require("lgpr") require("ggplot2") require("rstan")
In this tutorial we simulate and analyse a test data set which contains 8 case and 8 control individuals, and the disease effect on case individuals is modeled using
the disease-related age (diseaseAge
) as a covariate. The disease-related age is defined as age relative to the observed disease initiation. The disease effect is simulated so that
only 4 of the 8 case individuals are affected.
set.seed(1213) simData <- simulate_data(N = 16, t_data = seq(12, 72, by = 12), covariates = c( 0, 2,2,2), relevances = c(1,1,1, 1,0,0), lengthscales = c(18,24, 1, 18,18,18), t_effect_range = c(46,48), snr = 5, N_affected = 4, t_jitter = 0) plot_sim(simData) #plot_sim.component(simData,3)
Above, the blue line represents the data-generating signal and black dots are noisy observations of the response variable.
dat <- simData@data str(dat) simData@effect_times
We will define a formula where the term het(id)*gp_vm(diseaseAge)
declares that the gp_vm
term is heterogeneous and one level-specific magnitude parameter is needed for each level of id
.
formula <- y ~ zs(id)*gp(age) + gp(age) + het(id)*gp_vm(diseaseAge) + zs(z1)*gp(age) + zs(z2)*gp(age) + zs(z3)*gp(age)
Because diseaseAge
is NaN
for the control individuals, it is automatically taken into account that an individual-specific magnitude parameter is actually needed just for each case individual.
fit <- lgp(formula = formula, data = dat, prior = list(wrp = igam(14,5)), iter = 2000, chains = 4, cores = 4)
Printing the fit object summarizes the posterior
print(fit)
Printing the model information clarifies the model and priors
model_summary(fit)
We can visualize the posterior distribution of the individual-specific disease effect magnitude parameters for each case individual. We see that for individuals 1-4 the parameters are close to 1 (affected individuals) and for individuals 5-8 there is considerable posterior mass close to 0.
plot_beta(fit)
Finally we plot the inferred disease component, using posterior median hyperparameters, and see that the inferred effects have the same shape for all individuals, but are heterogeneous in magnitude.
t <- seq(0, 100, by = 1) x_pred <- new_x(dat, t, x_ns = "diseaseAge") p <- pred(fit, x_pred, verbose = FALSE, reduce = stats::median) plot_f(fit, pred = p, comp_idx = 3, color_by = 'diseaseAge')
sessionInfo()
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.