Last updated: 2023-06-23

Checks: 7 0

Knit directory: mecfs-dge-analysis/

This reproducible R Markdown analysis was created with workflowr (version 1.7.0). The Checks tab describes the reproducibility checks that were applied when the results were created. The Past versions tab lists the development history.


Great! Since the R Markdown file has been committed to the Git repository, you know the exact version of the code that produced these results.

Great job! The global environment was empty. Objects defined in the global environment can affect the analysis in your R Markdown file in unknown ways. For reproduciblity it’s best to always run the code in an empty environment.

The command set.seed(20230618) was run prior to running the code in the R Markdown file. Setting a seed ensures that any results that rely on randomness, e.g. subsampling or permutations, are reproducible.

Great job! Recording the operating system, R version, and package versions is critical for reproducibility.

Nice! There were no cached chunks for this analysis, so you can be confident that you successfully produced the results during this run.

Great job! Using relative paths to the files within your workflowr project makes it easier to run your code on other machines.

Great! You are using Git for version control. Tracking code development and connecting the code version to the results is critical for reproducibility.

The results in this page were generated with repository version df39c69. See the Past versions tab to see a history of the changes made to the R Markdown and HTML files.

Note that you need to be careful to ensure that all relevant files for the analysis have been committed to Git prior to generating the results (you can use wflow_publish or wflow_git_commit). workflowr only checks the R Markdown file, but you know if there are other scripts or data files that it depends on. Below is the status of the Git repository when the results were generated:


Ignored files:
    Ignored:    .DS_Store
    Ignored:    .Rhistory
    Ignored:    .Rproj.user/
    Ignored:    output/batch-correction-limma/

Untracked files:
    Untracked:  data/7548-EW_RIN_7548-EW-1-12_WellTable.csv
    Untracked:  data/8289-EW_RIN_8289-EW-1__4__7_WellTable.csv
    Untracked:  data/8921-EW_MA_CHIP_1_Eukaryote_Total_RNA_Pico_8921-EW-1-7.pdf
    Untracked:  data/MECFS_RNAseq_metadata_CORRECTED.csv
    Untracked:  data/MECFS_RNAseq_metadata_CORRECTED.xlsx
    Untracked:  output/counts_vst.csv
    Untracked:  output/counts_vst_limma.csv
    Untracked:  output/res_aff_vs_unaff.csv
    Untracked:  output/res_aff_vs_unaff_df_genename_05.csv
    Untracked:  output/res_aff_vs_unaff_genename.csv

Unstaged changes:
    Modified:   code/copy_data.R

Note that any generated files, e.g. HTML, png, CSS, etc., are not included in this status report because it is ok for generated content to have uncommitted changes.


These are the previous versions of the repository in which changes were made to the R Markdown (analysis/analysis.Rmd) and HTML (docs/analysis.html) files. If you’ve configured a remote Git repository (see ?wflow_git_remote), click on the hyperlinks in the table below to view the files as they were in that past version.

File Version Author Date Message
Rmd df39c69 sdhutchins 2023-06-23 wflow_publish("analysis/")

library(tidyverse) # Avaialble via CRAN
Warning: package 'tidyverse' was built under R version 4.1.2
Warning: package 'ggplot2' was built under R version 4.1.2
Warning: package 'tibble' was built under R version 4.1.2
Warning: package 'tidyr' was built under R version 4.1.2
Warning: package 'readr' was built under R version 4.1.2
Warning: package 'purrr' was built under R version 4.1.2
Warning: package 'dplyr' was built under R version 4.1.2
Warning: package 'stringr' was built under R version 4.1.2
Warning: package 'forcats' was built under R version 4.1.2
Warning: package 'lubridate' was built under R version 4.1.2
── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
✔ dplyr     1.1.2     ✔ readr     2.1.4
✔ forcats   1.0.0     ✔ stringr   1.5.0
✔ ggplot2   3.4.2     ✔ tibble    3.2.1
✔ lubridate 1.9.2     ✔ tidyr     1.3.0
✔ purrr     1.0.1     
── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
✖ dplyr::filter() masks stats::filter()
✖ dplyr::lag()    masks stats::lag()
ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(DESeq2) # Available via Bioconductor
Loading required package: S4Vectors
Warning: package 'S4Vectors' was built under R version 4.1.3
Loading required package: stats4
Loading required package: BiocGenerics

