我的GEO練習

GEO數據挖掘練習

搜索文獻,找到GSE號

? ? ? 成骨細胞礦化對基因的影響(Matrix mineralization controls gene expression in osteoblasts)

GSE114237

實驗設計:4個非礦化樣本 4個礦化樣本

R代碼參考

https://mp.weixin.qq.com/s/Z4fK6RObUEfjEyY_2VS4Nw

安裝或載入所需各種包

library(stringi)

library(GEOquery)

library(limma)

library(ggfortify)

library(ggstatsplot)

library(VennDiagram)

? ? 如果有沒安裝的包? 先設置鏡像

r[ "CRAN" ] <- "- "https://mirrors.tuna.tsinghua.edu.cn/CRAN/";

/";

options( repos = r )

BioC <- getOption( "BioC_mirror" );

BioC[ "BioC_mirror" ] <- "- "https://mirrors.ustc.edu.cn/bioc/";

/";

options( BioC_mirror = BioC )

下載GEO數據

library( "GEOquery" )

GSE_name = 'GSE114237'? #這填要下的號

options( 'download.file.method.GEOquery' = 'libcurl' )

gset <- getGEO( GSE_name, getGPL = T )? #getGPL = T意思就是下載這個GSE用的平臺

save( gset, file = 'gset.Rdata' )

制作數據集

