Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/idc9/r_jive
Implementation of AJIVE in R
https://github.com/idc9/r_jive
Last synced: about 1 month ago
JSON representation
Implementation of AJIVE in R
- Host: GitHub
- URL: https://github.com/idc9/r_jive
- Owner: idc9
- License: mit
- Created: 2017-07-14T20:43:02.000Z (over 7 years ago)
- Default Branch: master
- Last Pushed: 2024-04-10T04:29:26.000Z (8 months ago)
- Last Synced: 2024-08-02T20:43:39.248Z (4 months ago)
- Language: R
- Size: 8.28 MB
- Stars: 4
- Watchers: 3
- Forks: 12
- Open Issues: 4
-
Metadata Files:
- Readme: README.Rmd
- License: LICENSE
Awesome Lists containing this project
- awesome-multi-omics - AJIVE - Feng - angle-based JIVE - [paper](https://arxiv.org/abs/1704.02060) (Software packages and methods / Multi-omics correlation or factor analysis)
README
---
output: github_document
---```{r, echo = FALSE}
knitr::opts_chunk$set(
collapse = TRUE,
comment = "#>",
fig.path = "man/figures/README-")
```
ajive: Angle based Joint and Individual Variation Explained
---------------**Author:** [Iain Carmichael](https://idc9.github.io/)
**License:** [MIT](https://opensource.org/licenses/MIT)Additional documentation, examples and code revisions are coming soon. For questions, issues or feature requests please reach out to Iain: [email protected].
# Overview
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](https://arxiv.org/pdf/1704.02060.pdf).
A python version of this package can be found [**here**](https://github.com/idc9/py_jive).
# Installation
The `ajive` package is currently available using devtools
```{r, eval=FALSE}
# install.packages('devtools')
devtools::install_github("idc9/r_jive")
```# Example
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).
```{r, fig.width=8, fig.height=4}
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.
```{r}
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.
```{r, fig.width=8, fig.height=16}
decomposition_heatmaps(blocks, jive_results)
```Using notation from Section 3 of the [AJIVE paper](https://arxiv.org/pdf/1704.02060.pdf) (where *u* means scores and *v* means loadings) we can get the jive data out as follows
```{r}
# 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']])
```
# Help and SupportAdditional documentation, examples and code revisions are coming soon. For questions, issues or feature requests please reach out to Iain: [email protected].
#### Documentation
The source code is located on github: [https://github.com/idc9/r_jive](https://github.com/idc9/r_jive). Currently the best math reference is the [AJIVE paper](https://arxiv.org/pdf/1704.02060.pdf).
#### Testing
Testing is done using the [testthat](https://github.com/hadley/testthat) package.
#### Contributing
We welcome contributions to make this a stronger package: data examples, bug fixes, spelling errors, new features, etc.
#Citation
[![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.4091755.svg)](https://doi.org/10.5281/zenodo.4091755)