Attaching package: 'BiocGenerics'

The following objects are masked from 'package:lubridate':

    intersect, setdiff, union

The following objects are masked from 'package:dplyr':

    combine, intersect, setdiff, union

The following objects are masked from 'package:stats':

    IQR, mad, sd, var, xtabs

The following objects are masked from 'package:base':

    anyDuplicated, append, as.data.frame, basename, cbind, colnames,
    dirname, do.call, duplicated, eval, evalq, Filter, Find, get, grep,
    grepl, intersect, is.unsorted, lapply, Map, mapply, match, mget,
    order, paste, pmax, pmax.int, pmin, pmin.int, Position, rank,
    rbind, Reduce, rownames, sapply, setdiff, sort, table, tapply,
    union, unique, unsplit, which.max, which.min


Attaching package: 'S4Vectors'

The following objects are masked from 'package:lubridate':

    second, second<-

The following objects are masked from 'package:dplyr':

    first, rename

The following object is masked from 'package:tidyr':

    expand

The following objects are masked from 'package:base':

    expand.grid, I, unname

Loading required package: IRanges

Attaching package: 'IRanges'

The following object is masked from 'package:lubridate':

    %within%

The following objects are masked from 'package:dplyr':

    collapse, desc, slice

The following object is masked from 'package:purrr':

    reduce

Loading required package: GenomicRanges
Warning: package 'GenomicRanges' was built under R version 4.1.2
Loading required package: GenomeInfoDb
Warning: package 'GenomeInfoDb' was built under R version 4.1.2
Loading required package: SummarizedExperiment
Loading required package: MatrixGenerics
Loading required package: matrixStats

Attaching package: 'matrixStats'

The following object is masked from 'package:dplyr':

    count


Attaching package: 'MatrixGenerics'

The following objects are masked from 'package:matrixStats':

    colAlls, colAnyNAs, colAnys, colAvgsPerRowSet, colCollapse,
    colCounts, colCummaxs, colCummins, colCumprods, colCumsums,
    colDiffs, colIQRDiffs, colIQRs, colLogSumExps, colMadDiffs,
    colMads, colMaxs, colMeans2, colMedians, colMins, colOrderStats,
    colProds, colQuantiles, colRanges, colRanks, colSdDiffs, colSds,
    colSums2, colTabulates, colVarDiffs, colVars, colWeightedMads,
    colWeightedMeans, colWeightedMedians, colWeightedSds,
    colWeightedVars, rowAlls, rowAnyNAs, rowAnys, rowAvgsPerColSet,
    rowCollapse, rowCounts, rowCummaxs, rowCummins, rowCumprods,
    rowCumsums, rowDiffs, rowIQRDiffs, rowIQRs, rowLogSumExps,
    rowMadDiffs, rowMads, rowMaxs, rowMeans2, rowMedians, rowMins,
    rowOrderStats, rowProds, rowQuantiles, rowRanges, rowRanks,
    rowSdDiffs, rowSds, rowSums2, rowTabulates, rowVarDiffs, rowVars,
    rowWeightedMads, rowWeightedMeans, rowWeightedMedians,
    rowWeightedSds, rowWeightedVars

Loading required package: Biobase
Welcome to Bioconductor

    Vignettes contain introductory material; view with
    'browseVignettes()'. To cite Bioconductor, see
    'citation("Biobase")', and for packages 'citation("pkgname")'.


Attaching package: 'Biobase'

The following object is masked from 'package:MatrixGenerics':

    rowMedians

The following objects are masked from 'package:matrixStats':

    anyMissing, rowMedians
library(RColorBrewer) # Avaialble via CRAN
Warning: package 'RColorBrewer' was built under R version 4.1.2
library(pheatmap) # Available via CRAN
library(genefilter) # Available via Bioconductor

Attaching package: 'genefilter'

The following objects are masked from 'package:MatrixGenerics':

    rowSds, rowVars

The following objects are masked from 'package:matrixStats':

    rowSds, rowVars

The following object is masked from 'package:readr':

    spec
library(limma)
Warning: package 'limma' was built under R version 4.1.3

Attaching package: 'limma'

The following object is masked from 'package:DESeq2':

    plotMA

The following object is masked from 'package:BiocGenerics':

    plotMA

Data Import

We will be importing counts data from the star-salmon pipeline and our metadata for the project which is hosted on Box. This code block also ensures data is properly ordered by sample id.

