Skip to content

Forked code of ChromDiff program as described in Yen and Kellis, Nature Communications 2015. Official code at

License

Notifications You must be signed in to change notification settings

dyndna/forked_ChromDiff

 
 

Repository files navigation

## README file created by Angela Yen on March 13, 2015
## Please contact [email protected] with questions or for clarifications.

# Copyright 2015 Angela Yen
# # This file is part of ChromDiff.
# # ChromDiff is free software: you can redistribute it and/or modify
# # it under the terms of the GNU General Public License as published by
# # the Free Software Foundation, either version 3 of the License, or
# # (at your option) any later version.
#
# # ChromDiff is distributed in the hope that it will be useful,
# # but WITHOUT ANY WARRANTY; without even the implied warranty of
# # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# # GNU General Public License for more details.
#
# # You should have received a copy of the GNU General Public License
# # along with ChromDiff.  If not, see <http://www.gnu.org/licenses/>.

###############  Part 0: Setup ####################
This folder "ChromDiff" contains the code and data for running ChromDiff on the examples provided in the manuscript.

Part 0.1: Dependencies for ChromDiff include BedTools, awk, bash, and R. Please make sure these are installed and working before trying to run ChromDiff.

Part 0.2a: Applying ChromDiff to Epigenomics Roadmap data, as described in Yen and Kellis, 2015: 
The only data that was not included in this zipped file is the 15-state ChromHMM state calls. The easiest way to download all these chromatin state calls is 
to download the compressed .tar.gz directory at http://egg2.wustl.edu/roadmap/data/byFileType/chromhmmSegmentations/ChmmModels/coreMarks/jointModel/final/all.mnemonics.bedFiles.tgz. 
Then, uncompress the directory and move all the contained files into the ChromDiff subdirectory statecalls/core/, which has already been created within this directory. 
Alternatively, you can download all state call files of the form E***_15_coreMarks_mnemonics.bed.gz from 
http://www.broadinstitute.org/~anshul/projects/roadmap/chromhmmSegmentations/ChmmModels/coreMarks/parallel/set2/final/ into the subdirectory statecalls/core/, which has already been created within this directory. 
Generally, we are using the "Mnemonics bed files" of the "Core 15-state model_ described here: http://egg2.wustl.edu/roadmap/web_portal/chr_state_learning.html#core_15state

Once the state calls have been downloaded an dmoved into the corresponding directory, simply run ./notes_v2.sh to
reproduce the analysis, results, and figures. (NOTE: as described in Yen and
Kellis, 2015, our gene list does not include chrY genes. Therefore, if you
download our gene list in data/gencode_genes_full.txt, this will be a list of all
Version 10 GENCODE protein-coding genes, except for ChrY genes.) All input
files can be found in the data/ folder, which can be used as examples as
described in Part 1 of this README file. 
--> To find results and figures, please see Part 4 of this README file.

Part 0.2b: Applying ChromDiff to other data:
- Part 1 describes preparation and formatting of the data and other input for
  ChromDiff
- Part 2 describes how to specify the input variables and files to ChromDiff.
- Part 3 outlines the various steps of the ChromDiff pipeline
- Part 4 describes where to find results, p-values, and figures.

###########   PART 1: Formatting for other data for ChromDiff input  #############
ChromDiff relies on the following information
1. Epigenome unique IDs and metadata 
2. Gene IDs and locations
3. Chromatin state annotations for the epigenome IDs
4. Expression data in the form of RPKM values for each gene
5. Covariate matrix (based on metadata) and mapping of covariates to metadata
categories

See below for details:
1. Epigenome unique IDs and metadata 
This file should be in the following tab-delimited format:
ID	filepath	color	name	category1	category2	...
id1	filepath/to/id1.bed	#E41A1C	name_of_id1	category1_for_id1	category2_for_id1 ...
id2	filepath/to/id2.bed	#924965	name_of_id2	category1_for_id2	category2_for_id2 ...
.
.
.

