In this vignette, we show the cytoeffect
workflow for
both the full Bayesian hierarchical model and the parametric bootstrap
with the simplified model.
Simulate dataset.
set.seed(1)
df = simulate_data()
str(df)
#> tibble [800 × 7] (S3: tbl_df/tbl/data.frame)
#> $ donor : chr [1:800] "pid01" "pid01" "pid01" "pid01" ...
#> $ condition: Factor w/ 2 levels "control","treatment": 2 2 2 2 2 2 2 2 2 2 ...
#> $ m01 : num [1:800] 54 11 17 26 73 49 44 100 235 32 ...
#> $ m02 : num [1:800] 19 0 11 21 32 3 7 78 52 32 ...
#> $ m03 : num [1:800] 7 0 11 29 4 16 7 1 4 8 ...
#> $ m04 : num [1:800] 2 1 0 50 3 0 0 6 4 0 ...
#> $ m05 : num [1:800] 10 0 3 0 7 4 2 1 4 11 ...
df
#> # A tibble: 800 × 7
#> donor condition m01 m02 m03 m04 m05
#> <chr> <fct> <dbl> <dbl> <dbl> <dbl> <dbl>
#> 1 pid01 treatment 54 19 7 2 10
#> 2 pid01 treatment 11 0 0 1 0
#> 3 pid01 treatment 17 11 11 0 3
#> 4 pid01 treatment 26 21 29 50 0
#> 5 pid01 treatment 73 32 4 3 7
#> 6 pid01 treatment 49 3 16 0 4
#> 7 pid01 treatment 44 7 7 0 2
#> 8 pid01 treatment 100 78 1 6 1
#> 9 pid01 treatment 235 52 4 4 4
#> 10 pid01 treatment 32 32 8 0 11
#> # … with 790 more rows
condition = "condition"
group = "donor"
protein_names = names(df)[3:ncol(df)]
Sample from posterior distribution using Stan.
fit = poisson_lognormal(df,
protein_names = protein_names,
condition = condition,
group = group,
r_donor = 2,
warmup = 200, iter = 325, adapt_delta = 0.8,
num_chains = 1)
#>
#> SAMPLING FOR MODEL 'poisson' NOW (CHAIN 1).
#> Chain 1:
#> Chain 1: Gradient evaluation took 0.000562 seconds
#> Chain 1: 1000 transitions using 10 leapfrog steps per transition would take 5.62 seconds.
#> Chain 1: Adjust your expectations accordingly!
#> Chain 1:
#> Chain 1:
#> Chain 1: Iteration: 1 / 325 [ 0%] (Warmup)
#> Chain 1: Iteration: 32 / 325 [ 9%] (Warmup)
#> Chain 1: Iteration: 64 / 325 [ 19%] (Warmup)
#> Chain 1: Iteration: 96 / 325 [ 29%] (Warmup)
#> Chain 1: Iteration: 128 / 325 [ 39%] (Warmup)
#> Chain 1: Iteration: 160 / 325 [ 49%] (Warmup)
#> Chain 1: Iteration: 192 / 325 [ 59%] (Warmup)
#> Chain 1: Iteration: 201 / 325 [ 61%] (Sampling)
#> Chain 1: Iteration: 232 / 325 [ 71%] (Sampling)
#> Chain 1: Iteration: 264 / 325 [ 81%] (Sampling)
#> Chain 1: Iteration: 296 / 325 [ 91%] (Sampling)
#> Chain 1: Iteration: 325 / 325 [100%] (Sampling)
#> Chain 1:
#> Chain 1: Elapsed Time: 69.3013 seconds (Warm-up)
#> Chain 1: 56.5236 seconds (Sampling)
#> Chain 1: 125.825 seconds (Total)
#> Chain 1:
Plot marginal credible intervals.
plot(fit, type = "theta")
plot(fit, type = "beta")
plot_pairs(fit, "m01", "m02", "m03")
plot(fit, type = "sigma")
#> New names:
#> • `` -> `...1`
#> • `` -> `...2`
#> • `` -> `...3`
#> • `` -> `...4`
#> • `` -> `...5`
#> • `` -> `...6`
#> • `` -> `...7`
#> • `` -> `...8`
#> • `` -> `...9`
#> • `` -> `...10`
#> • `` -> `...11`
#> • `` -> `...12`
#> • `` -> `...13`
#> • `` -> `...14`
#> • `` -> `...15`
#> • `` -> `...16`
#> • `` -> `...17`
#> • `` -> `...18`
#> • `` -> `...19`
#> • `` -> `...20`
#> • `` -> `...21`
#> • `` -> `...22`
#> • `` -> `...23`
#> • `` -> `...24`
#> • `` -> `...25`
#> • `` -> `...26`
#> • `` -> `...27`
#> • `` -> `...28`
#> • `` -> `...29`
#> • `` -> `...30`
#> • `` -> `...31`
#> • `` -> `...32`
#> • `` -> `...33`
#> • `` -> `...34`
#> • `` -> `...35`
#> • `` -> `...36`
#> • `` -> `...37`
#> • `` -> `...38`
#> • `` -> `...39`
#> • `` -> `...40`
#> • `` -> `...41`
#> • `` -> `...42`
#> • `` -> `...43`
#> • `` -> `...44`
#> • `` -> `...45`
#> • `` -> `...46`
#> • `` -> `...47`
#> • `` -> `...48`
#> • `` -> `...49`
#> • `` -> `...50`
#> • `` -> `...51`
#> • `` -> `...52`
#> • `` -> `...53`
#> • `` -> `...54`
#> • `` -> `...55`
#> • `` -> `...56`
#> • `` -> `...57`
#> • `` -> `...58`
#> • `` -> `...59`
#> • `` -> `...60`
#> • `` -> `...61`
#> • `` -> `...62`
#> • `` -> `...63`
#> • `` -> `...64`
#> • `` -> `...65`
#> • `` -> `...66`
#> • `` -> `...67`
#> • `` -> `...68`
#> • `` -> `...69`
#> • `` -> `...70`
#> • `` -> `...71`
#> • `` -> `...72`
#> • `` -> `...73`
#> • `` -> `...74`
#> • `` -> `...75`
#> • `` -> `...76`
#> • `` -> `...77`
#> • `` -> `...78`
#> • `` -> `...79`
#> • `` -> `...80`
#> • `` -> `...81`
#> • `` -> `...82`
#> • `` -> `...83`
#> • `` -> `...84`
#> • `` -> `...85`
#> • `` -> `...86`
#> • `` -> `...87`
#> • `` -> `...88`
#> • `` -> `...89`
#> • `` -> `...90`
#> • `` -> `...91`
#> • `` -> `...92`
#> • `` -> `...93`
#> • `` -> `...94`
#> • `` -> `...95`
#> • `` -> `...96`
#> • `` -> `...97`
#> • `` -> `...98`
#> • `` -> `...99`
#> • `` -> `...100`
#> • `` -> `...101`
#> • `` -> `...102`
#> • `` -> `...103`
#> • `` -> `...104`
#> • `` -> `...105`
#> • `` -> `...106`
#> • `` -> `...107`
#> • `` -> `...108`
#> • `` -> `...109`
#> • `` -> `...110`
#> • `` -> `...111`
#> • `` -> `...112`
#> • `` -> `...113`
#> • `` -> `...114`
#> • `` -> `...115`
#> • `` -> `...116`
#> • `` -> `...117`
#> • `` -> `...118`
#> • `` -> `...119`
#> • `` -> `...120`
#> • `` -> `...121`
#> • `` -> `...122`
#> • `` -> `...123`
#> • `` -> `...124`
#> • `` -> `...125`
plot(fit, type = "Cor")
#> [[1]]
#>
#> [[2]]
Multivariate DiSTATIS plot.
plot_distatis(fit, ndraws = 125)
#> Warning: The `.dots` argument of `group_by()` is deprecated as of dplyr 1.0.0.
#> ℹ The deprecated feature was likely used in the dplyr package.
#> Please report the issue at <
Fit model using composite maximum likelihood estimatation.
fit = poisson_lognormal_mcle(df,
protein_names = protein_names,
condition = condition,
group = group,
ncores = 1)
Plot marginal credible intervals.
plot(fit, type = "beta")
#> New names:
#> • `` -> `...1`
#> • `` -> `...2`
#> • `` -> `...3`
#> • `` -> `...4`
#> • `` -> `...5`
#> • `` -> `...6`
#> • `` -> `...7`
#> • `` -> `...8`
plot(fit, type = "sigma")
#> New names:
#> • `` -> `...1`
#> • `` -> `...2`
#> • `` -> `...3`
#> • `` -> `...4`
#> • `` -> `...5`
#> • `` -> `...6`
#> • `` -> `...7`
#> • `` -> `...8`
plot(fit, type = "Cor")
Multivariate DiSTATIS plot.
plot_distatis(fit, ndraws = 125)