利用TCseq包进行基因表达趋势分析

简介: TCseq包提供了一个统一的套件去处理不同时序类型的数据分析,可以应用于转录组或者像ATAC-seq,Chip-seq的表观基因组时序型数据分析。该包主要的集中于不同时间点的差异分析,时间趋势分析及可视化作图。

该包发布在Bioconductor上,可去网站下载详细文档:http://bioconductor.org/packages/release/bioc/html/TCseq.html

数据准备

该包提供了内置数据集,刚开始用可以参考着文档使用内置数据跑一遍走个流程,这里我拿自己的数据做个演示,需要准备三个文件:

  1. 基因表达矩阵文件(可以直接拿原始数据)

1baecb0a10e215cad99f58d6001a69a.png

  1. 分组文件(样品,时间点,分组三列)

c5a31507132699e080b62319563e004.png

  1. 基因的位置信息(染色体,起始及终止位点,基因id四列)

76b8b844116dd5c6e1319d55d660f94.png

OK,我们先输入数据

## 安装
BiocManager::install("TCseq")
library(TCseq)
# 位置信息文件
genomicIntervals <- read.delim('intervial.txt',stringsAsFactors = FALSE)
genomicIntervals$chr <- as.factor(genomicIntervals$chr)
## 表达量矩阵文件
count <- read.delim('count.txt',header = T,row.names = 1)
# as.integer 转换为整数型
countsTable <- count %>%  mutate(across(where(is.numeric), as.integer)) 
# or
#count1 <- apply(count, 2, as.integer)
rownames(countsTable) <- rownames(count)
##矩阵形式
countsTable <- as.matrix(countsTable)
# 分组文件
experiment <- read.delim('group.txt',header = T,stringsAsFactors = FALSE)
experiment$sampleid <- as.factor(experiment$sampleid)

提示:

  1. 位置信息文件可以直接根据gtf文件转换生成,这个应该不难。
  2. 另外,相应的数据类型要提前转换好,否则会报错,比如表达量文件需要先转换为整数型,再变为矩阵的形式,根据内置数据的格式调整就行了。

创建TCA对象

TCseq使用S4类TCA存储所有输入数据以进行后续分析。根据以上三个文件创造即可。

tca <- TCA(design = experiment, genomicFeature = genomicIntervals, counts = countsTable )
 tca
  ##############
  An object of class "TCA"
@design
  sampleid timepoint group
1       s1        0h     1
2       s2        0h     1
3       s3        0h     1
4       s4       24h     2
5       s5       24h     2
6       s6       24h     2
7       s7       48h     3
8       s8       48h     3
9       s9       48h     3
@counts
                    s1  s2  s3  s4  s5  s6  s7  s8  s9
ENSBTAG00000000005  60  58  70  64  60  74  53  55  50
ENSBTAG00000000008   0   0   0   1   0   1   2   0   0
ENSBTAG00000000009   0   1   3   0   1   0  11   9   9
ENSBTAG00000000010 341 300 341 170 216 214 150 236 199
ENSBTAG00000000011   4   2   3   5   3   1   6   2   3
29749 more rows ...
@genomicFeature
   chr     start       end                 id
1 chr1 100098899 100161382 ENSBTAG00000035710
2 chr1 100754351 100754458 ENSBTAG00000043293
3 chr1 101522743 101601659 ENSBTAG00000011139
4 chr1 101619573 101646742 ENSBTAG00000053582
5 chr1 101776678 101776956          MSTRG.445
29749 more rows ...
@clusterRes
An object of class "clust"

另一种创建的方式,是通过SummarizedExperiment对象:

suppressWarnings(library(SummarizedExperiment))
se <- SummarizedExperiment(assays=list(counts = countsTable), colData = experiment)
tca <- TCAFromSummarizedExperiment(se = se, genomicFeature = genomicIntervals)

现在已经基于这三个文件得到了TCA对象

差异分析

该包内置了我们常用的差异分析R包--edgeR,通过使用广义线性模型(GLM)方法去鉴定差异基因。

tca <- DBanalysis(tca)
## 我们也可以增添一些参数进行过滤
tca <- DBanalysis(tca, filter.type = "raw", filter.value = 10, samplePassfilter = 2)
#比如上述步骤保留具有两个或多个已读取样本的基因表达量超过10的基因组区域

提取差异分析结果

