Mercurial > repos > yufei-luo > s_mart
diff SMART/DiffExpAnal/DESeqTools/pairwiseSERE.R @ 31:0ab839023fe4
Uploaded
author | m-zytnicki |
---|---|
date | Tue, 30 Apr 2013 14:33:21 -0400 |
parents | 94ab73e8a190 |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/SMART/DiffExpAnal/DESeqTools/pairwiseSERE.R Tue Apr 30 14:33:21 2013 -0400 @@ -0,0 +1,41 @@ +# pairwiseSERE +# compute pairwise SERE statistics + +# input : counts +# output : matrix of SERE values + +# created october 19th, 2012 +# Marie-Agnes Dillies + + +pairwiseSERE <- function( counts ){ + + sere <- matrix( NA, ncol=ncol(counts), nrow=ncol(counts) ) + for (i in 1:ncol(counts)){ + for (j in 1:ncol(counts)){ + sere[i,j] <- sigfun_Pearson( counts[,c(i,j)] ) + } + } + colnames(sere) <- rownames(sere) <- colnames(counts) + return( formatC(sere, format="f", digits=2) ) +} + +sigfun_Pearson <- function(observed) { + #calculate lambda and expected values + laneTotals<- colSums(observed); + total <- sum(laneTotals) + fullObserved <- observed[rowSums(observed)>0,]; + fullLambda <- rowSums(fullObserved)/total; + fullLhat <- fullLambda > 0; + fullExpected<- outer(fullLambda, laneTotals); + + #keep values + fullKeep <- which(fullExpected > 0); + + #calculate degrees of freedom (nrow*(ncol -1) >> number of parameters - calculated (just lamda is calculated >> thats why minus 1) + #calculate pearson and deviance for all values + oeFull <- (fullObserved[fullKeep] - fullExpected[fullKeep])^2/ fullExpected[fullKeep] # pearson chisq test + dfFull <- length(fullKeep) - sum(fullLhat!=0); + + return(c(sqrt(sum(oeFull)/dfFull))); +}