使用不同R包獲取TCGA的DEGs

### Create: Jianming Zeng
### Date: 2019-04-02 21:59:01
### Email: jmzeng1314@163.com

rm(list=ls())
options(stringsAsFactors = F)

Rdata_dir='../Rdata/'
Figure_dir='../figures/'
# 加載上一步從RTCGA.miRNASeq包里面提取miRNA表達矩陣和對應的樣本臨床信息款慨。 
# 見   http://www.reibang.com/p/a5f687d2e7b7
load( file = 
        file.path(Rdata_dir,'TCGA-KIRC-miRNA-example.Rdata')
)
dim(expr)
dim(meta)
# 可以看到是 537個病人谬莹,但是有593個樣本附帽,每個樣本有 552個miRNA信息。
# 當然整胃,這個數據集可以下載原始測序數據進行重新比對屁使,可以拿到更多的miRNA信息

# 這里需要解析TCGA數據庫的ID規(guī)律奔则,來判斷樣本歸類問題。
group_list=ifelse(as.numeric(substr(colnames(expr),14,15)) < 10,'tumor','normal')  ##經驗

table(group_list)  #71個normal酬蹋,522個tumor
exprSet=na.omit(expr)
source('../functions.R')

DESeq2包范抓、edgeR包和limma包均可獲取DEGs,下面依次展示

### Firstly run DESeq2 

if(T){
  library(DESeq2)
  
  (colData <- data.frame(row.names=colnames(exprSet), 
                         group_list=group_list) )
  dds <- DESeqDataSetFromMatrix(countData = exprSet,
                                colData = colData,
                                design = ~ group_list)
  tmp_f=file.path(Rdata_dir,'TCGA-KIRC-miRNA-DESeq2-dds.Rdata')
  if(!file.exists(tmp_f)){
    dds <- DESeq(dds)
    save(dds,file = tmp_f)
  }
  load(file = tmp_f)
  res <- results(dds, 
                 contrast=c("group_list","tumor","normal"))
  resOrdered <- res[order(res$padj),]
  head(resOrdered)
  DEG =as.data.frame(resOrdered)
  DESeq2_DEG = na.omit(DEG)
  
  nrDEG=DESeq2_DEG[,c(2,6)]
  colnames(nrDEG)=c('log2FoldChange','pvalue')  
  draw_h_v(exprSet,nrDEG,'DEseq2',group_list,1)
}
PCA

DEG_top50_heatmap

volcano
### Then run edgeR 
###
### ---------------
if(T){
  library(edgeR)
  d <- DGEList(counts=exprSet,group=factor(group_list))
  keep <- rowSums(cpm(d)>1) >= 2
  table(keep)
  d <- d[keep, , keep.lib.sizes=FALSE]
  d$samples$lib.size <- colSums(d$counts)
  d <- calcNormFactors(d)
  d$samples
  dge=d
  design <- model.matrix(~0+factor(group_list))
  rownames(design)<-colnames(dge)
  colnames(design)<-levels(factor(group_list))
  dge=d
  dge <- estimateGLMCommonDisp(dge,design)
  dge <- estimateGLMTrendedDisp(dge, design)
  dge <- estimateGLMTagwiseDisp(dge, design)
  
  fit <- glmFit(dge, design)
  # https://www.biostars.org/p/110861/
  lrt <- glmLRT(fit,  contrast=c(-1,1)) 
  nrDEG=topTags(lrt, n=nrow(dge))
  nrDEG=as.data.frame(nrDEG)
  head(nrDEG)
  edgeR_DEG =nrDEG 
  nrDEG=edgeR_DEG[,c(1,5)]
  colnames(nrDEG)=c('log2FoldChange','pvalue') 
  draw_h_v(exprSet,nrDEG,'edgeR',group_list,1)
  
}
PCA

heatmap

volcano
### Lastly run voom from limma

if(T){
  suppressMessages(library(limma))
  design <- model.matrix(~0+factor(group_list))
  colnames(design)=levels(factor(group_list))
  rownames(design)=colnames(exprSet)
  design
  
  dge <- DGEList(counts=exprSet)
  dge <- calcNormFactors(dge)
  logCPM <- cpm(dge, log=TRUE, prior.count=3)
  
  v <- voom(dge,design,plot=TRUE, normalize="quantile")
  fit <- lmFit(v, design)
  
  group_list
  cont.matrix=makeContrasts(contrasts=c('tumor-normal'),levels = design)
  fit2=contrasts.fit(fit,cont.matrix)
  fit2=eBayes(fit2)
  
  tempOutput = topTable(fit2, coef='tumor-normal', n=Inf)
  DEG_limma_voom = na.omit(tempOutput)
  head(DEG_limma_voom)
  nrDEG=DEG_limma_voom[,c(1,4)]
  colnames(nrDEG)=c('log2FoldChange','pvalue') 
  draw_h_v(exprSet,nrDEG,'limma',group_list,1)
  
}
PCA

heatmap

volcano