That is, the first column is the unique ID, the 3rd column is the hex coding
of the color for the epigenome, and the fourth column is the name
(label that will be used on plots). The second column is the path to the 
chromatin state annotation file (as described in "3. Chromatin state
annotations" below). The remaining columns are any other
categories you will want to compare the data based on. 
The first row must be the "column names" for this matrix, with "ID",
"filepath", and "name" as the first three column names, as shown above. 
NOTE: no periods (.) should be used in the metadata as epigenome IDs, category
names, or category values. That means no periods should be used in 1st column,
or in any columns after the 3rd column. (Periods may and will likely be used
in the filepath column.)
NOTE: every category name should be unique from every other category
name. (i.e. the 5th and 6th column names can not be the same.) 
NOTE: Every option value should be uniquely assigned to one category. (For example, there
can't be a "TRUE" for category "is_female" and also a "TRUE" entry for
category "is_tissue". This can be avoided by using values such as
"TRUEFEMALE" and "TRUETISSUE", or simply "FEMALE" and "TISSUE".)


Example: final_celltype_metadata.txt

2. Gene IDs and locations
The gene file must be modeled in the following tab-delimited format:
#All gencode protein-coding genes (entries with type gene)
#chr	start	end	strand	gencode_gene_id	genesymbols
chr1	34553	36081	-	ENSG00000237613.2	FAM138A
chr1	69090	70008	+	ENSG00000186092.4	OR4F5
chr1	367639	368634	+	ENSG00000235249.1	OR4F29

The 6th column of genesymbols are optional, but are necessary for gene set
enrichment calculations.  
Example: genes/gencode_genes_full.txt

3. Chromatin state annotations 
a) Chromatin state annotations should be in the following tab-delimited bed format: 
chr10	0	119600	15_Quies
chr10	119600	120400	1_TssA
chr10	120400	136200	14_ReprPCWk
chr10	136200	139400	15_Quies
chr10	139400	145200	9_Het
chr10	145200	162800	15_Quies
chr10	162800	165000	9_Het
chr10	165000	176200	15_Quies
chr10	176200	176600	7_Enh

NOTE: the 4th column must be of the form STATENUM_STATEMNEMONIC, and these
must match the numbers/mnemonics given in the chromatin state metadata file
(Part1.3b).

Example: http://www.broadinstitute.org/~anshul/projects/roadmap/segmentations/models/coreMarks/parallel/set2/final/E001_15_coreMarks_mnemonics.bed.gz

b) Chromatin state metadata
A tab-delimited file listing all possible chromatin states with the following information:
STATE NO.       MNEMONIC        DESCRIPTION     COLOR NAME      COLOR CODE
1       TssA    Active TSS      Red     "255,0,0"
2       TssAFlnk        Flanking Active TSS     Orange Red      "255,69,0"
3       TxFlnk  Transcr. at gene 5' and 3'      LimeGreen       "50,205,50"
4       Tx      Strong transcription    Green   "0,128,0"
5       TxWk    Weak transcription      DarkGreen       "0,100,0"
6       EnhG    Genic enhancers GreenYellow     "194,225,5"
7       Enh     Enhancers       Yellow  "255,255,0"
8       ZNF/Rpts        ZNF genes & repeats     Medium Aquamarine
"102,205,170"
9       Het     Heterochromatin PaleTurquoise   "138,145,208"
10      TssBiv  Bivalent/Poised TSS     IndianRed       "205,92,92"
11      BivFlnk Flanking Bivalent TSS/Enh       DarkSalmon      "233,150,122"
12      EnhBiv  Bivalent Enhancer       DarkKhaki       "189,183,107"
13      ReprPC  Repressed PolyComb      Silver  "128,128,128"
14      ReprPCWk        Weak Repressed PolyComb Gainsboro       "192,192,192"
15      Quies   Quiescent/Low   White   "255,255,255"

NOTE: State numbers must go from 1...n, where n is the total number of states.

Example: core_annotation.txt

4. Expression data should be formatted as a matrix in tab-delimited
format, with each row corresponding to a gene and each column corresponding to
a epigenome. The first row should be the labels. An example is below:
gene_id	E000	E003	E004	E005	E006
ENSG00000000003	23.265	43.985	37.413	29.459	21.864
ENSG00000000005	0.872	1.642	6.498	0.000	0.157
ENSG00000000419	55.208	35.259	58.308	48.208	37.477
ENSG00000000457	3.237	2.596	2.345	8.775	2.723
ENSG00000000460	7.299	6.649	7.838	7.324	0.830
ENSG00000000938	0.052	0.211	0.059	0.009	0.012
ENSG00000000971	3.000	0.000	0.003	0.009	41.909
ENSG00000001036	58.371	49.337	25.066	25.679	86.255
ENSG00000001084	7.077	6.966	10.110	4.609	5.870

Example: rnaseq/57epigenomes.RPKM.pc

5.
a) Covariate matrix for factors that will be corrected for. Values can be
factors (which will be automatically converted by R), or numbers for "mixed"
covariates:
UCSD	BI	UCSF-UBC	UW	FEMALE	MALE	UNKNOWN	SOLID_LIQUID	TYPE
E017	1	0	0	0	1	0	0	NONE	CELLLINE
E002	0	1	0	0	1	0	0	NONE	PRIMARYCULTURE
E008	1	0	0	0	1	0	0	NONE	PRIMARYCULTURE
E001	0	1	0	0	1	0	0	NONE	PRIMARYCULTURE
E015	0	1	0	0	1	0	0	NONE	PRIMARYCULTURE

Example: cov.mat.txt

