Created
June 15, 2023 06:17
-
-
Save mikelove/09cdb828392bfa7ee88d34fa13d24ae3 to your computer and use it in GitHub Desktop.
Drawing DESeq2 fitted spline curves on top of scaled counts
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| library(splines) | |
| library(DESeq2) | |
| # make some demo data | |
| dds <- makeExampleDESeqDataSet(n=100, m=40) | |
| dds$condition <- sort(runif(40)) | |
| # make one gene where expression has a curve shape (just for demo) | |
| s_shape <- round(500 * sin(dds$condition*2*pi) + 1000 + rnorm(40,0,50)) | |
| mode(s_shape) <- "integer" | |
| counts(dds)[1,] <- s_shape | |
| # just for visualization | |
| # next line just for demo, use standard size factors for real data | |
| sizeFactors(dds) <- rep(1,ncol(dds)) | |
| library(ggplot2) | |
| plotCounts(dds, 1, returnData=TRUE) %>% | |
| ggplot(aes(condition, count)) + | |
| geom_point() | |
| # how to fit curves in DESeq2 | |
| design(dds) <- ~ns(condition, df=5) | |
| dds <- DESeq(dds, test="LRT", reduced=~1) | |
| # expected results? | |
| res <- results(dds) | |
| hist(res$pvalue) | |
| plot(res$pvalue, log="y") | |
| # build the needed matrices for fitted spline | |
| coef_mat <- coef(dds) | |
| design_mat <- model.matrix(design(dds), colData(dds)) | |
| # build the fitted splines and log counts | |
| library(ggplot2) | |
| library(dplyr) | |
| dat <- plotCounts(dds, 1, returnData=TRUE) %>% | |
| mutate(logmu = design_mat %*% coef_mat[1,], | |
| logcount = log2(count)) | |
| # plot it all together | |
| dat %>% | |
| ggplot(aes(condition, logcount)) + | |
| geom_point() + | |
| geom_line(aes(condition, logmu), col="dodgerblue") |
Author
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment

Thanks for your reply. Then, assuming a new model.matrix X, are the weights correctly calculated in this code?