通過整理TCGA數據,探索某癌癥的癌組織和正常組織的差異基因。

實驗設計

實驗目的決定試驗方法和途徑。
試驗目的 :獲取三陰性乳腺癌的正常組織和癌癥組織的基因表達差異情況,比較三陰性乳腺癌中的基因表達變化情況。
試驗設計 :通過TCGA獲取乳腺癌的RNA-seq表達數據,篩選出三陰性乳腺癌的樣本,通過比較癌癥和正常組織的表達差異。

TCGA數據庫簡介

一句話介紹:TCGA數據庫是一個由國家癌癥研究所(National Cancer Institute)和美國人類基因組研究所(National Human Genome Research Institute)共同監督的一個項目。使用對患者樣本的高通量基因組測序和分析技術來試圖提供括基因表達譜,拷貝數變異分析,SNP基因分型,全基因組DNA甲基化分析,微RNA分析等信息。收錄了33種癌癥基因組測序數據。TCGA數據處理和整理比Oncoman和GEO困難一些。但是針對腫瘤和癌癥所能提供的信息是很完善和可靠的。
TCGA和GEO存在的區別是,GEO存在各種研究領域和研究方向的NGC數據和分析。TCGA是專門針對腫瘤和癌癥設立的。TCGA優勢是豐富且規范的臨床數據,以及針對每種癌型的大樣本量。

TCGA數據的獲取

背景介紹:
三陰性乳腺癌是指癌組織免疫組織化學檢查結果為雌激素受體(ER)、孕激素受體(PR)和原癌基因Her-2均為陰性的乳腺癌。這類乳腺癌占所有乳腺癌病理類型的10.0%~20.8%,具有特殊的生物學行為和臨床病理特征,預后較其他類型差。--from:百度百科:三陰性乳腺癌

實驗設計:
三陰性乳腺癌的篩選標準是根據pheotype來確定的,表達量是通過RNAseq結果確定的,正常組織和癌癥組織是通過病例號確定的。

  1. TCGA項目的數據可以通過Genomic Data Commons Data Portal獲取,即通過GDC來訪問,訪問地址:https://portal.gdc.cancer.gov/
  2. TCGA數據庫公開免費,所以有許多針對TCGA數據進行整合的網站。還可以通過UCSC Xena進行下載:https://xena.ucsc.edu/public。試驗數據的選擇和目的息息相關,試驗設計:
    GDC

    點擊BRCA(乳腺癌)進入數據選擇界面。
  3. 選擇gene expression RNAseq>HTSeq - Counts。注意不要用RPKM等經過了normlization的表達矩陣來分析。要使用Counts來進行差異分析,因為在差異分析時候會自動進行標準化。如果數據經過處理例如log2+1,則可以下載后逆運算轉變回來。
  4. 選擇phenotype>Phenotype這里面有病人的病例信息等,可以通過統計篩選出三陰性乳腺癌的患者。
    BRCA
  5. 點擊連接進去會看到詳細的信息如下載地址、樣品數、數據處理方法等。


    RNAseq界面詳細信息

數據預處理

實驗設計:篩選出三陰性乳腺癌的患者ID,再篩選出同時有癌癥組織樣本和癌旁組織樣本,計算初始Count值。

三陰性乳腺癌患者(TNBC)篩選

實驗設計:在R語言中處理數據,選擇breast_carcinoma_estrogen_receptor_status(ER)、PR、HER2受體一欄全為隱形(Negative)的患者。
原始的phenotype文件如下圖,信息量巨大

phenotype文件

R語言實現

讀取文件

phenotype_file <- read.table("TCGA-BRCA.GDC_phenotype.tsv",header = T, sep = '\t', quote = "")
phenotype_colnames <- as.data.frame(colnames(phenotype_file))
#讀取文件并去讀列名(penotype的類型)
table(phenotype_file$breast_carcinoma_estrogen_receptor_status)
#查看雌激素受體(ER)的表達狀態。
table(phenotype_file$breast_carcinoma_progesterone_receptor_status)
#查看孕激素受體(PR)狀態
table(phenotype_file$lab_proc_her2_neu_immunohistochemistry_receptor_status)
#查看原癌基因Her-2狀態
talbe

列出三項指標的列表,方便篩選

實驗設計:查找三項指標的列并列出

colnames_num <- grep("receptor_status",colnames(phenotype_file))
#在phenotype_file列中檢索“receptor_status”,grep返回值是列名的列表中包含有“receptor_status”的列序號,因為三陰性乳腺癌的三項指標在這里都有phenotype_file字段

