美文网首页科研信息学随笔-生活工作点滴
TCGA数据临床,表达,突变和甲基化联合分析

TCGA数据临床,表达,突变和甲基化联合分析

作者: 7aabdaa41cae | 来源:发表于2019-07-09 17:16 被阅读81次

介绍

TCGA,癌症基因组图谱,汇集许多肿瘤样本的多组学数据。

我们将讨论如何使用RTCGAToolbox 包获取的数据。说明该系统的大部分工作在于从存档中下载大量资源。工具箱包的插图描述了用于分析的高级实用程序; 在这里,我们将专注于数据协调和手动分析。

以下是直肠腺瘤中三种数据类型下载工作的说明:

library(ph525x)

firehose()

综合

我们使用了命令

library(RTCGAToolbox)

readData = getFirehoseData (dataset="READ", runDate="20150402",forceDownload = TRUE,

Clinic=TRUE, Mutation=TRUE, Methylation=TRUE, RNASeq2GeneNorm=TRUE)

这需要大约10分钟才能获得并节省良好的无线连接。对象的show方法打印

readData

## READ FirehoseData objectStandard run date: 20150402

## Analysis running date: 20160128

## Available data types:

## clinical: A data frame of phenotype data, dim: 171 x 22

## RNASeq2GeneNorm: A matrix of count or normalized data, dim: 20501 x 105

## Methylation: A list of FirehoseMethylationArray object(s), length: 2

## GISTIC: A FirehoseGISTIC for copy number data

## Mutation: A data.frame, dim: 22075 x 39

## To export data, use the 'getData' function.

并隐藏两种甲基化测定的维度。这些可以通过

> lapply(readData@Methylation, function(x) dim(x@DataMatrix))

[[1]]

[1] 27578 76

[[2]]

[1] 485577 109

临床数据的视图

对数据集的完整理解需要注意组装肿瘤“群组”的方法,包括建立疾病进展或死亡事件时间的共同时间来源,以及肿瘤取样和测定程序的细节。出于本课程的目的,我们假设我们可以有意义地组合我们检索到的所有数据。

选择临床参数

clin = getData(readData, "clinical")

names(clin)

## [1] "Composite Element REF"

## [2] "years_to_birth"

## [3] "vital_status"

## [4] "days_to_death"

## [5] "days_to_last_followup"

## [6] "primary_site_of_disease"

## [7] "neoplasm_diseasestage"

## [8] "pathology_T_stage"

## [9] "pathology_N_stage"

## [10] "pathology_M_stage"

## [11] "dcc_upload_date"

## [12] "gender"

## [13] "date_of_initial_pathologic_diagnosis"

## [14] "days_to_last_known_alive"

## [15] "radiation_therapy"

## [16] "histological_type"

## [17] "radiations_radiation_regimenindication"

## [18] "completeness_of_resection"

## [19] "number_of_lymph_nodes"

## [20] "race"

## [21] "ethnicity"

## [22] "batch_number"

疾病的严重程度将在病理学变量中指出。T分期是指肿瘤的大小和侵袭性,N分期是指各种淋巴结中存在癌细胞。

with(clin, table(pathology_T_stage, pathology_N_stage))

## pathology_N_stage

## pathology_T_stage n0 n1 n1a n1b n1c n2 n2a n2b nx

## t1 8 1 0 0 0 0 0 0 0

## t2 28 3 0 1 0 0 0 0 0

## t3 49 30 3 4 1 22 2 2 2

## t4 2 1 0 0 0 2 0 0 0

## t4a 1 1 0 0 0 1 0 5 0

## t4b 0 0 0 0 0 0 1 0 0

我们看到两种分期措施都存在差异。我们将减少T分期以避免小班级。

clin$t_stage = factor(substr(clin$pathology_T_stage,1,2))

table(clin$t_stage)

##

## t1 t2 t3 t4

## 9 32 115 14

定义生存时间

