R語言GEO數據挖掘:步驟三:進行基因差異分析

進行基因差異分析

1.讀取數據

rm(list = ls())  ## 魔幻操作醋火,一鍵清空~
options(stringsAsFactors = F)#在調用as.data.frame的時益老,將stringsAsFactors設置為FALSE可以避免character(字符)類型自動轉化為factor(因子,如0那先,1)類型
# 注意查看下載文件的大小,檢查數據 
load(file = 'step1-output.Rdata')#加載第一步保存的文件赚爵,此文件包括dat和group_list庶柿,加載后得到此兩數據
dat
group_list

2.檢測數據

# 每次都要檢測數據
dat[1:4,1:4] #查看1到4行和1到4列的dat文件
table(group_list) #table函數村怪,查看group_list中的分組個數
dat[1:4,1:4]
table(group_list)

3.為每個數據集繪制箱形圖,比較數據集中的數據分布(單一某個基因分析)

boxplot(dat[1,]~group_list) #按照group_list分組畫箱線圖,定義分組澳泵,(此步驟可以省略)
bp=function(g){         #定義一個函數g实愚,函數為{}里的內容
  library(ggpubr)
  df=data.frame(gene=g,stage=group_list)#把分組和數據糅合在一起
  p <- ggboxplot(df, x = "stage", y = "gene",#定義圖形的橫縱坐標
                 color = "stage", palette = "jco",
                 add = "jitter")#
    p + stat_compare_means()#  Add p-value值
}
bp(dat[1,]) ## 調用上面定義好的函數,避免同樣的繪圖代碼重復多次敲兔辅。
bp(dat[2,])
bp(dat[3,])
bp(dat[4,])
dim(dat)

4.對某種基因在樣本中的表達情況根據分組統(tǒng)一分析(所有基因一起分析)

4.1數據表達形式

用limma包,這里注意击喂,limma包是對基因芯片表達矩陣的分析维苔,不能對逆轉錄RNAseq表達矩陣進行分析(因為數據特征不同),RNAseq需要用另一種方法

library(limma)
design=model.matrix(~factor( group_list ))#把分組信息變化成因子
design
fit=lmFit(dat,design)#在給定一系列陣列的情況下懂昂,擬合每個基因的線性模型
QQ截圖20190326210520.jpg
fit=eBayes(fit)#eBayes函數指在微陣列線性模型擬合下介时,通過經驗Bayes對標準誤差向一個共同值的緩和,計算緩和t-統(tǒng)計凌彬、緩和f-統(tǒng)計和微分表達式的對數概率沸柔。 用法舉列:EBAYES(配合,比例=0.01铲敛,標準偏差褐澎,系數,極限值=C(0.1,4) 
## 上面是limma包用法的一種方式 
#把上面計算出的差異再進行處理
options(digits = 4) #設置全局的數字有效位數為4
#topTable(fit,coef=2,adjust='BH') 
topTable(fit,coef=2,adjust='BH') #提取一個表的列上的基因從一個線性模型的擬合
#例子:topTable(fit, coef=NULL, number=10, genelist=fit$genes, adjust.method="BH",
         #sort.by="B", resort.by=NULL, p.value=1, lfc=0, confint=FALSE)  
所有基因差異總數據表

解讀此表


表中數據意義

但是上面的用法做不到隨心所欲的指定任意兩組進行比較伐蒋,所有還有下一種方法

design <- model.matrix(~0+factor(group_list))#把分組變成因子形式

以分組信息為因子得到design
colnames(design)=levels(factor(group_list))#改design列名為分組信息
改之后列名變了
head(design)#查看分組文件
exprSet=dat#exprSet 為表達矩陣
rownames(design)=colnames(exprSet)#更改分組信息design行名為分組名工三,也就是樣本名字
design
#構造了design矩陣迁酸,得出每一個樣本屬于哪一個組,屬于為1俭正,不屬于為0

QQ截圖20190326213059.jpg

處理好了分組信息奸鬓,再自定義比較元素

#自定義比較元素
contrast.matrix<-makeContrasts("noTNBC-TNBC",
                               levels = design)
