suppressMessages(library(riborex))
suppressMessages(library(DESeq2))

Is riborex equivalent to using an interaction term?

data(riborexdata)
RNACntTable <- riborexdata$rna
RiboCntTable <- riborexdata$ribo
rnaCond <- c("control", "control", "treated", "treated")
riboCond <- c("control", "control", "treated", "treated")
res.riborex <- as.data.frame(riborex(RNACntTable, RiboCntTable, rnaCond, riboCond))
DESeq2 mode selected
combining design matrix
applying DESeq2 to modified design matrix
estimating size factors
estimating dispersions
gene-wise dispersion estimates
mean-dispersion relationship
final dispersion estimates
fitting model and testing
res.riborex <- res.riborex[order(res.riborex$padj),]
res.riborex.sig <- subset(res.riborex, padj<0.1)
res.riborex
summary(res.riborex)
    baseMean       log2FoldChange         lfcSE             stat               pvalue             padj       
 Min.   :      1   Min.   :-7.56081   Min.   :0.1776   Min.   :-21.14617   Min.   :0.00000   Min.   :0.0000  
 1st Qu.:     99   1st Qu.:-0.32806   1st Qu.:0.2462   1st Qu.: -0.76849   1st Qu.:0.09693   1st Qu.:0.3482  
 Median :    453   Median : 0.03521   Median :0.3106   Median :  0.09082   Median :0.40558   Median :0.7877  
 Mean   :   3607   Mean   :-0.01939   Mean   :0.5390   Mean   :  0.05475   Mean   :0.42014   Mean   :0.6333  
 3rd Qu.:   1420   3rd Qu.: 0.32434   3rd Qu.:0.5423   3rd Qu.:  0.88267   3rd Qu.:0.70605   3rd Qu.:0.9325  
 Max.   :5058124   Max.   : 6.37661   Max.   :4.3364   Max.   : 18.53963   Max.   :0.99994   Max.   :0.9999  
                                                                                             NA's   :540     
combinedCounts <- cbind(RNACntTable, RiboCntTable)
assay <- factor( c( rep('RNA', ncol(RNACntTable) ), rep( 'Ribo', ncol(RiboCntTable) ) ), levels = c("RNA", "Ribo") )
condition <- factor(c(rnaCond, riboCond), levels = c("control", "treated"))
colData <- data.frame('assay'=assay, 'condition'=condition)
dds <- DESeqDataSetFromMatrix(combinedCounts, colData,  design= ~ assay + condition + assay:condition)
dds <- DESeq(dds, test="LRT", reduced= ~ assay + condition)
estimating size factors
estimating dispersions
gene-wise dispersion estimates
mean-dispersion relationship
final dispersion estimates
fitting model and testing
res.interaction <- as.data.frame(results(dds))
res.interaction <- res.interaction[order(res.interaction$padj),]
res.interaction.sig <- subset(res.interaction, padj<0.1)
res.interaction
summary(res.interaction)
    baseMean       log2FoldChange         lfcSE             stat              pvalue             padj       
 Min.   :      1   Min.   :-7.56081   Min.   :0.1776   Min.   : -0.0002   Min.   :0.00000   Min.   :0.0000  
 1st Qu.:     99   1st Qu.:-0.32806   1st Qu.:0.2462   1st Qu.:  0.1423   1st Qu.:0.09654   1st Qu.:0.3449  
 Median :    453   Median : 0.03521   Median :0.3106   Median :  0.6935   Median :0.40498   Median :0.7875  
 Mean   :   3607   Mean   :-0.01939   Mean   :0.5390   Mean   :  7.2746   Mean   :0.41970   Mean   :0.6326  
 3rd Qu.:   1420   3rd Qu.: 0.32434   3rd Qu.:0.5423   3rd Qu.:  2.7618   3rd Qu.:0.70597   3rd Qu.:0.9324  
 Max.   :5058124   Max.   : 6.37661   Max.   :4.3364   Max.   :424.3174   Max.   :1.00000   Max.   :0.9999  
                                                                                            NA's   :540     

Do we see similar number of DE genes at 0.1 FDR?

Riborex

dim(res.riborex.sig)
[1] 2324    6

Using interaction

dim(res.interaction.sig)
[1] 2336    6

So the p-values differ, probably because of the way size factor estimation is handled.

Do the logFold changes look similar?

plot(res.interaction$log2FoldChange, res.riborex$log2FoldChange, cex=0.2, xlab='Using interaction', ylab='Using riborex')

Correlation

