RNA-seq 差异分析的点点滴滴(2)

alt

引言

本系列[1]将开展全新的转录组分析专栏,主要针对使用DESeq2时可能出现的问题和方法进行展开。

Tximeta:自动导入并附加元数据

Bioconductor 家族中的 tximeta 包,在 tximport 的基础上进行了扩展,不仅保留了原有功能,还增加了一项新特性:能够自动为常用的转录组数据(包括人类和小鼠的 GENCODE、Ensembl、RefSeq)添加注释元数据。该包生成的 SummarizedExperiment 对象可以便捷地通过 DESeqDataSet 函数导入到 DESeq2 中,如下所示:

coldata <- samples
coldata$files <- files
coldata$names <- coldata$run

library("tximeta")
se <- tximeta(coldata)
ddsTxi <- DESeqDataSet(se, design = ~ condition)

这个 ddsTxi 对象接下来可以在分析流程中作为 dds 对象使用。如果 tximeta 能够识别出参考转录组是预设的几种之一,并且具有预先计算好的哈希校验和,那么 dds 对象中的 rowRanges 将会被自动填充。

计数矩阵输入

另外,如果你已经有了从其他来源准备好的读数计数矩阵,可以使用 DESeqDataSetFromMatrix 函数。快速从比对文件生成计数矩阵的另一种方法是使用 Rsubread 包中的 featureCounts 函数。使用 DESeqDataSetFromMatrix 时,用户需要提供计数矩阵、样本信息(计数矩阵的列)以 DataFrame 或 data.frame 的形式,以及设计公式。

为了展示如何使用 DESeqDataSetFromMatrix,将从 pasilla 包中导入计数数据。导入一个计数矩阵,并将其命名为 cts,同时导入样本信息表,并将其命名为 coldata。在后续部分,会描述如何从例如 featureCounts 输出中提取这些数据对象。

library("pasilla")
pasCts <- system.file("extdata",
                      "pasilla_gene_counts.tsv",
                      package="pasilla", mustWork=TRUE)
pasAnno <- system.file("extdata",
                       "pasilla_sample_annotation.csv",
                       package="pasilla", mustWork=TRUE)
cts <- as.matrix(read.csv(pasCts,sep="\t",row.names="gene_id"))
coldata <- read.csv(pasAnno, row.names=1)
coldata <- coldata[,c("condition","type")]
coldata$condition <- factor(coldata$condition)
coldata$type <- factor(coldata$type)

检查计数矩阵和列数据,看看它们在样本顺序方面是否一致。

head(cts,2)

##             untreated1 untreated2 untreated3 untreated4 treated1 treated2
## FBgn0000003          0          0          0          0        0        0
## FBgn0000008         92        161         76         70      140       88
##             treated3
## FBgn0000003        1
## FBgn0000008       70

coldata

##              condition        type
## treated1fb     treated single-read
## treated2fb     treated  paired-end
## treated3fb     treated  paired-end
## untreated1fb untreated single-read
## untreated2fb untreated single-read
## untreated3fb untreated  paired-end
## untreated4fb untreated  paired-end

请留意,这些数据的顺序与样本的顺序并不一致!

非常重要的一点是,计数矩阵的列顺序和样本信息(列数据的行)必须匹配。DESeq2 不会自动推断计数矩阵的哪一列对应于列数据的哪一行,这些信息在提供给 DESeq2 时必须是一致排序的。

由于它们没有按照正确的顺序排列,需要对其中一个进行重新排序,以确保它们在样本顺序上是一致的(如果不这样做,后续的操作将会出现错误)。此外,还需要将 coldata 的行名中的 "fb" 删除,以保持命名的一致性。

rownames(coldata) <- sub("fb""", rownames(coldata))
all(rownames(coldata) %in% colnames(cts))

## [1] TRUE

all(rownames(coldata) == colnames(cts))

## [1] FALSE

cts <- cts[, rownames(coldata)]
all(rownames(coldata) == colnames(cts))

## [1] TRUE

