KeTuTu's picture
Upload 46 files
2999286 verified
#!/usr/bin/env python
# coding: utf-8
# # Multi omics analysis by MOFA
# MOFA is a factor analysis model that provides a general framework for the integration of multi-omic data sets in an unsupervised fashion.
#
# This tutorial focuses on how to perform mofa in multi-omics like scRNA-seq and scATAC-seq
#
# Paper: [MOFA+: a statistical framework for comprehensive integration of multi-modal single-cell data](https://genomebiology.biomedcentral.com/articles/10.1186/s13059-020-02015-1)
#
# Code: https://github.com/bioFAM/mofapy2
#
# Colab_Reproducibility:https://colab.research.google.com/drive/1UPGQA3BenrC-eLIGVtdKVftSnOKIwNrP?usp=sharing
# ## Part.1 MOFA Model
# In this part, we construct a model of mofa by scRNA-seq and scATAC-seq
# In[1]:
import omicverse as ov
rna=ov.utils.read('data/sample/rna_p_n_raw.h5ad')
atac=ov.utils.read('data/sample/atac_p_n_raw.h5ad')
# In[2]:
rna,atac
# We only need to add anndata to `ov.single.mofa` to construct the base model
# In[4]:
test_mofa=ov.single.pyMOFA(omics=[rna,atac],
omics_name=['RNA','ATAC'])
# In[ ]:
test_mofa.mofa_preprocess()
test_mofa.mofa_run(outfile='models/brac_rna_atac.hdf5')
# ## Part.2 MOFA Analysis
# After get the model by mofa, we need to analysis the factor about different omics, we provide some method to do this
# ### load data
# In[1]:
import omicverse as ov
ov.utils.ov_plot_set()
# In[2]:
rna=ov.utils.read('data/sample/rna_test.h5ad')
# ### add value of factor to anndata
# In[3]:
rna=ov.single.factor_exact(rna,hdf5_path='data/sample/MOFA_POS.hdf5')
rna
# ### analysis of the correlation between factor and cell type
# In[4]:
ov.single.factor_correlation(adata=rna,cluster='cell_type',factor_list=[1,2,3,4,5])
# ### Get the gene/feature weights of different factor
# In[5]:
ov.single.get_weights(hdf5_path='data/sample/MOFA_POS.hdf5',view='RNA',factor=1)
# ## Part.3 MOFA Visualize
#
# To visualize the result of mofa, we provide a series of function to do this.
# In[6]:
pymofa_obj=ov.single.pyMOFAART(model_path='data/sample/MOFA_POS.hdf5')
# We get the factor of each cell at first
# In[7]:
pymofa_obj.get_factors(rna)
rna
# We can also plot the varience in each View
# In[8]:
pymofa_obj.plot_r2()
# In[9]:
pymofa_obj.get_r2()
# ### Visualize the correlation between factor and celltype
# In[10]:
pymofa_obj.plot_cor(rna,'cell_type')
# We found that factor6 is correlated to Epithelial
# In[11]:
pymofa_obj.plot_factor(rna,'cell_type','Epi',figsize=(3,3),
factor1=6,factor2=10,)
# In[24]:
import scanpy as sc
sc.pp.neighbors(rna)
sc.tl.umap(rna)
sc.pl.embedding(
rna,
basis="X_umap",
color=["factor6","cell_type"],
frameon=False,
ncols=2,
#palette=ov.utils.pyomic_palette(),
show=False,
cmap='Greens',
vmin=0,
)
#plt.savefig("figures/umap_factor6.png",dpi=300,bbox_inches = 'tight')
# In[12]:
pymofa_obj.plot_weight_gene_d1(view='RNA',factor1=6,factor2=10,)
# In[18]:
pymofa_obj.plot_weights(view='RNA',factor=6,color='#5de25d',
ascending=True)
# In[14]:
pymofa_obj.plot_top_feature_heatmap(view='RNA')
# In[ ]: