TCGA下载数据(药物信息)步骤-2022-01-10

1.核验病人临床药物信息是否准确(R包VS网页版Sangerbox VS XML文件一一合并)

#获取临床信息

cancer_type="TCGA-LIHC"

clinical <- GDCquery_clinic(project= cancer_type,type = "clinical")

#获取临床药物信息

query <- GDCquery(project = "TCGA-LIHC",

                  data.category = "Clinical",

                  file.type = "xml")

query_download <- GDCdownload(query)

clinical.drug <- GDCprepare_clinic(query,"drug")

#sangerbox中的Merger好的总信息TXT文件(是第一个可预览的文件)

#XML文件批量合并

XMLClinicalDataPath <- "E:/1.RStudio/tcga_array/tcga_array/Sangerbox_LIHC"

partlyXMLClinDataFN <- "partlyXMLClinData.csv"

#################

### 数据处理!!!

dir.create("tempClinXMLFiles")

filepath <- dir(path = XMLClinicalDataPath,full.names = TRUE)

### 将所有文件移动到同一个文件夹tempClinXMLFiles下

### 使用以下循环:

for(wd in filepath){

  files <- dir(path = wd,pattern = "xml$") # 查看满足条件(pattern=xml)的文件

  fromfilepath <- paste(wd,"/",files,sep = "")

  tofilepath <- paste("./tempClinXMLFiles/",files,sep = "")

  file.copy(fromfilepath,tofilepath)

}

#################

### 临床数据整合!!!

setwd("./tempClinXMLFiles")

xmlFileNames <- dir(path = "./", pattern = "xml$") # list.files()函数也可以

library(XML)

library(methods)

FromeXMLClinData <- lapply(xmlFileNames,

                          function(x){            # x = xmlFileNames[1]

                            result <- xmlParse(file = x)

                            rootnode <- xmlRoot(result)

                            xmldataframe <- xmlToDataFrame(rootnode[2])

                            return(t(xmldataframe))})

### 上面这段代码不错

FromeXMLClinData <- t(do.call(cbind, FromeXMLClinData))

### 返回上级目录,保存一下

setwd("E:/1.RStudio/tcga_array/tcga_array/Sangerbox_LIHC")

write.csv(FromeXMLClinData, file = "FromeXMLClinData.csv")

### 转换成数据框格式

FromeXMLClinData <- as.data.frame(FromeXMLClinData)

### 提取部分我们需要的临床数据:

partlyXMLClinData <- data.frame(Barcode = FromeXMLClinData$bcr_patient_barcode,

                                vital_status = FromeXMLClinData$vital_status,

                                days_to_death = FromeXMLClinData$days_to_death,

                                lastFollowupTime = FromeXMLClinData$days_to_last_followup,

                                Stage = FromeXMLClinData$stage_event,

                                Age=FromeXMLClinData$age_at_initial_pathologic_diagnosis,

                                Drug=FromeXMLClinData$drugs,

                                Grade=FromeXMLClinData$neoplasm_histologic_grade,

                                Gender=FromeXMLClinData$gender)

### 保存一下

write.csv(partlyXMLClinData,

          file = partlyXMLClinDataFN,

          row.names = F, quote = F)

2.上面的结果除非数据更新,否则结果是一致的,可以直接用sangerbox的结果,因为它非常全面

sangerbox_merger

#提取感兴趣的列的临床信息

clinical_data <- data.frame(Sample_ID=sangerbox_merger$A0_Samples,

                            Age=sangerbox_merger$A17_Age,

                            Sex=sangerbox_merger$A18_Sex,

                            Height=sangerbox_merger$A19_Height,

                            OS.time=sangerbox_merger$A1_OS,

                            Weight=sangerbox_merger$A20_Weight,

                            BMI=sangerbox_merger$A21_BMI,

                            OS=sangerbox_merger$A2_Event,

                            Stage=sangerbox_merger$A6_Stage,

                            Grade=sangerbox_merger$A7_Grade,

                            Drug=sangerbox_merger$drugs.drug.drug_name)

setwd("E:/1.RStudio/tcga_array/tcga_array/LIHC_TCGA_data/cli_exp_LIHC")

save(clinical_data,file="LIHC_clinical.Rdata")

write.csv(clinical_data, file="LIHC_clinical.csv")

cli_Sor1<-clinical_data[which(clinical_data[,11]=='Sorafenib'),]

cli_Sor2<-clinical_data[which(clinical_data[,11]=='SORAFENIB'),]

cli_Sor3<-clinical_data[which(clinical_data[,11]=='Sorafenib;Sorafenib'),]