b) Mapping metadata matrix to covariate matrix. This must explain which
metadata columns (i.e. "category1", "category2", ...) correspond to which
covariate columns. Matrix has n rows and m columns, where n is the number of
the metadata columns (categories) that we may correct for, while m is the
number of covariate columns. Each matrix cell is TRUE for elements
matrix[i,j] where metadata column i corresponds to covariate column j, and
FALSE otherwise:
UCSD	BI	UCSF.UBC	UW	FEMALE	MALE	UNKNOWN	SOLID_LIQUID	TYPE
LAB	TRUE	TRUE	TRUE	TRUE	FALSE	FALSE	FALSE	FALSE	FALSE
SOLID_LIQUID	FALSE	FALSE	FALSE	FALSE	FALSE	FALSE	FALSE	TRUE
FALSE
TYPE	FALSE	FALSE	FALSE	FALSE	FALSE	FALSE	FALSE	FALSE	TRUE
SEX	FALSE	FALSE	FALSE	FALSE	TRUE	TRUE	TRUE	FALSE	FALSE


Example: map_vars_covariates.txt

######### PART 2: Specifying input files and variables ###################
ChromDiff requires that input files and variables be set in the file notes_v2.sh. The file currently contains an outline of the pipeline, with inputs currently set to the example files and parameters that generated the sex comparison (Female vs Male) described in Yen and Kellis, 2015. The description of the required inputs is described below, in Part2a-Part 2e. 

These required inputs for ChromDiff can roughly be divided into two parts, as
shown by "Part 1" and "Part 2" in the notes_v2.sh. Part 1, which is referenced
in sections a-b below, has to do with processing the data and generating the
ChromDiff representation. Part 2, which is referenced in sections c-e, has to
do with the parameters for each epigenomic group comparison (such as
Female/Male, Adult/Fetal, etc.).

a. Labels: In notes_v2.sh, you need to specify 2 names/labels. Specify statecalls_label to any name or label that describes your
epigenomic (chromatin state call) information. Set generegions_label to any name or label that
describes your gene regions. These labels are so that you can run the
ChromDiff pipeline on different chromatin state calls or different epigenomic
information, as well as different gene regions. 

Example (as shown in "Part 1" of notes_v2.sh): 
statecalls_label="core"
generegions_label="gencode_v10"

b. File inputs: In notes_v2.sh, you also need to specify the following file
inputs. They must be formatted as described in the corresponding section of
Part 1 above:

	i. metadatafile: epigenomic metadata file as described in Part 1.1 
	ii. genefile: file of gene regions as described in Part 1.2
	iii. state_annotations_file: metadata for chromatin states, as described in
	Part 1.3b. 
	iv. expfile: expression matrix, as specified in Part 1.4.
	v. covariate_mat_file: Covariate matrix specifying the covariates and
	associated epigenomes, as described in Part 1.5a
	vi. map_covariates_file: Matrix specifying relationships between
	covariates (in the covariate matrix) and metadata categories/properties,
	as specified in 1.5b

Example (as shown in "Part 1" of notes_v2.sh):
metadatafile="data/final_celltype_metadata.txt"
genefile="data/gencode_genes_full.txt"
states_info="data/core_annotation.txt"
expfile="data/57epigenomes.RPKM.pc"
covariate_mat_file="data/cov.mat.txt"
map_covariates_file="data/map_vars_covariates.txt"

c. Epigenomic groups: To compare groups of epigenomes to each other, you
need to specify the property and options you want to compare Specifically, the
property is the column name (category) in your epigenome metadata matrix (i.e.
"sex"). The two options are the two (different) values for that column you
want to compare your epigenomes based on (i.e. "Female" vs "Male"). Then,
ChromDiff will compare the group of epigenomes labeled a_option under property to the group of epigenomes labeled b_option under property.

Example (as shown in "Part 2" of notes_v2.sh):
property="sex"
a_option="Female"
b_option="Male"

d. ChromDiff parameters: ChromDiff allows two parameters to be set. 
	i. test_type: The test_type variable specifies the probabilistic test ChromDiff uses to
	calculate p-values, as described in Yen and Kellis, 2015. Options are
	"wilcox", "ttest", and "ftest", for the Mann-Whitney-Wilcoxon test, the
	Student's t-test, and the F-test of the equality of two variances,
	respectively.

	ii. correction: The correction variable specifies the multiple hypothesis
	correction used on the raw p-values, as described in Yen and Kellis, 2015.
	Options are "fdr", "bonferroni", and "BY", for the Benjamini-Hochberg FDR
	correction, the Bonferroni (familywise error rate) correction, and the
	Benjamini-Yekutieli FDR correction, respectively.

Example (as shown in "Part 2" of notes_v2.sh):  
test_type="wilcox"
correction="fdr"

e. Optional setting of dendrogram height cutoff for clustering: heightcutoff
can default to 0, which will produce no clusters, unless there are
features/genes with identical epigenomic information. 

