10X scRNA免疫治療學(xué)習(xí)筆記-5-差異分析及可視化

劉小澤寫于19.10.17
筆記目的:根據(jù)生信技能樹(shù)的單細(xì)胞轉(zhuǎn)錄組課程探索10X Genomics技術(shù)相關(guān)的分析
課程鏈接在:http://jm.grazy.cn/index/mulitcourse/detail.html?cid=55
第二單元第9講:細(xì)胞亞群之間的差異分析

前言

這次的任務(wù)是模仿原文的:

第五張:比較兩種CD8+細(xì)胞差異

在分群結(jié)果可以看到,CD8+主要分成了兩群烹植,一個(gè)是紅色的(170個(gè)CD8+ cytotoxic T cells看疗,即細(xì)胞毒性T細(xì)胞)女揭,一個(gè)是淺藍(lán)色的(429個(gè)CD8+ effector T cells永罚,即效應(yīng)T細(xì)胞

【圖片注釋:Heat map of selected significantly differentially expressed genes comparing CD8+ T cells in the red activated cluster (n = 170) to those in the blue effector/EM cluster (n = 429) at response (day + 376)

首先進(jìn)行差異分析

準(zhǔn)備數(shù)據(jù)

=> SubsetData()取子集

既然是分析的day +376數(shù)據(jù)悯森,那么就先把這一小部分?jǐn)?shù)據(jù)提取出來(lái):

rm(list = ls()) 
options(warn=-1)
suppressMessages(library(Seurat))
load('./patient1.PBMC.output.Rdata')

PBMC_RespD376 = SubsetData(PBMC,TimePoints =='PBMC_RespD376')
> table(PBMC_RespD376@ident)

  0   1   2   3   4   5   6   7   8   9  10  11  12 
800 433 555 677 636 516 119 324 204 200 170  11  39 

然后這個(gè)圖是分析了紅色和淺藍(lán)色的兩群荐糜,結(jié)合之前得到的分群結(jié)果巷怜,紅色是第10群,淺藍(lán)色是第4群

于是再用這個(gè)函數(shù)提取出來(lái)第4狞尔、10群

PBMC_RespD376_for_DEG = SubsetData(PBMC_RespD376,
                                   PBMC_RespD376@ident %in% c(4,10))

利用monocle V2構(gòu)建對(duì)象

=> newCellDataSet()

我們需要三樣?xùn)|西:表達(dá)矩陣丛版、細(xì)胞信息、基因信息

首先來(lái)看表達(dá)矩陣:上面取到的PBMC_RespD376_for_DEG中包含了多個(gè)數(shù)據(jù)接口偏序,單是表達(dá)矩陣相關(guān)就有三個(gè)

關(guān)于這三者的不同:

We view object@raw.data as a storage slot for the non-normalized data, upon which we perform normalization and return object@data.(來(lái)自:https://github.com/satijalab/seurat/issues/351

也就是說(shuō)页畦,raw.data是最原始的矩陣,data是歸一化之后的研儒,scale.data是標(biāo)準(zhǔn)化后的(一般是z-score處理)

  • data:The normalized expression matrix (log-scale)
  • scale.data :scaled (default is z-scoring each gene) expression matrix; used for dimmensional reduction and heatmap visualization

(來(lái)自:seurat的各個(gè)接口含義

我們使用log處理過(guò)的歸一化表達(dá)矩陣

count_matrix=PBMC_RespD376_for_DEG@data
> dim(count_matrix)
[1] 17712   806
然后豫缨,看細(xì)胞信息
# 細(xì)胞分群信息
cluster=PBMC_RespD376_for_DEG@ident
> table(cluster)
cluster
  4  10 
636 170 
# 細(xì)胞名稱(barcode名稱)
names(count_matrix)
最后是基因信息
gene_annotation <- as.data.frame(rownames(count_matrix))
萬(wàn)事俱備,開(kāi)始monocle
library(monocle) 
> packageVersion('monocle')
[1] ‘2.12.0’

# 1.表達(dá)矩陣
expr_matrix <- as.matrix(count_matrix)
# 2.細(xì)胞信息
sample_ann <- data.frame(cells=names(count_matrix),  
                           cellType=cluster)
rownames(sample_ann)<- names(count_matrix)
# 3.基因信息
gene_ann <- as.data.frame(rownames(count_matrix))
rownames(gene_ann)<- rownames(count_matrix)
colnames(gene_ann)<- "genes"

# 然后轉(zhuǎn)換為AnnotatedDataFrame對(duì)象
pd <- new("AnnotatedDataFrame",
          data=sample_ann)
fd <- new("AnnotatedDataFrame",
          data=gene_ann)

# 最后構(gòu)建CDS對(duì)象
sc_cds <- newCellDataSet(
  expr_matrix, 
  phenoData = pd,
  featureData =fd,
  expressionFamily = negbinomial.size(),
  lowerDetectionLimit=1)

關(guān)于其中的參數(shù)expressionFamily :負(fù)二項(xiàng)分布有兩種方法端朵,這里選用了negbinomial.size 好芭; 另外一種negbinomial稍微更準(zhǔn)確一點(diǎn),但速度大打折扣冲呢,它主要針對(duì)非常小的數(shù)據(jù)集

monocle V2質(zhì)控過(guò)濾

=> detectGenes() + subset()
cds=sc_cds
cds <- detectGenes(cds, min_expr = 0.1)
# 結(jié)果保存在cds@featureData@data
> print(head(cds@featureData@data))
                      genes num_cells_expressed
RP11-34P13.7   RP11-34P13.7                   0
FO538757.2       FO538757.2                  20
AP006222.2       AP006222.2                  11
RP4-669L17.10 RP4-669L17.10                   0
RP11-206L10.9 RP11-206L10.9                   5
LINC00115         LINC00115                   0

在monocle版本2.12.0中舍败,取消了fData函數(shù)(此前在2.10版本中還存在)。如果遇到不能使用fData的情況敬拓,就可以采用備選方案:cds@featureData@data

然后進(jìn)行基因過(guò)濾 =>subset()

expressed_genes <- row.names(subset(cds@featureData@data,
                                    num_cells_expressed >= 5))

> length(expressed_genes)
[1] 12273

cds <- cds[expressed_genes,]

monocle V2 聚類

step1:dispersionTable() 目的是判斷使用哪些基因進(jìn)行細(xì)胞分群

當(dāng)然可以使用全部基因邻薯,但這會(huì)摻雜很多表達(dá)量不高而檢測(cè)不出來(lái)的基因,反而會(huì)增加噪音乘凸。最好是挑有差異的厕诡,挑表達(dá)量不太低的

cds <- estimateSizeFactors(cds)
cds <- estimateDispersions(cds)
disp_table <- dispersionTable(cds) # 挑有差異的
unsup_clustering_genes <- subset(disp_table, mean_expression >= 0.1) # 挑表達(dá)量不太低的
cds <- setOrderingFilter(cds, unsup_clustering_genes$gene_id)  # 準(zhǔn)備聚類基因名單
plot_ordering_genes(cds) 
# 圖中黑色的點(diǎn)就是被標(biāo)記出來(lái)一會(huì)要進(jìn)行聚類的基因
[可省略]step2:plot_pc_variance_explained() 選一下主成分
plot_pc_variance_explained(cds, return_all = F) # norm_method='log'
step3: 聚類
# 進(jìn)行降維
cds <- reduceDimension(cds, max_components = 2, num_dim = 6,
                        reduction_method = 'tSNE', verbose = T)
# 進(jìn)行聚類
cds <- clusterCells(cds, num_clusters = 4) 
# Distance cutoff calculated to 1.812595  
plot_cell_clusters(cds, 1, 2, color = "cellType")

monocle V2 差異分析

=> differentialGeneTest()
# 這個(gè)過(guò)程比較慢!
start=Sys.time()
diff_test_res <- differentialGeneTest(cds,
                                      fullModelFormulaStr = "~cellType")
end=Sys.time()
end-start
# Time difference of 5.729718 mins

然后得到差異基因

sig_genes <- subset(diff_test_res, qval < 0.1)
> nrow(sig_genes)
[1] 635
# 最后會(huì)得到635個(gè)差異基因

> head(sig_genes[,c("genes", "pval", "qval")] )
            genes         pval        qval
ISG15       ISG15 1.493486e-03 0.040823046
CCNL2       CCNL2 2.228521e-03 0.055590716
MIB2         MIB2 4.954659e-05 0.002523176
MMP23B     MMP23B 1.009464e-04 0.004657577
TNFRSF25 TNFRSF25 1.608900e-04 0.006785583
CAMTA1     CAMTA1 4.339489e-03 0.090162380

進(jìn)行熱圖可視化

文章使用的基因如下(也就是第一張圖中顯示的)

htmapGenes=c(
  'GAPDH','CD52','TRAC','IL32','ACTB','ACTG1','COTL1',
  'GZMA','GZMB','GZMH','GNLY'
)
# 看到作者挑選的這些基因也都出現(xiàn)在我們自己分析的結(jié)果中
> htmapGenes %in% rownames(sig_genes)
 [1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE

下面開(kāi)始畫圖

先畫一個(gè)最最最原始的
library(pheatmap)
dat=count_matrix[htmapGenes,]
pheatmap(dat)

需要修改的地方:列名(barcode)不需要营勤、聚類不需要灵嫌、數(shù)據(jù)需要z-score

再來(lái)一版
n=t(scale(t(dat)))
# 規(guī)定上下限(和原文保持一致)
n[n>2]=2 
n[n< -1]= -1
> n[1:4,1:4]
      AAACCTGCAACGATGG.3 AAACCTGGTCTCCATC.3 AAACGGGAGCTCCTTC.3
GAPDH         -1.0000000        -0.06057709        -0.37324949
CD52           0.6676167         0.31653833         0.04253204
TRAC           0.7272507         0.63277670        -0.51581312
IL32          -1.0000000         0.42064114        -0.16143114
      AAAGCAATCATATCGG.3
GAPDH         -1.0000000
CD52          -1.0000000
TRAC          -0.5158131
IL32           0.1548693

# 加上細(xì)胞歸屬注釋(ac = annotation column)壹罚,去掉列名和聚類
ac=data.frame(group=cluster)
rownames(ac)=colnames(n)

pheatmap(n,annotation_col = ac,
         show_colnames =F,
         show_rownames = T,
         cluster_cols = F, 
         cluster_rows = F)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市寿羞,隨后出現(xiàn)的幾起案子猖凛,更是在濱河造成了極大的恐慌,老刑警劉巖稠曼,帶你破解...
    沈念sama閱讀 222,590評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件形病,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡霞幅,警方通過(guò)查閱死者的電腦和手機(jī)漠吻,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,157評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)司恳,“玉大人途乃,你說(shuō)我怎么就攤上這事∪痈担” “怎么了耍共?”我有些...
    開(kāi)封第一講書人閱讀 169,301評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)猎塞。 經(jīng)常有香客問(wèn)我试读,道長(zhǎng),這世上最難降的妖魔是什么荠耽? 我笑而不...
    開(kāi)封第一講書人閱讀 60,078評(píng)論 1 300
  • 正文 為了忘掉前任钩骇,我火速辦了婚禮,結(jié)果婚禮上铝量,老公的妹妹穿的比我還像新娘倘屹。我一直安慰自己,他們只是感情好慢叨,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,082評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布纽匙。 她就那樣靜靜地躺著,像睡著了一般拍谐。 火紅的嫁衣襯著肌膚如雪烛缔。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 52,682評(píng)論 1 312
  • 那天轩拨,我揣著相機(jī)與錄音力穗,去河邊找鬼。 笑死气嫁,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的够坐。 我是一名探鬼主播寸宵,決...
    沈念sama閱讀 41,155評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼崖面,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了梯影?” 一聲冷哼從身側(cè)響起巫员,我...
    開(kāi)封第一講書人閱讀 40,098評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎甲棍,沒(méi)想到半個(gè)月后简识,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,638評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡感猛,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,701評(píng)論 3 342
  • 正文 我和宋清朗相戀三年七扰,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片陪白。...
    茶點(diǎn)故事閱讀 40,852評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡颈走,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出咱士,到底是詐尸還是另有隱情立由,我是刑警寧澤,帶...
    沈念sama閱讀 36,520評(píng)論 5 351
  • 正文 年R本政府宣布序厉,位于F島的核電站锐膜,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏弛房。R本人自食惡果不足惜道盏,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,181評(píng)論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望庭再。 院中可真熱鬧捞奕,春花似錦、人聲如沸拄轻。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 32,674評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)恨搓。三九已至院促,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間斧抱,已是汗流浹背常拓。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,788評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留辉浦,地道東北人弄抬。 一個(gè)月前我還...
    沈念sama閱讀 49,279評(píng)論 3 379
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像宪郊,于是被迫代替她去往敵國(guó)和親掂恕。 傳聞我的和親對(duì)象是個(gè)殘疾皇子拖陆,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,851評(píng)論 2 361