通过DBresult函数可以直接提取我们差异分析的结果,在通过$去查看各个组的内容。

DBres <- DBresult(tca, group1 = "0h", group2 = c("24h","48h"))
str(DBres, strict.width =  "cut")
head(DBres$`24hvs0h`)
############
GRanges object with 6 ranges and 4 metadata columns:
                     seqnames              ranges strand |     logFC      PValue         paj
                        <Rle>           <IRanges>  <Rle> | <numeric>   <numeric>   <numeric>
  ENSBTAG00000000005     chr1 100098899-100161382      * |  0.274010 1.35162e-01 2.81082e-01
  ENSBTAG00000000009     chr1 101522743-101601659      * | -1.501457 2.26674e-01 4.03419e-01
  ENSBTAG00000000010     chr1 101776678-101776956      * | -0.513593 3.36326e-06 3.80124e-05
  ENSBTAG00000000011     chr1   10231295-10543983      * |  0.198446 7.93039e-01 8.90540e-01
  ENSBTAG00000000012     chr1 102768932-102769966      * | -0.300941 5.04886e-03 2.18330e-02
  ENSBTAG00000000013     chr1 105069395-105069910      * |  0.140489 1.63446e-01 3.21469e-01
                                     id
                            <character>
  ENSBTAG00000000005 ENSBTAG00000035710
  ENSBTAG00000000009 ENSBTAG00000011139
  ENSBTAG00000000010          MSTRG.445
  ENSBTAG00000000011 ENSBTAG00000017753
  ENSBTAG00000000012 ENSBTAG00000048551
  ENSBTAG00000000013          MSTRG.449
  -------
  seqinfo: 206 sequences from an unspecified genome; no seqlengths

若只想提取满足显著差异的结果(一般abs(log2-fold > 2)且adjust p-value<0.05),只需要加上top.sig = TRUE函数即可。

## 显著差异
DBres.sig <- DBresult(tca, group1 = "0h", group2 = c("24h","48h"), top.sig = TRUE)
str(DBres.sig, strict.width =  "cut")
#############
Formal class 'CompressedGRangesList' [package "GenomicRanges"] with 5 slots
  ..@ unlistData     :Formal class 'GRanges' [package "GenomicRanges"] with 7 slots
  .. .. ..@ seqnames       :Formal class 'Rle' [package "S4Vectors"] with 4 slots
  .. .. .. .. ..@ values         : Factor w/ 206 levels "chr1","chr2",..: 1 10 13 14 17 18 20 2..
  .. .. .. .. ..@ lengths        : int [1:201] 3 4 4 3 2 5 3 1 2 1 ...
  .. .. .. .. ..@ elementMetadata: NULL
  .. .. .. .. ..@ metadata       : list()
  .. .. ..@ ranges         :Formal class 'IRanges' [package "IRanges"] with 6 slots
  .. .. .. .. ..@ start          : int [1:1229] 145972839 46061452 69196880 100837833 21979442 ..
  .. .. .. .. ..@ width          : int [1:1229] 4721 5497 115248 442874 5105 471 5943 145553 10..
  .. .. .. .. ..@ NAMES          : chr [1:1229] "ENSBTAG00000000425" "ENSBTAG00000000706" "ENS"..
  .. .. .. .. ..@ elementType    : chr "ANY"
  .. .. .. .. ..@ elementMetadata: NULL

时间趋势分析

接下来就到了趋势分析的换件了,为了检测数据的时序模式,TCseq包使用了非监督聚类的方法,首先通过聚类创建一个时程表,行为基因组区域信息,列为时间点,表中的数值可以选择标准化后的表达量值或者是基于初始时间点所有样品点的LogFC值,代码中通过value参数来调整,另外若设置filter = TRUE时候,将自动过滤在任何两个时间段都没有显著差异的基因组区域,结果通过tcTable函数进行查看

## 通过LogFC值
tca <- timecourseTable(tca, value = "FC", norm.method = "rpkm", filter = TRUE)
##通过标准化后的表达量
tca <- timecourseTable(tca, value = "expression", norm.method = "rpkm", filter = TRUE)
## 查看生成结果
t <- tcTable(tca)
head(t)
                             0h          24h          48h
