如何从 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
加入 treatment
和 control
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
准备好你的coldata
table
请记住,这只是一个 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
我有两个数据集,每个数据集都具有以下形式:
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
加入 treatment
和 control
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
准备好你的coldata
table
请记住,这只是一个 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