#也可以用下面的,和上面等同意思
#contrast.matrix<-makeContrasts("paste0(unique(group_list),collapse = "-")掸读,levels = design)
contrast.matrix ##這個矩陣聲明串远,我們要把 Tumor 組跟 Normal 進行差異分析比較

自定義函數進行比較

deg = function(exprSet,design,contrast.matrix){#定義一個叫deg的函數
  ##step1#logFC后是前的多少倍,進行差異化比較
  fit <- lmFit(exprSet,design)
  ##step2
  fit2 <- contrasts.fit(fit, contrast.matrix) 
  ##這一步很重要,大家可以自行看看效果
  
  fit2 <- eBayes(fit2)  ## default no trend !!!
  ##eBayes() with trend=TRUE
  ##step3
  tempOutput = topTable(fit2, coef=1, n=Inf)
  nrDEG = na.omit(tempOutput) 
  #write.csv(nrDEG2,"limma_notrend.results.csv",quote = F)
  head(nrDEG)
  return(nrDEG)
}
deg = deg(exprSet,design,contrast.matrix)
head(deg)#查看前幾行文件
save(deg,file = 'deg.Rdata')#存儲文件
#得出了兩兩差異化比較的圖
得出所有基因差異化數據表

4.2分析基因表達差異的可視化表示:火山圖儿惫,熱圖

for volcano 火山圖

if(T){
  nrDEG=deg
  head(nrDEG)
  attach(nrDEG)
  plot(logFC,-log10(P.Value))
  library(ggpubr)
  df=nrDEG
  df$v= -log10(P.Value) #df新增加一列'v',值為-log10(P.Value)
  ggscatter(df, x = "logFC", y = "v",size=0.5)
  
  df$g=ifelse(df$P.Value>0.01,'stable
              ', #if 判斷:如果這一基因的P.Value>0.01抑淫,則為stable基因
              ifelse( df$logFC >2,'up', #接上句else 否則:接下來開始判斷那些P.Value<0.01的基因,再if 判斷:如果logFC >1.5,則為up(上調)基因
                      ifelse( df$logFC < -2,'down','stable') )#接上句else 否則:接下來開始判斷那些logFC <1.5 的基因姥闪,再if 判斷:如果logFC <1.5始苇,則為down(下調)基因,否則為stable基因
  )
  table(df$g)
  df$name=rownames(df)
  head(df)
  ggscatter(df, x = "logFC", y = "v",size=0.5,color = 'g')
  ggscatter(df, x = "logFC", y = "v", color = "g",size = 0.5,
            label = "name", repel = T,
            #label.select = rownames(df)[df$g != 'stable'] ,
            label.select = c('TTC9', 'AQP3', 'CXCL11','PTGS2'), #挑選一些基因在圖中顯示出來
            palette = c("#00AFBB", "#E7B800", "#FC4E07") )
  ggsave('volcano.png')
  
  ggscatter(df, x = "AveExpr", y = "logFC",size = 0.2)
  df$p_c = ifelse(df$P.Value<0.001,'p<0.001',
                  ifelse(df$P.Value<0.01,'0.001<p<0.01','p>0.01'))
  table(df$p_c )
  ggscatter(df,x = "AveExpr", y = "logFC", color = "p_c",size=0.2, 
            palette = c("green", "red", "black") )
  ggsave('MA.png')
  
  
}

for heatmap

if(T){ 
  load(file = 'step1-output.Rdata')
  # 每次都要檢測數據
  dat[1:4,1:4]
  table(group_list)
  x=deg$logFC #deg取logFC這列并將其重新賦值給x
  names(x)=rownames(deg) #deg取probe_id這列筐喳,并將其作為名字給x
  cg=c(names(head(sort(x),100)),#對x進行從小到大排列催式,取前100及后100,并取其對應的探針名避归,作為向量賦值給cg
       names(tail(sort(x),100)))
  library(pheatmap)
  pheatmap(dat[cg,],show_colnames =F,show_rownames = F) #對dat按照cg取行荣月,所得到的矩陣來畫熱圖
  n=t(scale(t(dat[cg,])))#通過“scale”對log-ratio數值進行歸一化,現在的dat是行名為探針梳毙,列名為樣本名哺窄,由于scale這個函數應用在不同組數據間存在差異時,需要行名為樣本账锹,因此需要用t(dat[cg,])來轉換萌业,最后再轉換回來
  
  n[n>2]=2
  n[n< -2]= -2
  n[1:4,1:4]
  pheatmap(n,show_colnames =F,show_rownames = F)
  ac=data.frame(g=group_list)
  rownames(ac)=colnames(n) #將ac的行名也就分組信息(是‘no TNBC’還是‘TNBC’)給到n的列名,即熱圖中位于上方的分組信息
  pheatmap(n,show_colnames =F,
           show_rownames = F,
          cluster_cols = F, 
           annotation_col=ac,filename = 'heatmap_top200_DEG.png') #列名注釋信息為ac即分組信息
  
  
}