counts <- read_tsv("data/star-salmon/salmon.merged.gene_counts_length_scaled.tsv")
Rows: 61544 Columns: 31
── Column specification ────────────────────────────────────────────────────────
Delimiter: "\t"
chr  (2): gene_id, gene_name
dbl (29): LW001974, LW001975, LW001976, LW001977, LW001978, LW001979, LW0019...

ℹ Use `spec()` to retrieve the full column specification for this data.
ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
# Use first column (gene_id) for row names
counts = data.frame(counts, row.names = 1)
counts$Ensembl_ID = row.names(counts)
drop = c("Ensembl_ID","gene_name")
gene_names = counts[,drop]    
counts = counts[ , !(names(counts) %in% drop)]     # remove both columns

# Import metadata
sample_metadata <- read_csv("data/MECFS_RNAseq_metadata_CORRECTED.csv")
Rows: 29 Columns: 15
── Column specification ────────────────────────────────────────────────────────
Delimiter: ","
chr (12): RNA_Samples_id, DNA_Samples id, Gender, Relation, Affected, Study_...
dbl  (2): Family, RIN
lgl  (1): Replicate

ℹ Use `spec()` to retrieve the full column specification for this data.
ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
row.names(sample_metadata) <- sample_metadata$RNA_Samples_id
Warning: Setting row names on a tibble is deprecated.
# Order sample_metadata
sample_metadata <- arrange(sample_metadata, RNA_Samples_id)

# Check that data is ordered properly
all(rownames(sample_metadata) %in% colnames(counts))                   
[1] TRUE
all(rownames(sample_metadata) == colnames(counts))   
[1] TRUE

DESeq2 Analysis

sample_metadata$Family = factor(sample_metadata$Family)  
sample_metadata$Affected = factor(sample_metadata$Affected) 
sample_metadata$Batch = factor(sample_metadata$Batch)
sample_metadata$Gender = factor(sample_metadata$Gender)

# Account for Family later but batch is accounted for
dds <- DESeqDataSetFromMatrix(countData = round(counts), colData = sample_metadata, design = ~ Batch + Affected)
converting counts to integer mode
# Pre-filtering: Keep only rows that have atleast 10 reads total
keep = rowSums(counts(dds)) >= 10 
dds = dds[keep,]

# Run DESeq function
dds = DESeq(dds)
estimating size factors
estimating dispersions
gene-wise dispersion estimates
mean-dispersion relationship
final dispersion estimates
fitting model and testing
-- replacing outliers and refitting for 255 genes
-- DESeq argument 'minReplicatesForReplace' = 7 
-- original counts are preserved in counts(dds)
estimating dispersions
fitting model and testing
head(counts(dds, normalized=TRUE))
                       LW001974    LW001975     LW001976     LW001977
ENSG00000000003.15     6.283344     2.05296     7.223942     4.264822
ENSG00000000419.14   921.557182  1043.92997   850.017210   859.361676
ENSG00000000457.14  1114.246411   746.25082   829.549373   916.936776
ENSG00000000460.17   234.578192   189.89876   193.842452   328.391311
ENSG00000000938.13 12201.207645 11118.82929 15551.943765 17490.035904
ENSG00000000971.17    83.777926   130.36294   167.354663   197.248027
                       LW001978    LW001979     LW001980    LW001981
ENSG00000000003.15     3.565091    14.47998     4.573315    10.46587
ENSG00000000419.14   910.286661   866.16626   868.015180  1118.80153
ENSG00000000457.14  1100.424867   971.47523  1048.203789  1003.67696
ENSG00000000460.17   294.714219   276.43604   185.676587   252.22747
ENSG00000000938.13 10116.540921 10099.13001 18749.676681 21708.30816
ENSG00000000971.17   553.777525   143.48347   222.263107   216.64352
                      LW001982     LW001983     LW001984     LW001985
ENSG00000000003.15    17.45822     6.161279     5.718447     9.434676
ENSG00000000419.14   979.40627  1059.740056   924.754609   919.356806
ENSG00000000457.14  1104.23256   635.844033   901.880820   939.274457
ENSG00000000460.17   374.47887   144.173938   303.894624   263.122644
ENSG00000000938.13 19973.95218 23219.397520 19682.078435 13836.477178
ENSG00000000971.17   107.36807    27.109629    86.593629   116.361010
                     LW001986     LW001987    LW001988    LW001989     LW001990