如果您之前使用了 Rsubread 包中的 featureCounts 函数(Liao, Smyth, 和 Shi 2013),可以直接从该函数输出的列表中的 "counts" 项获取读数计数矩阵。通常情况下,计数矩阵和样本信息可以通过 R 基础函数如 read.csv 或 read.delim 从文本文件中导入。对于 htseq-count 文件,请参阅下面的专门输入函数。

拥有计数矩阵 cts 和样本信息 coldata 后,就可以构建一个 DESeqDataSet 对象:

library("DESeq2")
dds <- DESeqDataSetFromMatrix(countData = cts,
                              colData = coldata,
                              design = ~ condition)
dds

## class: DESeqDataSet 
## dim: 14599 7 
## metadata(1): version
## assays(1): counts
## rownames(14599): FBgn0000003 FBgn0000008 ... FBgn0261574 FBgn0261575
## rowData names(0):
## colnames(7): treated1 treated2 ... untreated3 untreated4
## colData names(2): condition type

如果您拥有额外的特征数据,可以通过将这些数据添加到新创建对象的元数据列中,进而将它们整合到 DESeqDataSet 中。(此处为了演示目的添加了一些重复的数据,实际上基因名称已经作为 dds 的行名存在了。)

featureData <- data.frame(gene=rownames(cts))
mcols(dds) <- DataFrame(mcols(dds), featureData)
mcols(dds)

## DataFrame with 14599 rows and 1 column
##                    gene
##             <character>
## FBgn0000003 FBgn0000003
## FBgn0000008 FBgn0000008
## FBgn0000014 FBgn0000014
## FBgn0000015 FBgn0000015
## FBgn0000017 FBgn0000017
## ...                 ...
## FBgn0261571 FBgn0261571
## FBgn0261572 FBgn0261572
## FBgn0261573 FBgn0261573
## FBgn0261574 FBgn0261574
## FBgn0261575 FBgn0261575

htseq-count 数据输入

如果您之前使用了 HTSeq python 包中的 htseq-count 工具,那么可以通过 DESeqDataSetFromHTSeqCount 函数来处理数据。首先,您需要设置一个变量,指向存放 htseq-count 输出文件的目录。

directory <- "/path/to/your/files/"

但是,仅出于演示目的,以下代码行指向 pasilla 包的演示 htseq-count 输出文件包的目录。

directory <- system.file("extdata", package="pasilla",
                         mustWork=TRUE)

通过 list.files 函数来指定需要导入的文件,并利用 grep 函数筛选出包含 "treated" 字符串的文件。接着,使用 sub 函数对样本文件名进行拆分,以获取样本的条件状态;或者,您也可以选择使用 read.table 函数直接导入一个包含表型信息的表格。

sampleFiles <- grep("treated",list.files(directory),value=TRUE)
sampleCondition <- sub("(.*treated).*","\\1",sampleFiles)
sampleTable <- data.frame(sampleName = sampleFiles,
                          fileName = sampleFiles,
                          condition = sampleCondition)
sampleTable$condition <- factor(sampleTable$condition)

然后使用以下函数构建 DESeqDataSet:

library("DESeq2")
ddsHTSeq <- DESeqDataSetFromHTSeqCount(sampleTable = sampleTable,
                                       directory = directory,
                                       design= ~ condition)
ddsHTSeq

## class: DESeqDataSet 
## dim: 70463 7 
## metadata(1): version
## assays(1): counts
## rownames(70463): FBgn0000003:001 FBgn0000008:001 ... FBgn0261575:001
##   FBgn0261575:002
## rowData names(0):
## colnames(7): treated1fb.txt treated2fb.txt ... untreated3fb.txt
##   untreated4fb.txt
## colData names(1): condition
Reference
[1]

Source: https://bioconductor.org/packages/release/bioc/vignettes/DESeq2/inst/doc/DESeq2.html

本文由 mdnice 多平台发布

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/14750.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Pycharm PyQt5 环境搭建创建第一个Hello程序

