{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# DESeq2: Basic Differential Expression (DE) analysis" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Objective: Carry out a basic set of DE interaction analysis using DESeq2 and visualize the results" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The objective is to identify genes whose differential effect due to treatment depends on the genotype " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Load packages" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "Registered S3 methods overwritten by 'ggplot2':\n", " method from \n", " [.quosures rlang\n", " c.quosures rlang\n", " print.quosures rlang\n", "── \u001b[1mAttaching packages\u001b[22m ─────────────────────────────────────── tidyverse 1.2.1 ──\n", "\u001b[32m✔\u001b[39m \u001b[34mggplot2\u001b[39m 3.1.1 \u001b[32m✔\u001b[39m \u001b[34mpurrr \u001b[39m 0.3.2\n", "\u001b[32m✔\u001b[39m \u001b[34mtibble \u001b[39m 2.1.2 \u001b[32m✔\u001b[39m \u001b[34mdplyr \u001b[39m 0.8.1\n", "\u001b[32m✔\u001b[39m \u001b[34mtidyr \u001b[39m 0.8.3 \u001b[32m✔\u001b[39m \u001b[34mstringr\u001b[39m 1.4.0\n", "\u001b[32m✔\u001b[39m \u001b[34mreadr \u001b[39m 1.3.1 \u001b[32m✔\u001b[39m \u001b[34mforcats\u001b[39m 0.4.0\n", "── \u001b[1mConflicts\u001b[22m ────────────────────────────────────────── tidyverse_conflicts() ──\n", "\u001b[31m✖\u001b[39m \u001b[34mdplyr\u001b[39m::\u001b[32mfilter()\u001b[39m masks \u001b[34mstats\u001b[39m::filter()\n", "\u001b[31m✖\u001b[39m \u001b[34mdplyr\u001b[39m::\u001b[32mlag()\u001b[39m masks \u001b[34mstats\u001b[39m::lag()\n", "Loading required package: S4Vectors\n", "Loading required package: stats4\n", "Loading required package: BiocGenerics\n", "Loading required package: parallel\n", "\n", "Attaching package: ‘BiocGenerics’\n", "\n", "The following objects are masked from ‘package:parallel’:\n", "\n", " clusterApply, clusterApplyLB, clusterCall, clusterEvalQ,\n", " clusterExport, clusterMap, parApply, parCapply, parLapply,\n", " parLapplyLB, parRapply, parSapply, parSapplyLB\n", "\n", "The following objects are masked from ‘package:dplyr’:\n", "\n", " combine, intersect, setdiff, union\n", "\n", "The following objects are masked from ‘package:stats’:\n", "\n", " IQR, mad, sd, var, xtabs\n", "\n", "The following objects are masked from ‘package:base’:\n", "\n", " anyDuplicated, append, as.data.frame, basename, cbind, colnames,\n", " dirname, do.call, duplicated, eval, evalq, Filter, Find, get, grep,\n", " grepl, intersect, is.unsorted, lapply, Map, mapply, match, mget,\n", " order, paste, pmax, pmax.int, pmin, pmin.int, Position, rank,\n", " rbind, Reduce, rownames, sapply, setdiff, sort, table, tapply,\n", " union, unique, unsplit, which, which.max, which.min\n", "\n", "\n", "Attaching package: ‘S4Vectors’\n", "\n", "The following objects are masked from ‘package:dplyr’:\n", "\n", " first, rename\n", "\n", "The following object is masked from ‘package:tidyr’:\n", "\n", " expand\n", "\n", "The following object is masked from ‘package:base’:\n", "\n", " expand.grid\n", "\n", "Loading required package: IRanges\n", "\n", "Attaching package: ‘IRanges’\n", "\n", "The following objects are masked from ‘package:dplyr’:\n", "\n", " collapse, desc, slice\n", "\n", "The following object is masked from ‘package:purrr’:\n", "\n", " reduce\n", "\n", "Loading required package: GenomicRanges\n", "Loading required package: GenomeInfoDb\n", "Loading required package: SummarizedExperiment\n", "Loading required package: Biobase\n", "Welcome to Bioconductor\n", "\n", " Vignettes contain introductory material; view with\n", " 'browseVignettes()'. To cite Bioconductor, see\n", " 'citation(\"Biobase\")', and for packages 'citation(\"pkgname\")'.\n", "\n", "Loading required package: DelayedArray\n", "Loading required package: matrixStats\n", "\n", "Attaching package: ‘matrixStats’\n", "\n", "The following objects are masked from ‘package:Biobase’:\n", "\n", " anyMissing, rowMedians\n", "\n", "The following object is masked from ‘package:dplyr’:\n", "\n", " count\n", "\n", "Loading required package: BiocParallel\n", "\n", "Attaching package: ‘DelayedArray’\n", "\n", "The following objects are masked from ‘package:matrixStats’:\n", "\n", " colMaxs, colMins, colRanges, rowMaxs, rowMins, rowRanges\n", "\n", "The following object is masked from ‘package:purrr’:\n", "\n", " simplify\n", "\n", "The following objects are masked from ‘package:base’:\n", "\n", " aperm, apply, rowsum\n", "\n", "\n", "---------------------\n", "Welcome to dendextend version 1.12.0\n", "Type citation('dendextend') for how to cite the package.\n", "\n", "Type browseVignettes(package = 'dendextend') for the package vignette.\n", "The github page is: https://github.com/talgalili/dendextend/\n", "\n", "Suggestions and bug-reports can be submitted at: https://github.com/talgalili/dendextend/issues\n", "Or contact: \n", "\n", "\tTo suppress this message use: suppressPackageStartupMessages(library(dendextend))\n", "---------------------\n", "\n", "\n", "Attaching package: ‘dendextend’\n", "\n", "The following object is masked from ‘package:stats’:\n", "\n", " cutree\n", "\n" ] } ], "source": [ "library(tidyverse)\n", "library(DESeq2)\n", "library(dendextend)\n", "library(RColorBrewer)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Load the 2019 pilot dds object from image file" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "text/html": [ "'/home/jovyan/work/scratch/analysis_output/img/pilotdds2019.RData'" ], "text/latex": [ "'/home/jovyan/work/scratch/analysis\\_output/img/pilotdds2019.RData'" ], "text/markdown": [ "'/home/jovyan/work/scratch/analysis_output/img/pilotdds2019.RData'" ], "text/plain": [ "[1] \"/home/jovyan/work/scratch/analysis_output/img/pilotdds2019.RData\"" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "/home/jovyan/work/scratch/analysis_output/img/pilotdds2019.RData: '6632de5c8a2eed06d8c40c958e6f5d03'" ], "text/latex": [ "\\textbf{/home/jovyan/work/scratch/analysis\\textbackslash{}\\_output/img/pilotdds2019.RData:} '6632de5c8a2eed06d8c40c958e6f5d03'" ], "text/markdown": [ "**/home/jovyan/work/scratch/analysis_output/img/pilotdds2019.RData:** '6632de5c8a2eed06d8c40c958e6f5d03'" ], "text/plain": [ "/home/jovyan/work/scratch/analysis_output/img/pilotdds2019.RData \n", " \"6632de5c8a2eed06d8c40c958e6f5d03\" " ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "'dds2019'" ], "text/latex": [ "'dds2019'" ], "text/markdown": [ "'dds2019'" ], "text/plain": [ "[1] \"dds2019\"" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "curdir <- \"/home/jovyan/work/scratch/analysis_output\"\n", "imgdir <- file.path(curdir, \"img\")\n", "\n", "imgfile <- file.path(imgdir, \"pilotdds2019.RData\")\n", "\n", "imgfile\n", "\n", "attach(imgfile)\n", "\n", "tools::md5sum(imgfile)\n", "\n", "### List the objects that have been attached\n", "ls(2)\n", "\n", "dds2019 <- dds2019\n", "\n", "detach(pos = 2)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## review the steps of DE analysis\n", "### Before carrying out an interaction analysis, let's review the steps for conducting a DE analysis" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Inspect the dds2019 object" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "class: DESeqDataSet \n", "dim: 8499 24 \n", "metadata(1): version\n", "assays(1): counts\n", "rownames(8499): CNAG_00001 CNAG_00002 ... large_MTrRNA small_MTrRNA\n", "rowData names(0):\n", "colnames(24): 1_2019_P_M1 2_2019_P_M1 ... 23_2019_P_M1 24_2019_P_M1\n", "colData names(22): Label sample_year ... RIN_normal_threshold\n", " RIN_lowered_threshold" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "dds2019" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Note that the design is additive " ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "~condition + genotype" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "design(dds2019)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### The steps for a basic analysis are: estimate size factors, estimate dispersion parameters, and then carry out DE analysis" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "gene-wise dispersion estimates\n", "mean-dispersion relationship\n", "final dispersion estimates\n", "using pre-existing size factors\n", "estimating dispersions\n", "found already estimated dispersions, replacing these\n", "gene-wise dispersion estimates\n", "mean-dispersion relationship\n", "final dispersion estimates\n", "fitting model and testing\n" ] } ], "source": [ "### First copy dds2019 to ddsadd\n", "ddsadd <- dds2019\n", "### Estimate Size Factors\n", "ddsadd <- estimateSizeFactors(ddsadd)\n", "### Estimate Dispersion parameters (for each gene)\n", "ddsadd <- estimateDispersions(ddsadd)\n", "### Fit NB MLE model\n", "ddsadd <- DESeq(ddsadd)\n", "### Rlog \"normalized\" expressions\n", "#rldadd <- rlog(ddsadd, blind = TRUE)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Identify differentially expressed genes with respect to condition using pH4 as reference" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n", "\t\n", "\t\n", "\n", "\n", "\t\n", "\t\n", "\t\n", "\t\n", "\t\n", "\n", "
A data.frame: 5 × 7
rowbaseMeanlog2FoldChangelfcSEstatpvaluepadj
<chr><dbl><dbl><dbl><dbl><dbl><dbl>
CNAG_00275 1072.9219-4.0481060.10667356-37.9485400
CNAG_00309 539.1312-3.3315240.08444635-39.4513700
CNAG_00409 1093.4775-5.0306550.07452918-67.4991300
CNAG_0053115371.8856 3.5636910.05663035 62.9290000
CNAG_00601 506.4752 4.6615770.09625726 48.4283200
\n" ], "text/latex": [ "A data.frame: 5 × 7\n", "\\begin{tabular}{r|lllllll}\n", " row & baseMean & log2FoldChange & lfcSE & stat & pvalue & padj\\\\\n", " & & & & & & \\\\\n", "\\hline\n", "\t CNAG\\_00275 & 1072.9219 & -4.048106 & 0.10667356 & -37.94854 & 0 & 0\\\\\n", "\t CNAG\\_00309 & 539.1312 & -3.331524 & 0.08444635 & -39.45137 & 0 & 0\\\\\n", "\t CNAG\\_00409 & 1093.4775 & -5.030655 & 0.07452918 & -67.49913 & 0 & 0\\\\\n", "\t CNAG\\_00531 & 15371.8856 & 3.563691 & 0.05663035 & 62.92900 & 0 & 0\\\\\n", "\t CNAG\\_00601 & 506.4752 & 4.661577 & 0.09625726 & 48.42832 & 0 & 0\\\\\n", "\\end{tabular}\n" ], "text/markdown": [ "\n", "A data.frame: 5 × 7\n", "\n", "| row <chr> | baseMean <dbl> | log2FoldChange <dbl> | lfcSE <dbl> | stat <dbl> | pvalue <dbl> | padj <dbl> |\n", "|---|---|---|---|---|---|---|\n", "| CNAG_00275 | 1072.9219 | -4.048106 | 0.10667356 | -37.94854 | 0 | 0 |\n", "| CNAG_00309 | 539.1312 | -3.331524 | 0.08444635 | -39.45137 | 0 | 0 |\n", "| CNAG_00409 | 1093.4775 | -5.030655 | 0.07452918 | -67.49913 | 0 | 0 |\n", "| CNAG_00531 | 15371.8856 | 3.563691 | 0.05663035 | 62.92900 | 0 | 0 |\n", "| CNAG_00601 | 506.4752 | 4.661577 | 0.09625726 | 48.42832 | 0 | 0 |\n", "\n" ], "text/plain": [ " row baseMean log2FoldChange lfcSE stat pvalue padj\n", "1 CNAG_00275 1072.9219 -4.048106 0.10667356 -37.94854 0 0 \n", "2 CNAG_00309 539.1312 -3.331524 0.08444635 -39.45137 0 0 \n", "3 CNAG_00409 1093.4775 -5.030655 0.07452918 -67.49913 0 0 \n", "4 CNAG_00531 15371.8856 3.563691 0.05663035 62.92900 0 0 \n", "5 CNAG_00601 506.4752 4.661577 0.09625726 48.42832 0 0 " ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "results(ddsadd, contrast = c(\"condition\", \"pH8\", \"pH4\"), tidy = TRUE) %>%\n", " arrange(desc(-padj)) %>% \n", " head(5)" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "## Interaction analysis" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "### The first step is to specify the design" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "~condition + genotype" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "### Additive design\n", "ddsmult <- dds2019\n", "design(ddsmult)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Update the design by adding the term genotype:condition" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "~genotype + condition + genotype:condition" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "design(ddsmult) <- formula(~ genotype + condition + genotype:condition)\n", "design(ddsmult)" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [], "source": [ "### Now repeat the steps: estimate size factors, estimate dispersion followed by the analysis" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "gene-wise dispersion estimates\n", "mean-dispersion relationship\n", "final dispersion estimates\n", "using pre-existing size factors\n", "estimating dispersions\n", "found already estimated dispersions, replacing these\n", "gene-wise dispersion estimates\n", "mean-dispersion relationship\n", "final dispersion estimates\n", "fitting model and testing\n" ] } ], "source": [ "### Estimate Size Factors\n", "ddsmult <- estimateSizeFactors(ddsmult)\n", "### Estimate Dispersion parameters (for each gene)\n", "ddsmult <- estimateDispersions(ddsmult)\n", "### Fit NB MLE model\n", "ddsmultres <- DESeq(ddsmult)\n", "### Rlog \"normalized\" expressions\n", "#rldmult <- rlog(ddsmult, blind = TRUE)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Look at the results (compare the first line to that of the DE analysis" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "log2 fold change (MLE): genotypeWT.conditionpH8 \n", "Wald test p-value: genotypeWT.conditionpH8 \n", "DataFrame with 8499 rows and 6 columns\n", " baseMean log2FoldChange lfcSE\n", " \n", "CNAG_00001 0 NA NA\n", "CNAG_00002 192.456384076694 -0.103408237109234 0.162208795540166\n", "CNAG_00003 164.990819436254 0.639703164323634 0.158566362520624\n", "CNAG_00004 571.054651467718 -0.149923491484726 0.0875861185206605\n", "CNAG_00005 28.7106195205257 0.38872615882583 0.383575916608188\n", "... ... ... ...\n", "ENSRNA049551942 0 NA NA\n", "ENSRNA049551964 0 NA NA\n", "ENSRNA049551993 0 NA NA\n", "large_MTrRNA 5333.97356461621 0.25675256982063 0.261942681080193\n", "small_MTrRNA 1705.75472334291 1.15038162089038 0.552570647394538\n", " stat pvalue padj\n", " \n", "CNAG_00001 NA NA NA\n", "CNAG_00002 -0.637500801142613 0.523798688279165 0.686004971590578\n", "CNAG_00003 4.03429298720548 5.47669483738396e-05 0.00040044394310704\n", "CNAG_00004 -1.71172662993806 0.0869470586782988 0.188582930952285\n", "CNAG_00005 1.01342691757914 0.310856287600497 0.484502484273056\n", "... ... ... ...\n", "ENSRNA049551942 NA NA NA\n", "ENSRNA049551964 NA NA NA\n", "ENSRNA049551993 NA NA NA\n", "large_MTrRNA 0.980186080259394 0.326994274282426 0.501378918298731\n", "small_MTrRNA 2.08187247425215 0.0373541196234004 0.0979329138148396" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "results(ddsmultres)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "List the top 5 hits with respect to adjusted P-value" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n", "\t\n", "\t\n", "\n", "\n", "\t\n", "\t\n", "\t\n", "\t\n", "\t\n", "\n", "
A data.frame: 5 × 7
rowbaseMeanlog2FoldChangelfcSEstatpvaluepadj
<chr><dbl><dbl><dbl><dbl><dbl><dbl>
CNAG_062372425.9011 1.4459700.06535452 22.125031.815272e-1081.479628e-104
CNAG_017685493.5145-2.0123350.09770819-20.59535 3.020861e-94 1.231152e-90
CNAG_04901 475.3418-3.2738700.16064794-20.37916 2.560031e-92 6.955603e-89
CNAG_066582332.5964-1.5505630.08436115-18.38006 1.897740e-75 3.867120e-72
CNAG_03518 399.4864 3.0917380.16854953 18.34320 3.741012e-75 6.098599e-72
\n" ], "text/latex": [ "A data.frame: 5 × 7\n", "\\begin{tabular}{r|lllllll}\n", " row & baseMean & log2FoldChange & lfcSE & stat & pvalue & padj\\\\\n", " & & & & & & \\\\\n", "\\hline\n", "\t CNAG\\_06237 & 2425.9011 & 1.445970 & 0.06535452 & 22.12503 & 1.815272e-108 & 1.479628e-104\\\\\n", "\t CNAG\\_01768 & 5493.5145 & -2.012335 & 0.09770819 & -20.59535 & 3.020861e-94 & 1.231152e-90\\\\\n", "\t CNAG\\_04901 & 475.3418 & -3.273870 & 0.16064794 & -20.37916 & 2.560031e-92 & 6.955603e-89\\\\\n", "\t CNAG\\_06658 & 2332.5964 & -1.550563 & 0.08436115 & -18.38006 & 1.897740e-75 & 3.867120e-72\\\\\n", "\t CNAG\\_03518 & 399.4864 & 3.091738 & 0.16854953 & 18.34320 & 3.741012e-75 & 6.098599e-72\\\\\n", "\\end{tabular}\n" ], "text/markdown": [ "\n", "A data.frame: 5 × 7\n", "\n", "| row <chr> | baseMean <dbl> | log2FoldChange <dbl> | lfcSE <dbl> | stat <dbl> | pvalue <dbl> | padj <dbl> |\n", "|---|---|---|---|---|---|---|\n", "| CNAG_06237 | 2425.9011 | 1.445970 | 0.06535452 | 22.12503 | 1.815272e-108 | 1.479628e-104 |\n", "| CNAG_01768 | 5493.5145 | -2.012335 | 0.09770819 | -20.59535 | 3.020861e-94 | 1.231152e-90 |\n", "| CNAG_04901 | 475.3418 | -3.273870 | 0.16064794 | -20.37916 | 2.560031e-92 | 6.955603e-89 |\n", "| CNAG_06658 | 2332.5964 | -1.550563 | 0.08436115 | -18.38006 | 1.897740e-75 | 3.867120e-72 |\n", "| CNAG_03518 | 399.4864 | 3.091738 | 0.16854953 | 18.34320 | 3.741012e-75 | 6.098599e-72 |\n", "\n" ], "text/plain": [ " row baseMean log2FoldChange lfcSE stat pvalue \n", "1 CNAG_06237 2425.9011 1.445970 0.06535452 22.12503 1.815272e-108\n", "2 CNAG_01768 5493.5145 -2.012335 0.09770819 -20.59535 3.020861e-94\n", "3 CNAG_04901 475.3418 -3.273870 0.16064794 -20.37916 2.560031e-92\n", "4 CNAG_06658 2332.5964 -1.550563 0.08436115 -18.38006 1.897740e-75\n", "5 CNAG_03518 399.4864 3.091738 0.16854953 18.34320 3.741012e-75\n", " padj \n", "1 1.479628e-104\n", "2 1.231152e-90\n", "3 6.955603e-89\n", "4 3.867120e-72\n", "5 6.098599e-72" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "results(ddsmultres, tidy = TRUE) %>%\n", " arrange(desc(-padj)) %>%\n", " head(5)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Visualize the results" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [], "source": [ "### Merge gene expression with meta data\n", "myDEplotData <- function(mydds, geneid, mergelab) {\n", " counts(mydds, normalize = TRUE) %>%\n", " as_tibble(rownames=\"gene\") %>%\n", " filter(gene == geneid) %>%\n", " gather(Label, geneexp, -gene) %>%\n", " select(-gene) -> genedat\n", "\n", " colData(mydds) %>%\n", " as.data.frame %>%\n", " as_tibble %>%\n", " full_join(genedat, by = mergelab) -> genedat\n", " \n", " return(genedat)\n", "}\n", "\n", "\n", "### Alow for coloring with respect to another factor\n", "myDEplot <- function(mydds, geneid, grpvar, colvar, mergelab) {\n", " mydat <- myDEplotData(mydds, geneid, mergelab)\n", " ggplot(mydat, aes_string(x=grpvar, y = \"geneexp\", col = colvar))+ geom_point()\n", "}" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Compare the DE effect of condition within WT compares to sre1d. This suggests that the DE with respect to condition depends on genotype. " ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n7IqKij1YBwBgewXcY7d48eJ/+7d/GzFiRJf166+/ftWqVXPnzr366qtXrVq1YMGCPVsHAGB7\nBQy71atXX3nllVOmTNl+MZPJPProozNmzKirqxs1atSMGTMefvjhbdu27e564cYGANhHFfBQ\n7LnnnhtF0fLly7dffPHFF6MomjBhQsfT8ePH53K5FStW5PP53Vo/+uijCzc5AMC+qLDn2O1o\n06ZN1dXVZWVlHU/Lysqqq6s3bdqUz+d3a73IYwMA9H3FDru2trbOSvvLBMlka2trFEW7u97h\nscce++pXv9r5dN68eXbmsaPq6urq6upSTwH9jk2PLtrb20s9QuCKHXZlZWVtbW3br7S1taVS\nqVwut1vrnU+TyWRNTU3n00QikcvlCjM7+6RYLBaLxfL5fMdhfaA4bHpQEsUOu2HDhjU0NLS2\ntpaXl0dR1Nzc3NDQMHz48Gw2u1vrnW947LHH3nvvvZ1P6+vr33rrrSL/o+jL0ul0VVXVtm3b\nWlpaSj0L9CM2PbqVSqW6HIijdxX7BsUTJkyIx+OdV1QsW7YsmUwecsghu7te5LEBAPq+Aobd\nxo0bN27cuHXr1nw+3/G4sbGxsrLypJNOuvHGG1977bVXX331lltuOfXUU9Pp9O6uF25sAIB9\nVKxwZz9Mmzaty8p555131llntbS03HDDDY899lgURccff/zMmTM7DrPu7nq36uvru5yTRz/X\ncTwok8k4HgTFZNOjW6lUavsz4+l1BQy7khB2dOGvC5SETY9uCbtCK/Y5dgAAFIiwAwAIhLAD\nAAiEsAMACISwAwAIhLADAAiEsAMACISwAwAIhLADAAiEsAMACISwAwAIhLADAAiEsAMACISw\nAwAIhLADAAiEsAMACISwAwAIhLADAAiEsAMACISwAwAIhLADAAiEsAMACISwAwAIhLADAAiE\nsAMACISwAwAIhLADAAiEsAMACISwAwAIhLADAAiEsAMACISwAwAIhLADAAiEsAMACISwAwAI\nhLADAAiEsAMACISwAwAIhLADAAiEsAMACISwAwAIhLADAAiEsAMACISwAwAIhLADAAiEsAMA\nCISwAwAIhLADAAiEsAMACISwAwAIhLADAAiEsAMACISwAwAIhLADAAiEsAMACISwAwAIhLAD\nAAiEsAMACISwAwAIhLADAAiEsAMACISwAwAIhLADAAiEsAMACISwAwAIhLADAAiEsAMACISw\nAwAIhLADAAiEsAMACISwAwAIhLADAAiEsAMA2CWTJ08+9thjd3z8Ni8rsmRJfioAwD5t5syZ\n8fhfdpD97ne/e9/73tfQ0LDjl4pM2AEA7LaLLrqo8/Fvf/vbnX2pyByKBQD2effee++73vWu\ndDpdW1t7wQUXrF+/vvNL99xzz9SpU6uqqiorKydPnnznnXd2fund73736aef/vzzz59wwglV\nVVWjRo36/Oc/39zc3PHVXC737//+77W1tel0esqUKYsXL47FYp3f23m89aSTTvqXf/mXbdu2\nxWKx0047LdrhUOweD7AHhB0AsG/7yU9+Mn369LFjxy5cuPCqq6765S9/ecopp3Tk0Y9+9KPp\n06cPGzZs0aJFP/3pTw8++OBzzjnnxhtv7PjGZDK5bt26c88995xzzvnf//3ff/zHf/yv//qv\nb3/72x1f/eY3v3nFFVdMnz79oYce+ud//ucLL7zw9ddf3/Gn33zzzWeeeWZlZeXy5cv/+7//\nu8tX92aAPRDL5/N7/M19UH19fVtbW6mnoA9Jp9NVVVWZTKalpaXUs0A/YtOjW6lUqqamptff\n9rDDDqusrHz66ac7ni5atOj888+/++67Tz311IMOOiiVSj333HOdJ70dffTRb7755sqVK6Mo\nOuGEExYvXvzII48cf/zxURTl8/lRo0YdcsghjzzySC6XGzly5Lhx45544omOb3zqqaemTJly\nzDHHPPnkk1EUTZ48OZlMdjy+4IIL7r777s5z7Lb/0h4PsGf/VdhjBwDsw9atW7d8+fKTTz65\nc+XDH/5wJpM59dRTV61a9corr7z//e/f/lKG0047bdWqVR1dFUXRfvvt1xFVURTFYrG6urrN\nmzdHUfTaa6+98cYb733vezu/8V3vetfw4cN3a7a9GWDP7OrFE+3t7X/+8583bdoUi8VGjBhx\n4IEHlupyDwCATmvXro2iaMSIETv70qhRo7ZfrK2tjaJo/fr1BxxwQBRFI0eO3P6ryWQyl8tF\nUdRx1LVLyXV87+7OtmcD7Jme46ytre1LX/rSsGHDxo8f/+53v/u4444bN25cbW3tN77xjb35\nwQAAvaXbCw46rnXocj5Ax0lonZdBbH89xNu8rEM2m92tqfZmgD3T8x67L3/5y9/5znemTp36\nvve9b8SIEfl8fuPGjb/+9a+/+tWvNjc3f/Ob3+zFaQAAdsvo0aOjv+4b25UvdbsXbUdDhw6N\nomjDhg2dK/l8fs2aNePHj9/L2XZxgD3T8x67H/7whzNnznz88ce/8Y1vfO5zn7v44ou/8Y1v\n/Pa3v/3MZz5z0003FWImAIBdVFtbe+ihh957773t7e0dK4sXL66qqrrzzjtHjx49YcKEe++9\nt3NPWz6ff+CBB8aPH9+RXG9j3LhxgwYN2v4ihkceeWTLli3dvjgWi3W7M29vBtgzPYddfX39\n2WefveP6Jz7xiZ398wAAiuab3/zmmjVrzjjjjEWLFt16660zZswYNmzY6aefHkXRFVdcsXr1\n6o5bljz44IMf/vCHly1bduWVV/b4nslkcubMmU888cSnPvWpBx98cMGCBZ/61KcOPvjgbl9c\nW1vb3Nz8gx/84Fe/+lWXL+3xAHum57A7/PDDt7/LX6fVq1cfccQRBRgJAGA3TJ8+fdGiRZs3\nbz7nnHO+9KUvTZky5de//vXgwYM7vnTPPfds3Lhx2rRp06dPf+ONN376059Onz59V972iiuu\n+PznP3/fffdNmzbthhtuuPnmm8eNG9ftXdVmz5595JFH/vM///Pll1++42x7PMAe6Pk+dosX\nL/7sZz973XXXvec97+lcfPzxx2fOnDl//vwTTzyxQJPtGfexows304KSsOnRrQLdx45OPYfd\nqaee+sorr7zyyiuDBg3qONFv/fr1mzdvHjNmTMe1FJ2v7LwxYAkJO7rw1wVKwqZHt4RdofV8\nVezGjRuHDBnScW1Ih50dYAYAoIR6Drs//OEPRZgDAIC91PPFE7fddlu3h2u3bt36pS99qQAj\nAQCwJ3oOu/PPP//YY4/t/ATcKIpyudwNN9xw8MEHz5s3r5CzAQCwG3oOuzvuuCOTyRx33HHn\nnHPOmjVrHnnkkaOPPvrTn/70Mcccs2TJkiKMCADArug57M4555xly5b96Ec/eu6558aNG/fe\n97531KhRTz311H333Tdp0qQijAgAwK7oOeyiKIrH4+l0uqKiIpvNxmKxdDqdTqcLPRkAALul\n57BbtGjRpEmTpk2bNnr06BUrVvziF7948cUXjzzyyI9//ON/+tOfijAiAAC7oucbFMdisYkT\nJ37nO9854YQTOlay2eyNN9542WWXvfnmm50fuNtHuEExXbhLKpSETY9uuUFxofW8x+6///u/\nn3nmmc6qi6IokUh8+tOffumll774xS8WcDQAAHZHz3vsOm3evHndunVjx46tqqoq6Ex7wx47\nurDbAErCpke3CrTHLpvN9u4bJhKJ3n3Doun5kyeiKLr33nv/4z/+Y+nSpVEUPfHEE8cee+xF\nF100derU8847r8DjAQC8nXw+39jY2Lvvue8eL+75UOz9998/ffr0bDZ76aWXdi7W19eff/75\nCxcuLORsAADshp4PxU6dOvWAAw6488474/F4LBbr2GMXRdGsWbOeffbZ3/3ud0WZc1c5FEsX\njgdBSdj06FYhDsXm8/mGhobefc+Q99gtXbr0wgsvjMe7vvLcc89dvnx5YaYCAGC39Rx2sVgs\nl8vtuL5ly5Zdv/ACAIBC6znsjj766O9973td2q6lpeXqq6+ePHlywQYDAGD39HxV7GWXXXb6\n6adPnDjxgx/8YBRFd9xxx5133nn33Xdv3LjxwQcfLPyEAADskl26j93PfvazL3/5y88//3zn\nypFHHvmtb33rtNNOK+Rse8LFE3ThDG4oCZse3XLxRKH1fCg2iqIzzjhj2bJl69at+/3vf//U\nU09t2LBh6dKlfbDqAABK6KCDDpozZ872K3PmzDnwwAO7vOxb3/pWLBb74x//2OsD7NINijuk\nUql0Ot3HP3kCAKCrxsb48udi9Vvyg/fLH3ZkPpUq4SwvvfTSf/3XfxXozXdpj9299947ceLE\nIUOGHHHEEc8991wURRdddNFtt91WoJkAAHpLbOWrZddfk3zgvvjjjyZ/dk/Z9d+Jv76uVMPk\n8/lZs2Z94QtfKND7++QJACBYsbbWsnsWxpqaoiiKdSw1ZBKL7oq6u5XbLspkMrFY7Lbbbjvm\nmGPS6fRRRx312GOP7eL3LliwoL29/ZOf/OQe//S31/Oh2CuuuOKjH/1oxydPzJs3r2Pxzjvv\nrKqquvrqqz/60Y8WaDIAgL0UW/lalNnadXHzm7F1a/Kj6/bsPcvKyqIomjt37g9/+MNRo0Zd\ncskl06ZNW7NmTWVlZRRFq1ateuSRRzpfvGrVqs7Ha9eu/cpXvvLII4/EYrE9+9E96jnsli5d\neuWVV3b7yRMdN0ABAOibYi3NO1vfy09ZOO+884466qgoir7yla/8z//8z+OPP37SSSdFUXTP\nPfdsfz+4xsbG4cOHdzz+zGc+M2vWrMMPP3zLli1798N3yidPAADByg0d1s1qLJYfNmIv33n8\n+PEdD8aOHRtF0bp1fzlv75JLLtm0nUsuuaRj/Uc/+tELL7xw2WWX7eXPfXs+eQIACFZ+RG32\n747qspidfGx+wMC9fOfONOrYz5VOp9/+9XfffffLL79cWVkZi8UGDx4cRdGkSZPOPffcvRyj\nC588AQCELHfG9Ki6Jr7k97HW1nxFRW7Ku7PHvWfv3/aVV17peLBy5cooikaPHv32r7/99ttv\nvvnmjsf19fWjR49+/PHHjz766L2fZHs9h90pp5xy3333ffnLX77iiiuiKJo/f34URUceeeRN\nN9104okn9u40AAC9K19Wlj3p9Oz7TouaGqPKXrsX76233vqBD3ygrq5u7ty5Y8aMmTJlytu/\nvqKiovNxe3t7FEXpdDrV23fU26UbFJ9xxhlnnHHG+vXr16xZE4vF6urqOk8DBADYB8RivVh1\nURTNmjVrxowZS5cuHT9+/KJFixKJRC+++R7bpc+K3Yds3brVZ8WyvYqKiqqqqoaGBh9YCcVk\n06NbqVSqurq6d9+z+J8V29zcnE6nH3jggT748ao977Framr69re//atf/Wrz5s07Xh67bNmy\nwgy2hyoqKjruIgMdOu7Uk06nt98HDhSaTY9udXufDXpRz2F36aWXzp8/f//99x8zZkwyuRuf\nLVsSTU1N9tixvXQ6XVVV1djYaLcBFJNNj26lUqny8vJSTxGynkPtxz/+8T/90z9dc801hbtL\nMgDAvqKioqLPnsnW833s6uvrzzzzTFUHANDH9Rx2U6ZMeemll4owCgAAe6PnsJs/f/78+fMX\nL15chGkAANhjPZ9j98UvfjGbzZ5wwgn77bffyJEjuxyT7WtXxQIA/UosFisrKyv1FH1Fz2G3\ndevWwYMHH3/88UWYBgBgd7mrTqeew+63v/1tEeYAANgzra2tvfuG++49WXbjvnSbN29et27d\n2LFjq6p68xM5AAD2WD6f7/XbJe67YdfzxRNRFN17770TJ04cMmTIEUcc8dxzz0VRdNFFF912\n220Fng0AgN3Qc9jdf//906dPz2azl156aedifX39+eefv3DhwkLOBgDAboj1eOvkqVOnHnDA\nAXfeeWc8Ho/FYk888cSxxx4bRdGsWbOeffbZ3/3ud0WZc1fV19f7SDG21/G5RplMxucaQTHZ\n9OhWKpWqqanp3ffM5/MNDQ29+569PmTR9LzHbunSpRdeeGHHxzlv79xzz12+fHlhpgIAYLf1\nHHaxWCyXy+24vmXLlj77QWkAAP1Qz2F39NFHf+973+vSdi0tLVdfffXkyZMLNpiU+sEAACAA\nSURBVBgAALun59udXHbZZaeffvrEiRM/+MEPRlF0xx133HnnnXfffffGjRsffPDBwk8IAMAu\n6XmP3SmnnHLfffflcrkrrrgiiqL58+dfe+21w4YN++lPf3riiScWfkIAgH3DQQcdNGfOnO1X\n5syZc+CBB3Y8Xr9+/dlnnz106NDhw4d/7GMfW79+fa8PsEs3KD7jjDPOOOOM9evXr1mzJhaL\n1dXVDR8+vNdHAQAohGe2Nd286c3VLa1jK1Kzhg05PF2ajyA7++yza2pqVqxYkc1mP/GJT3z8\n4x9/5JFHevdH7MYnT9TW1tbW1vbujwcAKKjbN23+7Mo1HY8fzjT88M23bho75oODBhZ5jM2b\nN//mN7956KGHhgwZEkXRxRdffOaZZ27dunXAgAG9+FN6Drt3vvOdZWVl3X4pFovV1NRMnDjx\nwgsvfMc73tGLYwEA7L032tq/uHrt9istudxnX1vzviNrKne4ldsuymQyAwYMuPXWW+fPn//s\ns88ecsgh8+fP//u///u3/65EIhGLxdrb2zueZrPZeDyeSCT2bIad6Tnshg4dumrVqj/96U9V\nVVV1dXXxeHzlypUNDQ3jx4+vrq5esWLFr371q+uuu27x4sXvfOc7e3c4AIC98UTDtqbc/393\ntny0JZt9elvje2qq9+w9O3Z4zZ0794c//OGoUaMuueSSadOmrVmzprKyMoqiVatWbX+AddWq\nVR0PBg4cePbZZ8+dO/eoo47K5/PXXnvtxz72saqqqj2bYWd6btW5c+dms9m77rrrrbfeeuGF\nF5YtW/bWW28tXLiwoqJi4cKFK1euXLFixdixY//93/+9dycDANhL7TveczcWRVGU3et3Pu+8\n84466qihQ4d+5Stfeeuttx5//PGO9Xvuuees7dxzzz2d33LNNde8/vrrtbW1+++//6ZNm+bN\nm7fXU3TVc9h97nOf+7d/+7ezzz6784BsMpn8x3/8x89//vMXX3xxFEUHHXTQ1772tSeeeKLX\nhwMA2BuTq7vZJVYRj09Mp/fyncePH9/xYOzYsVEUrVu3ruPpJZdcsmk7l1xyScd6S0vL+973\nvne/+91vvfXWW2+99Z73vOeEE05obm7eyzG66Dnsnn766YMPPnjH9fHjxz/66KMdj4cOHeoT\nWgGAvqauvOxfa0d0Wbx8dO3g5N6e3Nb52Q0dH8SV7qkUH3rooeXLl8+bN2/QoEGDBg266qqr\nXnrppYceemgvx+ii57AbNGjQHXfcseP6j3/84/Ly8o7Hd91117hx43p3MgCAvTdn/xE3vaPu\n72uqR5eXnTCg+q5xB3562JC9f9tXXnml48HKlSujKBo9evSufFdnDnZcRRHf0ws4dqbniycu\nuOCCq6666vnnnz/xxBNHjhwZi8XeeOONxYsXP/TQQ7Nnz46iaO7cud///vevvfba3p0MAGDv\nxaLorMGDzho8qHff9tZbb/3ABz5QV1c3d+7cMWPGTJky5e1ff9xxxw0bNuxf//Vfr7rqqng8\n/tWvfnX48OHHHXdc707Vc9hdfvnlZWVl11133W9+85vOxerq6s985jPf/va3oyg6+OCDr7nm\nms997nO9OxkAQJ81a9asGTNmLF26dPz48YsWLerxxiWDBw/++c9/PmfOnI47xL3zne984IEH\nBg3q5dyM5Xe8WqQ7uVzu1Vdf3bBhQz6fHzJkyLhx43Z2c7vSqq+vd7Yf20un01VVVZlMpqWl\npdSzQD9i06NbqVSqpqamd98zn883NDT07nu+/ZDNzc3pdPqBBx447bTTevfn7r1d/eSJeDw+\nbtw4J9IBAPRZvXzKHgAApbIbnxULAEBFRcUunslWfPbYAQAEQtgBAARC2AEABMI5dgDAPiwW\ni/XNW7CVhLADAPZtFRUVpR6hr3AoFgAgEMIOACAQwg4AIBDCDgAgEMIOACAQwg4AIBDCDgAg\nEMIOACAQwg4AIBDCDgAgEMIOACAQwg4AIBDCDgAgEMIOACAQwg4AIBDCDgAgEMIOACAQwg4A\nIBDCDgAgEMIOACAQwg4AIBDCDgAgEMIOACAQwg4AIBDCDgAgEMIOACAQwg4AIBDCDgAgEMIO\nACAQwg4AIBDCDgAgEMIOACAQwg4AIBDCDgAgEMIOACAQwg4AIBDCDgAgEMIOACAQwg4AIBDC\nDgAgEMIOACAQwg4AIBDCDgAgEMIOACAQwg4AIBDCDgAgEMIOACAQwg4AIBDCDgAgEMIOACAQ\nwg4AIBDCDgAgEMIOACAQwg4AIBDCDgAgEMIOACAQwg4AIBDCDgAgEMIOACAQwg4AIBDCDgAg\nEMIOACAQwg4AIBDCDgAgEMIOACAQwg4AIBDCDgAgEMIOACAQwg4AIBDCDgAgEMIOACAQwg4A\nIBDCDgAgEMIOACAQwg4AIBDCDgAgEMIOACAQwg4AIBDCDgAgEMIOACAQwg4AIBDCDgAgEMni\n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\nfffdQ4cO/frXv/7mm28uWLDgj3/8Y3l5+WGHHTZr1qyOvyjnnntuFEXLly/v8rYvvfTS/Pnz\n165dO3bs2OOPP774/y7Yt7zjHe8YMmTIM888c8QRR0RRtH79+g0bNpx55pk///nPV61aVVdX\nF0XRM888M3jw4HHjxpV6WOhH7LFjX5LJZK644opTTjnltttuu+22204++eTLL7+8vr4+iqKy\nsrJ77rnnzDPPvOCCC6IomjdvXllZ2U033fSDH/ygvLz8iiuueJu3zeVyV1555YEHHnj77bdf\nfPHFDzzwQHH+ObBPmzx58jPPPNPxeMmSJePGjRs5cuRBBx3UudPumWeemTx5ciwWK92M0O8I\nO/YlW7duzWaz1dXVqVSqoqLi1FNPXbhw4cCBA6Moisfjhx9++Mknnzx27Ng///nPL7zwwic/\n+cmqqqrKysrzzz//5Zdffu2113b2titWrNi0adNZZ51VUVExZsyYE088sXj/JNhnTZkyZeXK\nlZs2bYqiaMmSJRMnToyiaNKkSR1hl8lkXnrpJac9QJE5FMu+ZNSoUeeff/53vvOd22+//fDD\nD584ceKxxx7b+dUDDjig48H69eujKOrYdddpw4YNBx54YLdv2/GXafjw4R1Pa2tre390CM5R\nRx1VXl7+9NNPn3zyyc8999yZZ54ZRdGkSZMWLVrU0tKyZMmSZDJ51FFHlXpM6F+EHfuYj3zk\nI6effvrSpUuXLVt2880333XXXd/61reqq6ujKEqlUh2v6Tj086Mf/Wj7+5XE4zvdP93W1rb9\n01wuV5DRISzl5eVHHnnk0qVLx4wZE0XRoYceGkXR+PHjy8rKXnjhhT/84Q9HHHFERUVFqceE\n/sWhWPYlra2tmzZtqqysnDp16qxZs+bPn7958+ann366y8v233//KIpWr16d2M7bnOgzZMiQ\nKIo2bNjQ8XTNmjUF+xdAUKZMmfL8888vW7bsiCOO+H/t3XtIU+8fB/Dn6GZsZ4Em5mXqvCSK\nl2qpbbZoRoY2ytIsIU2zkswMuxhFCSGEg9KC/tJIFIpCSnFqCauBmRlRFOWkorzmJZeKWeal\nzfP94/A7v1Ffyn2/X9St9+uv83yeZ+d8/EfePM8uPB6PEGJvbx8WFqbX6/V6Pc5hAeYegh1Y\nk6dPn+bm5j5//nxqamp6elqv109OTorF4h+W+fj4BAcHl5WVDQ0NTU9PazSaI0eOmEwmQojB\n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\nYII=", "text/plain": [ "plot without title" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "myDEplot(ddsmult, \"CNAG_03518\", \"genotype\", \"condition\", \"Label\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "##Exercise: Compare the size factors and dispersion estimates between ddsmult and ddsad" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Estimate DE effect due to condition given genotype" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Define a group variable" ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
    \n", "\t
  1. pH4WT
  2. \n", "\t
  3. pH4WT
  4. \n", "\t
  5. pH4WT
  6. \n", "\t
  7. pH4WT
  8. \n", "\t
  9. pH4WT
  10. \n", "\t
  11. pH4WT
  12. \n", "\t
  13. pH4sre1d
  14. \n", "\t
  15. pH4sre1d
  16. \n", "\t
  17. pH4sre1d
  18. \n", "\t
  19. pH4sre1d
  20. \n", "\t
  21. pH4sre1d
  22. \n", "\t
  23. pH4sre1d
  24. \n", "\t
  25. pH8WT
  26. \n", "\t
  27. pH8WT
  28. \n", "\t
  29. pH8WT
  30. \n", "\t
  31. pH8WT
  32. \n", "\t
  33. pH8WT
  34. \n", "\t
  35. pH8WT
  36. \n", "\t
  37. pH8sre1d
  38. \n", "\t
  39. pH8sre1d
  40. \n", "\t
  41. pH8sre1d
  42. \n", "\t
  43. pH8sre1d
  44. \n", "\t
  45. pH8sre1d
  46. \n", "\t
  47. pH8sre1d
  48. \n", "
\n", "\n", "
\n", "\t\n", "\t\tLevels:\n", "\t\n", "\t
    \n", "\t\t
  1. 'pH4sre1d'
  2. \n", "\t\t
  3. 'pH4WT'
  4. \n", "\t\t
  5. 'pH8sre1d'
  6. \n", "\t\t
  7. 'pH8WT'
  8. \n", "\t
\n", "
" ], "text/latex": [ "\\begin{enumerate*}\n", "\\item pH4WT\n", "\\item pH4WT\n", "\\item pH4WT\n", "\\item pH4WT\n", "\\item pH4WT\n", "\\item pH4WT\n", "\\item pH4sre1d\n", "\\item pH4sre1d\n", "\\item pH4sre1d\n", "\\item pH4sre1d\n", "\\item pH4sre1d\n", "\\item pH4sre1d\n", "\\item pH8WT\n", "\\item pH8WT\n", "\\item pH8WT\n", "\\item pH8WT\n", "\\item pH8WT\n", "\\item pH8WT\n", "\\item pH8sre1d\n", "\\item pH8sre1d\n", "\\item pH8sre1d\n", "\\item pH8sre1d\n", "\\item pH8sre1d\n", "\\item pH8sre1d\n", "\\end{enumerate*}\n", "\n", "\\emph{Levels}: \\begin{enumerate*}\n", "\\item 'pH4sre1d'\n", "\\item 'pH4WT'\n", "\\item 'pH8sre1d'\n", "\\item 'pH8WT'\n", "\\end{enumerate*}\n" ], "text/markdown": [ "1. pH4WT\n", "2. pH4WT\n", "3. pH4WT\n", "4. pH4WT\n", "5. pH4WT\n", "6. pH4WT\n", "7. pH4sre1d\n", "8. pH4sre1d\n", "9. pH4sre1d\n", "10. pH4sre1d\n", "11. pH4sre1d\n", "12. pH4sre1d\n", "13. pH8WT\n", "14. pH8WT\n", "15. pH8WT\n", "16. pH8WT\n", "17. pH8WT\n", "18. pH8WT\n", "19. pH8sre1d\n", "20. pH8sre1d\n", "21. pH8sre1d\n", "22. pH8sre1d\n", "23. pH8sre1d\n", "24. pH8sre1d\n", "\n", "\n", "\n", "**Levels**: 1. 'pH4sre1d'\n", "2. 'pH4WT'\n", "3. 'pH8sre1d'\n", "4. 'pH8WT'\n", "\n", "\n" ], "text/plain": [ " [1] pH4WT pH4WT pH4WT pH4WT pH4WT pH4WT pH4sre1d pH4sre1d\n", " [9] pH4sre1d pH4sre1d pH4sre1d pH4sre1d pH8WT pH8WT pH8WT pH8WT \n", "[17] pH8WT pH8WT pH8sre1d pH8sre1d pH8sre1d pH8sre1d pH8sre1d pH8sre1d\n", "Levels: pH4sre1d pH4WT pH8sre1d pH8WT" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "ddsgrp <- dds2019\n", "### DESeq2 requires factors\n", "ddsgrp$group <- as.factor(paste0(ddsgrp$condition, ddsgrp$genotype))\n", "ddsgrp$group" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Set design" ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "~group" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "design(ddsgrp) <- formula(~group)\n", "ddsgrp@design" ] }, { "cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "class: DESeqDataSet \n", "dim: 8499 24 \n", "metadata(1): version\n", "assays(1): counts\n", "rownames(8499): CNAG_00001 CNAG_00002 ... large_MTrRNA small_MTrRNA\n", "rowData names(0):\n", "colnames(24): 1_2019_P_M1 2_2019_P_M1 ... 23_2019_P_M1 24_2019_P_M1\n", "colData names(22): Label sample_year ... RIN_normal_threshold\n", " RIN_lowered_threshold" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stderr", "output_type": "stream", "text": [ "gene-wise dispersion estimates\n", "mean-dispersion relationship\n", "final dispersion estimates\n", "using pre-existing size factors\n", "estimating dispersions\n", "found already estimated dispersions, replacing these\n", "gene-wise dispersion estimates\n", "mean-dispersion relationship\n", "final dispersion estimates\n", "fitting model and testing\n" ] } ], "source": [ "ddsgrp\n", "### Estimate Size Factors\n", "ddsgrp <- estimateSizeFactors(ddsgrp)\n", "### Estimate Dispersion parameters (for each gene)\n", "ddsgrp <- estimateDispersions(ddsgrp)\n", "### Fit NB MLE model\n", "ddsgrpres <- DESeq(ddsgrp)\n", "### Rlog \"normalized\" expressions\n", "#rldmult <- rlog(ddsmult, blind = TRUE)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Generate results for CNAG_03518" ] }, { "cell_type": "code", "execution_count": 31, "metadata": {}, "outputs": [], "source": [ "### Results for interaction analysis\n", "r0<-results(ddsgrpres, tidy=TRUE)\n", "### Contrast treatments within WT strain\n", "r1<-results(ddsgrpres, contrast = c(\"group\", \"pH8WT\", \"pH4WT\"), tidy=TRUE)\n", "### Contrast treatments within sre1d strain\n", "r2<-results(ddsgrpres, contrast = c(\"group\", \"pH8sre1d\", \"pH4sre1d\"), tidy=TRUE)" ] }, { "cell_type": "code", "execution_count": 33, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n", "\t\n", "\t\n", "\n", "\n", "\t\n", "\n", "
A data.frame: 1 × 7
rowbaseMeanlog2FoldChangelfcSEstatpvaluepadj
<chr><dbl><dbl><dbl><dbl><dbl><dbl>
CNAG_03518399.4864-4.157040.1141264-36.424871.720166e-2903.78948e-288
\n" ], "text/latex": [ "A data.frame: 1 × 7\n", "\\begin{tabular}{r|lllllll}\n", " row & baseMean & log2FoldChange & lfcSE & stat & pvalue & padj\\\\\n", " & & & & & & \\\\\n", "\\hline\n", "\t CNAG\\_03518 & 399.4864 & -4.15704 & 0.1141264 & -36.42487 & 1.720166e-290 & 3.78948e-288\\\\\n", "\\end{tabular}\n" ], "text/markdown": [ "\n", "A data.frame: 1 × 7\n", "\n", "| row <chr> | baseMean <dbl> | log2FoldChange <dbl> | lfcSE <dbl> | stat <dbl> | pvalue <dbl> | padj <dbl> |\n", "|---|---|---|---|---|---|---|\n", "| CNAG_03518 | 399.4864 | -4.15704 | 0.1141264 | -36.42487 | 1.720166e-290 | 3.78948e-288 |\n", "\n" ], "text/plain": [ " row baseMean log2FoldChange lfcSE stat pvalue \n", "1 CNAG_03518 399.4864 -4.15704 0.1141264 -36.42487 1.720166e-290\n", " padj \n", "1 3.78948e-288" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "\n", "\n", "\n", "\t\n", "\t\n", "\n", "\n", "\t\n", "\n", "
A data.frame: 1 × 7
rowbaseMeanlog2FoldChangelfcSEstatpvaluepadj
<chr><dbl><dbl><dbl><dbl><dbl><dbl>
CNAG_03518399.4864-1.1066790.1195981-9.2533172.176323e-209.58358e-20
\n" ], "text/latex": [ "A data.frame: 1 × 7\n", "\\begin{tabular}{r|lllllll}\n", " row & baseMean & log2FoldChange & lfcSE & stat & pvalue & padj\\\\\n", " & & & & & & \\\\\n", "\\hline\n", "\t CNAG\\_03518 & 399.4864 & -1.106679 & 0.1195981 & -9.253317 & 2.176323e-20 & 9.58358e-20\\\\\n", "\\end{tabular}\n" ], "text/markdown": [ "\n", "A data.frame: 1 × 7\n", "\n", "| row <chr> | baseMean <dbl> | log2FoldChange <dbl> | lfcSE <dbl> | stat <dbl> | pvalue <dbl> | padj <dbl> |\n", "|---|---|---|---|---|---|---|\n", "| CNAG_03518 | 399.4864 | -1.106679 | 0.1195981 | -9.253317 | 2.176323e-20 | 9.58358e-20 |\n", "\n" ], "text/plain": [ " row baseMean log2FoldChange lfcSE stat pvalue \n", "1 CNAG_03518 399.4864 -1.106679 0.1195981 -9.253317 2.176323e-20\n", " padj \n", "1 9.58358e-20" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "\n", "\n", "\n", "\t\n", "\t\n", "\n", "\n", "\t\n", "\n", "
A data.frame: 1 × 7
rowbaseMeanlog2FoldChangelfcSEstatpvaluepadj
<chr><dbl><dbl><dbl><dbl><dbl><dbl>
CNAG_03518399.4864-4.1984170.1187655-35.350499.853941e-2741.460354e-271
\n" ], "text/latex": [ "A data.frame: 1 × 7\n", "\\begin{tabular}{r|lllllll}\n", " row & baseMean & log2FoldChange & lfcSE & stat & pvalue & padj\\\\\n", " & & & & & & \\\\\n", "\\hline\n", "\t CNAG\\_03518 & 399.4864 & -4.198417 & 0.1187655 & -35.35049 & 9.853941e-274 & 1.460354e-271\\\\\n", "\\end{tabular}\n" ], "text/markdown": [ "\n", "A data.frame: 1 × 7\n", "\n", "| row <chr> | baseMean <dbl> | log2FoldChange <dbl> | lfcSE <dbl> | stat <dbl> | pvalue <dbl> | padj <dbl> |\n", "|---|---|---|---|---|---|---|\n", "| CNAG_03518 | 399.4864 | -4.198417 | 0.1187655 | -35.35049 | 9.853941e-274 | 1.460354e-271 |\n", "\n" ], "text/plain": [ " row baseMean log2FoldChange lfcSE stat pvalue \n", "1 CNAG_03518 399.4864 -4.198417 0.1187655 -35.35049 9.853941e-274\n", " padj \n", "1 1.460354e-271" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "r0 %>% filter(row == \"CNAG_03518\")\n", "r1 %>% filter(row == \"CNAG_03518\")\n", "r2 %>% filter(row == \"CNAG_03518\")" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "R version 3.6.0 (2019-04-26)\n", "Platform: x86_64-pc-linux-gnu (64-bit)\n", "Running under: Debian GNU/Linux 9 (stretch)\n", "\n", "Matrix products: default\n", "BLAS: /usr/lib/openblas-base/libblas.so.3\n", "LAPACK: /usr/lib/libopenblasp-r0.2.19.so\n", "\n", "locale:\n", " [1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C \n", " [3] LC_TIME=en_US.UTF-8 LC_COLLATE=en_US.UTF-8 \n", " [5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8 \n", " [7] LC_PAPER=en_US.UTF-8 LC_NAME=C \n", " [9] LC_ADDRESS=C LC_TELEPHONE=C \n", "[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C \n", "\n", "attached base packages:\n", "[1] parallel stats4 stats graphics grDevices utils datasets \n", "[8] methods base \n", "\n", "other attached packages:\n", " [1] RColorBrewer_1.1-2 dendextend_1.12.0 \n", " [3] DESeq2_1.24.0 SummarizedExperiment_1.14.0\n", " [5] DelayedArray_0.10.0 BiocParallel_1.18.0 \n", " [7] matrixStats_0.54.0 Biobase_2.44.0 \n", " [9] GenomicRanges_1.36.0 GenomeInfoDb_1.20.0 \n", "[11] IRanges_2.18.1 S4Vectors_0.22.0 \n", "[13] BiocGenerics_0.30.0 forcats_0.4.0 \n", "[15] stringr_1.4.0 dplyr_0.8.1 \n", "[17] purrr_0.3.2 readr_1.3.1 \n", "[19] tidyr_0.8.3 tibble_2.1.2 \n", "[21] ggplot2_3.1.1 tidyverse_1.2.1 \n", "\n", "loaded via a namespace (and not attached):\n", " [1] colorspace_1.4-1 IRdisplay_0.7.0 htmlTable_1.13.1 \n", " [4] XVector_0.24.0 base64enc_0.1-3 rstudioapi_0.10 \n", " [7] bit64_0.9-7 AnnotationDbi_1.46.0 lubridate_1.7.4 \n", "[10] xml2_1.2.0 splines_3.6.0 geneplotter_1.62.0 \n", "[13] knitr_1.23 zeallot_0.1.0 IRkernel_1.0.1 \n", "[16] Formula_1.2-3 jsonlite_1.6 broom_0.5.2 \n", "[19] annotate_1.62.0 cluster_2.0.8 compiler_3.6.0 \n", "[22] httr_1.4.0 backports_1.1.4 assertthat_0.2.1 \n", "[25] Matrix_1.2-17 lazyeval_0.2.2 cli_1.1.0 \n", "[28] acepack_1.4.1 htmltools_0.3.6 tools_3.6.0 \n", "[31] gtable_0.3.0 glue_1.3.1 GenomeInfoDbData_1.2.1\n", "[34] Rcpp_1.0.1 cellranger_1.1.0 vctrs_0.1.0 \n", "[37] nlme_3.1-139 xfun_0.7 rvest_0.3.4 \n", "[40] XML_3.98-1.19 zlibbioc_1.30.0 scales_1.0.0 \n", "[43] hms_0.4.2 memoise_1.1.0 gridExtra_2.3 \n", "[46] rpart_4.1-15 latticeExtra_0.6-28 stringi_1.4.3 \n", "[49] RSQLite_2.1.1 genefilter_1.66.0 checkmate_1.9.3 \n", "[52] repr_1.0.1 rlang_0.3.4 pkgconfig_2.0.2 \n", "[55] bitops_1.0-6 evaluate_0.14 lattice_0.20-38 \n", "[58] labeling_0.3 htmlwidgets_1.3 bit_1.1-14 \n", "[61] tidyselect_0.2.5 plyr_1.8.4 magrittr_1.5 \n", "[64] R6_2.4.0 generics_0.0.2 Hmisc_4.2-0 \n", "[67] pbdZMQ_0.3-3 DBI_1.0.0 pillar_1.4.1 \n", "[70] haven_2.1.0 foreign_0.8-71 withr_2.1.2 \n", "[73] survival_2.44-1.1 RCurl_1.95-4.12 nnet_7.3-12 \n", "[76] modelr_0.1.4 crayon_1.3.4 uuid_0.1-2 \n", "[79] viridis_0.5.1 locfit_1.5-9.1 grid_3.6.0 \n", "[82] readxl_1.3.1 data.table_1.12.2 blob_1.1.1 \n", "[85] digest_0.6.19 xtable_1.8-4 munsell_0.5.0 \n", "[88] viridisLite_0.3.0 " ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "sessionInfo()" ] } ], "metadata": { "kernelspec": { "display_name": "R", "language": "R", "name": "ir" }, "language_info": { "codemirror_mode": "r", "file_extension": ".r", "mimetype": "text/x-r-source", "name": "R", "pygments_lexer": "r", "version": "3.6.0" } }, "nbformat": 4, "nbformat_minor": 2 }