knitr::opts_chunk$set( collapse = TRUE, comment = "#>", fig.path = "man/figures/README-")
Author: Iain Carmichael
License: MIT
Additional documentation, examples and code revisions are coming soon. For questions, issues or feature requests please reach out to Iain: iain@unc.edu.
Angle based Joint and Individual Variation Explained (AJIVE) is a dimensionality reduction algorithm for the multi-block setting i.e. $K$ different data matrices, with the same set of observations and (possibly) different numbers of variables. AJIVE finds joint modes of variation which are common to all $K$ data blocks as well as modes of individual variation which are specific to each block. For a detailed discussion of AJIVE see Angle-Based Joint and Individual Variation Explained.
A python version of this package can be found here.
The ajive
package is currently available using devtools
# install.packages('devtools') devtools::install_github("idc9/r_jive")
Consider the following two block toy example: the first block has 200 observations (rows) and 100 variables; the second block has the same set of 200 observations and 500 variables (similar to Figure 2 of the AJIVE paper).
library(ajive) # sample a toy dataset with true joint rank of 1 blocks <- sample_toy_data(n=200, dx=100, dy=500) data_blocks_heatmap(blocks, show_color_bar=FALSE)
After selecting the initial signal ranks we can compute the AJIVE decomposition using the ajive
function.
initial_signal_ranks <- c(2, 3) # set by looking at scree plots jive_results <- ajive(blocks, initial_signal_ranks, n_wedin_samples = 100, n_rand_dir_samples = 100) # estimated joint rank jive_results$joint_rank
The heatmap below shows that AJIVE separates the joint and individual signals for this toy data set.
decomposition_heatmaps(blocks, jive_results)
Using notation from Section 3 of the AJIVE paper (where u means scores and v means loadings) we can get the jive data out as follows
# common normalized scores dim(jive_results$joint_scores) # Full matrix representation of the joint signal for the first block dim(jive_results$block_decomps[[1]][['joint']][['full']]) # joint block specific scores for the first block dim(jive_results$block_decomps[[1]][['joint']][['u']]) # joint block specific loadings for the first block dim(jive_results$block_decomps[[1]][['joint']][['v']]) # individual block specific scores for the second block dim(jive_results$block_decomps[[2]][['individual']][['u']])
Additional documentation, examples and code revisions are coming soon. For questions, issues or feature requests please reach out to Iain: idc9@cornell.edu.
The source code is located on github: https://github.com/idc9/r_jive. Currently the best math reference is the AJIVE paper.
Testing is done using the testthat package.
We welcome contributions to make this a stronger package: data examples, bug fixes, spelling errors, new features, etc.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.