ENSBTAG00000000425 0.0000000000  0.030165698 0.0075187827
ENSBTAG00000000706 2.6013480888 11.521986790 1.7768887654
ENSBTAG00000000936 0.0007283438  0.003506178 0.0003475789
ENSBTAG00000001325 0.0002585125  0.001290036 0.0001705818
ENSBTAG00000001687 0.3065966903  2.485377556 2.6233245852
ENSBTAG00000001745 0.2496824763  2.120932031 4.7101417152

聚类分析

两种聚类算法可供选择: hard clustering(包含hierachical,pam,kmeans) 及 soft clustering (fuzzy cmeans),算法的选择大家自己参考文献选择,这里就拿文档中cmeans算法进行分析聚类。

tca <- timeclust(tca, algo = "cm", k = 6, standardize = TRUE)
###################################################
p <- timeclustplot(tca, value = "z-score(RPKM)", cols = 3)

cdeca50778e40af523b0d1b03dfaf22.png

多个聚类

单个聚类作图:

## 聚类一作图
print(p[[1]])

6c9c5bd372ff77199afd7e406ead033.png

单个聚类

另外,若是想查看某个聚类有哪些基因参与,使用tca@clusterRes查看聚类结果即可,比如:

a <- as.data.frame(tca@clusterRes@cluster)
names(a) <- 'Cluster'
## 查看各个聚类中的基因数目
> table(a)
a
  1   2   3   4   5   6 
511 147 165 292 180 255 
##筛选 
Cluster1 <- subset(a,Cluster == 2)

OK,根据聚类的结果,挑选自己感兴趣的趋势接着下游GO\KEGG富集分析就行了。

该包的内容到这里基本结束了,有兴趣可以去查看源文档,比如一些函数中还提供了一些设置颜色等的参数,大家就自己看吧~~


相关文章
|
7月前
|
编解码 算法 数据挖掘
【数据挖掘】聚类趋势估计、簇数确定、质量测定等评估方法详解(图文解释 超详细)
【数据挖掘】聚类趋势估计、簇数确定、质量测定等评估方法详解(图文解释 超详细)
196 0
|
4月前
数据统计分析 — 统计学的几个概念
数据统计分析 — 统计学的几个概念
108 0
|
7月前
|
数据可视化 前端开发 数据挖掘
R语言对综合社会调查GSS数据进行自举法bootstrap统计推断、假设检验、探索性数据分析可视化|数据分享(上)
R语言对综合社会调查GSS数据进行自举法bootstrap统计推断、假设检验、探索性数据分析可视化|数据分享
|
5月前
|
数据采集 数据挖掘 数据处理
数据转换与聚合,Python的双刃剑!精准切割,深度挖掘,数据世界任你遨游!
【7月更文挑战第19天】Python的Pandas库是数据科学家处理数据的得力工具,它在数据转换和聚合上的功能强大。例如,使用Pandas的`to_datetime`函数能统一日期格式,而`groupby`配合`agg`则可按类别聚合数据,进行统计分析。通过这些方法,可以有效地清洗数据、提取关键信息,助力数据驱动的决策。
46 2
|
7月前
|
数据可视化 数据挖掘
数据分享|spss modeler用贝叶斯网络分析糯稻品种影响因素数据可视化
数据分享|spss modeler用贝叶斯网络分析糯稻品种影响因素数据可视化
|
7月前
|
算法
R语言实现 Copula 算法建模依赖性案例分析报告
R语言实现 Copula 算法建模依赖性案例分析报告
|
7月前
|
机器学习/深度学习 数据可视化 算法
数据代码分享|R语言用CHAID决策树分析花卉栽培影响因素数据可视化、误差分析
数据代码分享|R语言用CHAID决策树分析花卉栽培影响因素数据可视化、误差分析
|
7月前
|
前端开发 数据可视化 数据挖掘
R语言对综合社会调查GSS数据进行自举法bootstrap统计推断、假设检验、探索性数据分析可视化|数据分享(下)
R语言对综合社会调查GSS数据进行自举法bootstrap统计推断、假设检验、探索性数据分析可视化|数据分享
|
7月前
|
数据可视化 数据挖掘 定位技术
数据分享|R语言生态学种群空间点格局分析:聚类泊松点过程对植物、蚂蚁巢穴分布数据可视化
数据分享|R语言生态学种群空间点格局分析:聚类泊松点过程对植物、蚂蚁巢穴分布数据可视化
|
7月前
|
数据可视化 数据挖掘
R语言分段回归数据数据分析案例报告
R语言分段回归数据数据分析案例报告
下一篇
DataWorks