cli_Sor<-rbind(cli_Sor1,cli_Sor2)

cli_Sor<-rbind(cli_Sor,cli_Sor3)

cli_nodrug<-clinical_data[which(clinical_data[,11]==''),]

##TCGA数据处理

tcga_expr <- data.table::fread("../Data/TCGA-LIHC.htseq_fpkm.tsv.gz") %>% as.data.frame()

View(tcga_expr[1:10,])

# 更换基因名字

tcga_expr$Ensembl_ID <- sub("(ENSG\\d+)\\..*","\\1",tcga_expr$Ensembl_ID)

View(tcga_expr[1:10,])

tcga_expr$Gene <- mapIds(x = org.Hs.eg.db,

                        keys = tcga_expr$Ensembl_ID,

                        column = "SYMBOL",

                        keytype = "ENSEMBL",

                        multiVals = "first")

# 变成可以分析的表达矩阵

tcga_expr <- tcga_expr %>%

  dplyr::select(-Ensembl_ID) %>%

  filter(!is.na(Gene)) %>%

  distinct(Gene,.keep_all = T) %>%

  column_to_rownames(var = "Gene") %>%

  as.matrix()

tcga_expr <- 2^tcga_expr - 1

3.参数设置

# data.type

#下载rna-seq的counts数据

data.type = "Gene Expression Quantification"

#下载miRNA数据

data.type = "miRNA Expression Quantification"

#下载Copy Number Variation数据

data.type = "Copy Number Segment"

#workflow.type 有三种类型分别为:

#HTSeq - FPKM-UQ:FPKM上四分位数标准化值

#HTSeq - FPKM:FPKM值/表达量值

#HTSeq - Counts:原始count数

#legacy

#这个参数主要是因为TCGA数据有两个入口可以下载,

#GDC Legacy Archive 和 GDC Data Portal,

#区别主要是注释参考基因组版本不同分别是:

#GDC Legacy Archive(hg19和GDC Data Portal(hg38)。

#参数默认为FALSE,下载GDC Data Portal(hg38)。

#这里建议是,下载转录组层面的数据使用hg38,

#下载DNA层面的数据使用hg19,

#因为比如做SNP分析的时候很多数据库没有hg38版本的数据,都是hg19的。


用程序下载文件miRNA数据样本ID和患者ID的对应方法

https://cloud.tencent.com/developer/article/1802656

数据下载完以后接下来的处理


第四步:TCGAanalyze_Preprocessing()对数据进行预处理:使用spearman相关系数去除数据中的异常值

# 去除dataPrep1中的异常值,dataPrep1数据中含有肿瘤组织和正常组织的数据

# TCGAanalyze_Preprocessing(object, cor.cut = 0, filename = NULL,width = 1000, height = 1000, datatype =names(assays(object))[1])

# 函数功能描述:Array Array Intensity correlation (AAIC) and correlation boxplot to define outlier

dataPrep2 <- TCGAanalyze_Preprocessing(object = dataPrep1,

cor.cut = 0.6,datatype = "HTSeq - Counts")

#将预处理后的数据dataPrep2,写入新文件“LIHC_dataPrep.csv”

write.csv(dataPrep2,file = "LIHC_dataPrep.csv",quote = FALSE)

这里将生成一个array-array intensity correlation(AAIC)相关性热图,如下:

TCGAanalyze_Preprocessing()中的参数:

参数用法object来自TCGAprepare的结果cor.cut设置阈值,根据样本中各个样本之间的spearman相关系数进行过滤。默认为0filename设置生成图片文件的名称,默认为PreprocessingOutput.pngwidth生成图片的宽度 height生成图片的高度datatype描述RangedSummarizedExperiment 数据类型的字符串

第五步:TCGAtumor_purity()筛选肿瘤纯度大于60%的肿瘤barcodes

# TCGAtumor_purity(barcodes, estimate, absolute, lump, ihc, cpe),使用来自5种方法的5个估计值作为阈值对TCGA样本进行过滤,这5个值是estimate, absolute, lump, ihc, cpe,这里设置cpe=0.6(cpe是派生的共识度量,是将所有方法的标准含量归一化后的均值纯度水平,以使它们具有相等的均值和标准差)

#筛选肿瘤纯度大于等于60%的样本数据

purityDATA <- TCGAtumor_purity(colnames(dataPrep1), 0, 0, 0, 0, 0.6)

# filtered 为被过滤的数据, pure_barcodes是我们要的肿瘤数据

Purity.LIHC<-purityDATA$pure_barcodes

normal.LIHC<-purityDATA$filtered