#>colnames_num
#[1] 20 25 67 77 87 93
phenotype_colnames <- colnames(phenotype_file)[colname_num]
#利用匹配的返回值取列名到phenotype_colnames中,phenotype_colnames中存儲的是含有“receptor_status”字段的列名
eph <- phenotype_file[,colnames_num[1:3]]
#把三項指標篩選出來,建立一個新的表格。方便篩選全陰的行(ID號)
eph查看

函數學習:

?apply
# b為:
# first second
# one       1      4
# two       2      5
# three     3      6
# apply(b,1,sum)
# 上面的指令代表對矩陣b進行行計算,分別對每一行進行求和。函數涉及了三個參數:
# 第一個參數是指要參與計算的矩陣;
# 第二個參數是指按行計算還是按列計算,1——表示按行計算,2——按列計算;
# 第三個參數是指具體的運算參數。
# 上述指令的返回結果為:
# one   two three 
# 5     7     9 

TNBC的篩選

實驗設計:查找指標的狀態并統計;列出三陰性并篩選出來這些數據

tnbc_rownum <- apply(eph,1,function(x)sum(x=="Negative"))
#eph:記錄三項指標類型的矩陣
#將eph按照列執行sum(x=="Negative"):統計各行中,eph列中有Negative的數量
#通過查看陰性的數量,函數返回結果是一個數字向量。內容是0或1、2、3。注意數字的排列順序是對應病人ID的行。
tnbc_rownum
tnbc_sample <- phenotype_file[tnbc_rownum == 3, 1]
#通過讓 tnbc_rownum==3 判別,如果成立,會返回一個logical向量,logical向量是可以直接被矩陣引用的,只會讀取TURE的行或著列
#統計每一行中數值是3的(即全為“Negative”)并取第一列即病人ID
#tnbc_sample:存儲著三陰性乳腺癌的
tnbc_sample
save(tnbc_sample,file = 'tnbc_sample.Rdata')
#保存Rdata
陰性指標統計

基因表達矩陣的構建

基因表達矩陣的讀取和讀取后格式修改

實驗設計:轉換data.frame ;行名修改;Count值還原

library(data.table)
#?data.table
#R中的data.table包提供了一個data.frame的高級版本,讓你的程序做數據整型的運算速度大大的增加。
a <- fread("TCGA-BRCA.htseq_counts.tsv.gz",sep = '\t',header = T)
#讀取表達矩陣文件
a <- as.data.frame(a)
#轉換為數據框,讀取后,轉換前的a的類型是"data.table" "data.frame"
a[1:4,1:4]
rownames(a) <- a[,1]
a <- a[,-1]
#去除第一列,行名修改。
genes <- row.names(a)
genes[1:10]
##接下來還原counts數,網站使用了log2(count+1)進行counts數轉換,接下來進行還原
a <- a^2-1
#a存儲的全是數值型向量,可以直接通過數學處理進行全表修改。
RNAseq結果的讀取與處理

對表達矩陣進行篩選構建

實驗設計:列出TNBC的ID(前半部分),所有病人ID,有雙樣品類型的seq的病人ID,取TNBC的ID和雙樣品類型的seq病人ID交集作為目的病人ID。最后用 all_p %in% need_p 構建logical向量,被原始表達矩陣引用,構建符合目的要求的表達矩陣

##接下來是取樣本,需要取118個三陰性乳腺癌的樣本,并且是成對的樣本,即既有癌組織又有癌旁組織。
tnbc_p <- substring(tnbc_sample,1,12)
#取tnbc的每個元素的第一個到第12個字符 
#tnbc是TNBC患者的ID前部分
all_p <- substring(colnames(a),1,12)
head(all_p)
#取表達矩陣的病理號前12位
table(all_p)
#這里如果病人號前12位相同,說明是即既有癌組織又有癌旁組織。
table(all_p) == 2
paired_p <- names(table(all_p)[table(all_p) == 2])
#去除所有有兩個組織類型的病人ID前部分賦值給paired_id
need_p <- intersect(tnbc_p,paired_p)
#need_p是118個是成對的樣本。即既有癌組織又有癌旁組織

exprSet <- a[,all_p %in% need_p]
#構建表達矩陣:三陰性乳腺癌的樣本,并且是成對的樣本,即既有癌組織又有癌旁組織
#這里通過 all_p %in% need_p 處理返回一個 logical向量,logical和第一個數據元素all_p一一對應,元素個數和順序和all_P相同。向量可以在在data.frame中引用,只會讀取 TRUE
目的表達矩陣