ENSG00000000003.15    14.3010     8.261848    20.80204    11.32375     7.592455
ENSG00000000419.14   894.8338   840.642993   896.56804   949.93645   832.458476
ENSG00000000457.14  1046.6967   747.008720   897.60814   859.34649  1079.755586
ENSG00000000460.17   305.7689   232.708707   200.73971   223.95853   264.651294
ENSG00000000938.13 14919.3442 14147.037031 13752.23045 14215.07557 13223.345284
ENSG00000000971.17   222.6869   227.200809   160.17573   163.56522   143.172011
                       LW001991    LW001992     LW001993    LW001994
ENSG00000000003.15     5.130748    3.925784     7.688938    12.43332
ENSG00000000419.14  1002.206201  917.324885   997.639691   920.06541
ENSG00000000457.14   903.866855 1092.676575   897.683498   885.63469
ENSG00000000460.17   217.201685  378.183869   149.934289   273.53296
ENSG00000000938.13 14667.099624 8978.268242 13184.606244 15375.23032
ENSG00000000971.17   149.646830  294.433808   152.817641   124.33316
                       LW001995    LW001996    LW001997   LW001998     LW001999
ENSG00000000003.15     4.865262    13.74314    6.723075   11.82344     3.302019
ENSG00000000419.14  1119.010269   992.12394  808.113622 1212.74707   893.746405
ENSG00000000457.14   904.938740   897.23081  935.852048  728.83058   989.504949
ENSG00000000460.17   515.717776   293.84146  404.729118  143.57034   159.597572
ENSG00000000938.13 15497.481354 14288.28620 9146.071308 8941.89828 16707.114147
ENSG00000000971.17   229.478193   126.96045  208.415327  369.06021   184.913049
                     LW002000    LW002001     LW002080
ENSG00000000003.15   10.49324     9.01276     4.661212
ENSG00000000419.14 1437.57367   736.47124   918.258773
ENSG00000000457.14 1143.76299   987.54098  1041.780892
ENSG00000000460.17  339.71860   350.21010   205.093330
ENSG00000000938.13 8890.39630 10409.73770 12261.318282
ENSG00000000971.17  247.90276   133.90386   209.754542
resultsNames(dds)
[1] "Intercept"          "Batch_B2_vs_B1"     "Batch_B3_vs_B1"    
[4] "Affected_Yes_vs_No"
# Normalize gene counts for differences in seq. depth/global differences
counts_norm = counts(dds, normalized=TRUE)

Data transformation and visualization

Perform count data transformation by variance stabilizing transformation (vst) on normalized counts.

vsd = vst(dds, blind=FALSE) 

Batch correction, transformation and plotting

library(limma)
counts_vst = assay(vsd)
write.csv(counts_vst, file="output/counts_vst.csv")
mm = model.matrix(~ Family + Affected, colData(vsd))

counts_vst_limma = limma::removeBatchEffect(counts_vst, batch=vsd$Batch, design=mm)
Coefficients not estimable: batch2 
Warning: Partial NA coefficients for 29630 probe(s)
write.csv(counts_vst_limma, file="output/counts_vst_limma.csv")

vsd_limma = vsd
assay(vsd_limma) = counts_vst_limma

Sample distances heatmap

sampleDists = dist(t(assay(vsd_limma)))
sampleDistMatrix = as.matrix(sampleDists) 
rownames(sampleDistMatrix) = paste(vsd_limma$Batch, vsd_limma$Family, sep=" | ") 
colnames(sampleDistMatrix) = paste(vsd_limma$RNA_Samples_id, vsd_limma$Family, sep=" | ") 
colors = colorRampPalette(rev(brewer.pal(9, "Blues")))(255) 

pheatmap(sampleDistMatrix, clustering_distance_rows=sampleDists, clustering_distance_cols=sampleDists, col=colors)

Principal Components Analysis

pcaData = plotPCA(vsd, intgroup=c("Batch", "Family", "Affected"), returnData=TRUE) 
percentVar = round(100 * attr(pcaData, "percentVar")) 

ggplot(pcaData, aes(PC1, PC2, shape=factor(Batch), color=factor(Affected)))  + 
  geom_point(size=5) + xlab(paste0("PC1: ",percentVar[1],"% variance")) + ylab(paste0("PC2: ",percentVar[2],"% variance")) + coord_fixed()