load( './'./gset.Rdata' )

View(gset)

library( "GEOquery" )

gset = gset[[1]]? #這時候gset是個list 提取list中的第一個元素 就是表達相關信息

exprSet = exprs( gset )? #Geoquery包函數exprs用來提取表達矩陣

pdata = pData( gset )? #Geoquery包函數pData用來提取樣本信息

group_list = as.character( pdata[, 24] )? #grouplist是個分組信息 作圖用的 該取哪列取哪列 進去看一眼改個數 折騰半天? 他給分成min組合demin組(礦化非礦化)

dim( exprSet )

exprSet[ 1:3, 1:5 ]? #看一眼

n_expr = exprSet[ , grep( "^min", group_list )]? #^這個符號表示取開頭是什么什么的東西

View(n_expr)

g_expr = exprSet[ , grep( "^demin", group_list )]? #n和g這倆命名照代碼上抄的 應該自己改一個能看懂的

exprSet = cbind( n_expr, g_expr )

View(exprSet)

group_list = c(rep( 'min', ncol( n_expr ) ),

rep( 'demin', ncol( g_expr ) ) )

dim( exprSet )? #就是讓min和demin重復多少列就多少遍完寫grouplist里頭

exprSet[ 1:8, 1:8 ]? #瞅一眼

table( group_list )

save( exprSet, group_list, file = 'exprSet_by_group.Rdata')? ? #保存Rdata的寫法

篩選探針? 去除沒有注釋的 或者沒測出來東西的探針

GPL = gset@featureData@data? #之前下GSE同時下了平臺 GPL就是平臺對探針的注釋(意思就是每個探針都對應啥玩意)

colnames( GPL )

view( GPL )

看完感覺不對? 因為GPL里頭探針號沒有對應的Gene symbol? 得下個包找找這個平臺的對應信息 先去GEO上找這個平臺對應什么GPL號? 然后根據GPL號

? 上曾老師博客里找這個平臺對應什么探針? 找著了就把包下下來

BiocInstaller::biocLite('hugene10sttranscriptcluster.db')? #這包里有信息

library(hugene10sttranscriptcluster.db)

toTable(hugene10sttranscriptclusterSYMBOL)? #toTable可以查看包里的對應信息

hgnc_id=toTable(hugene10sttranscriptclusterSYMBOL)? #把這個信息賦值

View(hgnc_id)

合并提取出來的矩陣和對應信息

exprSet = exprSet[ rownames(exprSet) %in% hgnc_id[ , 1 ], ]

hgnc_id = hgnc_id[ match(rownames(exprSet), hgnc_id[ , 1 ] ), ]

dim( exprSet )

dim( hgnc_id )

tail( sort( table( hgnc_id[ , 2 ] ) ), n = 12L )? #n=12L啥意思沒看懂? 回頭查查說明書 先往下進行

取出現頻率最大的交集

MAX = by( exprSet, hgnc_id[ , 2 ],

? ? ? ? ? function(x) rownames(x)[ which.max( rowMeans(x) ) ] )

MAX = as.character(MAX)

exprSet = exprSet[ rownames(exprSet) %in% MAX , ]

rownames( exprSet ) = hgnc_id[ match( rownames( exprSet ), hgnc_id[ , 1 ] ), 2 ]

exprSet = log(exprSet)

dim(exprSet)

exprSet[1:5,1:5]

save(exprSet, group_list, file = 'final_exprSet.Rdata')

聚類分析

install.packages("dplyr")

library(ggfortify)

library(stringi)

install.packages("stringi")

library(ggfortify)

colnames( exprSet ) = paste( group_list, 1:ncol( exprSet ), sep = '_' )? #sep = '_'分隔符默認

nodePar <- list( lab.cex = 0.3, pch = c( NA, 19 ), cex = 0.3, col = "red" )

hc = hclust( dist( t( exprSet ) ) )

png('hclust.png', res = 250, height = 1800)

plot( as.dendrogram( hc ), nodePar = nodePar, horiz = TRUE )

dev.off()


PCA圖

data = as.data.frame( t( exprSet ) )

data$group = group_list

png( 'pca_plot.png', res=80 )

autoplot( prcomp( data[ , 1:( ncol( data ) - 1 ) ] ), data = data, colour = 'group',

? ? ? ? ? label =T, frame = T) + theme_bw()

dev.off()


出完圖發現有兩個樣本數據偏差跟別的比特別大? 決定給他倆刪了

剔除不好的數據樣本

exprSet= exprSet[,1:2&4:7]

exprSet = exprSet[,-3]

exprSet = exprSet[,-7]

完事又發現group list又不對了? 好像還得改一下group list 可能有不太蠢的辦法 但我用了下面這個

#重新定義一下group list

table(group_list)

n_expr=n_expr[,-3]

g_expr=g_expr[,-4]

group_list = c(rep( 'min', ncol( n_expr ) ),

? ? ? ? ? ? ? rep( 'demin',? ? ncol( g_expr ) ) )

table(group_list)

再做一次PCA看看? 結果還湊合吧


data = as.data.frame( t( exprSet ) )

data$group = group_list

png( 'pca_plot.png', res=80 )

autoplot( prcomp( data[ , 1:( ncol( data ) - 1 ) ] ), data = data, colour = 'group',

? ? ? ? ? label =T, frame = T) + theme_bw()

dev.off()

差異分析

library( "limma" )

design <- model.matrix( ~0 + factor( group_list ) )

colnames( design ) = levels( factor( group_list ) )

rownames( design ) = colnames( exprSet )

design

contrast.matrix <- makeContrasts( "demin-min", levels = design )? #這塊得改引號里的名 該改啥改啥

contrast.matrix

fit <- lmFit( exprSet, design )

fit2 <- contrasts.fit( fit, contrast.matrix )

fit2 <- eBayes( fit2 )

nrDEG = topTable( fit2, coef = 1, n = Inf )

write.table( nrDEG, file = "nrDEG.out")

head(nrDEG)

熱圖

library( "pheatmap" )

choose_gene = head( rownames( nrDEG ), 50 )? #取了前50個差異最大的基因? 這數可以自己定

choose_matrix = exprSet[ choose_gene, ]

# choose_matrix = t( scale( t( exprSet ) ) )? 不知道這句是干啥的 給注釋了感覺就好用了

annotation_col = data.frame( CellType = factor( group_list ) )

rownames( annotation_col ) = colnames( exprSet )

pheatmap( fontsize = 5, choose_matrix, annotation_col = annotation_col, show_rownames = T,

? ? ? ? ? annotation_legend = T, filename = "heatmap.png")


火山圖

library( "ggplot2" )

logFC_cutoff <- with( nrDEG, mean( abs( logFC ) ) + 2 * sd( abs( logFC ) ) )

logFC_cutoff

logFC_cutoff = 1? #這1就是火山圖橫坐標 把1里頭的都算成沒啥變異? 這個也可以自己定 根據圖定吧 可以調調

nrDEG$change = as.factor( ifelse( nrDEG$P.Value < 0.05 & abs(nrDEG$logFC) > logFC_cutoff,

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ifelse( nrDEG$logFC > logFC_cutoff , 'UP', 'DOWN' ), 'STABLE' ) )? #這down up stable都是自己寫的? 可以寫別的 我感覺寫這個比較好

save( nrDEG, file = "nrDEG.Rdata" )

this_tile <- paste0( 'Cutoff for logFC is ', round( logFC_cutoff, 3 ),

? ? ? ? ? ? ? ? ? ? '\nThe number of up gene is ', nrow(nrDEG[ nrDEG$change =='UP', ] ),

? ? ? ? ? ? ? ? ? ? '\nThe number of down gene is ', nrow(nrDEG[ nrDEG$change =='DOWN', ] ) )? #這是寫圖上面的那三行字

volcano = ggplot(data = nrDEG, aes( x = logFC, y = -log10(P.Value), color = change)) +

? geom_point( alpha = 0.4, size = 1) +? #這里頭這個size是火山圖上那個小點點的大小 可以改 別的也能改 這里頭帶數的都可以改改包括下面的? 我還沒試

? theme_set( theme_set( theme_bw( base_size = 15 ) ) ) +

? xlab( "log2 fold change" ) + ylab( "-log10 p-value" ) +

? ggtitle( this_tile ) + theme( plot.title = element_text( size = 15, hjust = 0.5)) +

? scale_colour_manual( values = c('blue','black','red') )

print( volcano )

ggsave( volcano, filename = 'volcano.png' )

save.image(file = 'project1.Rdata') #保存了一下? 有點干太多了


葫蘆圖

隨便挑了4個基因? 做了一下

special_gene = c( 'GRB14', 'KDM7A', 'DPP4', 'MYPN' )

for( gene in special_gene ){

# gene='GRB14' # 先做一個看看好使不? 要好使就注釋了

filename <- paste( gene, '.png', sep = '' )

? TMP = exprSet[ rownames( exprSet ) == gene, ]

? data = as.data.frame(TMP)

? data$group = group_list

? p <- ggbetweenstats(data = data, x = group,? y = TMP,ylab = gene,xlab = 'g')

? ggsave( p, filename = filename)

}

save.image(file = 'project1.Rdata')


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

推薦閱讀更多精彩內容

  • 十三屆全國人大一次會議今日將舉行第五次全體會議,選舉新一屆國家機構領導人,表決關于國務院機構改革方案的決定草案等。...
    羊羊sasa閱讀 115評論 0 0
  • 當現實不盡如人意的時候,我們總是會幻想,如果…… 今天麻婆要推薦的影片是—— 白日夢想家 The Secret L...
    麻婆電影閱讀 336評論 0 1
  • 曾經我有一只叫做大煩的貓,其實到現在我也不愿意說“曾經”這兩個字,因為我一直覺得有一天,它還會回來的。 大煩是...
    小渦魚閱讀 350評論 3 2