我们猜测,重要状态变量对应于最后一次跟进时的状态,并且最后一次跟进的日期是从诊断过程中的共同起源记录的。患者出现,肿瘤分级并分期,随后的日历开始。

以下Kaplan-Meier显示是粗略的健全性检查,显示肿瘤阶段1没有观察到事件,阶段2和阶3按照我们预期的前1000天左右排序,然后曲线交叉; 数据很稀疏。

library(survival)

ev = 1*(clin$vital == 1)

fut = as.numeric(clin$days_to_last_followup)

su = Surv(fut, ev)

plot(survfit(su~t_stage, data=clin), lwd=2, lty=1:4, xlim=c(0,2000))

ntab = table(clin$t_stage)

ns = paste("[n=", ntab, "]", sep="")

legend(100, .4, lty=1:4, lwd=2, legend=paste(levels(clin$t_stage), ns))

介绍突变数据

mut = getData(readData, "Mutation")

dim(mut)

## [1] 22075 39

table(mut$Variant_Classification)

##

## 3'UTR 5'Flank 5'UTR

## 11 3 14

## De_novo_Start_InFrame De_novo_Start_OutOfFrame Frame_Shift_Del

## 4 31 176

## Frame_Shift_Ins IGR In_Frame_Del

## 161 24 30

## In_Frame_Ins Intron Missense_Mutation

## 8 132 14767

## Nonsense_Mutation Nonstop_Mutation Read-through

## 1964 6 10

## RNA Silent Splice_Site

## 16 4675 43

让我们通过记录的错义或无义突变的数量来命令基因。

gt = table(mut$Hugo, mut$Variant_Classification)

mn = apply(gt[,12:13], 1, sum)

omn = order(mn, decreasing=TRUE)

gt[omn[1:20], c(12:13,17,18)]

##

## Missense_Mutation Nonsense_Mutation Silent Splice_Site

## TTN 79 8 20 0

## APC 9 65 0 1

## TP53 33 8 1 1

## KRAS 37 1 0 0

## MUC16 31 2 12 0

## SYNE1 21 2 6 0

## DNAH10 19 1 2 0

## DNAH5 18 2 2 0

## LRP1B 19 1 4 0

## ABCA13 17 0 1 0

## NEB 14 3 2 0

## ZFHX4 16 1 5 0

## AHNAK2 15 1 1 0

## FAT4 16 0 5 0

## HMCN1 14 2 1 0

## HYDIN 13 3 5 0

## PCLO 13 3 4 0

## PKHD1 16 0 0 0

## SACS 15 1 4 0

## DNAH11 12 2 4 0

KRAS和TP53在此列表中的事实给出了另一个粗略的理智检查。

多组学101:我们可以结合突变和临床数据吗?

这并不简单,因为不共享样本标识符。

clin[1:4,1:3]

## Composite Element REF years_to_birth vital_status

## tcga.af.2687 value 57 0

## tcga.af.2689 value 41 1

## tcga.af.2690 value 76 1

## tcga.af.2691 value 48 0

mut[1:4,c(1,16)]

## Hugo_Symbol Tumor_Sample_Barcode

## 1 OR5B12 TCGA-AG-3586-01A-02W-0831-10

## 2 KRT17 TCGA-AG-3586-01A-02W-0831-10

## 3 SLC10A4 TCGA-AG-3586-01A-02W-0831-10

## 4 C7orf58 TCGA-AG-3586-01A-02W-0831-10

我们猜测以下转换会为突变数据生成适当的标识符。

mid = tolower(substr(mut[,16],1,12))

mid = gsub("-", ".", mid)

mean(mid %in% rownames(clin))

## [1] 1

mut$sampid = mid

让我们简单总结每个人的总突变负担。

nmut = sapply(split(mut$sampid, mut$sampid),length)

nmut[1:4]

## tcga.af.2689 tcga.af.2691 tcga.af.2692 tcga.af.3400

## 64 73 45 33

length(nmut)

## [1] 69

dim(clin)

## [1] 171 23

我们看到并非所有具有临床数据的个体都进行了突变研究。我们将临床数据分组,并通过肿瘤阶段可视化突变计数的分布。