對構建的表達矩陣進行數據篩選

實驗設計:利用apply函數統計條件符合情況,然后保存為logical向量,然后利用logical的被引用來篩選

table(apply(exprSet, 1, function(x){sum(x==0)<10}))
tmp <- apply(exprSet, 1, function(x){sum(x==0)<10})
#對exprSet進行按行執行函數function:
#如果表達矩陣是0則取1,在18個樣本中,如果這個基因的表達矩陣超過10個樣本都是空值,則舍棄這個基因
#tmp是一個logical向量
exprSet <- exprSet[tmp,]
save(exprSet,file = 'tnbc_paired_exprSet.Rdata')
#保存三陰性乳腺癌的雙樣本表達矩陣

癌癥組織和正常組織的區分和標記

實驗設計:利用substr()函數截取患者ID的有效信息位置,用ifelse()函數進行判斷,并用factor()函數生成因子型變量。最后賦值得到患者的樣品類型

Tips:TCGA可以根據第14和第15位判斷是癌組織還是癌旁組織。01表示癌癥組織,11表示正常組織

#TCGA可以根據第14和第15位判斷是癌組織還是癌旁組織。01表示癌癥組織,11表示正常組織
colnames(exprSet)
#提取列名
substr(colnames(exprSet),14,15)
#提取列名字符串的第14和15位置字符
as.numeric(substr(colnames(exprSet),14,15))
#現在提取的字符變成數字 '11'和 11不等同
ifelse(as.numeric(substr(colnames(exprSet),14,15)) < 10,'tumor','normal')
#判斷第14和15號位的數值<10 即等于01時候,返回tumor 否則返回normal
factor(ifelse(as.numeric(substr(colnames(exprSet),14,15)) < 10,'tumor','normal'))
#question 把它變成因子型,因子型是有順序的。這里需要變換成因子型
group_list=factor(ifelse(as.numeric(substr(colnames(exprSet),14,15)) < 10,'tumor','normal'))
#group_list記錄了表達矩陣中患者ID的對應的組織類型,和表達矩陣的順序一樣。
table(group_list)

表達矩陣的篩選(應該在上一步一起進行)

實驗設計:修正小于0的(因為變換過程中可能會產生-1,會影響實驗),檢查并去除na值。

exprSet <- ceiling(exprSet)
#?ceiling()取整,不小于變量本身
#round()以四舍五入形式保存指定小數位數
#floor()不大于變量本身最大整數
#table(is.na(exprSet))
#pmax(),使得矩陣最小值是0?
save <- exprSet
exprSet[exprSet<0] <- 0
table(exprSet<0)
table(is.na(exprSet))
group_list和colData

患者的癌癥組織和正常組織的基因差異表達分析

library(DESeq2)
#構建一個病例號和腫瘤分類的對應關系
colData <- data.frame(row.names = colnames(exprSet),group_list= group_list)
#colData:是患者ID號和組織類型的對應關系

#構建DESeq()函數要求的表達式
dds <- DESeqDataSetFromMatrix(countData = exprSet,colData = colData,design = ~ group_list)
#countData = exprSet,指出DESeq的表達矩陣
#colData = colData,知名每個表達矩陣的分類,比如實驗組&對照組,正常組織&癌癥組織
#question
#design= ~group_list,因子型,指出不同組的區別,是有順序的。
dds <- DESeqDataSetFromMatrix(countData = exprSet,
                              colData = colData,
                              design = ~group_list)
dds <- DESeq(dds)
#進行差異基因分析
resultsNames(dds)
res <-  results(dds, contrast=c("group_list","tumor","normal"))
#用group_list來做引導文件,用tumor來比較normal組織

resOrdered <- res[order(res$padj),]
#把res差異分析文件通過padj來排序
head(resOrdered)
resOrdered=as.data.frame(resOrdered)
#把resOrdered變成數據框,
write.table(resOrdered, file="single cell DGE order.xls", sep="\t",quote=F)
#寫出差異基因文件
DEG文件

基因的注釋

正在努力更新...

?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,663評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,125評論 3 414
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,506評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,614評論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,402評論 6 404
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,934評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,021評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,168評論 0 287
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,690評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,596評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,784評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,288評論 5 357
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,027評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,404評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,662評論 1 280
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,398評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,743評論 2 370

推薦閱讀更多精彩內容