Как создать DESeqDataSetFromMatrix из 2 векторов чисел? - PullRequest
0 голосов
/ 15 мая 2019

У меня есть два набора данных, каждый из которых имеет форму:

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

Имена генов идентичны для каждого из 2 наборов данных. Числа во втором столбце являются счетчиками экспрессии для соответствующего гена.

Я хочу провести дифференциальный анализ экспрессии генов на этих наборах данных. Для этого я использую библиотеку DESeq .

Чтобы использовать функцию DESeq, нужно создать объект

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

В моем случае то, что необходимо передать в качестве аргументов в DESeqDataSetFromMatrix функция?

Ответы [ 2 ]

1 голос
/ 15 мая 2019

Думаю, если вы попытаетесь последовать этому простому примеру, это, по крайней мере, поможет вам решить вашу реальную проблему.

Мы должны начать с подготовки фиктивного набора данных (пожалуйста, прочитайте как создать минимальный воспроизводимый пример ):

Создать набор данных 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

Присоединяйтесь к treatment и control geneName

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 стол

Помните, это всего лишь пустышка * 1025Например, ваш реальный coldata может содержать любое количество столбцов, что отражает план вашего эксперимента .Однако количество строк в ваших coldata, должно быть равным количеству столбцов в ваших экспериментальных данных (здесь это cts).Пожалуйста, прочитайте документацию для класса SummarizedExperiment , где вы можете найти подробное объяснение.Еще один замечательный ресурс - книга Рафы

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
1 голос
/ 15 мая 2019

Вам просто нужно объединить два вектора и поместить их в матрицу.

Поскольку вы сказали, что ваши два набора данных содержат два столбца, я предполагаю, что первым является имя гена, а вторым считается число. Вы также упомянули, что имена совпадают. Так что вы можете сделать это:

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...