write.csv(deg,file = 'deg.csv')
dev.new()

熱土和火山圖都是傻瓜式的奸柬,只要的前面得出的deg數據(也就是基因差異表達數據)是正確的

最后

感謝jimmy的生信技能樹團隊生年!

感謝導師岑洪老師!

感謝健明廓奕、孫小潔抱婉,慧美等生信技能樹團隊的老師一路以來的指導和鼓勵!

特別注明:此文中編碼來自生信技能樹健明老師

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末桌粉,一起剝皮案震驚了整個濱河市蒸绩,隨后出現的幾起案子,更是在濱河造成了極大的恐慌铃肯,老刑警劉巖患亿,帶你破解...
    沈念sama閱讀 216,324評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異缘薛,居然都是意外死亡窍育,警方通過查閱死者的電腦和手機卡睦,發(fā)現死者居然都...
    沈念sama閱讀 92,356評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來漱抓,“玉大人表锻,你說我怎么就攤上這事∑蚵Γ” “怎么了瞬逊?”我有些...
    開封第一講書人閱讀 162,328評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長仪或。 經常有香客問我确镊,道長,這世上最難降的妖魔是什么范删? 我笑而不...
    開封第一講書人閱讀 58,147評論 1 292
  • 正文 為了忘掉前任蕾域,我火速辦了婚禮,結果婚禮上到旦,老公的妹妹穿的比我還像新娘旨巷。我一直安慰自己,他們只是感情好添忘,可當我...
    茶點故事閱讀 67,160評論 6 388
  • 文/花漫 我一把揭開白布采呐。 她就那樣靜靜地躺著,像睡著了一般搁骑。 火紅的嫁衣襯著肌膚如雪斧吐。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,115評論 1 296
  • 那天仲器,我揣著相機與錄音煤率,去河邊找鬼。 笑死娄周,一個胖子當著我的面吹牛涕侈,可吹牛的內容都是我干的。 我是一名探鬼主播煤辨,決...
    沈念sama閱讀 40,025評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼木张!你這毒婦竟也來了众辨?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 38,867評論 0 274
  • 序言:老撾萬榮一對情侶失蹤舷礼,失蹤者是張志新(化名)和其女友劉穎鹃彻,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體妻献,經...
    沈念sama閱讀 45,307評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡蛛株,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,528評論 2 332
  • 正文 我和宋清朗相戀三年团赁,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片谨履。...
    茶點故事閱讀 39,688評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡欢摄,死狀恐怖,靈堂內的尸體忽然破棺而出笋粟,到底是詐尸還是另有隱情怀挠,我是刑警寧澤,帶...
    沈念sama閱讀 35,409評論 5 343
  • 正文 年R本政府宣布害捕,位于F島的核電站绿淋,受9級特大地震影響,放射性物質發(fā)生泄漏尝盼。R本人自食惡果不足惜吞滞,卻給世界環(huán)境...
    茶點故事閱讀 41,001評論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望盾沫。 院中可真熱鬧裁赠,春花似錦、人聲如沸疮跑。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,657評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽祖娘。三九已至失尖,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間渐苏,已是汗流浹背掀潮。 一陣腳步聲響...
    開封第一講書人閱讀 32,811評論 1 268
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留琼富,地道東北人仪吧。 一個月前我還...
    沈念sama閱讀 47,685評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像鞠眉,于是被迫代替她去往敵國和親薯鼠。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,573評論 2 353

推薦閱讀更多精彩內容