clinwmut = clin[names(nmut),]

clinwmut$nmut = nmut

with(clinwmut, boxplot(split(nmut, t_stage), log="y"))

表达数据

数据没有附带实验级元数据,但我们知道这是通过RSEM进行转录本丰度估计的illumina hiseq RNA测序。如何将数据转换为基因水平需要进行调查。

rnaseq = getData(readData, "RNASeq2GeneNorm")

rnaseq[1:4,1:4]

## TCGA-AF-2687-01A-02R-1736-07 TCGA-AF-2689-11A-01R-A32Z-07

## A1BG 20.1873 43.4263

## A1CF 51.0856 313.3531

## A2BP1 0.4257 18.9911

## A2LD1 90.2639 92.2611

## TCGA-AF-2690-01A-02R-1736-07 TCGA-AF-2691-11A-01R-A32Z-07

## A1BG 56.4619 35.9451

## A1CF 24.9913 218.1571

## A2BP1 0.9256 22.6758

## A2LD1 164.3365 113.6528

我们再次必须转换样本标识符字符串。

rid = tolower(substr(colnames(rnaseq),1,12))

rid = gsub("-", ".", rid)

mean(rid %in% rownames(clin))

## [1] 1

colnames(rnaseq) = rid

遗憾的是,突变和表达数据之间没有太多重叠。

intersect(rid,mid)

## [1] "tcga.af.2689" "tcga.af.2691" "tcga.af.2692" "tcga.af.3400"

## [5] "tcga.ag.3902"

我们注意到一些重复的转换标识符; 不清楚要保留哪个副本,所以我们放下第二个。

which(duplicated(colnames(rnaseq)))

## [1] 11 21 23 25 27 35 104

pairs(log2(rnaseq[101:200,c(10:11,20,21,22,23,50,55)]))

rnaseq = rnaseq[,-which(duplicated(colnames(rnaseq)))]

让我们创建一个ExpressionSet:

library(Biobase)

readES = ExpressionSet(log2(rnaseq+1))

pData(readES) = clin[sampleNames(readES),]

readES

## ExpressionSet (storageMode: lockedEnvironment)

## assayData: 20501 features, 98 samples

## element names: exprs

## protocolData: none

## phenoData

## sampleNames: tcga.af.2687 tcga.af.2689 ... tcga.g5.6641 (98

## total)

## varLabels: Composite Element REF years_to_birth ... t_stage (23

## total)

## varMetadata: labelDescription

## featureData: none

## experimentData: use 'experimentData(object)'

## Annotation:

这里有一个人缺失肿瘤阶段,我们将简单地消除这个人。

readES = readES[,-97]

将肿瘤阶段与基因表达变异联系起来

我们将使用非常粗略的分类方法,并将在练习中探索替代方案。我们将使用适度F检验来检验肿瘤分期中常见平均表达的零假设。

library(limma)

##

## Attaching package: 'limma'

## The following object is masked from 'package:BiocGenerics':

##

## plotMA

mm = model.matrix(~t_stage, data=pData(readES))

f1 = lmFit(readES, mm)

ef1 = eBayes(f1)

## Warning: Zero sample variances detected, have been offset away from zero

topTable(ef1, 2:4)

## t_staget2 t_staget3 t_staget4 AveExpr F

## LOC100128977 -0.2196981 -0.2196981 -0.2196981 0.01132465 16.060640

## CELA2B -0.4924981 -0.4856924 -0.3966889 0.04003472 14.236630

## GDEP -0.9003575 -0.8376533 -0.8484637 0.09571759 11.852702

## FOLR4 -0.6721456 -0.5992014 -0.5847564 0.09479200 10.805454

## C18orf26 -0.3168032 -0.3042073 -0.3168032 0.02516016 10.417589

## GFRA4 -0.2622521 -0.3289370 -0.3481737 0.04383371 10.269518

## TAS2R41 -0.2117273 -0.2051461 -0.2117273 0.01552745 10.213776

