Last updated: 2020-05-29
Checks: 7 0
Knit directory: cause/
This reproducible R Markdown analysis was created with workflowr (version 1.4.0.9000). The Checks tab describes the reproducibility checks that were applied when the results were created. The Past versions tab lists the development history.
Great! Since the R Markdown file has been committed to the Git repository, you know the exact version of the code that produced these results.
Great job! The global environment was empty. Objects defined in the global environment can affect the analysis in your R Markdown file in unknown ways. For reproduciblity it’s best to always run the code in an empty environment.
The command set.seed(20181014)
was run prior to running the code in the R Markdown file. Setting a seed ensures that any results that rely on randomness, e.g. subsampling or permutations, are reproducible.
Great job! Recording the operating system, R version, and package versions is critical for reproducibility.
Nice! There were no cached chunks for this analysis, so you can be confident that you successfully produced the results during this run.
Great job! Using relative paths to the files within your workflowr project makes it easier to run your code on other machines.
Great! You are using Git for version control. Tracking code development and connecting the code version to the results is critical for reproducibility. The version displayed above was the version of the Git repository at the time these results were generated.
Note that you need to be careful to ensure that all relevant files for the analysis have been committed to Git prior to generating the results (you can use wflow_publish
or wflow_git_commit
). workflowr only checks the R Markdown file, but you know if there are other scripts or data files that it depends on. Below is the status of the Git repository when the results were generated:
Ignored files:
Ignored: .Rhistory
Ignored: .Rproj.user/
Ignored: sim_results/
Ignored: src/RcppExports.o
Ignored: src/cause.so
Ignored: src/log_likelihood_functions.o
Untracked files:
Untracked: analysis/figure/little_test.Rmd/
Untracked: cause.Rcheck/
Untracked: docs/cause.bib
Untracked: docs/figure/cause_figure_1_standalone.pdf
Untracked: gwas_data/
Untracked: ll_v7_notes.Rmd
Untracked: test_A.RDS
Untracked: test_A_answer1.RDS
Untracked: test_A_answer3.RDS
Untracked: test_fit2.RDS
Untracked: test_mix_grid_new.RDS
Untracked: test_params3_warm.RDS
Untracked: test_params_orig.RDS
Untracked: test_w.RDS
Untracked: tests/
Unstaged changes:
Modified: R/est_cause_params.R
Modified: R/map_pi_rho.R
Modified: analysis/gwas_pairs_2.Rmd
Modified: example_data/LDL_CAD_merged.RDS
Note that any generated files, e.g. HTML, png, CSS, etc., are not included in this status report because it is ok for generated content to have uncommitted changes.
These are the previous versions of the R Markdown and HTML files. If you’ve configured a remote Git repository (see ?wflow_git_remote
), click on the hyperlinks in the table below to view them.
File | Version | Author | Date | Message |
---|---|---|---|---|
Rmd | 3c9571d | Jean Morrison | 2020-05-29 | wflow_publish(“analysis/ldl_cad.Rmd”) |
html | 70e2b97 | Jean Morrison | 2019-12-05 | Build site. |
Rmd | b1c1567 | Jean Morrison | 2019-08-07 | update vignette to use new formatting code |
html | 1a90dd6 | Jean Morrison | 2019-07-16 | Build site. |
Rmd | 02aa566 | Jean Morrison | 2019-07-16 | wflow_publish(“analysis/ldl_cad.Rmd”) |
html | 1702acc | Jean Morrison | 2019-07-12 | Build site. |
html | 02bc6d3 | Jean Morrison | 2019-07-10 | Build site. |
Rmd | 28d211f | Jean Morrison | 2019-07-10 | wflow_publish(“analysis/ldl_cad.Rmd”) |
html | bfa7d28 | Jean Morrison | 2019-07-10 | Build site. |
Rmd | d8f89fc | Jean Morrison | 2019-07-10 | wflow_publish(“analysis/ldl_cad.Rmd”) |
html | 3b5c7e2 | Jean Morrison | 2019-06-25 | Build site. |
Rmd | a55827d | Jean Morrison | 2019-06-25 | wflow_publish(files = c(“analysis/index.Rmd”, “analysis/ldl_cad.Rmd”)) |
html | d8d1486 | Jean Morrison | 2019-06-25 | Build site. |
Rmd | e0a6df4 | Jean Morrison | 2019-06-25 | wflow_publish(files = c(“analysis/ldl_cad.Rmd”)) |
html | 33b3732 | Jean Morrison | 2019-06-25 | Build site. |
Rmd | 0e35268 | Jean Morrison | 2019-06-25 | wflow_publish(files = c(“analysis/ldl_cad.Rmd”)) |
html | 286f4e9 | Jean Morrison | 2019-06-25 | Build site. |
Rmd | 8f3b82e | Jean Morrison | 2019-06-25 | wflow_publish(files = c(“analysis/about.Rmd”, “analysis/index.Rmd”, “analysis/ldl_cad.Rmd”, “analysis/license.Rmd”, |
html | 1753b22 | Jean Morrison | 2018-11-10 | update website |
html | 2eb09d8 | Jean Morrison | 2018-11-06 | added new option for a truncated prior on q |
html | 4a8f76c | Jean Morrison | 2018-11-06 | Build site. |
Rmd | 2652be1 | Jean Morrison | 2018-11-06 | wflow_publish(“analysis/ldl_cad.Rmd”) |
html | 6ae7a60 | Jean Morrison | 2018-10-25 | build website |
Rmd | 48bdf21 | Jean Morrison | 2018-10-25 | fixing warnings |
Rmd | 8c57c8a | Jean Morrison | 2018-10-25 | build website |
html | 8c57c8a | Jean Morrison | 2018-10-25 | build website |
Rmd | a34393d | Jean Morrison | 2018-10-25 | build website |
html | a34393d | Jean Morrison | 2018-10-25 | build website |
html | 6354c35 | Jean Morrison | 2018-10-23 | Build site. |
Rmd | 24510f1 | Jean Morrison | 2018-10-23 | small language changes |
Rmd | d050da8 | Jean Morrison | 2018-10-23 | wflow_publish(“analysis/ldl_cad.Rmd”) |
html | bbe4901 | Jean Morrison | 2018-10-17 | Build site. |
Rmd | 558cd32 | Jean Morrison | 2018-10-17 | wflow_publish(“analysis/ldl_cad.Rmd”) |
html | 73690eb | Jean Morrison | 2018-10-17 | Build site. |
Rmd | 1a891e3 | Jean Morrison | 2018-10-17 | wflow_publish(“analysis/ldl_cad.Rmd”) |
Rmd | d10191f | Jean Morrison | 2018-10-17 | wflow_git_commit(“analysis/ldl_cad.Rmd”) |
This document will walk through a real genome-sized example of how to use CAUSE. Some of the steps will take 5-10 minutes. The LD pruning steps will benefit from access to a cluster or multiple cores. For steps that require long computation we also provide output files that can be downloaded to make it easier to run through the example.
We will be analyzing GWAS data for LDL cholesterol and for coronary artery disease to test for a causal relationship of LDL on CAD. The analysis will have the following steps:
Step 3 will require LD information estimated from the 1000 Genomes CEU population using LDshrink here. LD data are about 11 Gb. The GWAS data we will use are about 320 Gb. However, in this tutorial you will be able to skip the large data steps and simply download the results.
In R
devtools::install_github("jean997/cause")
This version of CAUSE rquires mixsqp-0.1-97
.
We will use read_tsv
to read in summary statistics for a GWAS of LDL cholesterol and a GWAS of coronary artery disease from the internet. We will then combine these and format them for use with CAUSE. First read in the data. For LDL Cholesterol, we use summary statistics from Willer et al (2013) [PMID: 24097068]. For CAD we use summary statistics from van der Harst et al. (2017) [PMID: 29212778]. Downloading and formatting the data takes several minutes. If you want to skip this step, we provide a formatted data file that you can download below.
library(readr)
library(dplyr)
Attaching package: 'dplyr'
The following objects are masked from 'package:stats':
filter, lag
The following objects are masked from 'package:base':
intersect, setdiff, setequal, union
library(cause)
X1 <- read_tsv("http://csg.sph.umich.edu/abecasis/public/lipids2013/jointGwasMc_LDL.txt.gz")
X2 <- read_tsv("ftp://ftp.ebi.ac.uk/pub/databases/gwas/summary_statistics/vanderHarstP_29212778_GCST005194/CAD_META.gz")
CAUSE needs the following information from each data set: SNP or variant ID, effect size, and standard error, effect allele and other allele. For convenience, we provide a simple function that will merge data sets and produce a cause_data
object that can be used with later functions. This step and the rest of the analysis are done in R.
The function gwas_merge
will try to merge two data sets and and align effect sizes to correspond to the same allele. It will remove variants with ambiguous alleles (G/C or A/T) or with alleles that do not match between data sets (e.g A/G in one data set and A/C in the other). It will also remove variants that are duplicated in either data set. It will not remove variants that are simply strand flipped between the two data sets (e. g. A/C in one data set, T/G in the other).
LDL column headers:
CAD column headers:
X <- gwas_merge(X1, X2, snp_name_cols = c("rsid", "oldID"),
beta_hat_cols = c("beta", "Effect"),
se_cols = c("se", "StdErr"),
A1_cols = c("A1", "Allele1"),
A2_cols = c("A2", "Allele2"))
Alternatively, you can download already formatted data here and read it in using readRDS
.
system("mkdir example_data/")
download.file("https://github.com/jean997/cause/blob/master/example_data/LDL_CAD_merged.RDS", destfile = "example_data/LDL_CAD_merged.RDS")
X <- readRDS("example_data/LDL_CAD_merged.RDS")
head(X)
snp beta_hat_1 seb1 beta_hat_2 seb2 A1 A2
1 rs4747841 0.0037 0.0052 0.0106 0.0056 A G
2 rs4749917 -0.0033 0.0052 -0.0108 0.0056 A G
3 rs737656 0.0099 0.0054 0.0196 0.0058 A G
4 rs737657 0.0084 0.0054 0.0195 0.0058 A G
5 rs7086391 -0.0075 0.0067 0.0115 0.0072 A G
6 rs878177 -0.0073 0.0055 -0.0225 0.0059 A G
There are likely more efficient ways to do this merge. If you would like to process the data yourself, you can construct a cause_data
object from a data frame using the constructor new_cause_data(X)
where X
is any data frame that includes the columns snp
, beta_hat_1
, seb1
, beta_hat_2
, and seb2
.
The next step is to estimate the parameters that define the prior distribution of \(\beta_{M}\) and \(\theta\) and to estimate \(\rho\), the correlation between summary statistics that is due to sample overlap or population structure. We will do this with a random subset of 1,000,000 variants since our data set is large. est_cause_params
estimates the nuisance parameters by finding the maximum a posteriori estimate of \(\rho\) and the mixing parameters when \(\gamma = \eta = 0\). This step takes a several minutes.
set.seed(100)
varlist <- with(X, sample(snp, size=1000000, replace=FALSE))
params <- est_cause_params(X, varlist)
Estimating CAUSE parameters with 1000000 variants.
1 0.218096
2 0.000638099
3 7.441002e-06
4 8.58628e-08
The object params
is of class cause_params
and contains information about the fit as well as the maximum a posteriori estimates of the mixing parameters (\(\pi\)) and \(\rho\). The object params$mix_grid
is a data frame defining the distribution of summary statistics. The column S1
is the variance for trait 1 (\(M\)), the column S2
is the variance for trait 2 (\(Y\)) and the column pi
is the mixture proportion assigned to that variance combination.
class(params)
[1] "cause_params"
names(params)
[1] "rho" "pi" "mix_grid" "loglik" "PIS"
[6] "RHO" "LLS" "converged" "prior" "var"
params$rho
[1] 0.06465784
head(params$mix_grid)
S1 S2 pi
1 0.000000000 0.000000000 0.3105286345
2 0.000000000 0.003440730 0.2381082508
3 0.000000000 0.004865928 0.1490899080
4 0.003533615 0.004865928 0.1660235278
5 0.004997287 0.009731855 0.1177553061
6 0.019989147 0.009731855 0.0006522073
So, for example, in this case, we have estimated that 31% of variants have trait 1 variance and trait 2 equal to 0 meaning that they have no association with either trait.
Tip: Do not try to estimate the nuisance parameters with substantially fewer than 100,000 variants. This can lead to poor estimates of the mixing parameters whih leads to bad model comparisons.
We estimate CAUSE posterior distributions using an LD pruned set of variants, prioritizing variants with low trait \(M\) (LDL) \(p\)-values. The CAUSE R package contains a function to help do this. The function ld_prune
uses a greedy algorithm that selects the variant wtih the lowest LDL p-value and removes all variants in LD with the selected variant and then repeats until no variants are left. This step requires LD estimates. You can download estimates made in the 1000 Genomes CEU population here. We first demonstrate use of the function for one chromosome and then show an example of how to parallelize the analysis over all 22 autosomes.
download.file("https://zenodo.org/record/1464357/files/chr22_AF0.05_0.1.RDS?download=1", destfile = "example_data/chr22_AF0.05_0.1.RDS")
download.file("https://zenodo.org/record/1464357/files/chr22_AF0.05_snpdata.RDS?download=1", destfile="example_data/chr22_AF0.05_snpdata.RDS")
ld <- readRDS("example_data/chr22_AF0.05_0.1.RDS")
snp_info <- readRDS("example_data/chr22_AF0.05_snpdata.RDS")
head(ld)
rowsnp colsnp r2
1 rs62224609 rs376238049 0.9012642
2 rs62224609 rs62224614 0.9907366
3 rs62224609 rs7286962 0.9907366
4 rs62224609 rs55926024 0.1103000
5 rs62224609 rs117246541 0.9012642
6 rs62224609 rs62224618 0.9907366
head(snp_info)
# A tibble: 6 x 9
AF SNP allele chr pos snp_id region_id map ld_snp_id
<dbl> <chr> <chr> <int> <int> <int> <int> <dbl> <int>
1 0.884 rs62224609 T,C 22 16051249 7.98e7 22 0 79758556
2 0.904 rs4965031 G,A 22 16052080 7.98e7 22 0 79758578
3 0.646 rs3756846… A,AAAAC 22 16052167 7.98e7 22 0 79758584
4 0.894 rs3762380… C,T 22 16052962 7.98e7 22 0 79758602
5 0.934 rs2007775… C,A 22 16052986 7.98e7 22 0 79758604
6 0.934 rs80167676 A,T 22 16053444 7.98e7 22 0 79758627
The ld
data frame should contain the column names rowsnp
, colsnp
, and r2
. The snp_info
data frame contains information about all of the chromosome 22 variants with allele frequency greater than 0.05. The only piece of information we need from this data frame is the list of variants snp_info$SNP
which provides the total list of variants used in the LD calculations.
The ld_prune
function is somewhat flexible in its arguments, see help(ld_prune)
.
variants <- X %>% mutate(pval1 = 2*pnorm(abs(beta_hat_1/seb1), lower.tail=FALSE))
pruned <- ld_prune(variants = variants,
ld = ld, total_ld_variants = snp_info$SNP,
pval_cols = c("pval1"),
pval_thresh = c(1e-3))
You have suppplied information for 2023354 variants.
Of these, 22835 have LD information.
length(pruned)
[1] 15
If length(pval_cols) =1
, ld_prune
returns a vector of selected variants. If There are multipld \(p\)-value columns provided, ld_prune
will return a list of vectors, one for each column. The length of pval_thresh
should be equal to the length of pval_cols
and provides a threshold for each column. Excluding variants with high \(p\)-values speeds up the pruning step. We can fit CAUSE without high \(p\)-value variants because these variants have almost no influence on the posterior distributions or the ELPD test statistic. The exact value of the threshold isn’t important as long as it is fairly lenient. Including additional variants may slow down computation but shouldn’t change the results
We highly recommend parallelizing for whole genome LD pruning. One way to do this is with the parallel pacakge, though this option uses a lot of memory. A better option is to submit separate jobs to nodes of a compute cluster and then combine results.
If you are analyzing many phenotypes, the most efficient way to complete this step is to first obtain a list of variants present in all data sets and use only these variants in your analysis. You can then obtain an LD-pruned set of variants prioritized for low \(p\)-values for each traits (\(N\) lists if there are \(N\) phenotypes). In any analysis, you will use the list of variants prioritized for the trait \(M\) phenotype.
Download the LD-pruned variant list for our example analysis: top LDL list
download.file("https://github.com/jean997/cause/blob/master/example_data/top_ldl_pruned_vars.RDS", destfile = "example_data/top_ldl_pruned_vars.RDS")
Now that we have formatted data, an LD pruned set of variants, and nuisance parameters estimated, we can fit CAUSE! The function cause
estimates posterior distributions under the sharing and causal models and calculates the ELPD for both models as well as for the null model in which there is neither a causal or a shared factor effect. This might take 5-10 minutes.
top_vars <- readRDS("example_data/top_ldl_pruned_vars.RDS")
res <- cause(X=X, variants = top_vars, param_ests = params)
Estimating CAUSE posteriors using 1215 variants.
The resulting cause
object contains an object for the partial sharing model fit (sharing
), and object for the causal model fit (causal
) and a table of ELPD results.
class(res)
[1] "cause"
names(res)
[1] "sharing" "causal" "elpd" "loos" "data" "sigma_g" "qalpha"
[8] "qbeta"
res$elpd
model1 model2 delta_elpd se_delta_elpd z
1 null sharing -66.887780 8.350670 -8.009870
2 null causal -75.073163 9.497338 -7.904653
3 sharing causal -8.185383 1.246103 -6.568786
class(res$sharing)
[1] "cause_post"
class(res$causal)
[1] "cause_post"
The elpd
table has the following columns:
In this case we see that the causal model is significantly better than the sharing model from the thrid line of the table. The \(z\)-score is -6.57 corresponding to a p-value of 2.510^{-11}.
For each model (partial sharing and full) we can plot the posterior distributions of the parameters. Dotted lines show the prior distributions.
plot(res$sharing)
Version | Author | Date |
---|---|---|
70e2b97 | Jean Morrison | 2019-12-05 |
bfa7d28 | Jean Morrison | 2019-07-10 |
d8d1486 | Jean Morrison | 2019-06-25 |
33b3732 | Jean Morrison | 2019-06-25 |
286f4e9 | Jean Morrison | 2019-06-25 |
1753b22 | Jean Morrison | 2018-11-10 |
2eb09d8 | Jean Morrison | 2018-11-06 |
4a8f76c | Jean Morrison | 2018-11-06 |
a34393d | Jean Morrison | 2018-10-25 |
bbe4901 | Jean Morrison | 2018-10-17 |
73690eb | Jean Morrison | 2018-10-17 |
plot(res$causal)
Version | Author | Date |
---|---|---|
70e2b97 | Jean Morrison | 2019-12-05 |
bfa7d28 | Jean Morrison | 2019-07-10 |
d8d1486 | Jean Morrison | 2019-06-25 |
33b3732 | Jean Morrison | 2019-06-25 |
286f4e9 | Jean Morrison | 2019-06-25 |
1753b22 | Jean Morrison | 2018-11-10 |
2eb09d8 | Jean Morrison | 2018-11-06 |
4a8f76c | Jean Morrison | 2018-11-06 |
a34393d | Jean Morrison | 2018-10-25 |
bbe4901 | Jean Morrison | 2018-10-17 |
73690eb | Jean Morrison | 2018-10-17 |
The summary
method will summarize the posterior medians and credible intervals.
summary(res, ci_size=0.95)
p-value testing that causal model is a better fit: 2.5e-11
Posterior medians and 95 % credible intervals:
model gamma eta
[1,] "Sharing" NA "0.38 (0.31, 0.45)"
[2,] "Causal" "0.34 (0.28, 0.4)" "-0.01 (-0.66, 0.53)"
q
[1,] "0.78 (0.65, 0.89)"
[2,] "0.03 (0, 0.25)"
The plot
method applied to a cause
object will arrange all of this information on one spread.
plot(res)
Version | Author | Date |
---|---|---|
70e2b97 | Jean Morrison | 2019-12-05 |
1a90dd6 | Jean Morrison | 2019-07-16 |
bfa7d28 | Jean Morrison | 2019-07-10 |
d8d1486 | Jean Morrison | 2019-06-25 |
33b3732 | Jean Morrison | 2019-06-25 |
286f4e9 | Jean Morrison | 2019-06-25 |
1753b22 | Jean Morrison | 2018-11-10 |
2eb09d8 | Jean Morrison | 2018-11-06 |
4a8f76c | Jean Morrison | 2018-11-06 |
a34393d | Jean Morrison | 2018-10-25 |
bbe4901 | Jean Morrison | 2018-10-17 |
73690eb | Jean Morrison | 2018-10-17 |
The plot
method can also produce scatter plots of the data showing for each model, the probability that each variant is acting through the shared factor (\(U\)) and the contribution of each variant to the ELPD test statistic.
plot(res, type="data")
Version | Author | Date |
---|---|---|
70e2b97 | Jean Morrison | 2019-12-05 |
1a90dd6 | Jean Morrison | 2019-07-16 |
bfa7d28 | Jean Morrison | 2019-07-10 |
d8d1486 | Jean Morrison | 2019-06-25 |
33b3732 | Jean Morrison | 2019-06-25 |
286f4e9 | Jean Morrison | 2019-06-25 |
1cc4860 | Jean Morrison | 2018-11-10 |
2eb09d8 | Jean Morrison | 2018-11-06 |
4a8f76c | Jean Morrison | 2018-11-06 |
sessionInfo()
R version 3.6.3 (2020-02-29)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Ubuntu 18.04.4 LTS
Matrix products: default
BLAS: /usr/lib/x86_64-linux-gnu/openblas/libblas.so.3
LAPACK: /usr/lib/x86_64-linux-gnu/libopenblasp-r0.2.20.so
locale:
[1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C
[3] LC_TIME=en_US.UTF-8 LC_COLLATE=en_US.UTF-8
[5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8
[7] LC_PAPER=en_US.UTF-8 LC_NAME=C
[9] LC_ADDRESS=C LC_TELEPHONE=C
[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] cause_1.0.0 dplyr_0.8.3 readr_1.3.1
loaded via a namespace (and not attached):
[1] tidyselect_0.2.5 xfun_0.9 ashr_2.2-32
[4] purrr_0.3.3 lattice_0.20-38 colorspace_1.4-1
[7] vctrs_0.2.0 htmltools_0.3.6 loo_2.1.0
[10] yaml_2.2.0 utf8_1.1.4 rlang_0.4.2
[13] mixsqp_0.1-97 pillar_1.4.2 glue_1.3.1
[16] matrixStats_0.55.0 foreach_1.5.0 lifecycle_0.1.0
[19] stringr_1.4.0 munsell_0.5.0 gtable_0.3.0
[22] workflowr_1.4.0.9000 codetools_0.2-16 evaluate_0.14
[25] labeling_0.3 knitr_1.24 doParallel_1.0.15
[28] pscl_1.5.5 parallel_3.6.3 fansi_0.4.0
[31] Rcpp_1.0.4.6 backports_1.1.5 scales_1.1.0
[34] RcppParallel_4.4.4 truncnorm_1.0-8 farver_2.0.1
[37] fs_1.3.1 gridExtra_2.3 ggplot2_3.2.1
[40] hms_0.5.2 digest_0.6.23 stringi_1.4.3
[43] numDeriv_2016.8-1.1 grid_3.6.3 rprojroot_1.3-2
[46] cli_2.0.0 tools_3.6.3 magrittr_1.5
[49] lazyeval_0.2.2 tibble_2.1.3 crayon_1.3.4
[52] whisker_0.4 tidyr_1.0.0 pkgconfig_2.0.3
[55] zeallot_0.1.0 ellipsis_0.3.0 MASS_7.3-51.4
[58] Matrix_1.2-17 SQUAREM_2020.2 assertthat_0.2.1
[61] rmarkdown_1.15 iterators_1.0.12 R6_2.4.1
[64] intervals_0.15.1 git2r_0.26.1 compiler_3.6.3
sessionInfo()
R version 3.6.3 (2020-02-29)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Ubuntu 18.04.4 LTS
Matrix products: default
BLAS: /usr/lib/x86_64-linux-gnu/openblas/libblas.so.3
LAPACK: /usr/lib/x86_64-linux-gnu/libopenblasp-r0.2.20.so
locale:
[1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C
[3] LC_TIME=en_US.UTF-8 LC_COLLATE=en_US.UTF-8
[5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8
[7] LC_PAPER=en_US.UTF-8 LC_NAME=C
[9] LC_ADDRESS=C LC_TELEPHONE=C
[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] cause_1.0.0 dplyr_0.8.3 readr_1.3.1
loaded via a namespace (and not attached):
[1] tidyselect_0.2.5 xfun_0.9 ashr_2.2-32
[4] purrr_0.3.3 lattice_0.20-38 colorspace_1.4-1
[7] vctrs_0.2.0 htmltools_0.3.6 loo_2.1.0
[10] yaml_2.2.0 utf8_1.1.4 rlang_0.4.2
[13] mixsqp_0.1-97 pillar_1.4.2 glue_1.3.1
[16] matrixStats_0.55.0 foreach_1.5.0 lifecycle_0.1.0
[19] stringr_1.4.0 munsell_0.5.0 gtable_0.3.0
[22] workflowr_1.4.0.9000 codetools_0.2-16 evaluate_0.14
[25] labeling_0.3 knitr_1.24 doParallel_1.0.15
[28] pscl_1.5.5 parallel_3.6.3 fansi_0.4.0
[31] Rcpp_1.0.4.6 backports_1.1.5 scales_1.1.0
[34] RcppParallel_4.4.4 truncnorm_1.0-8 farver_2.0.1
[37] fs_1.3.1 gridExtra_2.3 ggplot2_3.2.1
[40] hms_0.5.2 digest_0.6.23 stringi_1.4.3
[43] numDeriv_2016.8-1.1 grid_3.6.3 rprojroot_1.3-2
[46] cli_2.0.0 tools_3.6.3 magrittr_1.5
[49] lazyeval_0.2.2 tibble_2.1.3 crayon_1.3.4
[52] whisker_0.4 tidyr_1.0.0 pkgconfig_2.0.3
[55] zeallot_0.1.0 ellipsis_0.3.0 MASS_7.3-51.4
[58] Matrix_1.2-17 SQUAREM_2020.2 assertthat_0.2.1
[61] rmarkdown_1.15 iterators_1.0.12 R6_2.4.1
[64] intervals_0.15.1 git2r_0.26.1 compiler_3.6.3