annotate cluster.tools/rnaseq.feature.selection.R @ 5:cbc3ecce98ee draft

Uploaded
author peter-waltman
date Fri, 01 Mar 2013 19:53:49 -0500
parents 563832f48c08
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1
dddfeedb85af Uploaded
peter-waltman
parents:
diff changeset
1 #!/usr/bin/env Rscript
dddfeedb85af Uploaded
peter-waltman
parents:
diff changeset
2 ## RNASeq selection script by Peter Waltman
dddfeedb85af Uploaded
peter-waltman
parents:
diff changeset
3 ## August 21, 2011
dddfeedb85af Uploaded
peter-waltman
parents:
diff changeset
4 ## License under Creative Commons Attribution 3.0 Unported (CC BY 3.0)
dddfeedb85af Uploaded
peter-waltman
parents:
diff changeset
5 ##
dddfeedb85af Uploaded
peter-waltman
parents:
diff changeset
6 #usage, options and doc goes here - NEEDS TO BE UPDATED ---- TBD
dddfeedb85af Uploaded
peter-waltman
parents:
diff changeset
7 argspec <- c("ipl.feature.selection.R takes a set of results from Paradigm, and filters for features that are
dddfeedb85af Uploaded
peter-waltman
parents:
diff changeset
8 active, inactive or modulated above a given IPL threshold over a sufficient percentage of samples.
dddfeedb85af Uploaded
peter-waltman
parents:
diff changeset
9
dddfeedb85af Uploaded
peter-waltman
parents:
diff changeset
10 Usage:
dddfeedb85af Uploaded
peter-waltman
parents:
diff changeset
11 ipl.feature.selection.R -d <data.file>
dddfeedb85af Uploaded
peter-waltman
parents:
diff changeset
12 Optional:
dddfeedb85af Uploaded
peter-waltman
parents:
diff changeset
13 -o <output.name>
dddfeedb85af Uploaded
peter-waltman
parents:
diff changeset
14 -g <genes-only> ## to set if only returning genes (default is all features)
dddfeedb85af Uploaded
peter-waltman
parents:
diff changeset
15 -f <filter.type> ## filter.type must be either 'modulated', 'active'or 'inactive' (default is modulated)
dddfeedb85af Uploaded
peter-waltman
parents:
diff changeset
16 -t <threshold> ## the threshold to use for the filter (default is 0.25)
dddfeedb85af Uploaded
peter-waltman
parents:
diff changeset
17 -p <perc.pass> ## the percentage of samples that must pass the filter (default is 0.33)
dddfeedb85af Uploaded
peter-waltman
parents:
diff changeset
18 -v <verbose> ## to set verbose on
dddfeedb85af Uploaded
peter-waltman
parents:
diff changeset
19
dddfeedb85af Uploaded
peter-waltman
parents:
diff changeset
20 \n\n")
dddfeedb85af Uploaded
peter-waltman
parents:
diff changeset
21 args <- commandArgs(TRUE)
dddfeedb85af Uploaded
peter-waltman
parents:
diff changeset
22 if ( length( args ) == 1 && args =="--help") {
dddfeedb85af Uploaded
peter-waltman
parents:
diff changeset
23 write(argspec, stderr())
dddfeedb85af Uploaded
peter-waltman
parents:
diff changeset
24 q();
dddfeedb85af Uploaded
peter-waltman
parents:
diff changeset
25 }
dddfeedb85af Uploaded
peter-waltman
parents:
diff changeset
26
dddfeedb85af Uploaded
peter-waltman
parents:
diff changeset
27 ## some helper fn's
dddfeedb85af Uploaded
peter-waltman
parents:
diff changeset
28 write.2.tab <- function( mat,
dddfeedb85af Uploaded
peter-waltman
parents:
diff changeset
29 fname ) {
dddfeedb85af Uploaded
peter-waltman
parents:
diff changeset
30 mat <- rbind( colnames( mat ), mat )
dddfeedb85af Uploaded
peter-waltman
parents:
diff changeset
31 mat <- cbind( c( "ID", rownames( mat )[-1] ),
dddfeedb85af Uploaded
peter-waltman
parents:
diff changeset
32 mat )
dddfeedb85af Uploaded
peter-waltman
parents:
diff changeset
33 write.table( mat, fname, sep="\t", row.names=FALSE, col.names=FALSE, quote=FALSE )
dddfeedb85af Uploaded
peter-waltman
parents:
diff changeset
34 }
dddfeedb85af Uploaded
peter-waltman
parents:
diff changeset
35
dddfeedb85af Uploaded
peter-waltman
parents:
diff changeset
36 lib.load.quiet <- function( package ) {
dddfeedb85af Uploaded
peter-waltman
parents:
diff changeset
37 package <- as.character(substitute(package))
dddfeedb85af Uploaded
peter-waltman
parents:
diff changeset
38 suppressPackageStartupMessages( do.call( "library", list( package=package ) ) )
dddfeedb85af Uploaded
peter-waltman
parents:
diff changeset
39 }
dddfeedb85af Uploaded
peter-waltman
parents:
diff changeset
40 ## MAXIMUM absolute deviation function
dddfeedb85af Uploaded
peter-waltman
parents:
diff changeset
41 maxad <- function( x, na.rm=FALSE, center=median(x, na.rm=na.rm ) ) {
dddfeedb85af Uploaded
peter-waltman
parents:
diff changeset
42 return( max( abs(x), na.rm=na.rm ) - center )
dddfeedb85af Uploaded
peter-waltman
parents:
diff changeset
43 }
dddfeedb85af Uploaded
peter-waltman
parents:
diff changeset
44
dddfeedb85af Uploaded
peter-waltman
parents:
diff changeset
45 lib.load.quiet(getopt)
dddfeedb85af Uploaded
peter-waltman
parents:
diff changeset
46
dddfeedb85af Uploaded
peter-waltman
parents:
diff changeset
47 spec <- matrix( c( "data.fname", "d", 1, "character",
dddfeedb85af Uploaded
peter-waltman
parents:
diff changeset
48 "output.fname", "o", 2, "character",
3
563832f48c08 Uploaded
peter-waltman
parents: 1
diff changeset
49 "var.method", "m", 2, "character",
1
dddfeedb85af Uploaded
peter-waltman
parents:
diff changeset
50 "z.transform", "z", 2, "character",
dddfeedb85af Uploaded
peter-waltman
parents:
diff changeset
51 "perc.pass", "p", 2, "numeric"
dddfeedb85af Uploaded
peter-waltman
parents:
diff changeset
52 ),
dddfeedb85af Uploaded
peter-waltman
parents:
diff changeset
53 nc=4,
dddfeedb85af Uploaded
peter-waltman
parents:
diff changeset
54 byrow=TRUE
dddfeedb85af Uploaded
peter-waltman
parents:
diff changeset
55 )
dddfeedb85af Uploaded
peter-waltman
parents:
diff changeset
56
dddfeedb85af Uploaded
peter-waltman
parents:
diff changeset
57 opt <- getopt( spec=spec )
dddfeedb85af Uploaded
peter-waltman
parents:
diff changeset
58 data <- as.matrix( read.delim( opt$data.fname, header=T, row.names=1 , check.names=FALSE ) )
dddfeedb85af Uploaded
peter-waltman
parents:
diff changeset
59 #set some reasonable defaults for the options that are needed,
dddfeedb85af Uploaded
peter-waltman
parents:
diff changeset
60 #but were not specified.
dddfeedb85af Uploaded
peter-waltman
parents:
diff changeset
61 if ( is.null( opt$perc.pass ) ) { opt$perc.pass=1500 }
dddfeedb85af Uploaded
peter-waltman
parents:
diff changeset
62 if ( opt$perc.pass < 0 ) {
dddfeedb85af Uploaded
peter-waltman
parents:
diff changeset
63 stop( "please specify a positive number for the percentage of samples that pass the filter (if applicable)" )
dddfeedb85af Uploaded
peter-waltman
parents:
diff changeset
64 } else {
dddfeedb85af Uploaded
peter-waltman
parents:
diff changeset
65 if ( opt$perc.pass < 1 ) {
dddfeedb85af Uploaded
peter-waltman
parents:
diff changeset
66 opt$perc.pass <- floor( opt$perc.pass * nrow( data ) )
dddfeedb85af Uploaded
peter-waltman
parents:
diff changeset
67 }
dddfeedb85af Uploaded
peter-waltman
parents:
diff changeset
68 }
dddfeedb85af Uploaded
peter-waltman
parents:
diff changeset
69
dddfeedb85af Uploaded
peter-waltman
parents:
diff changeset
70 if ( is.null( opt$var.method ) ) { opt$var.method <- 'mad' }
dddfeedb85af Uploaded
peter-waltman
parents:
diff changeset
71 if ( is.null( opt$z.transform ) ) {
dddfeedb85af Uploaded
peter-waltman
parents:
diff changeset
72 opt$z.transform <- TRUE
dddfeedb85af Uploaded
peter-waltman
parents:
diff changeset
73 } else {
dddfeedb85af Uploaded
peter-waltman
parents:
diff changeset
74 opt$z.transform <- ( tolower( opt$z.transform ) %in% "yes" )
dddfeedb85af Uploaded
peter-waltman
parents:
diff changeset
75 }
dddfeedb85af Uploaded
peter-waltman
parents:
diff changeset
76 if ( is.null( opt$output.fname ) ) opt$output.fname <- "high.var.rnaseq.tab"
dddfeedb85af Uploaded
peter-waltman
parents:
diff changeset
77
dddfeedb85af Uploaded
peter-waltman
parents:
diff changeset
78 if ( opt$z.transform ) {
dddfeedb85af Uploaded
peter-waltman
parents:
diff changeset
79 ##normalize it to have mean==0, std==1
dddfeedb85af Uploaded
peter-waltman
parents:
diff changeset
80 data <- t( data )
dddfeedb85af Uploaded
peter-waltman
parents:
diff changeset
81 data <- t( scale( data ) )
dddfeedb85af Uploaded
peter-waltman
parents:
diff changeset
82 }
dddfeedb85af Uploaded
peter-waltman
parents:
diff changeset
83
dddfeedb85af Uploaded
peter-waltman
parents:
diff changeset
84
dddfeedb85af Uploaded
peter-waltman
parents:
diff changeset
85 my.var.fn <- get( opt$var.method )
dddfeedb85af Uploaded
peter-waltman
parents:
diff changeset
86 my.var.vals <- apply( data, 1, my.var.fn, na.rm=T )
dddfeedb85af Uploaded
peter-waltman
parents:
diff changeset
87 filter.vect <- sort( my.var.vals, dec=TRUE, index=TRUE )$ix[ 1:opt$perc.pass ]
dddfeedb85af Uploaded
peter-waltman
parents:
diff changeset
88
dddfeedb85af Uploaded
peter-waltman
parents:
diff changeset
89 data <- data[ filter.vect, ]
dddfeedb85af Uploaded
peter-waltman
parents:
diff changeset
90 write.2.tab( data, opt$output.fname )
dddfeedb85af Uploaded
peter-waltman
parents:
diff changeset
91