第一步: 创建Pycharm项目,下载包: pip install PyQt5 -i https://pypi.tuna.tsinghua.edu.cn/simple/pip install PyQt5-tools -i https://pypi.tuna.tsinghua.edu.cn/simple/下载好了之后,可以看到相应包: PyQt5:PyQt5是一套Python绑定Digia QT5应用的框架。Qt库是最…

安装luasocket模块时提示“sudo: luarocks:找不到命令“问题,该如何解决?

大家好&#xff0c;我是袁庭新。分享一个我在使用luarocks来安装luarocks模块报错的解决方法。 在Unix系统中安装LuaRocks。本文我以CentOS 7.x系统为例&#xff0c;来讲解如何安装LuaRocks。 $ cd /opt $ wget https://luarocks.org/releases/luarocks-3.11.1.tar.gz $ tar …

Axure安装步骤及免费替代方案

Axure作为一款强大的原型设计工具&#xff0c;因其丰富的功能而受到设计师的青睐。它包括动态面板、复杂表格编辑、协同设计和高保真原型设计等&#xff0c;这些功能可以简化复杂的设计流程&#xff0c;提高团队效率。本文将介绍Axure的安装方法&#xff0c;并探索一款新兴的Ax…

分布式数据库:架构、优势与实践应用

&#x1f4dd;个人主页&#x1f339;&#xff1a;一ge科研小菜鸡-CSDN博客 &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; 分布式数据库在现代信息技术中扮演着至关重要的角色&#xff0c;尤其在需要处理大规模数据和实现高可用性、可扩展性的应用中更是…

小试银河麒麟系统OCR软件

0 前言 今天在国产电脑上办公&#xff0c;需要从一些PDF文件中复制文字内容&#xff0c;但是这些PDF文件是图片转换生成的&#xff0c;不支持文字选择和复制&#xff0c;除了手工输入&#xff0c;我们还可以使用OCR。 1 什么是OCR OCR &#xff08;Optical Character Recogni…

np.zeros_like奇怪的bug

import numpy as np aa np.array([[1,2,3],[2,3,3]]) cc np.random.randn(2,3) print(aa) print(cc)bb np.zeros_like(aa) print(bb)for i in range(bb.shape[0]):for j in range(bb.shape[1]):bb[i,j] cc[i,j]print(bb)结果如下 这里发现这个bb的结果是没有赋值的 正确做…

C++(Qt)软件调试---内存泄漏分析工具MTuner (25)

C(Qt)软件调试—内存泄漏分析工具MTuner &#xff08;25&#xff09; 文章目录 C(Qt)软件调试---内存泄漏分析工具MTuner &#xff08;25&#xff09;[toc]1、概述&#x1f41c;2、下载MTuner&#x1fab2;3、使用MTuner分析qt程序内存泄漏&#x1f9a7;4、相关地址&#x1f41…

apk反编译修改教程系列-----apk应用反编译中AndroidManifest.xml详细代码释义解析 包含各种权限 代码含义

在反编译apk应用中。需要增加或者减少有些apk功能或者权限类的修改。其中大多都在于 AndroidManifest.xml文件中。了解AndroidManifest.xml其中每串代码代表的含义对修改apk有着至关重要的作用。 通过博文了解💝💝💝💝 1💝💝💝💝----AndroidManifest.xml中代…

项目功能--运营数据统计

一、需求分析 通过运营数据统计可以展示出体检机构的运营情况&#xff0c;包括会员数据、预约到诊数据、热门套餐等信息。我们要通过一个表格的形式来展示这些运营数据。如下图&#xff1a; 二、代码实现 实现步骤&#xff1a; 步骤一&#xff1a;定义数据模型&#xff0c;通过…

电子制造行业Top5贴片机品牌

在电子制造业的快速发展中&#xff0c;SMT&#xff08;Surface Mount Technology&#xff09;表面贴装技术扮演着至关重要的角色。贴片机作为SMT生产线的核心设备&#xff0c;其性能直接关系到整个生产线的效率和产品质量。 SPEA作为全球领先的自动化测试设备服务商&#xff0…

【maven踩坑】一个坑 junit报错 但真正导致这个的不是junit的原因

