]> git.donarmstrong.com Git - rsem.git/blobdiff - EBSeq/R/PolyFitPlot.R
Included EBSeq for downstream differential expression analysis
[rsem.git] / EBSeq / R / PolyFitPlot.R
diff --git a/EBSeq/R/PolyFitPlot.R b/EBSeq/R/PolyFitPlot.R
new file mode 100644 (file)
index 0000000..59fd29c
--- /dev/null
@@ -0,0 +1,44 @@
+PolyFitPlot <-
+function(X , Y , nterms , xname="Estimated Mean", yname="Estimated Var", pdfname="", xlim=c(-1,5), ylim=c(-1,7), ChangeXY=F,col="red"){
+       
+       b=rep(NA,nterms)
+       logX=matrix(rep(X, nterms),ncol=nterms, byrow=T)
+       for (i in 1:nterms)
+               logX[,i]=(log10(X))^i
+       colnames(logX)=paste("logmu^",c(1:nterms))
+       rownames(logX)=names(X)
+       NotUse=c(names(X)[X==0],names(Y)[Y==0],names(X)[rowMeans(logX)==-Inf],names(X)[rowMeans(logX)==Inf])
+       Use=names(X[!names(X)%in%NotUse])
+       Lm=lm(log10(Y[Use])~logX[Use,1:nterms])
+       b=summary(Lm)$coefficients[2:(nterms+1),1]
+       d=summary(Lm)$coefficients[1,1]
+       bvec=matrix(rep(b,length(X)),ncol=nterms,byrow=T)
+       fit=rowSums(logX*bvec)+d
+       main2=NULL
+       if (ChangeXY==T){
+               X.plot=log10(Y)
+               Y.plot=log10(X)
+               fit.X.plot=fit
+               fit.Y.plot=log10(X)
+       }
+       else{
+        X.plot=log10(X)
+        Y.plot=log10(Y)
+           fit.X.plot=log10(X)
+               fit.Y.plot=fit
+                                  }
+
+       for (i in 1:nterms)
+               main2=paste(main2,round(b[i],2),"*log(",xname,")^",i,"+")
+       main=pdfname
+       
+       smoothScatter(X.plot, Y.plot ,main=main,xlim=xlim,ylim=ylim,xlab=xname,ylab=yname,axes=F)
+       axis(1,at=seq(xlim[1],xlim[2],by=1), 10^seq(xlim[1],xlim[2],by=1))
+       axis(2,at=seq(ylim[1],ylim[2],by=2), 10^seq(ylim[1],ylim[2],by=2))
+       Sortit=order(fit.X.plot)
+       lines(fit.X.plot[Sortit],fit.Y.plot[Sortit],col=col,lwd=3)
+       output=list(b=b,d=d,lm=Lm,fit=fit,sort=Sortit)
+       names(output$b)=paste(xname,"^",c(1:length(output$b)))
+       output
+}
+