tmp_f=file.path(Rdata_dir,'TCGA-KIRC-miRNA-DEG_results.Rdata')

if(file.exists(tmp_f)){
  save(DEG_limma_voom,DESeq2_DEG,edgeR_DEG, file = tmp_f)
  
}else{
  load(file = tmp_f) 
}



nrDEG1=DEG_limma_voom[,c(1,4)]
colnames(nrDEG1)=c('log2FoldChange','pvalue') 

nrDEG2=edgeR_DEG[,c(1,5)]
colnames(nrDEG2)=c('log2FoldChange','pvalue') 

nrDEG3=DESeq2_DEG[,c(2,6)]
colnames(nrDEG3)=c('log2FoldChange','pvalue')  

mi=unique(c(rownames(nrDEG1),rownames(nrDEG1),rownames(nrDEG1)))
lf=data.frame(lf1=nrDEG1[mi,1],
              lf2=nrDEG2[mi,1],
              lf3=nrDEG3[mi,1])
cor(na.omit(lf))
[圖片上傳中...(image.png-f55ef-1557501086273-0)]

# 可以看到采取不同R包犁柜,會有不同的歸一化算法,這樣算到的logFC會稍微有差異扒腕。而且up&down基因數量也有差別
image.png

參考來源:生信技能樹

友情鏈接:

課程分享
生信技能樹全球公益巡講
https://mp.weixin.qq.com/s/E9ykuIbc-2Ja9HOY0bn_6g
B站公益74小時生信工程師教學視頻合輯
https://mp.weixin.qq.com/s/IyFK7l_WBAiUgqQi8O7Hxw
招學徒:
https://mp.weixin.qq.com/s/KgbilzXnFjbKKunuw7NVfw

歡迎關注公眾號:青島生信菜鳥團

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末瘾腰,一起剝皮案震驚了整個濱河市蹋盆,隨后出現的幾起案子硝全,更是在濱河造成了極大的恐慌,老刑警劉巖析藕,帶你破解...
    沈念sama閱讀 206,126評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件账胧,死亡現場離奇詭異先紫,居然都是意外死亡,警方通過查閱死者的電腦和手機车摄,發(fā)現死者居然都...
    沈念sama閱讀 88,254評論 2 382
  • 文/潘曉璐 我一進店門吮播,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人粟关,你說我怎么就攤上這事环戈≡喝” “怎么了遮晚?”我有些...
    開封第一講書人閱讀 152,445評論 0 341
  • 文/不壞的土叔 我叫張陵,是天一觀的道長拦止。 經常有香客問我县遣,道長,這世上最難降的妖魔是什么汹族? 我笑而不...
    開封第一講書人閱讀 55,185評論 1 278
  • 正文 為了忘掉前任萧求,我火速辦了婚禮,結果婚禮上顶瞒,老公的妹妹穿的比我還像新娘夸政。我一直安慰自己,他們只是感情好榴徐,可當我...
    茶點故事閱讀 64,178評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著箕速,像睡著了一般酪碘。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上盐茎,一...
    開封第一講書人閱讀 48,970評論 1 284
  • 那天兴垦,我揣著相機與錄音,去河邊找鬼字柠。 笑死探越,一個胖子當著我的面吹牛,可吹牛的內容都是我干的窑业。 我是一名探鬼主播钦幔,決...
    沈念sama閱讀 38,276評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼常柄!你這毒婦竟也來了鲤氢?” 一聲冷哼從身側響起搀擂,我...
    開封第一講書人閱讀 36,927評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎卷玉,沒想到半個月后哨颂,有當地人在樹林里發(fā)現了一具尸體,經...
    沈念sama閱讀 43,400評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡相种,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 35,883評論 2 323
  • 正文 我和宋清朗相戀三年威恼,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片寝并。...
    茶點故事閱讀 37,997評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡箫措,死狀恐怖,靈堂內的尸體忽然破棺而出衬潦,到底是詐尸還是另有隱情斤蔓,我是刑警寧澤,帶...
    沈念sama閱讀 33,646評論 4 322
  • 正文 年R本政府宣布别渔,位于F島的核電站附迷,受9級特大地震影響惧互,放射性物質發(fā)生泄漏哎媚。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,213評論 3 307
  • 文/蒙蒙 一喊儡、第九天 我趴在偏房一處隱蔽的房頂上張望拨与。 院中可真熱鬧,春花似錦艾猜、人聲如沸买喧。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽淤毛。三九已至,卻和暖如春算柳,著一層夾襖步出監(jiān)牢的瞬間低淡,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評論 1 260
  • 我被黑心中介騙來泰國打工瞬项, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留蔗蹋,地道東北人。 一個月前我還...
    沈念sama閱讀 45,423評論 2 352
  • 正文 我出身青樓囱淋,卻偏偏與公主長得像猪杭,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子妥衣,可洞房花燭夜當晚...
    茶點故事閱讀 42,722評論 2 345

推薦閱讀更多精彩內容