annotate rgedgeR/rgedgeRpaired.xml @ 0:82e0af566160 draft

Uploaded
author fubar
date Wed, 12 Jun 2013 02:58:43 -0400
parents
children dea65c85afb4
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
82e0af566160 Uploaded
fubar
parents:
diff changeset
1 <tool id="rgedgeRpaired" name="edgeR paired" version="0.18">
82e0af566160 Uploaded
fubar
parents:
diff changeset
2 <description>2 level Anova for counts</description>
82e0af566160 Uploaded
fubar
parents:
diff changeset
3 <command interpreter="python">
82e0af566160 Uploaded
fubar
parents:
diff changeset
4 rgToolFactory.py --script_path "$runme" --interpreter "Rscript" --tool_name "edgeR"
82e0af566160 Uploaded
fubar
parents:
diff changeset
5 --output_dir "$html_file.files_path" --output_html "$html_file" --output_tab "$outtab" --make_HTML "yes"
82e0af566160 Uploaded
fubar
parents:
diff changeset
6 </command>
82e0af566160 Uploaded
fubar
parents:
diff changeset
7 <inputs>
82e0af566160 Uploaded
fubar
parents:
diff changeset
8 <param name="input1" type="data" format="tabular" label="Select an input matrix - rows are contigs, columns are counts for each sample"
82e0af566160 Uploaded
fubar
parents:
diff changeset
9 help="Use the HTSeq based count matrix preparation tool to create these matrices from BAM/SAM files and a GTF file of genomic features"/>
82e0af566160 Uploaded
fubar
parents:
diff changeset
10 <param name="title" type="text" value="edgeR" size="80" label="Title for job outputs" help="Supply a meaningful name here to remind you what the outputs contain">
82e0af566160 Uploaded
fubar
parents:
diff changeset
11 <sanitizer invalid_char="">
82e0af566160 Uploaded
fubar
parents:
diff changeset
12 <valid initial="string.letters,string.digits"><add value="_" /> </valid>
82e0af566160 Uploaded
fubar
parents:
diff changeset
13 </sanitizer>
82e0af566160 Uploaded
fubar
parents:
diff changeset
14 </param>
82e0af566160 Uploaded
fubar
parents:
diff changeset
15 <param name="treatment_name" type="text" value="Treatment" size="50" label="Treatment Name"/>
82e0af566160 Uploaded
fubar
parents:
diff changeset
16 <param name="Treat_cols" label="Select columns containing treatment." type="data_column" data_ref="input1" numerical="True"
82e0af566160 Uploaded
fubar
parents:
diff changeset
17 multiple="true" use_header_names="true" size="120" display="checkboxes">
82e0af566160 Uploaded
fubar
parents:
diff changeset
18 <validator type="no_options" message="Please select at least one column."/>
82e0af566160 Uploaded
fubar
parents:
diff changeset
19 </param>
82e0af566160 Uploaded
fubar
parents:
diff changeset
20 <param name="control_name" type="text" value="Control" size="50" label="Control Name"/>
82e0af566160 Uploaded
fubar
parents:
diff changeset
21 <param name="Control_cols" label="Select columns containing control." type="data_column" data_ref="input1" numerical="True"
82e0af566160 Uploaded
fubar
parents:
diff changeset
22 multiple="true" use_header_names="true" size="120" display="checkboxes" optional="true">
82e0af566160 Uploaded
fubar
parents:
diff changeset
23 </param>
82e0af566160 Uploaded
fubar
parents:
diff changeset
24 <param name="subjectids" type="text" optional="true" size="120"
82e0af566160 Uploaded
fubar
parents:
diff changeset
25 label="IF SUBJECTS NOT ALL INDEPENDENT! Enter integers to indicate sample pairing for every column in input"
82e0af566160 Uploaded
fubar
parents:
diff changeset
26 help="Leave blank if no pairing, but eg if data from sample id A99 is in columns 2,4 and id C21 is in 3,5 then enter '1,2,1,2'">
82e0af566160 Uploaded
fubar
parents:
diff changeset
27 <sanitizer>
82e0af566160 Uploaded
fubar
parents:
diff changeset
28 <valid initial="string.digits"><add value="," /> </valid>
82e0af566160 Uploaded
fubar
parents:
diff changeset
29 </sanitizer>
82e0af566160 Uploaded
fubar
parents:
diff changeset
30 </param>
82e0af566160 Uploaded
fubar
parents:
diff changeset
31 <param name="fQ" type="float" value="0.3" size="5" label="Non-differential contig count quantile threshold - zero to analyze all non-zero read count contigs"
82e0af566160 Uploaded
fubar
parents:
diff changeset
32 help="May be a good or a bad idea depending on the biology and the question. EG 0.3 = sparsest 30% of contigs with at least one read are removed before analysis"/>
82e0af566160 Uploaded
fubar
parents:
diff changeset
33 <param name="useNDF" type="boolean" truevalue="T" checked='false' falsevalue="" size="1" label="Non differential filter - remove contigs below a threshold (1 per million) for half or more samples"
82e0af566160 Uploaded
fubar
parents:
diff changeset
34 help="May be a good or a bad idea depending on the biology and the question. This was the old default. Quantile based is available as an alternative"/>
82e0af566160 Uploaded
fubar
parents:
diff changeset
35 <param name="priordf" type="integer" value="20" size="3" label="prior.df for tagwise dispersion - lower value = more emphasis on each tag's variance. Replaces prior.n and prior.df = prior.n * residual.df"
82e0af566160 Uploaded
fubar
parents:
diff changeset
36 help="Zero = Use edgeR default. Use a small value to 'smooth' small samples. See edgeR docs and note below"/>
82e0af566160 Uploaded
fubar
parents:
diff changeset
37 <param name="fdrthresh" type="float" value="0.05" size="5" label="P value threshold for FDR filtering for amily wise error rate control"
82e0af566160 Uploaded
fubar
parents:
diff changeset
38 help="Conventional default value of 0.05 recommended"/>
82e0af566160 Uploaded
fubar
parents:
diff changeset
39 <param name="fdrtype" type="select" label="FDR (Type II error) control method"
82e0af566160 Uploaded
fubar
parents:
diff changeset
40 help="Use fdr or bh typically to control for the number of tests in a reliable way">
82e0af566160 Uploaded
fubar
parents:
diff changeset
41 <option value="fdr" selected="true">fdr</option>
82e0af566160 Uploaded
fubar
parents:
diff changeset
42 <option value="BH">Benjamini Hochberg</option>
82e0af566160 Uploaded
fubar
parents:
diff changeset
43 <option value="BY">Benjamini Yukateli</option>
82e0af566160 Uploaded
fubar
parents:
diff changeset
44 <option value="bonferroni">Bonferroni</option>
82e0af566160 Uploaded
fubar
parents:
diff changeset
45 <option value="hochberg">Hochberg</option>
82e0af566160 Uploaded
fubar
parents:
diff changeset
46 <option value="holm">Holm</option>
82e0af566160 Uploaded
fubar
parents:
diff changeset
47 <option value="hommel">Hommel</option>
82e0af566160 Uploaded
fubar
parents:
diff changeset
48 <option value="none">no control for multiple tests</option>
82e0af566160 Uploaded
fubar
parents:
diff changeset
49 </param>
82e0af566160 Uploaded
fubar
parents:
diff changeset
50 </inputs>
82e0af566160 Uploaded
fubar
parents:
diff changeset
51 <outputs>
82e0af566160 Uploaded
fubar
parents:
diff changeset
52 <data format="tabular" name="outtab" label="${title}.xls"/>
82e0af566160 Uploaded
fubar
parents:
diff changeset
53 <data format="html" name="html_file" label="${title}.html"/>
82e0af566160 Uploaded
fubar
parents:
diff changeset
54 </outputs>
82e0af566160 Uploaded
fubar
parents:
diff changeset
55 <stdio>
82e0af566160 Uploaded
fubar
parents:
diff changeset
56 <exit_code range="4" level="fatal" description="Number of subject ids must match total number of samples in the input matrix" />
82e0af566160 Uploaded
fubar
parents:
diff changeset
57 </stdio>
82e0af566160 Uploaded
fubar
parents:
diff changeset
58 <tests>
82e0af566160 Uploaded
fubar
parents:
diff changeset
59 <test>
82e0af566160 Uploaded
fubar
parents:
diff changeset
60 <param name='input1' value='test_bams2mx.xls' ftype='tabular' />
82e0af566160 Uploaded
fubar
parents:
diff changeset
61 <param name='treatment_name' value='case' />
82e0af566160 Uploaded
fubar
parents:
diff changeset
62 <param name='title' value='edgeRtest' />
82e0af566160 Uploaded
fubar
parents:
diff changeset
63 <param name='fdrtype' value='fdr' />
82e0af566160 Uploaded
fubar
parents:
diff changeset
64 <param name='priordf' value="0" />
82e0af566160 Uploaded
fubar
parents:
diff changeset
65 <param name='fdrthresh' value="0.05" />
82e0af566160 Uploaded
fubar
parents:
diff changeset
66 <param name='control_name' value='control' />
82e0af566160 Uploaded
fubar
parents:
diff changeset
67 <param name='Treat_cols' value='3,4,5,9' />
82e0af566160 Uploaded
fubar
parents:
diff changeset
68 <param name='Control_cols' value='2,6,7,8' />
82e0af566160 Uploaded
fubar
parents:
diff changeset
69 <output name='outtab' file='edgeRtest1out.xls' ftype='tabular' compare='diff' />
82e0af566160 Uploaded
fubar
parents:
diff changeset
70 <output name='html_file' file='edgeRtest1out.html' ftype='html' compare='diff' lines_diff='20' />
82e0af566160 Uploaded
fubar
parents:
diff changeset
71 </test>
82e0af566160 Uploaded
fubar
parents:
diff changeset
72 </tests>
82e0af566160 Uploaded
fubar
parents:
diff changeset
73
82e0af566160 Uploaded
fubar
parents:
diff changeset
74 <configfiles>
82e0af566160 Uploaded
fubar
parents:
diff changeset
75 <configfile name="runme">
82e0af566160 Uploaded
fubar
parents:
diff changeset
76 <![CDATA[
82e0af566160 Uploaded
fubar
parents:
diff changeset
77 #
82e0af566160 Uploaded
fubar
parents:
diff changeset
78 # edgeR.Rscript
82e0af566160 Uploaded
fubar
parents:
diff changeset
79 # updated npv 2011 for R 2.14.0 and edgeR 2.4.0 by ross
82e0af566160 Uploaded
fubar
parents:
diff changeset
80 # Performs DGE on a count table containing n replicates of two conditions
82e0af566160 Uploaded
fubar
parents:
diff changeset
81 #
82e0af566160 Uploaded
fubar
parents:
diff changeset
82 # Parameters
82e0af566160 Uploaded
fubar
parents:
diff changeset
83 #
82e0af566160 Uploaded
fubar
parents:
diff changeset
84 # 1 - Output Dir
82e0af566160 Uploaded
fubar
parents:
diff changeset
85
82e0af566160 Uploaded
fubar
parents:
diff changeset
86 # Original edgeR code by: S.Lunke and A.Kaspi
82e0af566160 Uploaded
fubar
parents:
diff changeset
87 reallybig = log10(.Machine\$double.xmax)
82e0af566160 Uploaded
fubar
parents:
diff changeset
88 reallysmall = log10(.Machine\$double.xmin)
82e0af566160 Uploaded
fubar
parents:
diff changeset
89 library('stringr')
82e0af566160 Uploaded
fubar
parents:
diff changeset
90 library('gplots')
82e0af566160 Uploaded
fubar
parents:
diff changeset
91 library('DESeq')
82e0af566160 Uploaded
fubar
parents:
diff changeset
92 library('edgeR')
82e0af566160 Uploaded
fubar
parents:
diff changeset
93 hmap2 = function(cmat,nsamp=100,outpdfname='heatmap2.pdf', TName='Treatment',group=NA,myTitle='title goes here')
82e0af566160 Uploaded
fubar
parents:
diff changeset
94 {
82e0af566160 Uploaded
fubar
parents:
diff changeset
95 # Perform clustering for significant pvalues after controlling FWER
82e0af566160 Uploaded
fubar
parents:
diff changeset
96 samples = colnames(cmat)
82e0af566160 Uploaded
fubar
parents:
diff changeset
97 gu = unique(group)
82e0af566160 Uploaded
fubar
parents:
diff changeset
98 if (length(gu) == 2) {
82e0af566160 Uploaded
fubar
parents:
diff changeset
99 col.map = function(g) {if (g==gu[1]) "#FF0000" else "#0000FF"}
82e0af566160 Uploaded
fubar
parents:
diff changeset
100 pcols = unlist(lapply(group,col.map))
82e0af566160 Uploaded
fubar
parents:
diff changeset
101 } else {
82e0af566160 Uploaded
fubar
parents:
diff changeset
102 colours = rainbow(length(gu),start=0,end=4/6)
82e0af566160 Uploaded
fubar
parents:
diff changeset
103 pcols = colours[match(group,gu)] }
82e0af566160 Uploaded
fubar
parents:
diff changeset
104 gn = rownames(cmat)
82e0af566160 Uploaded
fubar
parents:
diff changeset
105 dm = cmat[(! is.na(gn)),]
82e0af566160 Uploaded
fubar
parents:
diff changeset
106 # remove unlabelled hm rows
82e0af566160 Uploaded
fubar
parents:
diff changeset
107 nprobes = nrow(dm)
82e0af566160 Uploaded
fubar
parents:
diff changeset
108 # sub = paste('Showing',nprobes,'contigs ranked for evidence of differential abundance')
82e0af566160 Uploaded
fubar
parents:
diff changeset
109 if (nprobes > nsamp) {
82e0af566160 Uploaded
fubar
parents:
diff changeset
110 dm =dm[1:nsamp,]
82e0af566160 Uploaded
fubar
parents:
diff changeset
111 #sub = paste('Showing',nsamp,'contigs ranked for evidence for differential abundance out of',nprobes,'total')
82e0af566160 Uploaded
fubar
parents:
diff changeset
112 }
82e0af566160 Uploaded
fubar
parents:
diff changeset
113 newcolnames = substr(colnames(dm),1,20)
82e0af566160 Uploaded
fubar
parents:
diff changeset
114 colnames(dm) = newcolnames
82e0af566160 Uploaded
fubar
parents:
diff changeset
115 pdf(outpdfname)
82e0af566160 Uploaded
fubar
parents:
diff changeset
116 heatmap.2(dm,main=myTitle,ColSideColors=pcols,col=topo.colors(100),dendrogram="col",key=T,density.info='none',
82e0af566160 Uploaded
fubar
parents:
diff changeset
117 Rowv=F,scale='row',trace='none',margins=c(8,8),cexRow=0.4,cexCol=0.5)
82e0af566160 Uploaded
fubar
parents:
diff changeset
118 dev.off()
82e0af566160 Uploaded
fubar
parents:
diff changeset
119 }
82e0af566160 Uploaded
fubar
parents:
diff changeset
120
82e0af566160 Uploaded
fubar
parents:
diff changeset
121 hmap = function(cmat,nmeans=4,outpdfname="heatMap.pdf",nsamp=250,TName='Treatment',group=NA,myTitle="Title goes here")
82e0af566160 Uploaded
fubar
parents:
diff changeset
122 {
82e0af566160 Uploaded
fubar
parents:
diff changeset
123 # for 2 groups only was
82e0af566160 Uploaded
fubar
parents:
diff changeset
124 #col.map = function(g) {if (g==TName) "#FF0000" else "#0000FF"}
82e0af566160 Uploaded
fubar
parents:
diff changeset
125 #pcols = unlist(lapply(group,col.map))
82e0af566160 Uploaded
fubar
parents:
diff changeset
126 gu = unique(group)
82e0af566160 Uploaded
fubar
parents:
diff changeset
127 colours = rainbow(length(gu),start=0.3,end=0.6)
82e0af566160 Uploaded
fubar
parents:
diff changeset
128 pcols = colours[match(group,gu)]
82e0af566160 Uploaded
fubar
parents:
diff changeset
129 nrows = nrow(cmat)
82e0af566160 Uploaded
fubar
parents:
diff changeset
130 mtitle = paste(myTitle,'Heatmap: n contigs =',nrows)
82e0af566160 Uploaded
fubar
parents:
diff changeset
131 if (nrows > nsamp) {
82e0af566160 Uploaded
fubar
parents:
diff changeset
132 cmat = cmat[c(1:nsamp),]
82e0af566160 Uploaded
fubar
parents:
diff changeset
133 mtitle = paste('Heatmap: Top ',nsamp,' DE contigs (of ',nrows,')',sep='')
82e0af566160 Uploaded
fubar
parents:
diff changeset
134 }
82e0af566160 Uploaded
fubar
parents:
diff changeset
135 newcolnames = substr(colnames(cmat),1,20)
82e0af566160 Uploaded
fubar
parents:
diff changeset
136 colnames(cmat) = newcolnames
82e0af566160 Uploaded
fubar
parents:
diff changeset
137 pdf(outpdfname)
82e0af566160 Uploaded
fubar
parents:
diff changeset
138 heatmap(cmat,scale='row',main=mtitle,cexRow=0.3,cexCol=0.4,Rowv=NA,ColSideColors=pcols)
82e0af566160 Uploaded
fubar
parents:
diff changeset
139 dev.off()
82e0af566160 Uploaded
fubar
parents:
diff changeset
140 }
82e0af566160 Uploaded
fubar
parents:
diff changeset
141
82e0af566160 Uploaded
fubar
parents:
diff changeset
142 qqPlot = function(descr='Title',pvector, ...)
82e0af566160 Uploaded
fubar
parents:
diff changeset
143 # stolen from https://gist.github.com/703512
82e0af566160 Uploaded
fubar
parents:
diff changeset
144 {
82e0af566160 Uploaded
fubar
parents:
diff changeset
145 o = -log10(sort(pvector,decreasing=F))
82e0af566160 Uploaded
fubar
parents:
diff changeset
146 e = -log10( 1:length(o)/length(o) )
82e0af566160 Uploaded
fubar
parents:
diff changeset
147 o[o==-Inf] = reallysmall
82e0af566160 Uploaded
fubar
parents:
diff changeset
148 o[o==Inf] = reallybig
82e0af566160 Uploaded
fubar
parents:
diff changeset
149 pdfname = paste(gsub(" ","", descr , fixed=TRUE),'pval_qq.pdf',sep='_')
82e0af566160 Uploaded
fubar
parents:
diff changeset
150 maint = paste(descr,'QQ Plot')
82e0af566160 Uploaded
fubar
parents:
diff changeset
151 pdf(pdfname)
82e0af566160 Uploaded
fubar
parents:
diff changeset
152 plot(e,o,pch=19,cex=1, main=maint, ...,
82e0af566160 Uploaded
fubar
parents:
diff changeset
153 xlab=expression(Expected~~-log[10](italic(p))),
82e0af566160 Uploaded
fubar
parents:
diff changeset
154 ylab=expression(Observed~~-log[10](italic(p))),
82e0af566160 Uploaded
fubar
parents:
diff changeset
155 xlim=c(0,max(e)), ylim=c(0,max(o)))
82e0af566160 Uploaded
fubar
parents:
diff changeset
156 lines(e,e,col="red")
82e0af566160 Uploaded
fubar
parents:
diff changeset
157 grid(col = "lightgray", lty = "dotted")
82e0af566160 Uploaded
fubar
parents:
diff changeset
158 dev.off()
82e0af566160 Uploaded
fubar
parents:
diff changeset
159 }
82e0af566160 Uploaded
fubar
parents:
diff changeset
160
82e0af566160 Uploaded
fubar
parents:
diff changeset
161 smearPlot = function(DGEList,deTags, outSmear, outMain)
82e0af566160 Uploaded
fubar
parents:
diff changeset
162 {
82e0af566160 Uploaded
fubar
parents:
diff changeset
163 pdf(outSmear)
82e0af566160 Uploaded
fubar
parents:
diff changeset
164 plotSmear(DGEList,de.tags=deTags,main=outMain)
82e0af566160 Uploaded
fubar
parents:
diff changeset
165 grid(col="blue")
82e0af566160 Uploaded
fubar
parents:
diff changeset
166 dev.off()
82e0af566160 Uploaded
fubar
parents:
diff changeset
167 }
82e0af566160 Uploaded
fubar
parents:
diff changeset
168
82e0af566160 Uploaded
fubar
parents:
diff changeset
169 boxPlot = function(rawrs,cleanrs,maint,myTitle)
82e0af566160 Uploaded
fubar
parents:
diff changeset
170 { #
82e0af566160 Uploaded
fubar
parents:
diff changeset
171 nc = ncol(rawrs)
82e0af566160 Uploaded
fubar
parents:
diff changeset
172 for (i in c(1:nc)) {rawrs[(rawrs[,i] < 0),i] = NA}
82e0af566160 Uploaded
fubar
parents:
diff changeset
173 fullnames = colnames(rawrs)
82e0af566160 Uploaded
fubar
parents:
diff changeset
174 newcolnames = substr(colnames(rawrs),1,20)
82e0af566160 Uploaded
fubar
parents:
diff changeset
175 colnames(rawrs) = newcolnames
82e0af566160 Uploaded
fubar
parents:
diff changeset
176 newcolnames = substr(colnames(cleanrs),1,20)
82e0af566160 Uploaded
fubar
parents:
diff changeset
177 colnames(cleanrs) = newcolnames
82e0af566160 Uploaded
fubar
parents:
diff changeset
178 pdfname = paste(gsub(" ","", myTitle , fixed=TRUE),"sampleBoxplot.pdf",sep='_')
82e0af566160 Uploaded
fubar
parents:
diff changeset
179 defpar = par(no.readonly=T)
82e0af566160 Uploaded
fubar
parents:
diff changeset
180 pdf(pdfname,height=6,width=8)
82e0af566160 Uploaded
fubar
parents:
diff changeset
181 #par(mfrow=c(1,2)) # 1 rows 2 col
82e0af566160 Uploaded
fubar
parents:
diff changeset
182 l = layout(matrix(c(1,2),1,2,byrow=T))
82e0af566160 Uploaded
fubar
parents:
diff changeset
183 print.noquote('raw contig counts by sample:')
82e0af566160 Uploaded
fubar
parents:
diff changeset
184 print.noquote(summary(rawrs))
82e0af566160 Uploaded
fubar
parents:
diff changeset
185 print.noquote('normalised contig counts by sample:')
82e0af566160 Uploaded
fubar
parents:
diff changeset
186 print.noquote(summary(cleanrs))
82e0af566160 Uploaded
fubar
parents:
diff changeset
187 boxplot(rawrs,varwidth=T,notch=T,ylab='log contig count',col="maroon",las=3,cex.axis=0.35,main=paste('Raw:',maint))
82e0af566160 Uploaded
fubar
parents:
diff changeset
188 grid(col="blue")
82e0af566160 Uploaded
fubar
parents:
diff changeset
189 boxplot(cleanrs,varwidth=T,notch=T,ylab='log contig count',col="maroon",las=3,cex.axis=0.35,main=paste('After ',maint))
82e0af566160 Uploaded
fubar
parents:
diff changeset
190 grid(col="blue")
82e0af566160 Uploaded
fubar
parents:
diff changeset
191 dev.off()
82e0af566160 Uploaded
fubar
parents:
diff changeset
192 pdfname = paste(gsub(" ","", myTitle , fixed=TRUE),"samplehistplot.pdf",sep='_')
82e0af566160 Uploaded
fubar
parents:
diff changeset
193 nc = ncol(rawrs)
82e0af566160 Uploaded
fubar
parents:
diff changeset
194 print.noquote(paste('Using ncol rawrs=',nc))
82e0af566160 Uploaded
fubar
parents:
diff changeset
195 ncroot = round(sqrt(nc))
82e0af566160 Uploaded
fubar
parents:
diff changeset
196 if (ncroot*ncroot < nc) { ncroot = ncroot + 1 }
82e0af566160 Uploaded
fubar
parents:
diff changeset
197 m = c()
82e0af566160 Uploaded
fubar
parents:
diff changeset
198 for (i in c(1:nc)) {
82e0af566160 Uploaded
fubar
parents:
diff changeset
199 rhist = hist(rawrs[,i],breaks=100,plot=F)
82e0af566160 Uploaded
fubar
parents:
diff changeset
200 m = append(m,max(rhist\$counts))
82e0af566160 Uploaded
fubar
parents:
diff changeset
201 }
82e0af566160 Uploaded
fubar
parents:
diff changeset
202 ymax = max(m)
82e0af566160 Uploaded
fubar
parents:
diff changeset
203 pdf(pdfname)
82e0af566160 Uploaded
fubar
parents:
diff changeset
204 par(mfrow=c(ncroot,ncroot))
82e0af566160 Uploaded
fubar
parents:
diff changeset
205 for (i in c(1:nc)) {
82e0af566160 Uploaded
fubar
parents:
diff changeset
206 hist(rawrs[,i], main=paste("Contig logcount",i), xlab='log raw count', col="maroon",
82e0af566160 Uploaded
fubar
parents:
diff changeset
207 breaks=100,sub=fullnames[i],cex=0.8,ylim=c(0,ymax))
82e0af566160 Uploaded
fubar
parents:
diff changeset
208 }
82e0af566160 Uploaded
fubar
parents:
diff changeset
209 dev.off()
82e0af566160 Uploaded
fubar
parents:
diff changeset
210 par(defpar)
82e0af566160 Uploaded
fubar
parents:
diff changeset
211
82e0af566160 Uploaded
fubar
parents:
diff changeset
212 }
82e0af566160 Uploaded
fubar
parents:
diff changeset
213
82e0af566160 Uploaded
fubar
parents:
diff changeset
214 cumPlot = function(rawrs,cleanrs,maint,myTitle)
82e0af566160 Uploaded
fubar
parents:
diff changeset
215 { # updated to use ecdf
82e0af566160 Uploaded
fubar
parents:
diff changeset
216 pdfname = paste(gsub(" ","", myTitle , fixed=TRUE),"RowsumCum.pdf",sep='_')
82e0af566160 Uploaded
fubar
parents:
diff changeset
217 defpar = par(no.readonly=T)
82e0af566160 Uploaded
fubar
parents:
diff changeset
218 pdf(pdfname)
82e0af566160 Uploaded
fubar
parents:
diff changeset
219 par(mfrow=c(2,1))
82e0af566160 Uploaded
fubar
parents:
diff changeset
220 lrs = log(rawrs,10)
82e0af566160 Uploaded
fubar
parents:
diff changeset
221 lim = max(lrs)
82e0af566160 Uploaded
fubar
parents:
diff changeset
222 hist(lrs,breaks=100,main=paste('Before:',maint),xlab="# Reads (log)",
82e0af566160 Uploaded
fubar
parents:
diff changeset
223 ylab="Count",col="maroon",sub=myTitle, xlim=c(0,lim),las=1)
82e0af566160 Uploaded
fubar
parents:
diff changeset
224 grid(col="blue")
82e0af566160 Uploaded
fubar
parents:
diff changeset
225 lrs = log(cleanrs,10)
82e0af566160 Uploaded
fubar
parents:
diff changeset
226 hist(lrs,breaks=100,main=paste('After:',maint),xlab="# Reads (log)",
82e0af566160 Uploaded
fubar
parents:
diff changeset
227 ylab="Count",col="maroon",sub=myTitle,xlim=c(0,lim),las=1)
82e0af566160 Uploaded
fubar
parents:
diff changeset
228 grid(col="blue")
82e0af566160 Uploaded
fubar
parents:
diff changeset
229 dev.off()
82e0af566160 Uploaded
fubar
parents:
diff changeset
230 par(defpar)
82e0af566160 Uploaded
fubar
parents:
diff changeset
231 }
82e0af566160 Uploaded
fubar
parents:
diff changeset
232
82e0af566160 Uploaded
fubar
parents:
diff changeset
233 cumPlot1 = function(rawrs,cleanrs,maint,myTitle)
82e0af566160 Uploaded
fubar
parents:
diff changeset
234 { # updated to use ecdf
82e0af566160 Uploaded
fubar
parents:
diff changeset
235 pdfname = paste(gsub(" ","", myTitle , fixed=TRUE),"RowsumCum.pdf",sep='_')
82e0af566160 Uploaded
fubar
parents:
diff changeset
236 pdf(pdfname)
82e0af566160 Uploaded
fubar
parents:
diff changeset
237 par(mfrow=c(2,1))
82e0af566160 Uploaded
fubar
parents:
diff changeset
238 lastx = max(rawrs)
82e0af566160 Uploaded
fubar
parents:
diff changeset
239 rawe = knots(ecdf(rawrs))
82e0af566160 Uploaded
fubar
parents:
diff changeset
240 cleane = knots(ecdf(cleanrs))
82e0af566160 Uploaded
fubar
parents:
diff changeset
241 cy = 1:length(cleane)/length(cleane)
82e0af566160 Uploaded
fubar
parents:
diff changeset
242 ry = 1:length(rawe)/length(rawe)
82e0af566160 Uploaded
fubar
parents:
diff changeset
243 plot(rawe,ry,type='l',main=paste('Before',maint),xlab="Log Contig Total Reads",
82e0af566160 Uploaded
fubar
parents:
diff changeset
244 ylab="Cumulative proportion",col="maroon",log='x',xlim=c(1,lastx),sub=myTitle)
82e0af566160 Uploaded
fubar
parents:
diff changeset
245 grid(col="blue")
82e0af566160 Uploaded
fubar
parents:
diff changeset
246 plot(cleane,cy,type='l',main=paste('After',maint),xlab="Log Contig Total Reads",
82e0af566160 Uploaded
fubar
parents:
diff changeset
247 ylab="Cumulative proportion",col="maroon",log='x',xlim=c(1,lastx),sub=myTitle)
82e0af566160 Uploaded
fubar
parents:
diff changeset
248 grid(col="blue")
82e0af566160 Uploaded
fubar
parents:
diff changeset
249 dev.off()
82e0af566160 Uploaded
fubar
parents:
diff changeset
250 }
82e0af566160 Uploaded
fubar
parents:
diff changeset
251
82e0af566160 Uploaded
fubar
parents:
diff changeset
252
82e0af566160 Uploaded
fubar
parents:
diff changeset
253
82e0af566160 Uploaded
fubar
parents:
diff changeset
254 edgeIt = function (Count_Matrix,group,outputfilename,fdrtype='fdr',priordf=5,fdrthresh=0.05,outputdir='.',
82e0af566160 Uploaded
fubar
parents:
diff changeset
255 myTitle='edgeR',libSize=c(),useNDF="T",filterquantile=0.2,subjects=c()) {
82e0af566160 Uploaded
fubar
parents:
diff changeset
256
82e0af566160 Uploaded
fubar
parents:
diff changeset
257 # Error handling
82e0af566160 Uploaded
fubar
parents:
diff changeset
258 if (length(unique(group))!=2){
82e0af566160 Uploaded
fubar
parents:
diff changeset
259 print("Number of conditions identified in experiment does not equal 2")
82e0af566160 Uploaded
fubar
parents:
diff changeset
260 q()
82e0af566160 Uploaded
fubar
parents:
diff changeset
261 }
82e0af566160 Uploaded
fubar
parents:
diff changeset
262 require(edgeR)
82e0af566160 Uploaded
fubar
parents:
diff changeset
263 mt = paste(unlist(strsplit(myTitle,'_')),collapse=" ")
82e0af566160 Uploaded
fubar
parents:
diff changeset
264 allN = nrow(Count_Matrix)
82e0af566160 Uploaded
fubar
parents:
diff changeset
265 nscut = round(ncol(Count_Matrix)/2)
82e0af566160 Uploaded
fubar
parents:
diff changeset
266 colTotmillionreads = colSums(Count_Matrix)/1e6
82e0af566160 Uploaded
fubar
parents:
diff changeset
267 rawrs = rowSums(Count_Matrix)
82e0af566160 Uploaded
fubar
parents:
diff changeset
268 nonzerod = Count_Matrix[(rawrs > 0),] # remove all zero count genes
82e0af566160 Uploaded
fubar
parents:
diff changeset
269 nzN = nrow(nonzerod)
82e0af566160 Uploaded
fubar
parents:
diff changeset
270 nzrs = rowSums(nonzerod)
82e0af566160 Uploaded
fubar
parents:
diff changeset
271 zN = allN - nzN
82e0af566160 Uploaded
fubar
parents:
diff changeset
272 print('# Quantiles for non-zero row counts:',quote=F)
82e0af566160 Uploaded
fubar
parents:
diff changeset
273 print(quantile(nzrs,probs=seq(0,1,0.1)),quote=F)
82e0af566160 Uploaded
fubar
parents:
diff changeset
274 if (useNDF == "T")
82e0af566160 Uploaded
fubar
parents:
diff changeset
275 {
82e0af566160 Uploaded
fubar
parents:
diff changeset
276 gt1rpin3 = rowSums(Count_Matrix/expandAsMatrix(colTotmillionreads,dim(Count_Matrix)) >= 1) >= nscut
82e0af566160 Uploaded
fubar
parents:
diff changeset
277 lo = colSums(Count_Matrix[!gt1rpin3,])
82e0af566160 Uploaded
fubar
parents:
diff changeset
278 workCM = Count_Matrix[gt1rpin3,]
82e0af566160 Uploaded
fubar
parents:
diff changeset
279 cleanrs = rowSums(workCM)
82e0af566160 Uploaded
fubar
parents:
diff changeset
280 cleanN = length(cleanrs)
82e0af566160 Uploaded
fubar
parents:
diff changeset
281 meth = paste( "After removing",length(lo),"contigs with fewer than ",nscut," sample read counts >= 1 per million, there are",sep="")
82e0af566160 Uploaded
fubar
parents:
diff changeset
282 print(paste("Read",allN,"contigs. Removed",zN,"contigs with no reads.",meth,cleanN,"contigs"),quote=F)
82e0af566160 Uploaded
fubar
parents:
diff changeset
283 maint = paste('Filter >=1/million reads in >=',nscut,'samples')
82e0af566160 Uploaded
fubar
parents:
diff changeset
284 }
82e0af566160 Uploaded
fubar
parents:
diff changeset
285 else {
82e0af566160 Uploaded
fubar
parents:
diff changeset
286 useme = (nzrs > quantile(nzrs,filterquantile))
82e0af566160 Uploaded
fubar
parents:
diff changeset
287 workCM = nonzerod[useme,]
82e0af566160 Uploaded
fubar
parents:
diff changeset
288 lo = colSums(nonzerod[!useme,])
82e0af566160 Uploaded
fubar
parents:
diff changeset
289 cleanrs = rowSums(workCM)
82e0af566160 Uploaded
fubar
parents:
diff changeset
290 cleanN = length(cleanrs)
82e0af566160 Uploaded
fubar
parents:
diff changeset
291 meth = paste("After filtering at count quantile =",filterquantile,", there are",sep="")
82e0af566160 Uploaded
fubar
parents:
diff changeset
292 print(paste('Read',allN,"contigs. Removed",zN,"with no reads.",meth,cleanN,"contigs"),quote=F)
82e0af566160 Uploaded
fubar
parents:
diff changeset
293 maint = paste('Filter below',filterquantile,'quantile')
82e0af566160 Uploaded
fubar
parents:
diff changeset
294 }
82e0af566160 Uploaded
fubar
parents:
diff changeset
295 cumPlot(rawrs=rawrs,cleanrs=cleanrs,maint=maint,myTitle=myTitle)
82e0af566160 Uploaded
fubar
parents:
diff changeset
296 allgenes <- rownames(workCM)
82e0af566160 Uploaded
fubar
parents:
diff changeset
297 print(paste("# Total low count contigs per sample = ",paste(lo,collapse=',')),quote=F)
82e0af566160 Uploaded
fubar
parents:
diff changeset
298 rsums = rowSums(workCM)
82e0af566160 Uploaded
fubar
parents:
diff changeset
299 TName=unique(group)[1]
82e0af566160 Uploaded
fubar
parents:
diff changeset
300 CName=unique(group)[2]
82e0af566160 Uploaded
fubar
parents:
diff changeset
301 # Setup DGEList object
82e0af566160 Uploaded
fubar
parents:
diff changeset
302 DGEList = DGEList(counts=workCM, group = group)
82e0af566160 Uploaded
fubar
parents:
diff changeset
303 if (length(subjects) == 0)
82e0af566160 Uploaded
fubar
parents:
diff changeset
304 {
82e0af566160 Uploaded
fubar
parents:
diff changeset
305 doDESEQ = T
82e0af566160 Uploaded
fubar
parents:
diff changeset
306 mydesign = model.matrix(~group)
82e0af566160 Uploaded
fubar
parents:
diff changeset
307 }
82e0af566160 Uploaded
fubar
parents:
diff changeset
308 else {
82e0af566160 Uploaded
fubar
parents:
diff changeset
309 doDESEQ = F
82e0af566160 Uploaded
fubar
parents:
diff changeset
310 subjf = factor(subjects)
82e0af566160 Uploaded
fubar
parents:
diff changeset
311 mydesign = model.matrix(~subjf+group) # we block on subject so make group last to simplify finding it
82e0af566160 Uploaded
fubar
parents:
diff changeset
312 }
82e0af566160 Uploaded
fubar
parents:
diff changeset
313 print.noquote(paste('Using samples:',paste(colnames(workCM),collapse=',')))
82e0af566160 Uploaded
fubar
parents:
diff changeset
314 print.noquote('Using design matrix:')
82e0af566160 Uploaded
fubar
parents:
diff changeset
315 print.noquote(mydesign)
82e0af566160 Uploaded
fubar
parents:
diff changeset
316 DGEList = estimateGLMCommonDisp(DGEList,mydesign)
82e0af566160 Uploaded
fubar
parents:
diff changeset
317 comdisp = DGEList\$common.dispersion
82e0af566160 Uploaded
fubar
parents:
diff changeset
318 DGEList = estimateGLMTrendedDisp(DGEList,mydesign)
82e0af566160 Uploaded
fubar
parents:
diff changeset
319 if (priordf > 0) {
82e0af566160 Uploaded
fubar
parents:
diff changeset
320 print.noquote(paste("prior.df =",priordf))
82e0af566160 Uploaded
fubar
parents:
diff changeset
321 DGEList = estimateGLMTagwiseDisp(DGEList,mydesign,prior.df = priordf)
82e0af566160 Uploaded
fubar
parents:
diff changeset
322 } else {
82e0af566160 Uploaded
fubar
parents:
diff changeset
323 DGEList = estimateGLMTagwiseDisp(DGEList,mydesign)
82e0af566160 Uploaded
fubar
parents:
diff changeset
324 }
82e0af566160 Uploaded
fubar
parents:
diff changeset
325 DGLM = glmFit(DGEList,design=mydesign)
82e0af566160 Uploaded
fubar
parents:
diff changeset
326 efflib = DGEList\$samples\$lib.size*DGEList\$samples\$norm.factors
82e0af566160 Uploaded
fubar
parents:
diff changeset
327 normData = (1e+06*DGEList\$counts/efflib)
82e0af566160 Uploaded
fubar
parents:
diff changeset
328 co = length(colnames(mydesign))
82e0af566160 Uploaded
fubar
parents:
diff changeset
329 DE = glmLRT(DGLM,coef=co) # always last one - subject is first if needed
82e0af566160 Uploaded
fubar
parents:
diff changeset
330 uoutput = cbind(
82e0af566160 Uploaded
fubar
parents:
diff changeset
331 Name=as.character(rownames(DGEList\$counts)),
82e0af566160 Uploaded
fubar
parents:
diff changeset
332 DE\$table,
82e0af566160 Uploaded
fubar
parents:
diff changeset
333 adj.p.value=p.adjust(DE\$table\$PValue, method=fdrtype),
82e0af566160 Uploaded
fubar
parents:
diff changeset
334 Dispersion=DGEList\$tagwise.dispersion,totreads=rsums,normData,
82e0af566160 Uploaded
fubar
parents:
diff changeset
335 DGEList\$counts
82e0af566160 Uploaded
fubar
parents:
diff changeset
336 )
82e0af566160 Uploaded
fubar
parents:
diff changeset
337 soutput = uoutput[order(DE\$table\$PValue),] # sorted into p value order - for quick toptable
82e0af566160 Uploaded
fubar
parents:
diff changeset
338 goodness = gof(DGLM, pcutoff=fdrthresh)
82e0af566160 Uploaded
fubar
parents:
diff changeset
339 if (sum(goodness\$outlier) > 0) {
82e0af566160 Uploaded
fubar
parents:
diff changeset
340 print.noquote('GLM outliers:')
82e0af566160 Uploaded
fubar
parents:
diff changeset
341 print(paste(rownames(DGLM)[(goodness\$outlier != 0)],collapse=','),quote=F)
82e0af566160 Uploaded
fubar
parents:
diff changeset
342 z = limma::zscoreGamma(goodness\$gof.statistic, shape=goodness\$df/2, scale=2)
82e0af566160 Uploaded
fubar
parents:
diff changeset
343 pdf(paste(mt,"GoodnessofFit.pdf",sep='_'))
82e0af566160 Uploaded
fubar
parents:
diff changeset
344 qq = qqnorm(z, panel.first=grid(), main="tagwise dispersion")
82e0af566160 Uploaded
fubar
parents:
diff changeset
345 abline(0,1,lwd=3)
82e0af566160 Uploaded
fubar
parents:
diff changeset
346 points(qq\$x[goodness\$outlier],qq\$y[goodness\$outlier], pch=16, col="dodgerblue")
82e0af566160 Uploaded
fubar
parents:
diff changeset
347 dev.off()
82e0af566160 Uploaded
fubar
parents:
diff changeset
348 } else { print('No GLM fit outlier genes found\n')}
82e0af566160 Uploaded
fubar
parents:
diff changeset
349 estpriorn = getPriorN(DGEList)
82e0af566160 Uploaded
fubar
parents:
diff changeset
350 print(paste("Common Dispersion =",comdisp,"CV = ",sqrt(comdisp),"getPriorN = ",estpriorn),quote=F)
82e0af566160 Uploaded
fubar
parents:
diff changeset
351 efflib = DGEList\$samples\$lib.size*DGEList\$samples\$norm.factors
82e0af566160 Uploaded
fubar
parents:
diff changeset
352 normData = (1e+06*DGEList\$counts/efflib)
82e0af566160 Uploaded
fubar
parents:
diff changeset
353 uniqueg = unique(group)
82e0af566160 Uploaded
fubar
parents:
diff changeset
354 # Plot MDS
82e0af566160 Uploaded
fubar
parents:
diff changeset
355 sample_colors = match(group,levels(group))
82e0af566160 Uploaded
fubar
parents:
diff changeset
356 pdf(paste(mt,"MDSplot.pdf",sep='_'))
82e0af566160 Uploaded
fubar
parents:
diff changeset
357 sampleTypes = levels(group)
82e0af566160 Uploaded
fubar
parents:
diff changeset
358 plotMDS.DGEList(DGEList,main=paste("MDS Plot for",myTitle),cex=0.5,col=sample_colors,pch=sample_colors)
82e0af566160 Uploaded
fubar
parents:
diff changeset
359 legend(x="topleft", legend = sampleTypes,col=c(1:length(sampleTypes)), pch=19)
82e0af566160 Uploaded
fubar
parents:
diff changeset
360 grid(col="blue")
82e0af566160 Uploaded
fubar
parents:
diff changeset
361 dev.off()
82e0af566160 Uploaded
fubar
parents:
diff changeset
362 colnames(normData) = paste( colnames(normData),'N',sep="_")
82e0af566160 Uploaded
fubar
parents:
diff changeset
363 print(paste('Raw sample read totals',paste(colSums(nonzerod,na.rm=T),collapse=',')))
82e0af566160 Uploaded
fubar
parents:
diff changeset
364 nzd = data.frame(log(nonzerod + 1e-2,10))
82e0af566160 Uploaded
fubar
parents:
diff changeset
365 boxPlot(rawrs=nzd,cleanrs=log(normData,10),maint='TMM Normalisation',myTitle=myTitle)
82e0af566160 Uploaded
fubar
parents:
diff changeset
366 if (doDESEQ)
82e0af566160 Uploaded
fubar
parents:
diff changeset
367 {
82e0af566160 Uploaded
fubar
parents:
diff changeset
368 # DESeq
82e0af566160 Uploaded
fubar
parents:
diff changeset
369 deSeqDatcount <- newCountDataSet(workCM, group)
82e0af566160 Uploaded
fubar
parents:
diff changeset
370 deSeqDatsizefac <- estimateSizeFactors(deSeqDatcount)
82e0af566160 Uploaded
fubar
parents:
diff changeset
371 deSeqDatdisp <- estimateDispersions(deSeqDatsizefac)
82e0af566160 Uploaded
fubar
parents:
diff changeset
372 rDESeq <- nbinomTest(deSeqDatdisp, levels(group)[1], levels(group)[2])
82e0af566160 Uploaded
fubar
parents:
diff changeset
373 rDESeq <- rDESeq[order(rDESeq\$pval), ]
82e0af566160 Uploaded
fubar
parents:
diff changeset
374 write.table(rDESeq,paste(mt,'DESeq_TopTable.xls',sep='_'), quote=FALSE, sep="\t",row.names=F)
82e0af566160 Uploaded
fubar
parents:
diff changeset
375 topresults.DESeq <- rDESeq[which(rDESeq\$padj < fdrthresh), ]
82e0af566160 Uploaded
fubar
parents:
diff changeset
376 DESeqcountsindex <- which(allgenes %in% topresults.DESeq\$id)
82e0af566160 Uploaded
fubar
parents:
diff changeset
377 DESeqcounts <- rep(0, length(allgenes))
82e0af566160 Uploaded
fubar
parents:
diff changeset
378 DESeqcounts[DESeqcountsindex] <- 1
82e0af566160 Uploaded
fubar
parents:
diff changeset
379 }
82e0af566160 Uploaded
fubar
parents:
diff changeset
380 DGEList = calcNormFactors(DGEList)
82e0af566160 Uploaded
fubar
parents:
diff changeset
381 norm.factor = DGEList\$samples\$norm.factors
82e0af566160 Uploaded
fubar
parents:
diff changeset
382 pdf(paste(mt,"voomplot.pdf",sep='_'))
82e0af566160 Uploaded
fubar
parents:
diff changeset
383 dat.voomed <- voom(DGEList, mydesign, plot = TRUE, lib.size = colSums(workCM) * norm.factor)
82e0af566160 Uploaded
fubar
parents:
diff changeset
384 dev.off()
82e0af566160 Uploaded
fubar
parents:
diff changeset
385 # Use limma to fit data
82e0af566160 Uploaded
fubar
parents:
diff changeset
386 fit <- lmFit(dat.voomed, mydesign)
82e0af566160 Uploaded
fubar
parents:
diff changeset
387 fit <- eBayes(fit)
82e0af566160 Uploaded
fubar
parents:
diff changeset
388 rvoom <- topTable(fit, coef = length(colnames(mydesign)), adj = "BH", n = Inf)
82e0af566160 Uploaded
fubar
parents:
diff changeset
389 write.table(rvoom,paste(mt,'VOOM_topTable.xls',sep='_'), quote=FALSE, sep="\t",row.names=F)
82e0af566160 Uploaded
fubar
parents:
diff changeset
390 # Use an FDR cutoff to find interesting samples for edgeR, DESeq and voom/limma
82e0af566160 Uploaded
fubar
parents:
diff changeset
391 topresults.voom <- rvoom[which(rvoom\$adj.P.Val < fdrthresh), ]
82e0af566160 Uploaded
fubar
parents:
diff changeset
392 topresults.edgeR <- soutput[which(soutput\$adj.p.value < fdrthresh), ]
82e0af566160 Uploaded
fubar
parents:
diff changeset
393 # Create venn diagram of hits
82e0af566160 Uploaded
fubar
parents:
diff changeset
394 edgeRcountsindex <- which(allgenes %in% rownames(topresults.edgeR))
82e0af566160 Uploaded
fubar
parents:
diff changeset
395 voomcountsindex <- which(allgenes %in% topresults.voom\$ID)
82e0af566160 Uploaded
fubar
parents:
diff changeset
396 edgeRcounts <- rep(0, length(allgenes))
82e0af566160 Uploaded
fubar
parents:
diff changeset
397 edgeRcounts[edgeRcountsindex] <- 1
82e0af566160 Uploaded
fubar
parents:
diff changeset
398 voomcounts <- rep(0, length(allgenes))
82e0af566160 Uploaded
fubar
parents:
diff changeset
399 voomcounts[voomcountsindex] <- 1
82e0af566160 Uploaded
fubar
parents:
diff changeset
400 if (doDESEQ) {
82e0af566160 Uploaded
fubar
parents:
diff changeset
401 vennmain = paste(mt,'Voom,edgeR and DESeq overlap at FDR=',fdrthresh)
82e0af566160 Uploaded
fubar
parents:
diff changeset
402 counts.dataframe <- data.frame(edgeRcounts = edgeRcounts, DESeqcounts = DESeqcounts,
82e0af566160 Uploaded
fubar
parents:
diff changeset
403 voomcounts = voomcounts, row.names = allgenes)
82e0af566160 Uploaded
fubar
parents:
diff changeset
404 } else {
82e0af566160 Uploaded
fubar
parents:
diff changeset
405 vennmain = paste(mt,'Voom and edgeR overlap at FDR=',fdrthresh)
82e0af566160 Uploaded
fubar
parents:
diff changeset
406 counts.dataframe <- data.frame(edgeRcounts = edgeRcounts, voomcounts = voomcounts, row.names = allgenes)
82e0af566160 Uploaded
fubar
parents:
diff changeset
407 }
82e0af566160 Uploaded
fubar
parents:
diff changeset
408 counts.venn <- vennCounts(counts.dataframe)
82e0af566160 Uploaded
fubar
parents:
diff changeset
409 vennf = paste(mt,'venn.pdf',sep='_')
82e0af566160 Uploaded
fubar
parents:
diff changeset
410 pdf(vennf)
82e0af566160 Uploaded
fubar
parents:
diff changeset
411 vennDiagram(counts.venn,main=vennmain,col="maroon")
82e0af566160 Uploaded
fubar
parents:
diff changeset
412 dev.off()
82e0af566160 Uploaded
fubar
parents:
diff changeset
413 #Prepare our output file
82e0af566160 Uploaded
fubar
parents:
diff changeset
414 nreads = soutput\$totreads # ordered same way
82e0af566160 Uploaded
fubar
parents:
diff changeset
415 print('# writing output',quote=F)
82e0af566160 Uploaded
fubar
parents:
diff changeset
416 write.table(soutput,outputfilename, quote=FALSE, sep="\t",row.names=F)
82e0af566160 Uploaded
fubar
parents:
diff changeset
417 rn = uoutput\$Name
82e0af566160 Uploaded
fubar
parents:
diff changeset
418 reg = "^chr([0-9]+):([0-9]+)-([0-9]+)"
82e0af566160 Uploaded
fubar
parents:
diff changeset
419 org="hg19"
82e0af566160 Uploaded
fubar
parents:
diff changeset
420 genecards="<a href='http://www.genecards.org/index.php?path=/Search/keyword/"
82e0af566160 Uploaded
fubar
parents:
diff changeset
421 ucsc = paste("<a href='http://genome.ucsc.edu/cgi-bin/hgTracks?db=",org,sep='')
82e0af566160 Uploaded
fubar
parents:
diff changeset
422 testreg = str_match(rn,reg)
82e0af566160 Uploaded
fubar
parents:
diff changeset
423 nreads = uoutput\$totreads # ordered same way
82e0af566160 Uploaded
fubar
parents:
diff changeset
424 if (sum(!is.na(testreg[,1]))/length(testreg[,1]) > 0.8) # is ucsc style string
82e0af566160 Uploaded
fubar
parents:
diff changeset
425 {
82e0af566160 Uploaded
fubar
parents:
diff changeset
426 urls = paste(ucsc,'&amp;position=chr',testreg[,2],':',testreg[,3],"-",testreg[,4],"'>",rn,'</a>',sep='')
82e0af566160 Uploaded
fubar
parents:
diff changeset
427 } else {
82e0af566160 Uploaded
fubar
parents:
diff changeset
428 urls = paste(genecards,rn,"'></a>",rn,'</a>',sep="")
82e0af566160 Uploaded
fubar
parents:
diff changeset
429 }
82e0af566160 Uploaded
fubar
parents:
diff changeset
430 print.noquote('# urls')
82e0af566160 Uploaded
fubar
parents:
diff changeset
431 cat(head(urls))
82e0af566160 Uploaded
fubar
parents:
diff changeset
432 tt = uoutput
82e0af566160 Uploaded
fubar
parents:
diff changeset
433 cat("# Top tags\n")
82e0af566160 Uploaded
fubar
parents:
diff changeset
434 tt = cbind(tt,ntotreads=nreads,URL=urls) # add to end so table isn't laid out strangely
82e0af566160 Uploaded
fubar
parents:
diff changeset
435 tt = tt[order(DE\$table\$PValue),]
82e0af566160 Uploaded
fubar
parents:
diff changeset
436 options(width = 500)
82e0af566160 Uploaded
fubar
parents:
diff changeset
437 print.noquote(tt[1:50,])
82e0af566160 Uploaded
fubar
parents:
diff changeset
438 pdf(paste(mt,"BCV_vs_abundance.pdf",sep='_'))
82e0af566160 Uploaded
fubar
parents:
diff changeset
439 plotBCV(DGEList, cex=0.3, main="Biological CV vs abundance")
82e0af566160 Uploaded
fubar
parents:
diff changeset
440 dev.off()
82e0af566160 Uploaded
fubar
parents:
diff changeset
441 # Plot MAplot
82e0af566160 Uploaded
fubar
parents:
diff changeset
442 deTags = rownames(uoutput[uoutput\$adj.p.value < fdrthresh,])
82e0af566160 Uploaded
fubar
parents:
diff changeset
443 nsig = length(deTags)
82e0af566160 Uploaded
fubar
parents:
diff changeset
444 print(paste('#',nsig,'tags significant at adj p=',fdrthresh),quote=F)
82e0af566160 Uploaded
fubar
parents:
diff changeset
445 print('# deTags',quote=F)
82e0af566160 Uploaded
fubar
parents:
diff changeset
446 print(head(deTags))
82e0af566160 Uploaded
fubar
parents:
diff changeset
447 dg = DGEList[order(DE\$table\$PValue),]
82e0af566160 Uploaded
fubar
parents:
diff changeset
448 #normData = (1e+06 * dg\$counts/expandAsMatrix(dg\$samples\$lib.size, dim(dg)))
82e0af566160 Uploaded
fubar
parents:
diff changeset
449 efflib = dg\$samples\$lib.size*dg\$samples\$norm.factors
82e0af566160 Uploaded
fubar
parents:
diff changeset
450 normData = (1e+06*dg\$counts/efflib)
82e0af566160 Uploaded
fubar
parents:
diff changeset
451 outpdfname=paste(mt,"heatmap.pdf",sep='_')
82e0af566160 Uploaded
fubar
parents:
diff changeset
452 hmap2(normData,nsamp=100,TName=TName,group=group,outpdfname=outpdfname,myTitle=myTitle)
82e0af566160 Uploaded
fubar
parents:
diff changeset
453 outSmear = paste(mt,"Smearplot.pdf",sep='_')
82e0af566160 Uploaded
fubar
parents:
diff changeset
454 outMain = paste("Smear Plot for ",TName,' Vs ',CName,' (FDR@',fdrthresh,' N = ',nsig,')',sep='')
82e0af566160 Uploaded
fubar
parents:
diff changeset
455 smearPlot(DGEList=DGEList,deTags=deTags, outSmear=outSmear, outMain = outMain)
82e0af566160 Uploaded
fubar
parents:
diff changeset
456 qqPlot(descr=myTitle,pvector=DE\$table\$PValue)
82e0af566160 Uploaded
fubar
parents:
diff changeset
457 if (doDESEQ) {
82e0af566160 Uploaded
fubar
parents:
diff changeset
458 cat("# DESeq top 50\n")
82e0af566160 Uploaded
fubar
parents:
diff changeset
459 print(rDESeq[1:50,])
82e0af566160 Uploaded
fubar
parents:
diff changeset
460 }
82e0af566160 Uploaded
fubar
parents:
diff changeset
461 cat("# VOOM top 50\n")
82e0af566160 Uploaded
fubar
parents:
diff changeset
462 print(rvoom[1:50,])
82e0af566160 Uploaded
fubar
parents:
diff changeset
463 # need a design matrix and glm to use this
82e0af566160 Uploaded
fubar
parents:
diff changeset
464 goodness = gof(DGLM, pcutoff=fdrthresh)
82e0af566160 Uploaded
fubar
parents:
diff changeset
465 nout = sum(goodness\$outlier)
82e0af566160 Uploaded
fubar
parents:
diff changeset
466 if (nout > 0) {
82e0af566160 Uploaded
fubar
parents:
diff changeset
467 print.noquote(paste('Found',nout,'Goodness of fit outliers'))
82e0af566160 Uploaded
fubar
parents:
diff changeset
468 rownames(DGLM)[goodness\$outlier]
82e0af566160 Uploaded
fubar
parents:
diff changeset
469 z = limma::zscoreGamma(goodness\$gof.statistic, shape=goodness\$df/2, scale=2)
82e0af566160 Uploaded
fubar
parents:
diff changeset
470 pdf(paste(mt,"GoodnessofFit.pdf",sep='_'))
82e0af566160 Uploaded
fubar
parents:
diff changeset
471 qq = qqnorm(z, panel.first=grid(), main="tagwise dispersion")
82e0af566160 Uploaded
fubar
parents:
diff changeset
472 abline(0,1,lwd=3)
82e0af566160 Uploaded
fubar
parents:
diff changeset
473 points(qq\$x[goodness\$outlier],qq\$y[goodness\$outlier], pch=16, col="dodgerblue")
82e0af566160 Uploaded
fubar
parents:
diff changeset
474 dev.off()
82e0af566160 Uploaded
fubar
parents:
diff changeset
475 }
82e0af566160 Uploaded
fubar
parents:
diff changeset
476 #Return our main table
82e0af566160 Uploaded
fubar
parents:
diff changeset
477 uoutput
82e0af566160 Uploaded
fubar
parents:
diff changeset
478
82e0af566160 Uploaded
fubar
parents:
diff changeset
479 } #Done
82e0af566160 Uploaded
fubar
parents:
diff changeset
480 sink(stdout(),append=T,type="message")
82e0af566160 Uploaded
fubar
parents:
diff changeset
481 options(width=512)
82e0af566160 Uploaded
fubar
parents:
diff changeset
482 Out_Dir = "$html_file.files_path"
82e0af566160 Uploaded
fubar
parents:
diff changeset
483 Input = "$input1"
82e0af566160 Uploaded
fubar
parents:
diff changeset
484 TreatmentName = "$treatment_name"
82e0af566160 Uploaded
fubar
parents:
diff changeset
485 TreatmentCols = "$Treat_cols"
82e0af566160 Uploaded
fubar
parents:
diff changeset
486 ControlName = "$control_name"
82e0af566160 Uploaded
fubar
parents:
diff changeset
487 ControlCols= "$Control_cols"
82e0af566160 Uploaded
fubar
parents:
diff changeset
488 outputfilename = "$outtab"
82e0af566160 Uploaded
fubar
parents:
diff changeset
489 fdrtype = "$fdrtype"
82e0af566160 Uploaded
fubar
parents:
diff changeset
490 priordf = $priordf
82e0af566160 Uploaded
fubar
parents:
diff changeset
491 fdrthresh = $fdrthresh
82e0af566160 Uploaded
fubar
parents:
diff changeset
492 useNDF = "$useNDF"
82e0af566160 Uploaded
fubar
parents:
diff changeset
493 fQ = $fQ # non-differential centile cutoff
82e0af566160 Uploaded
fubar
parents:
diff changeset
494 myTitle = "$title"
82e0af566160 Uploaded
fubar
parents:
diff changeset
495 subjects = c($subjectids)
82e0af566160 Uploaded
fubar
parents:
diff changeset
496 nsubj = length(subjects)
82e0af566160 Uploaded
fubar
parents:
diff changeset
497 #Set our columns
82e0af566160 Uploaded
fubar
parents:
diff changeset
498 TCols = as.numeric(strsplit(TreatmentCols,",")[[1]])-1
82e0af566160 Uploaded
fubar
parents:
diff changeset
499 CCols = as.numeric(strsplit(ControlCols,",")[[1]])-1
82e0af566160 Uploaded
fubar
parents:
diff changeset
500 cat('# got TCols=')
82e0af566160 Uploaded
fubar
parents:
diff changeset
501 cat(TCols)
82e0af566160 Uploaded
fubar
parents:
diff changeset
502 cat('; CCols=')
82e0af566160 Uploaded
fubar
parents:
diff changeset
503 cat(CCols)
82e0af566160 Uploaded
fubar
parents:
diff changeset
504 cat('\n')
82e0af566160 Uploaded
fubar
parents:
diff changeset
505 useCols = c(TCols,CCols)
82e0af566160 Uploaded
fubar
parents:
diff changeset
506 # Create output dir if non existent
82e0af566160 Uploaded
fubar
parents:
diff changeset
507 if (file.exists(Out_Dir) == F) dir.create(Out_Dir)
82e0af566160 Uploaded
fubar
parents:
diff changeset
508
82e0af566160 Uploaded
fubar
parents:
diff changeset
509 Count_Matrix = read.table(Input,header=T,row.names=1,sep='\t') #Load tab file assume header
82e0af566160 Uploaded
fubar
parents:
diff changeset
510 snames = colnames(Count_Matrix)
82e0af566160 Uploaded
fubar
parents:
diff changeset
511 nsamples = length(snames)
82e0af566160 Uploaded
fubar
parents:
diff changeset
512 if (nsubj > 0 & nsubj != nsamples) {
82e0af566160 Uploaded
fubar
parents:
diff changeset
513 options("show.error.messages"=T)
82e0af566160 Uploaded
fubar
parents:
diff changeset
514 mess = paste('Fatal error: Supplied subject id list',paste(subjects,collapse=','),'has length',nsubj,'but there are',nsamples,'samples',paste(snames,collapse=','))
82e0af566160 Uploaded
fubar
parents:
diff changeset
515 write(mess, stderr())
82e0af566160 Uploaded
fubar
parents:
diff changeset
516 #print(mess)
82e0af566160 Uploaded
fubar
parents:
diff changeset
517 quit(save="no",status=4)
82e0af566160 Uploaded
fubar
parents:
diff changeset
518 }
82e0af566160 Uploaded
fubar
parents:
diff changeset
519
82e0af566160 Uploaded
fubar
parents:
diff changeset
520 Count_Matrix = Count_Matrix[,useCols] # reorder columns
82e0af566160 Uploaded
fubar
parents:
diff changeset
521 if (length(subjects) != 0) {subjects = subjects[useCols]}
82e0af566160 Uploaded
fubar
parents:
diff changeset
522 rn = rownames(Count_Matrix)
82e0af566160 Uploaded
fubar
parents:
diff changeset
523 islib = rn %in% c('librarySize','NotInBedRegions')
82e0af566160 Uploaded
fubar
parents:
diff changeset
524 LibSizes = Count_Matrix[subset(rn,islib),][1] # take first
82e0af566160 Uploaded
fubar
parents:
diff changeset
525 Count_Matrix = Count_Matrix[subset(rn,! islib),]
82e0af566160 Uploaded
fubar
parents:
diff changeset
526 group = c(rep(TreatmentName,length(TCols)), rep(ControlName,length(CCols)) ) #Build a group descriptor
82e0af566160 Uploaded
fubar
parents:
diff changeset
527 group = factor(group, levels=c(ControlName,TreatmentName))
82e0af566160 Uploaded
fubar
parents:
diff changeset
528 colnames(Count_Matrix) = paste(group,colnames(Count_Matrix),sep="_") #Relable columns
82e0af566160 Uploaded
fubar
parents:
diff changeset
529 results = edgeIt(Count_Matrix=Count_Matrix,group=group,outputfilename=outputfilename,fdrtype=fdrtype,priordf=priordf,fdrthresh=fdrthresh,
82e0af566160 Uploaded
fubar
parents:
diff changeset
530 outputdir=Out_Dir,myTitle=myTitle,libSize=c(),useNDF=useNDF,filterquantile=fQ,subjects=subjects)
82e0af566160 Uploaded
fubar
parents:
diff changeset
531 #Run the main function
82e0af566160 Uploaded
fubar
parents:
diff changeset
532 # for the log
82e0af566160 Uploaded
fubar
parents:
diff changeset
533 sessionInfo()
82e0af566160 Uploaded
fubar
parents:
diff changeset
534 ]]>
82e0af566160 Uploaded
fubar
parents:
diff changeset
535 </configfile>
82e0af566160 Uploaded
fubar
parents:
diff changeset
536 </configfiles>
82e0af566160 Uploaded
fubar
parents:
diff changeset
537 <help>
82e0af566160 Uploaded
fubar
parents:
diff changeset
538 **What it does**
82e0af566160 Uploaded
fubar
parents:
diff changeset
539
82e0af566160 Uploaded
fubar
parents:
diff changeset
540 Performs digital gene expression analysis between a treatment and control on a count matrix.
82e0af566160 Uploaded
fubar
parents:
diff changeset
541 Optionally adds a term for subject if not all samples are independent or if some other factor needs to be blocked in the design.
82e0af566160 Uploaded
fubar
parents:
diff changeset
542
82e0af566160 Uploaded
fubar
parents:
diff changeset
543 **Input**
82e0af566160 Uploaded
fubar
parents:
diff changeset
544
82e0af566160 Uploaded
fubar
parents:
diff changeset
545 A matrix consisting of non-negative integers. The matrix must have a unique header row identifiying the samples, and a unique set of row names
82e0af566160 Uploaded
fubar
parents:
diff changeset
546 as the first column. Typically the row names are gene symbols or probe id's for downstream use in GSEA and other methods.
82e0af566160 Uploaded
fubar
parents:
diff changeset
547
82e0af566160 Uploaded
fubar
parents:
diff changeset
548 If you have (eg) paired samples and wish to include a term in the GLM to account for some other factor (subject in the case of paired samples),
82e0af566160 Uploaded
fubar
parents:
diff changeset
549 put a comma separated list of indicators for every sample (whether modelled or not!) indicating (eg) the subject number or
82e0af566160 Uploaded
fubar
parents:
diff changeset
550 A list of integers, one for each subject or an empty string if samples are all independent.
82e0af566160 Uploaded
fubar
parents:
diff changeset
551 If not empty, there must be exactly as many integers in the supplied integer list as there are columns (samples) in the count matrix.
82e0af566160 Uploaded
fubar
parents:
diff changeset
552 Integers for samples that are not in the analysis *must* be present in the string as filler even if not used.
82e0af566160 Uploaded
fubar
parents:
diff changeset
553
82e0af566160 Uploaded
fubar
parents:
diff changeset
554 So if you have 2 pairs out of 6 samples, you need to put in unique integers for the unpaired ones
82e0af566160 Uploaded
fubar
parents:
diff changeset
555 eg if you had 6 samples with the first two independent but the second and third pairs each being from independent subjects. you might use
82e0af566160 Uploaded
fubar
parents:
diff changeset
556 8,9,1,1,2,2
82e0af566160 Uploaded
fubar
parents:
diff changeset
557 as subject IDs to indicate two paired samples from the same subject in columns 3/4 and 5/6
82e0af566160 Uploaded
fubar
parents:
diff changeset
558
82e0af566160 Uploaded
fubar
parents:
diff changeset
559 **Output**
82e0af566160 Uploaded
fubar
parents:
diff changeset
560
82e0af566160 Uploaded
fubar
parents:
diff changeset
561 A matrix which consists the original data and relative expression levels and some helpful plots
82e0af566160 Uploaded
fubar
parents:
diff changeset
562
82e0af566160 Uploaded
fubar
parents:
diff changeset
563 **Note on edgeR versions**
82e0af566160 Uploaded
fubar
parents:
diff changeset
564
82e0af566160 Uploaded
fubar
parents:
diff changeset
565 The edgeR authors made a small cosmetic change in the name of one important variable (from p.value to PValue)
82e0af566160 Uploaded
fubar
parents:
diff changeset
566 breaking this and all other code that assumed the old name for this variable,
82e0af566160 Uploaded
fubar
parents:
diff changeset
567 between edgeR2.4.4 and 2.4.6 (the version for R 2.14 as at the time of writing).
82e0af566160 Uploaded
fubar
parents:
diff changeset
568 This means that all code using edgeR is sensitive to the version. I think this was a very unwise thing
82e0af566160 Uploaded
fubar
parents:
diff changeset
569 to do because it wasted hours of my time to track down and will similarly cost other edgeR users dearly
82e0af566160 Uploaded
fubar
parents:
diff changeset
570 when their old scripts break. This tool currently now works with 2.4.6.
82e0af566160 Uploaded
fubar
parents:
diff changeset
571
82e0af566160 Uploaded
fubar
parents:
diff changeset
572 **Note on prior.N**
82e0af566160 Uploaded
fubar
parents:
diff changeset
573
82e0af566160 Uploaded
fubar
parents:
diff changeset
574 http://seqanswers.com/forums/showthread.php?t=5591 says:
82e0af566160 Uploaded
fubar
parents:
diff changeset
575
82e0af566160 Uploaded
fubar
parents:
diff changeset
576 *prior.n*
82e0af566160 Uploaded
fubar
parents:
diff changeset
577
82e0af566160 Uploaded
fubar
parents:
diff changeset
578 The value for prior.n determines the amount of smoothing of tagwise dispersions towards the common dispersion.
82e0af566160 Uploaded
fubar
parents:
diff changeset
579 You can think of it as like a "weight" for the common value. (It is actually the weight for the common likelihood
82e0af566160 Uploaded
fubar
parents:
diff changeset
580 in the weighted likelihood equation). The larger the value for prior.n, the more smoothing, i.e. the closer your
82e0af566160 Uploaded
fubar
parents:
diff changeset
581 tagwise dispersion estimates will be to the common dispersion. If you use a prior.n of 1, then that gives the
82e0af566160 Uploaded
fubar
parents:
diff changeset
582 common likelihood the weight of one observation.
82e0af566160 Uploaded
fubar
parents:
diff changeset
583
82e0af566160 Uploaded
fubar
parents:
diff changeset
584 In answer to your question, it is a good thing to squeeze the tagwise dispersions towards a common value,
82e0af566160 Uploaded
fubar
parents:
diff changeset
585 or else you will be using very unreliable estimates of the dispersion. I would not recommend using the value that
82e0af566160 Uploaded
fubar
parents:
diff changeset
586 you obtained from estimateSmoothing()---this is far too small and would result in virtually no moderation
82e0af566160 Uploaded
fubar
parents:
diff changeset
587 (squeezing) of the tagwise dispersions. How many samples do you have in your experiment?
82e0af566160 Uploaded
fubar
parents:
diff changeset
588 What is the experimental design? If you have few samples (less than 6) then I would suggest a prior.n of at least 10.
82e0af566160 Uploaded
fubar
parents:
diff changeset
589 If you have more samples, then the tagwise dispersion estimates will be more reliable,
82e0af566160 Uploaded
fubar
parents:
diff changeset
590 so you could consider using a smaller prior.n, although I would hesitate to use a prior.n less than 5.
82e0af566160 Uploaded
fubar
parents:
diff changeset
591
82e0af566160 Uploaded
fubar
parents:
diff changeset
592
82e0af566160 Uploaded
fubar
parents:
diff changeset
593 From Bioconductor Digest, Vol 118, Issue 5, Gordon writes:
82e0af566160 Uploaded
fubar
parents:
diff changeset
594
82e0af566160 Uploaded
fubar
parents:
diff changeset
595 Dear Dorota,
82e0af566160 Uploaded
fubar
parents:
diff changeset
596
82e0af566160 Uploaded
fubar
parents:
diff changeset
597 The important settings are prior.df and trend.
82e0af566160 Uploaded
fubar
parents:
diff changeset
598
82e0af566160 Uploaded
fubar
parents:
diff changeset
599 prior.n and prior.df are related through prior.df = prior.n * residual.df,
82e0af566160 Uploaded
fubar
parents:
diff changeset
600 and your experiment has residual.df = 36 - 12 = 24. So the old setting of
82e0af566160 Uploaded
fubar
parents:
diff changeset
601 prior.n=10 is equivalent for your data to prior.df = 240, a very large
82e0af566160 Uploaded
fubar
parents:
diff changeset
602 value. Going the other way, the new setting of prior.df=10 is equivalent
82e0af566160 Uploaded
fubar
parents:
diff changeset
603 to prior.n=10/24.
82e0af566160 Uploaded
fubar
parents:
diff changeset
604
82e0af566160 Uploaded
fubar
parents:
diff changeset
605 To recover old results with the current software you would use
82e0af566160 Uploaded
fubar
parents:
diff changeset
606
82e0af566160 Uploaded
fubar
parents:
diff changeset
607 estimateTagwiseDisp(object, prior.df=240, trend="none")
82e0af566160 Uploaded
fubar
parents:
diff changeset
608
82e0af566160 Uploaded
fubar
parents:
diff changeset
609 To get the new default from old software you would use
82e0af566160 Uploaded
fubar
parents:
diff changeset
610
82e0af566160 Uploaded
fubar
parents:
diff changeset
611 estimateTagwiseDisp(object, prior.n=10/24, trend=TRUE)
82e0af566160 Uploaded
fubar
parents:
diff changeset
612
82e0af566160 Uploaded
fubar
parents:
diff changeset
613 Actually the old trend method is equivalent to trend="loess" in the new
82e0af566160 Uploaded
fubar
parents:
diff changeset
614 software. You should use plotBCV(object) to see whether a trend is
82e0af566160 Uploaded
fubar
parents:
diff changeset
615 required.
82e0af566160 Uploaded
fubar
parents:
diff changeset
616
82e0af566160 Uploaded
fubar
parents:
diff changeset
617 Note you could also use
82e0af566160 Uploaded
fubar
parents:
diff changeset
618
82e0af566160 Uploaded
fubar
parents:
diff changeset
619 prior.n = getPriorN(object, prior.df=10)
82e0af566160 Uploaded
fubar
parents:
diff changeset
620
82e0af566160 Uploaded
fubar
parents:
diff changeset
621 to map between prior.df and prior.n.
82e0af566160 Uploaded
fubar
parents:
diff changeset
622
82e0af566160 Uploaded
fubar
parents:
diff changeset
623 </help>
82e0af566160 Uploaded
fubar
parents:
diff changeset
624
82e0af566160 Uploaded
fubar
parents:
diff changeset
625 </tool>
82e0af566160 Uploaded
fubar
parents:
diff changeset
626
82e0af566160 Uploaded
fubar
parents:
diff changeset
627