如何从 2 个数字向量创建 DESeqDataSetFromMatrix?

How to create DESeqDataSetFromMatrix from 2 vectors of numbers?

我有两个数据集,每个数据集都具有以下形式:

Gene1Name, 234
Gene2Name, 445
Gene3Name, 23
...
GeneNName, 554

两个数据集的基因名称都相同。第二列的数字是相应基因的表达计数。

我想对这些数据集进行差异基因表达分析。为此,我正在使用 DESeq 库。

要使用 DESeq 函数,需要创建一个对象

dds <- DESeqDataSetFromMatrix(countData=data, colData=meta, design=~sampletype)

对于我的情况,什么需要作为参数传递给 DESeqDataSetFromMatrix 函数?

你只需要连接两个向量并将其放入矩阵即可。

既然你说你的两个数据集包含两列,我假设第一列是基因名称,第二列是计数。您还提到名称相同。所以你可以这样做:

data <- cbind(x1[,2], x2[,2])
rownames(data) <- x1[,1]
colnames(data) <- c("sample1", "sample2")

meta <- data.frame(sampletype = c("A", "B"))

dds <- DESeqDataSetFromMatrix(countData=data, colData=meta, design=~sampletype)

我认为,如果您尝试遵循这个简单的示例,它至少可以帮助您解决实际问题。

我们必须从准备虚拟数据集开始(请阅读how to make a minimal reproducible example):

做一个treatment数据集:

library(tidyverse)

set.seed(56154455)

treatment <- data.frame(
  geneName = LETTERS,
  cts      = sample(0:1000, 26)
)

head(treatment)

#   geneName cts
# 1        A 834
# 2        B 860
# 3        C 950
# 4        D 302
# 5        E 979
# 6        F 159

做一个control数据集:

set.seed(56154455)

control   <- treatment[sample(1:26, 26), ]
control[, 1] <- treatment[, 1]

head(control)

#    geneName cts
# 3         A 950
# 23        B  41
# 15        C 889
# 20        D 629
# 14        E 398
# 4         F 302

通过 geneName

加入 treatmentcontrol
cts <- full_join(treatment, control, by = 'geneName') %>%
  rename('treatment' = cts.x, 'control' = cts.y) %>%
  column_to_rownames('geneName') %>%
  as.matrix

head(cts)

#   treatment control
# A       331     737
# B       914     676
# C       161     161
# D       592     769
# E       946      74
# F       813     314

准备好你的coldatatable

请记住,这只是一个 dummy 示例,因此您的 real coldata 可能包含任意数量的列,这反映了您的实验设计。但是,coldata中的行数必须等于实验数据中的列数(这里是cts)。请阅读documentation for SummarizedExperiment class, where you can find detailed explanation. Another great resource is the Rafa's book

coldata <- matrix(c("DMSO", "1xPBS"), dimnames = list(colnames(cts), 'treatment'))

coldata

#        treatment
# treatment "DMSO"   
# control   "1xPBS" 

最后,创建您的 DESeqDataSet:

dds <- DESeq2::DESeqDataSetFromMatrix(
  countData = cts, 
  colData   = coldata, 
  design    = ~treatment
  )

其中:

  • countData是你的实验数据,如上准备;
  • colData 是您的 coldata 矩阵,带有实验性元数据;
  • ~treatment 是公式,描述了您在实验中测试的实验模型。它可以是 ~ treatment + sex * age

dds

# class: DESeqDataSet 
# dim: 26 2 
# metadata(1): version
# assays(1): counts
# rownames(26): A B ... Y Z
# rowData names(0):
# colnames(2): treatment control
# colData names(1): treatment