correlation.pearson <- cor(res.interaction$log2FoldChange, res.riborex$log2FoldChange)
correlation.spearman <- cor(res.interaction$log2FoldChange, res.riborex$log2FoldChange, method = 'spearman')
correlation.pearson
[1] 0.2510842
correlation.spearman
[1] 0.1476345
LS0tCnRpdGxlOiAiUmlib3JleCBlcXVpdmFsZW5jZSB0byB1c2luZyBhbiBpbnRlcmFjdGlvbiB0ZXJtIgpvdXRwdXQ6CiAgaHRtbF9ub3RlYm9vazogZGVmYXVsdAogIHBkZl9kb2N1bWVudDogZGVmYXVsdAotLS0KCmBgYHtyfQpzdXBwcmVzc01lc3NhZ2VzKGxpYnJhcnkocmlib3JleCkpCnN1cHByZXNzTWVzc2FnZXMobGlicmFyeShERVNlcTIpKQpgYGAKCgojIyBJcyByaWJvcmV4IGVxdWl2YWxlbnQgdG8gdXNpbmcgYW4gaW50ZXJhY3Rpb24gdGVybT8KYGBge3J9CmRhdGEocmlib3JleGRhdGEpClJOQUNudFRhYmxlIDwtIHJpYm9yZXhkYXRhJHJuYQpSaWJvQ250VGFibGUgPC0gcmlib3JleGRhdGEkcmlibwpybmFDb25kIDwtIGMoImNvbnRyb2wiLCAiY29udHJvbCIsICJ0cmVhdGVkIiwgInRyZWF0ZWQiKQpyaWJvQ29uZCA8LSBjKCJjb250cm9sIiwgImNvbnRyb2wiLCAidHJlYXRlZCIsICJ0cmVhdGVkIikKcmVzLnJpYm9yZXggPC0gYXMuZGF0YS5mcmFtZShyaWJvcmV4KFJOQUNudFRhYmxlLCBSaWJvQ250VGFibGUsIHJuYUNvbmQsIHJpYm9Db25kKSkKcmVzLnJpYm9yZXggPC0gcmVzLnJpYm9yZXhbb3JkZXIocmVzLnJpYm9yZXgkcGFkaiksXQpyZXMucmlib3JleC5zaWcgPC0gc3Vic2V0KHJlcy5yaWJvcmV4LCBwYWRqPDAuMSkKcmVzLnJpYm9yZXgKYGBgCmBgYHtyfQpzdW1tYXJ5KHJlcy5yaWJvcmV4KQpgYGAKCgpgYGB7cn0KY29tYmluZWRDb3VudHMgPC0gY2JpbmQoUk5BQ250VGFibGUsIFJpYm9DbnRUYWJsZSkKYXNzYXkgPC0gZmFjdG9yKCBjKCByZXAoJ1JOQScsIG5jb2woUk5BQ250VGFibGUpICksIHJlcCggJ1JpYm8nLCBuY29sKFJpYm9DbnRUYWJsZSkgKSApLCBsZXZlbHMgPSBjKCJSTkEiLCAiUmlibyIpICkKY29uZGl0aW9uIDwtIGZhY3RvcihjKHJuYUNvbmQsIHJpYm9Db25kKSwgbGV2ZWxzID0gYygiY29udHJvbCIsICJ0cmVhdGVkIikpCmNvbERhdGEgPC0gZGF0YS5mcmFtZSgnYXNzYXknPWFzc2F5LCAnY29uZGl0aW9uJz1jb25kaXRpb24pCmRkcyA8LSBERVNlcURhdGFTZXRGcm9tTWF0cml4KGNvbWJpbmVkQ291bnRzLCBjb2xEYXRhLCAgZGVzaWduPSB+IGFzc2F5ICsgY29uZGl0aW9uICsgYXNzYXk6Y29uZGl0aW9uKQpkZHMgPC0gREVTZXEoZGRzLCB0ZXN0PSJMUlQiLCByZWR1Y2VkPSB+IGFzc2F5ICsgY29uZGl0aW9uKQpyZXMuaW50ZXJhY3Rpb24gPC0gYXMuZGF0YS5mcmFtZShyZXN1bHRzKGRkcykpCnJlcy5pbnRlcmFjdGlvbiA8LSByZXMuaW50ZXJhY3Rpb25bb3JkZXIocmVzLmludGVyYWN0aW9uJHBhZGopLF0KcmVzLmludGVyYWN0aW9uLnNpZyA8LSBzdWJzZXQocmVzLmludGVyYWN0aW9uLCBwYWRqPDAuMSkKcmVzLmludGVyYWN0aW9uCmBgYAoKYGBge3J9CnN1bW1hcnkocmVzLmludGVyYWN0aW9uKQpgYGAKCiMjIERvIHdlIHNlZSBzaW1pbGFyIG51bWJlciBvZiBERSBnZW5lcyBhdCAwLjEgRkRSPwoKIyMjIFJpYm9yZXgKCmBgYHtyfQpkaW0ocmVzLnJpYm9yZXguc2lnKQpgYGAKCiMjIyBVc2luZyBpbnRlcmFjdGlvbgoKYGBge3J9CmRpbShyZXMuaW50ZXJhY3Rpb24uc2lnKQpgYGAKClNvIHRoZSBwLXZhbHVlcyBkaWZmZXIsIHByb2JhYmx5IGJlY2F1c2Ugb2YgdGhlIHdheSBzaXplIGZhY3RvciBlc3RpbWF0aW9uIGlzIGhhbmRsZWQuCgojIyBEbyB0aGUgbG9nRm9sZCBjaGFuZ2VzIGxvb2sgc2ltaWxhcj8KCmBgYHtyfQpwbG90KHJlcy5pbnRlcmFjdGlvbiRsb2cyRm9sZENoYW5nZSwgcmVzLnJpYm9yZXgkbG9nMkZvbGRDaGFuZ2UsIGNleD0wLjIsIHhsYWI9J1VzaW5nIGludGVyYWN0aW9uJywgeWxhYj0nVXNpbmcgcmlib3JleCcpCmBgYAoKCiMjIENvcnJlbGF0aW9uCmBgYHtyfQpjb3JyZWxhdGlvbi5wZWFyc29uIDwtIGNvcihyZXMuaW50ZXJhY3Rpb24kbG9nMkZvbGRDaGFuZ2UsIHJlcy5yaWJvcmV4JGxvZzJGb2xkQ2hhbmdlKQpjb3JyZWxhdGlvbi5zcGVhcm1hbiA8LSBjb3IocmVzLmludGVyYWN0aW9uJGxvZzJGb2xkQ2hhbmdlLCByZXMucmlib3JleCRsb2cyRm9sZENoYW5nZSwgbWV0aG9kID0gJ3NwZWFybWFuJykKYGBgCgpgYGB7cn0KY29ycmVsYXRpb24ucGVhcnNvbgpgYGAKCmBgYHtyfQpjb3JyZWxhdGlvbi5zcGVhcm1hbgpgYGAK