Heatmap of top 50 & top 100 genes

This is a heatmap for 50 genes with the highest variance across samples

topVarGenes = head(order(-rowVars(assay(vsd))),50)
mat = assay(vsd_limma)[ topVarGenes, ]
mat = mat - rowMeans(mat)
df = as.data.frame(colData(vsd)[,c("Batch", "Affected")])
pheatmap(mat, annotation_col=df)

library(genefilter)
topVarGenes = head(order(-rowVars(assay(vsd_limma))),100)
mat = assay(vsd_limma)[ topVarGenes, ]
mat = mat - rowMeans(mat)
df = as.data.frame(colData(vsd_limma)[,c("Batch", "Family", "Affected")])
pheatmap(mat, annotation_col=df)

Comparison/Contrast of Affected_Yes_vs_No

resultsNames(dds)
[1] "Intercept"          "Batch_B2_vs_B1"     "Batch_B3_vs_B1"    
[4] "Affected_Yes_vs_No"
res_aff_vs_unaff = results(dds, contrast=c("Affected", "Yes", "No"))
res_aff_vs_unaff= res_aff_vs_unaff[order(res_aff_vs_unaff$padj),]
head(res_aff_vs_unaff)
log2 fold change (MLE): Affected Yes vs No 
Wald test p-value: Affected Yes vs No 
DataFrame with 6 rows and 6 columns
                   baseMean log2FoldChange     lfcSE      stat      pvalue
                  <numeric>      <numeric> <numeric> <numeric>   <numeric>
ENSG00000254732.2  15.41114       -6.56851   1.12004  -5.86456 4.50328e-09
ENSG00000288686.2   1.69816      -23.95419   4.03898  -5.93075 3.01545e-09
ENSG00000288709.1  36.98534       22.99964   4.01366   5.73034 1.00227e-08
ENSG00000259132.1   5.82705      -22.39567   4.01715  -5.57501 2.47518e-08
ENSG00000275954.5  15.46925       16.20377   2.89554   5.59610 2.19221e-08
ENSG00000269693.1  13.32383      -21.93542   4.01715  -5.46045 4.74928e-08
                         padj
                    <numeric>
ENSG00000254732.2 6.63379e-05
ENSG00000288686.2 6.63379e-05
ENSG00000288709.1 9.84295e-05
ENSG00000259132.1 1.45848e-04
ENSG00000275954.5 1.45848e-04
ENSG00000269693.1 2.33206e-04
summary(res_aff_vs_unaff)

out of 29624 with nonzero total read count
adjusted p-value < 0.1
LFC > 0 (up)       : 34, 0.11%
LFC < 0 (down)     : 30, 0.1%
outliers [1]       : 162, 0.55%
low counts [2]     : 6, 0.02%
(mean count < 0)
[1] see 'cooksCutoff' argument of ?results
[2] see 'independentFiltering' argument of ?results
write.csv(res_aff_vs_unaff, file="output/res_aff_vs_unaff.csv")      
res_aff_vs_unaff_df = as.data.frame(res_aff_vs_unaff)
res_aff_vs_unaff_05 = subset(res_aff_vs_unaff_df, padj < 0.05)                             
library(pheatmap)
topgenes_aff_vs_unaff_05 = head(rownames(res_aff_vs_unaff_05),50)
topgenes_aff_vs_unaff_05
 [1] "ENSG00000254732.2"  "ENSG00000288686.2"  "ENSG00000288709.1" 
 [4] "ENSG00000259132.1"  "ENSG00000275954.5"  "ENSG00000269693.1" 
 [7] "ENSG00000142539.9"  "ENSG00000284554.2"  "ENSG00000285952.1" 