Optionally, after running the analysis the first time (with default height cutoff of 0), 
you can then look at the resulting dendrogram file in 
plots/${curr_label}/${a_option}.${b_option}/perc/${test_type}/${correction}/hclust_domstate.pdf 
to choose a manual cutoff. Then, the height cutoff will generate and analyze gene clusters based on 
the given dendrogram and height cutoff, as shown in clustered plots and
analysis in Yen and Kellis, 2015. 

Example (as shown in "Part 2" of notes_v2.sh):
heightcutoff=0


#### PART 3: Running ChromDiff pipeline ####

After setting up your data for input (as in part 1) and specifying your input
files, variables and parameter (as in part 2), we can proceed to actually
running ChromDiff on your data.

The simple way to run ChromDiff, is simply to run the script notes_v2.sh. 

There, you can see that ChromDiff splits up into 4 steps: 

Step 1: Setting up gene info:
	./process_gene_info.sh $genefile $generegions_label
	
Step 2: Calculate features for all epigenomes, chromatin states, and genes:
	./calculate_all_raw_features.sh $metadatafile $statecalls_label $generegions_label $states_info

	-Note: You can also use ./calculate_raw_features.sh on each epid separately to
parallelize:
	./calculate_raw_features.sh $epid $statecallfile $statecalls_label $generegions_label $states_info

Step 3: Calculate background information, feature names, and check data:
	./featnames_bgvals.sh $statecalls_label $generegions_label $states_info

Step 4: Run ChromDiff on a particular epigenomic group comparison: 
	./perform_analysis.R $property $a_option $b_option $test_type $correction $curr_label $heighcutoff $metadatafile


RESULTS: 
 - figures and plots as presented in Yen and Kellis, 2015 will output in the
   directory: 
   plots/core/${label1}_${label2}/perc/${test}/${correction}/

 - results for comparison of expression can be found in the directory
   exp.pvals/

 - results for msigdb gene set enrichment can be found in msigdb/results/
 
#### PART 4: Finding results generated by ChromDiff #######
There are 4 categories of results that ChromDiff generates, which are listed
below with corresponding directories:
1. P-values of features (all_pvals/)
2. Plots and figures (plots/)
3. Differential expression results (exp.pvals/)
4. Gene set enrichment results (msigdb/)

1. P-values:
a. Corrected p-values for every feature (gene and chromatin state)
for each comparison can be found in the following path:
--> all_pvals/${statecalls_label}_${generegions_label}/perc.${test}.${correction}.${property}.${label1}.${label2}.txt
All ${xxxxx} variables should be substituted for the values used, as
specified in Part 2. 

b. Corrected p-values for significant features that were used in figure generation 
(sampled as necessary) can be found in the following path:
sig_pvals/${statecalls_label}_${generegions_label}/perc.${test}.${correction}.${property}.${label1}.${label2}.txt

The format of the p-value files is two columns, with the left column as the
feature id (GENEID_CHROMATINSTATENUMBER) and the right column as the p-value
after multiple hypothesis correction. 

2. Plots and figures: Plots and figures used in Yen and Kellis, 2015 will
output in the following directory:
plots/${statecalls_label}_${generegions_label}/${label1}.${label2}/perc/${test}/${correction}/

a. Plot for combinations of genes and chromatin states (as shown in Fig. 2a): sig.pvals.pdf  
b. Dendrogram that can be used to choose a height cutoff (as chosen in Table
S1): hclust_domstate.pdf
c. Plot of dominant chromatin state (as shown in Fig. 2c): sig_maj_plot_clust_matched_domstate.pdf
d. Plot of expression (as shown in Fig. 2d): sig_exp_plot_clust_matched_domstate.pdf 
(Supplementary) e. Plot of dominant chromatin state ordered to match gene ordering from
combinations of genes and chromatin states (as shown in Fig. S2b):
sig_maj_plot_clust_matched_combinations.pdf

3. Differential expression: Statistics that show how many genes were
differentially expressed are listed in the file
exp.pvals/${statecalls_label}_${generegions_label}_domstate_percent_all.txt
(Tables are also available in the same directory.)

4. Gene set enrichment: Results for gene set enrichment from MSigDB gene sets
are in the following directory:
msigdb/results/c2_c5/symbols/perc.${test}.${correction}.${property}.${label1}.${label2}_all.txt

The file is in table format with the most significant gene sets listed first.
As shown in the header, the columns represent:
geneset	genesetsize(K)	numoverlaps(k)	k/K	q-value	orig_pval

P-values are generated using the hyper-geometric test, and Storey's q-value
correction is used to generate the q-values shown in the 4th column. 

About

Forked code of ChromDiff program as described in Yen and Kellis, Nature Communications 2015. Official code at

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • R 79.7%
  • Shell 14.2%
  • Awk 6.1%