## SEMA5B 1.7503244 1.7161443 2.4269386 4.52996758 9.131087

## CTRB2 -1.5604625 -1.5221324 -1.3959781 0.15557817 8.983471

## TXNDC17 -0.7046034 -0.9283568 -1.4545590 9.81107126 8.216157

## P.Value adj.P.Val

## LOC100128977 1.660698e-08 0.0003404596

## CELA2B 1.010504e-07 0.0010358169

## GDEP 1.187769e-06 0.0081168181

## FOLR4 3.647543e-06 0.0186945693

## C18orf26 5.561914e-06 0.0203603949

## GFRA4 6.539887e-06 0.0203603949

## TAS2R41 6.951991e-06 0.0203603949

## SEMA5B 2.311338e-05 0.0592309205

## CTRB2 2.728557e-05 0.0621535018

## TXNDC17 6.519177e-05 0.1336496376

boxplot(split(exprs(readES)["LOC100128977",], readES$t_stage))

介绍450k甲基化数据

450k数据具有与表达数据相同的复杂条件 - 需要转换,重复和仅与临床数据部分匹配的标识符。

me450k = getData(readData, "Methylation", 2)

fanno = me450k[,1:3]

me450k = data.matrix(me450k[,-c(1:3)])

med = tolower(substr(colnames(me450k),1,12))

med = gsub("-", ".", med)

mean(med %in% rownames(clin))

## [1] 1

sum(duplicated(med))

## [1] 8

todrop = which(duplicated(med))

me450k = me450k[,-todrop]

med = med[-todrop]

colnames(me450k) = med

ok = intersect(rownames(clin), colnames(me450k))

me450kES = ExpressionSet(me450k[,ok])

pData(me450kES) = clin[ok,]

fData(me450kES) = fanno

me450kES = me450kES[,-which(is.na(me450kES$t_stage))]

与基因g相关的450k DNA甲基化指标是否与g的表达变化相关?我们需要同步两个数据集。

ok = intersect(sampleNames(me450kES), sampleNames(readES))

meMatch = me450kES[,ok]

esMatch = readES[,ok]

鉴于这些定义,我们可以编写一个辅助函数

corv = function (sym, mpick = 3)

{

mind = which(fData(meMatch)[, 1] == sym)

if (length(mind) > mpick)

mind = mind[1:mpick]

eind = which(featureNames(esMatch) == sym)

dat = cbind(t(exprs(meMatch)[mind, , drop = FALSE]), t(exprs(esMatch)[eind,

, drop = FALSE]), t_stage = jitter(as.numeric(esMatch$t_stage)))

bad = apply(dat, 2, function(x) all(is.na(x)))

if (any(bad))

dat = dat[, -which(bad)]

pairs(dat)

}

corv("ZNF300") # learned about it from firebrowse.org

结论

TCGA是支持多元分析的基础设施开发的明显候选者。

MultiAssayExperimentcuratedTCGAData软件包是解决此任务的最新贡献。我们已经看到了一些挑战,即使使用像RTCGAToolbox这样的精心开发的工具来获取数据也是如此:我们必须警惕不匹配的样本标识符标签,缺少数据,样本来源和测定行为的记录不足等等。人类的努力总是需要的; 数据质量标准必须超越数值准确性并解决透明度和可用性问题。curatedTCGAData包使用手动策划的表示,因此本节中演示的协调任务不是必需的。但总的来说,我们需要知道如何协调,所以这些任务在本课程中保留。

通过适当改变本文档中的代码片段,您可以访问其他模态的多元数据(包括microRNA,拷贝数变异和蛋白质组学)。当您发现解释这些措施以创建生物学洞察力的新方法时,请通过向Bioconductor添加包或工作流程将它们传达给全世界。

原创: 小伍说事 医知圈

相关文章

网友评论

    本文标题:TCGA数据临床,表达,突变和甲基化联合分析

    本文链接:https://www.haomeiwen.com/subject/qwlfkctx.html