## ----echo=FALSE, results="hide", message=FALSE--------------------------------
require(knitr)
opts_chunk$set(error=FALSE, message=FALSE, warning=FALSE, dpi = 30)
knitr::opts_chunk$set(dev="png",fig.align="center")

## ----library, echo=FALSE------------------------------------------------------
library(bayNorm)
library(BiocStyle)
library(SummarizedExperiment)
library(SingleCellExperiment)

## ----install_Bioconductor, eval=FALSE-----------------------------------------
# library(BiocManager)
# BiocManager::install("bayNorm")

## ----install, eval=FALSE------------------------------------------------------
# library(devtools)
# devtools::install_github("WT215/bayNorm")

## ----beta, echo=TRUE,eval=TRUE------------------------------------------------
data('EXAMPLE_DATA_list')
#Suppose the input data is a SummarizedExperiment object:
#Here we just used 30 cells for illustration
rse <- SummarizedExperiment::SummarizedExperiment(assays=SimpleList(counts=EXAMPLE_DATA_list$inputdata[,seq(1,30)]))
#SingleCellExperiment object can also be input in bayNorm:
#rse <- SingleCellExperiment::SingleCellExperiment(assays=list(counts=EXAMPLE_DATA_list$inputdata))

BETA_est<-BetaFun(Data=rse,MeanBETA=0.06)
summary(BETA_est$BETA)

## ----intro_bayNorm, echo=TRUE,eval=TRUE---------------------------------------
#Return 3D array normalzied data, draw 20 samples from posterior distribution:
bayNorm_3D<-bayNorm(
    Data=rse,
    BETA_vec = NULL,
    mode_version=FALSE,
    mean_version = FALSE,S=20
    ,verbose =FALSE,
    parallel = TRUE)

#Return 2D matrix normalized data (MAP of posterior):
#Simply set mode_version=TRUE, but keep mean_version=FALSE


#Return 2D matrix normalized data (mean of posterior):
#Simply set mean_version=TRUE, but keep mode_version=FALSE

## ----intro_bayNorm_sup, echo=TRUE,eval=TRUE-----------------------------------
#Now if you want to generate 2D matrix (MAP) using the same prior
#estimates as generated before:
bayNorm_2D<-bayNorm_sup(
    Data=rse,
    PRIORS=bayNorm_3D$PRIORS,
    input_params=bayNorm_3D$input_params,
    mode_version=TRUE,
    mean_version = FALSE,
    verbose =FALSE)

#Or you may want to generate 2D matrix 
#(mean of posterior) using the same prior
#estimates as generated before:
bayNorm_2D<-bayNorm_sup(
    Data=rse,
    PRIORS=bayNorm_3D$PRIORS,
    input_params=bayNorm_3D$input_params,
    mode_version=FALSE,
    mean_version = TRUE,
    verbose =FALSE)

## ----DE_fun, echo=TRUE,eval=FALSE---------------------------------------------
# library(MAST)
# library(reshape2)
# ########SCnorm_runMAST3##########
# SCnorm_runMAST3 <- function(Data, NumCells) {
#     if(length(dim(Data))==2){
#         resultss<-SCnorm_runMAST(Data, NumCells)
#     } else if(length(dim(Data))==3){
# 
#         library(foreach)
#         resultss<- foreach(sampleind=1:dim(Data)[3],.combine=cbind)%do%{
#             print(sampleind)
# 
#             qq<-SCnorm_runMAST(Data[,,sampleind], NumCells)
#             return(qq$adjpval)
#         }
#     }
# 
#     return(resultss)
# }
# 
# SCnorm_runMAST <- function(Data, NumCells) {
# 
#   NA_ind<-which(rowSums(Data)==0)
#   Data = as.matrix(log2(Data+1))
# 
# 
#   G1<-Data[,seq(1,NumCells[1])]
#   G2<-Data[,-seq(1,NumCells[1])]
# 
#   qq_temp<- rowMeans(G2)-rowMeans(G1)
#   qq_temp[NA_ind]=NA
# 
#   numGenes = dim(Data)[1]
#   datalong = melt(Data)
#   Cond = c(rep("c1", NumCells[1]*numGenes), rep("c2", NumCells[2]*numGenes))
#   dataL = cbind(datalong, Cond)
#   colnames(dataL) = c("gene","cell","value","Cond")
#   dataL$gene = factor(dataL$gene)
#   dataL$cell = factor(dataL$cell)
#   vdata = FromFlatDF(dataframe = dataL, idvars = "cell", primerid = "gene", measurement = "value",  id = numeric(0), cellvars = "Cond", featurevars = NULL,  phenovars = NULL)
# 
#   zlm.output = zlm(~ Cond, vdata, method='glm', ebayes=TRUE)
# 
#   zlm.lr = lrTest(zlm.output, 'Cond')
# 
#   gpval = zlm.lr[,,'Pr(>Chisq)']
#   adjpval = p.adjust(gpval[,1],"BH") ## Use only pvalues from the continuous part.
#   adjpval = adjpval[rownames(Data)]
#   return(list(adjpval=adjpval, logFC_re=qq_temp))
# }
# 
# 
# 
# 

## ----DE_run, echo=TRUE,eval=FALSE---------------------------------------------
# #Now, detect DE genes between two groups of cells with 15 cells in each group respectively
# 
# #For 3D array
# DE_out<-SCnorm_runMAST3(Data=bayNorm_3D$Bay_out, NumCells=c(15,15))
# med_pvals<-apply(DE_out,1,median)
# #DE genes are called with threshold 0.05:
# DE_genes<-names(which(med_pvals<0.05))
# 
# #For 2D array
# DE_out<-SCnorm_runMAST3(Data=bayNorm_2D$Bay_out, NumCells=c(15,15))
# DE_genes<-names(which(DE_out$adjpval<0.05))

## ----SessionInfo--------------------------------------------------------------
sessionInfo()

