日常瞎掰
??昨天看到一個關于女孩找對象方面的笑話,大概內容是這樣的:
一個女孩天天為應該找一個什么樣的男朋友而糾結,于是這個女孩便向大師尋求幫助。
??“大師,我應該找一個什么樣的男朋友”,女孩說。
??“我給你六點建議”,大師看了一眼女孩,心中若有所思地沉默了片刻,開口說到。
??女孩渴望地點了點頭。
??然后大師便娓娓道來。
??第一,“找一個工作穩(wěn)定的男朋友!”
??第二,“找一個能讓你開心的男朋友!”
??第三,“找一個溫柔的男朋友!”
??第四,“找一個家庭關系不那么復雜的男朋友!”
??第五,“找一個會做家務的男朋友!”
??說到這里,大師停頓了一下,強調到,“切記,最后一點最為重要!”
??女孩迫切地點了點頭。
??“千萬不要讓那五個男朋友見面!” 接著,大師語重心長地說道。

??本來都沒有動力寫帖子了,看完這個笑話后,本來躺平的我瞬間爬起來寫了這個帖子(總算來拉回到下面要說的內容上了 ???)。好了,下面我們切換到下一話題,說說我們今天的正題。

??我們都知道FindClusters函數在做分群的時候,需要指定這個參數,這個參數越大,分的群也就越多。那么,分多少個群合適呢?用哪一個resolution合適呢?因為數據集的不同,所以這個是沒有標準答案的。雖然沒有標準的答案,但我們可以盡量根據自己的數據集找到合理的分群。最簡單粗暴的莫過于直接用tSNE的圖來看,當分辨率提高時,細胞群隨著增多,當發(fā)現有些群分散到多個地方時,說明resolution可能有點高了。
??對于這個問題,高手們早就想到了,開發(fā)了可以用來觀察分群結果的包——clustree。該包可以把不同resolution下的分類結果放在一起展示,讓我們可以清晰的看到當分辨率提高時新的細胞群是由低分辨率狀態(tài)下哪些細胞組合而成。這樣我們可以參考一下用哪個resolution更合適。同時,最為方便的是這個包可以非常方便的基于Seurat包的object對象來操作。下面我們就來看看這個包吧!
示例展示
??這里用一個Seurat對象做為演示,設置resolution從0.5到1.2間隔為0.1,共8個分辨率,僅是為了做一個展示,代碼不是很完整:
>library(Seurat)
>library(clustree)
>obj <- FindClusters(obj, resolution = seq(0.5,1.2,by=0.1))
>clustree(obj)
結果如下圖:

??從上面的代碼可以看到,clustree包對Seuat對象非常友好,可以直接用Seurat對象展示不同resolution的分群結果,同時可以清晰的看到不同resolution下細胞群之間的關系。圖中一行表示一個resolution下所有的細胞,整體來看隨著resolution增大細胞群數也隨著增加。那么,選哪個resolution合適呢?從這張圖可以看到resolution為0.5時(第一行),共有12個細胞群,resolution為0.6時(第二行),共有15個細胞群,也可以清楚的看到resolution為0.6,多出來的細胞群主要是resolution為0.5時0、2、10這三個群一分為二的結果。大家應該也看到了,resolution為0.7時(第三行)細胞群數也為15,從0.6到0.7群數還是比較穩(wěn)定的,但是到resolution為0.8時,群數又開始增加了,好像0.7是一個拐點,這個是不是可以做為一個不錯的選擇呢?當然了,前面也說過分群本來就沒有標準答案,找一個認為合理的就行。這個就好像跟“人丑就要多讀書”一樣,到底該讀哪一本書或者哪一些書也沒法說清楚。
結束語
??好吧,廢話天天有,好像今天特別多,為啥呢?因為內容不夠,廢話來湊啊。為了保持良好的習慣,和一致的風格,這個第三段必須得有!就像小學生作文一樣,最后再來個總結:分群沒有標準答案,合理即可。