This is a test version of Biostars. For the public version, visit https://www.biostars.org.
EdgeR without replicate?

I am doing DEG analysis between two sample (Normal vs Treated) without replicates using edgeR. I know there is no significance of analysis without replicates, but i have no other choice.

library(edgeR)
data = read.table("MYFILE-counts.txt", header=T, row.names=1, com='')
bcv <- 0.2

counts <- data
y <- DGEList(counts=counts, group=1:2)
et <- exactTest(y, dispersion=bcv^2)

The count matrix was generated by Corset, which gives the count matrix in Poisson distribution while i am applying exactTest which takes count matrix as negative binomial distribution. Should i carry on with this analysis only or use another test equivalent to exactTest for Poisson distributed count matrix? If there is any other test then what it is? What value of dispersion should be taken according to the data-set?

my variable:

>y

An object of class "DGEList"
$counts
                     Normal.bam      Treated.bam
Cluster-0.0                  0      50
Cluster-1.0                  0      25
Cluster-2.0                  0      16
Cluster-2.1                  0       8
Cluster-3.0                  0      15


... more rows ...

$samples         group     lib.size      norm.factors
Normal.bam      1          3.22e+07              1
Treated.bam     2          1.05e+08              1


>et

    An object of class "DGEExact"
$table
            logFC logCPM   PValue
Cluster-0.0  8.03  -1.58 4.06e-05
Cluster-1.0  7.04  -2.39 2.13e-03
Cluster-2.0  6.40  -2.89 3.49e-02
Cluster-2.1  5.42  -3.58 7.51e-02
Cluster-3.0  6.31  -2.95 3.49e-02
202654 more rows ...

$comparison
[1] "1" "2"

$genes
NULL
rna-seq edger corset differential'

You already posted that before. Without replicates there is no dispersion estimate. I would in no way simply take any value like 0.2 even though this might be a common one. You are only lying to yourself. The true dispersion might be much higher based on experimental or technical factors. Rank the genes by fold-change e.g. after normalizing with rlog from DESeq2 and then choose promising candidates for downstream validation. You are not going to make honest statistics with unreplicated data, no matter which method you use. There is a reason the manual of edgeR recommends against unreplicated data.

hellow ATpoint,

As you suggested i have gone through some literature and found some normalization methods of which i decided to chose calcNormFactors method (which normalization method shouls i choose : TMM or RLE). Sorry to disturb you again but i am not able to convert it into logfold change, what could be applied for this purpose: exact test?

library(edgeR)
y = read.table("counts.txt", header=T, row.names=1, com='')

sampleinfo <- read.delim("sample.txt")
group <- paste(sampleinfo$Status,sampleinfo$CellType,sep=".")
group
group <- factor(group)
table(group)
keep <- rowSums(y > 0.5)>=2
table(keep)
y <- DGEList(y, group=group, genes=y[,1])
y <- y[keep, ,keep.lib.sizes = FALSE]
y$samples

#no normalization

no_norm <- exactTest(y, dispersion=bcv^2)
table(p.adjust(no_norm$table$PValue, method="BH")<0.05)


#normalize
TMM <- calcNormFactors(y, method = "TMM") 
bcv <- 0.2
TMM <- exactTest(TMM, dispersion=bcv^2)
table(p.adjust(TMM$table$PValue, method="BH")<0.05)

RLE <- calcNormFactors(y, method = "RLE") 
bcv <- 0.2
RLE <- exactTest(RLE, dispersion=bcv^2)
table(p.adjust(RLE$table$PValue, method="BH")<0.05)

uq <- calcNormFactors(y, method = "upperquartile") 
bcv <- 0.2
uq <- exactTest(uq, dispersion=bcv^2)
table(p.adjust(uq$table$PValue, method="BH")<0.05)



library(gplots)

get_de <- function(x, pvalue){
  my_i <- p.adjust(x$PValue, method="BH") < pvalue
  row.names(x)[my_i]
}

my_no_norm <- get_de(no_norm$table, 0.05)
my_tmm <- get_de(TMM$table, 0.05)
my_rle <- get_de(RLE$table, 0.05)
my_uq <- get_de(uq$table, 0.05)

gplots::venn(list(no_norm = my_no_norm, TMM = my_tmm, RLE = my_rle, UQ = my_uq))

venn diagram

Please help, i am very confused.

0 answers

No answers yet.

Log in to answer this question.