目录 事件起因环境和工具操作过程解决办法结束语 事件起因 报错一&#xff1a; Internal Error occurred. org.junit.platform.commons.JUnitException: TestEngine with ID junit-vintage failed to discover tests报错二&#xff1a; Internal Error occurred. org.junit.pl…

拷贝和浅拷贝的区别,以及对于循环引用如何处理深拷贝

深拷贝和浅拷贝的区别&#xff0c;以及对于循环引用如何处理深拷贝 浅拷贝仅拷贝对象的第一层属性值&#xff0c;对于基本数据类型&#xff0c;会复制其值&#xff1b;对于引用数据类型&#xff0c;仅复制引用地址而不复制实际的对象内容。浅拷贝后的新对象与原对象中的引用类…

gitlab与jenkins

一 gitlab代码仓库 1.1 gitlab简介 GitLab 是一个用于仓库管理系统的开源项目&#xff0c;使用 Git 作为代码管理工具&#xff0c;并在此基础上搭建起来的 web 服务。GitLab 具有很多功能&#xff0c;比如代码托管、持续集成和持续部署&#xff08;CI/CD&#xff09;、问题跟踪…

LeetCode 86.分隔链表

题目&#xff1a; 给你一个链表的头节点 head 和一个特定值 x &#xff0c;请你对链表进行分隔&#xff0c;使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。 你应当 保留 两个分区中每个节点的初始相对位置。 思路&#xff1a; 代码&#xff1a; /*** Definiti…

Qt/C++ 开源控件 可折叠的标签管理控件

在 Qt 开发中&#xff0c;许多项目需要处理标签管理功能&#xff0c;例如分类管理、标签筛选等需求。本文将分享如何利用 Qt/C 实现一个具备动态增删标签、展开折叠功能的控件。此控件由 TagWindow 和 TagItemWidget 两个类组成&#xff0c;前者负责整个标签管理窗口的布局与逻…

Jmeter中的监听器(三)

9--断言结果 功能特点 显示断言结果&#xff1a;列出所有断言的结果&#xff0c;包括通过和失败的断言。详细信息&#xff1a;显示每个断言的详细信息&#xff0c;如断言类型、实际结果和期望结果。错误信息&#xff1a;显示断言失败时的错误信息&#xff0c;帮助调试。颜色编…

七牛云上传图片成功,但是无法访问显示{error : document not found}

上传图片成功&#xff0c;但是访问不了的问题&#xff0c;直接把地址放进浏览器显示{error : document not found}&#xff0c;直接访问 DCNF 404是符合预期的&#xff0c;因为还没有去空间复制外链&#xff0c;要访问实际存在的资源才可以的. 配置区域和访问域名 设置没问题了…

虚拟与现实交融,线上元宇宙会议应用场景有哪些?

随着科技的飞速发展&#xff0c;元宇宙技术正逐渐渗透到我们生活的各个领域&#xff0c;为企业会议、学术会议、行业展会以及文化娱乐等带来了前所未有的变革。线上元宇宙会议打破了地域和物理空间的限制&#xff0c;让人们能够在虚拟世界中实现跨时空的交互与合作。本文将深入…

构建高效在线商店:Spring Boot框架应用

1 绪论 1.1 研究背景 当前社会各行业领域竞争压力非常大&#xff0c;随着当前时代的信息化&#xff0c;科学化发展&#xff0c;让社会各行业领域都争相使用新的信息技术&#xff0c;对行业内的各种相关数据进行科学化&#xff0c;规范化管理。这样的大环境让那些止步不前&#…

鸿蒙网络编程系列47-仓颉版UDP客户端

1. UDP通讯简介 本系列的第1篇文章《鸿蒙网络编程系列1-UDP通讯示例》中基于ArkTS语言在API 9的环境下演示了UDP通讯的基础用法&#xff0c;本文将使用仓颉语言在API 12的环境中实现类似的功能。这可能听起来有点不太现实&#xff0c;在ArkTS语言下可以利用kit.NetworkKit下的…