filtered 为被过滤的数据(为正常组织的数据barcodes), pure_barcodes是我们要的肿瘤样本barcodes。

第六步:将肿瘤表达矩阵与正常组织表达矩阵合并,进行基因注释

#获取肿瘤纯度大于60%的340个肿瘤组织样本+50个正常组织样本,共计390个样本

puried_data <-dataPrep2[,c(Purity.LIHC,normal.LIHC)]

第七步:进行表达矩阵基因注释

#基因注释,需要加载“SummarizedExperiment”包,“SummarizedExperiment container”每个由数字或其他模式的类似矩阵的对象表示。行通常表示感兴趣的基因组范围和列代表样品。

#if (!requireNamespace("BiocManager", quietly = TRUE))

install.packages("BiocManager")

#BiocManager::install("SummarizedExperiment")    #没有的需要执行下载代码

library("SummarizedExperiment")

rowData(dataPrep1)   #传入数据dataPrep1必须为SummarizedExperiment对象

# DataFrame with 56512 rows and 3 columns

#                 ensembl_gene_id external_gene_name original_ensembl_gene_id

#                     <character>        <character>              <character>

# ENSG00000000003 ENSG00000000003             TSPAN6       ENSG00000000003.13

# ENSG00000000005 ENSG00000000005               TNMD        ENSG00000000005.5

# ENSG00000000419 ENSG00000000419               DPM1       ENSG00000000419.11

# ENSG00000000457 ENSG00000000457              SCYL3       ENSG00000000457.12

#将结果写入文件“puried.LIHC.cancer.csv”

rownames(puried_data)<-rowData(dataPrep1)$external_gene_name

write.csv(puried_data,file = "puried.LIHC.csv",quote = FALSE)

第八步:进行表达矩阵标准化和过滤,得到用于差异分析的表达矩阵

`TCGAanalyze_Normalization()`使用EDASeq软件包标准化mRNA转录本和miRNA。

#TCGAanalyze_Normalization()执行EDASeq包中的如下功能:

1. EDASeq::newSeqExpressionSet

2. EDASeq::withinLaneNormalization

3. EDASeq::betweenLaneNormalization

4. EDASeq::counts

dataNorm <- TCGAanalyze_Normalization(tabDF = puried_data,

geneInfo = geneInfo,

method = "gcContent")

TCGAanalyze_Normalization中的参数:

参数用法tabDFRNAseq表达矩阵,行代表基因,列代表样本geneInfo关于geneLength和gcContent的20531个基因的矩阵,“geneInfoHT”和“geneInfo”可选。method选择标准化的方法,基于’gcContent’ 或 ’geneLength’的标准化方法可选

缺失值补全写作:

首先我们获取了表达矩阵,去除了NA值比例大于X%的行(基因)和NA值比例大于Y%的列(样本),更进一步的利用R软件包impute的impute.knn函数进行缺失值补全,设置Number of neighbors 为 K以补全数据缺失。

数据标准化部分写作:

更进一步的我们对数据进行了【分位数标准化、中位数标准化、log2转换,行Z-score转换,列Z-score转换,行和列Z-score转换

#将标准化后的数据再过滤,去除掉表达量较低(count较低)的基因,得到最终的数据

dataFilt <- TCGAanalyze_Filtering(tabDF = dataNorm,

method = "quantile",

qnt.cut =  0.25)

str(dataFilt)

#num [1:13083, 1:340] 274 2432 60347 1012 1947 ...

#- attr(*, "dimnames")=List of 2

# ..$ : chr [1:13083] "A1BG" "A1CF" "A2M" "A4GALT" ...

# ..$ : chr [1:390] "TCGA-DD-AAD5-01A-11R-A41C-07" "TCGA-DD-A4NO-01A-11R-A28V-07" "TCGA-EP-A2KA-01A-11R-A180-07" "TCGA-DD-AACP-01A-11R-A41C-07" ...

TCGAanalyze_Filtering()中的参数:

参数用法tabDF数据框或者矩阵,行代表基因,列代表来自TCGA的样本method用于过滤较低count数的基因的方法,有’quantile’, ’varFilter’, ’filter1’, ’filter2’qnt.cut选择均值作为过滤的阈值

最后将过滤后的数据写入文件“TCGA_LIHC_final.csv”,就得到我们用于后续差异分析的表达文件:

write.csv(dataFilt,file = "TCGA_LIHC_final.csv",quote = FALSE)

#保留的是390个样本(前340肿瘤,后50正常组织)

你可能感兴趣的:(TCGA下载数据(药物信息)步骤-2022-01-10)