[10] "ENSG00000285505.1"  "ENSG00000289694.1"  "ENSG00000206737.1" 
[13] "ENSG00000174807.4"  "ENSG00000206047.3"  "ENSG00000224610.2" 
[16] "ENSG00000102271.14" "ENSG00000211611.2"  "ENSG00000185760.18"
[19] "ENSG00000207513.1"  "ENSG00000117461.15" "ENSG00000186765.12"
[22] "ENSG00000243926.3"  "ENSG00000133169.6"  "ENSG00000175267.15"
[25] "ENSG00000176083.18" "ENSG00000177947.15" "ENSG00000173114.13"
[28] "ENSG00000172554.12" "ENSG00000171227.7"  "ENSG00000273026.1" 
[31] "ENSG00000144290.17" "ENSG00000175592.9"  "ENSG00000182853.12"
[34] "ENSG00000066382.17" "ENSG00000260790.1"  "ENSG00000266405.3" 
[37] "ENSG00000265337.1"  "ENSG00000105889.16" "ENSG00000075240.17"
topgenes_aff_vs_unaff_05 = assay(vsd_limma)[topgenes_aff_vs_unaff_05,] 
topgenes_aff_vs_unaff_05 = topgenes_aff_vs_unaff_05 - rowMeans(topgenes_aff_vs_unaff_05)
df = as.data.frame(colData(vsd_limma)[,c("Batch", "Family", "Affected")])
png("output/heatmap_res_aff_vs_unaff_05_top-50.png", width = 1024, height = 768)
pheatmap(topgenes_aff_vs_unaff_05, annotation_col=df)
dev.off()
quartz_off_screen 
                3 
res_aff_vs_unaff_df_genename = res_aff_vs_unaff_df
res_aff_vs_unaff_df_genename$Ensembl_ID = row.names(res_aff_vs_unaff_df)
res_aff_vs_unaff_df_genename = merge(x=res_aff_vs_unaff_df_genename, y=gene_names, by.x ="Ensembl_ID", by.y="Ensembl_ID", all.x=T)
res_aff_vs_unaff_df_genename = res_aff_vs_unaff_df_genename[,c(dim(res_aff_vs_unaff_df_genename)[2],1:dim(res_aff_vs_unaff_df_genename)[2]-1)]
res_aff_vs_unaff_df_genename = res_aff_vs_unaff_df_genename[order(res_aff_vs_unaff_df_genename[,"padj"]),]
write.csv(res_aff_vs_unaff_df_genename,file="output/res_aff_vs_unaff_genename.csv" )
res_aff_vs_unaff_df_genename_05= subset(res_aff_vs_unaff_df_genename, padj < 0.05)                   
res_aff_vs_unaff_df_genename_05 = res_aff_vs_unaff_df_genename_05[order(res_aff_vs_unaff_df_genename_05$padj),]
head(res_aff_vs_unaff_df_genename_05)
            gene_name        Ensembl_ID  baseMean log2FoldChange    lfcSE
21945 ENSG00000254732 ENSG00000254732.2 15.411137      -6.568512 1.120035
28975            XGY2 ENSG00000288686.2  1.698160     -23.954191 4.038978
28986            F8A2 ENSG00000288709.1 36.985344      22.999636 4.013657
22852 ENSG00000259132 ENSG00000259132.1  5.827046     -22.395668 4.017154
26303         TBC1D3F ENSG00000275954.5 15.469251      16.203772 2.895545
24812 ENSG00000269693 ENSG00000269693.1 13.323831     -21.935422 4.017145
           stat       pvalue         padj
21945 -5.864559 4.503283e-09 6.633787e-05
28975 -5.930755 3.015449e-09 6.633787e-05
28986  5.730344 1.002269e-08 9.842949e-05
22852 -5.575008 2.475181e-08 1.458476e-04
26303  5.596105 2.192215e-08 1.458476e-04
24812 -5.460450 4.749285e-08 2.332057e-04
summary(res_aff_vs_unaff_df_genename_05)
  gene_name          Ensembl_ID           baseMean         log2FoldChange    
 Length:39          Length:39          Min.   :   0.2817   Min.   :-23.9542  
 Class :character   Class :character   1st Qu.:   5.8478   1st Qu.: -4.8884  
 Mode  :character   Mode  :character   Median :  17.5186   Median : -0.9911  
                                       Mean   : 135.0504   Mean   : -0.9888  
                                       3rd Qu.: 119.4631   3rd Qu.:  2.3820  
                                       Max.   :1491.3926   Max.   : 22.9996  
     lfcSE             stat             pvalue               padj          
 Min.   :0.1447   Min.   :-5.9308   Min.   :3.020e-09   Min.   :6.634e-05  
 1st Qu.:0.4489   1st Qu.:-4.6822   1st Qu.:1.060e-07   1st Qu.:2.870e-04  
 Median :1.0105   Median :-4.0433   Median :3.780e-06   Median :5.568e-03  
 Mean   :1.5674   Mean   :-0.3891   Mean   :1.374e-05   Mean   :1.270e-02  
 3rd Qu.:2.6165   3rd Qu.: 4.4883   3rd Qu.:2.492e-05   3rd Qu.:2.481e-02  
 Max.   :4.0402   Max.   : 5.7303   Max.   :5.813e-05   Max.   :4.391e-02  
write.csv(res_aff_vs_unaff_df_genename_05, file="output/res_aff_vs_unaff_df_genename_05.csv")

sessionInfo()
R version 4.1.1 (2021-08-10)
Platform: x86_64-apple-darwin17.0 (64-bit)
Running under: macOS Big Sur 10.16

Matrix products: default
BLAS:   /Library/Frameworks/R.framework/Versions/4.1/Resources/lib/libRblas.0.dylib
LAPACK: /Library/Frameworks/R.framework/Versions/4.1/Resources/lib/libRlapack.dylib

locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8

attached base packages:
[1] stats4    stats     graphics  grDevices utils     datasets  methods  
[8] base     

other attached packages:
 [1] limma_3.50.3                genefilter_1.76.0          
 [3] pheatmap_1.0.12             RColorBrewer_1.1-3         
 [5] DESeq2_1.34.0               SummarizedExperiment_1.24.0
 [7] Biobase_2.54.0              MatrixGenerics_1.6.0       
 [9] matrixStats_1.0.0           GenomicRanges_1.46.1       
[11] GenomeInfoDb_1.30.1         IRanges_2.28.0             
[13] S4Vectors_0.32.4            BiocGenerics_0.40.0        
[15] lubridate_1.9.2             forcats_1.0.0              
[17] stringr_1.5.0               dplyr_1.1.2                
[19] purrr_1.0.1                 readr_2.1.4                
[21] tidyr_1.3.0                 tibble_3.2.1               
[23] ggplot2_3.4.2               tidyverse_2.0.0            
[25] workflowr_1.7.0            

loaded via a namespace (and not attached):
 [1] bitops_1.0-7           fs_1.6.2               bit64_4.0.5           
 [4] httr_1.4.6             rprojroot_2.0.3        tools_4.1.1           
 [7] bslib_0.5.0            utf8_1.2.3             R6_2.5.1              
[10] DBI_1.1.3              colorspace_2.1-0       withr_2.5.0           
[13] tidyselect_1.2.0       processx_3.8.1         bit_4.0.5             
[16] compiler_4.1.1         git2r_0.32.0           cli_3.6.1             
[19] DelayedArray_0.20.0    labeling_0.4.2         sass_0.4.6            
[22] scales_1.2.1           callr_3.7.3            digest_0.6.31         
[25] rmarkdown_2.22         XVector_0.34.0         pkgconfig_2.0.3       
[28] htmltools_0.5.5        highr_0.10             fastmap_1.1.1         
[31] rlang_1.1.1            rstudioapi_0.14        RSQLite_2.3.1         
[34] farver_2.1.1           jquerylib_0.1.4        generics_0.1.3        
[37] jsonlite_1.8.5         vroom_1.6.3            BiocParallel_1.28.3   
[40] RCurl_1.98-1.12        magrittr_2.0.3         GenomeInfoDbData_1.2.7
[43] Matrix_1.5-4.1         Rcpp_1.0.10            munsell_0.5.0         
[46] fansi_1.0.4            lifecycle_1.0.3        stringi_1.7.12        
[49] whisker_0.4.1          yaml_2.3.7             zlibbioc_1.40.0       
[52] grid_4.1.1             blob_1.2.4             parallel_4.1.1        
[55] promises_1.2.0.1       crayon_1.5.2           lattice_0.21-8        
[58] splines_4.1.1          Biostrings_2.62.0      annotate_1.72.0       
[61] hms_1.1.3              KEGGREST_1.34.0        locfit_1.5-9.8        
[64] knitr_1.43             ps_1.7.5               pillar_1.9.0          
[67] geneplotter_1.72.0     XML_3.99-0.14          glue_1.6.2            
[70] evaluate_0.21          getPass_0.2-2          png_0.1-8             
[73] vctrs_0.6.3            tzdb_0.4.0             httpuv_1.6.11         
[76] gtable_0.3.3           cachem_1.0.8           xfun_0.39             
[79] xtable_1.8-4           later_1.3.1            survival_3.5-5        
[82] AnnotationDbi_1.56.2   memoise_2.0.1          timechange_0.2.0