有沒(méi)有專(zhuān)門(mén)做團(tuán)購(gòu)的網(wǎng)站蒲城縣住房和城鄉(xiāng)建設(shè)局網(wǎng)站
鶴壁市浩天電氣有限公司
2026/01/24 10:50:55
有沒(méi)有專(zhuān)門(mén)做團(tuán)購(gòu)的網(wǎng)站,蒲城縣住房和城鄉(xiāng)建設(shè)局網(wǎng)站,做網(wǎng)站ceo,青島網(wǎng)站制作百家號(hào)前言在前面的文章中#xff0c;我們已經(jīng)分別介紹了 單樣本 CellChat 分析 以及 多樣本 CellChat 的比較分析思路。然而#xff0c;在真正進(jìn)入多樣本比較時(shí)#xff0c;研究者往往會(huì)遇到一個(gè)不可回避的現(xiàn)實(shí)問(wèn)題#xff1a;CellChat 在進(jìn)行樣本間對(duì)比時(shí)#xff0c;默認(rèn)要求各…前言在前面的文章中我們已經(jīng)分別介紹了單樣本 CellChat 分析以及多樣本 CellChat 的比較分析思路。然而在真正進(jìn)入多樣本比較時(shí)研究者往往會(huì)遇到一個(gè)不可回避的現(xiàn)實(shí)問(wèn)題CellChat 在進(jìn)行樣本間對(duì)比時(shí)默認(rèn)要求各個(gè)樣本具有完全一致的細(xì)胞類(lèi)型組成。這一前提在理想化的數(shù)據(jù)中或許成立但在真實(shí)的生物學(xué)研究中卻幾乎難以滿足。以腫瘤研究為例腫瘤組織中通常富含多種免疫細(xì)胞如 CD4? T 細(xì)胞、NK 細(xì)胞、漿細(xì)胞等而在對(duì)應(yīng)的正常組織中這些細(xì)胞類(lèi)型可能完全不存在或僅占極低比例。細(xì)胞組成的這種顯著差異直接導(dǎo)致兩個(gè)樣本在 CellChat 框架下無(wú)法進(jìn)行直接的細(xì)胞通訊比較——并不是因?yàn)橥ㄓ崣C(jī)制本身不可比而是因?yàn)閰⑴c通訊的“細(xì)胞角色”本身就不一致。如果在這種情況下強(qiáng)行進(jìn)行比較就如同拿兩張結(jié)構(gòu)完全不同的地圖進(jìn)行對(duì)照一張多了道路和城市另一張卻缺少關(guān)鍵節(jié)點(diǎn)最終得到的差異很可能并非真實(shí)的生物學(xué)變化而只是由結(jié)構(gòu)不一致所引入的分析偏差。正是為了解決這一核心問(wèn)題CellChat 提供了liftCellChat方法通過(guò)先統(tǒng)一不同數(shù)據(jù)集的細(xì)胞類(lèi)型框架使所有樣本在同一套“細(xì)胞語(yǔ)言體系”下進(jìn)行分析從而保證后續(xù)觀察到的通訊差異真正反映的是生物學(xué)狀態(tài)的變化而不是細(xì)胞組成差異帶來(lái)的技術(shù)性假象。一.數(shù)據(jù)準(zhǔn)備基于CellChat v2.20依舊是我們的七例甲狀腺腫瘤library(Seurat) library(CellChat) # 讀取之前的數(shù)據(jù) scRNA - readRDS(D:/datat/新建文件夾/GSE191288_RAW/scRNA.rds) T_sce - readRDS(D:/datat/新建文件夾/GSE191288_RAW/T_sce.rds) B_sce - readRDS(D:/datat/新建文件夾/GSE191288_RAW/B_sce.rds) # 子集注釋回寫(xiě)母對(duì)象 phe - scRNAmeta.data phe_T - T_scemeta.data # 如有因子先轉(zhuǎn)換為字符 phe$celltype - as.character(phe$celltype) phe_T$celltype.1 - as.character(phe_T$celltype.1) # 找到匹配的行 common_T - intersect(rownames(phe), rownames(phe_T)) # 回寫(xiě)細(xì)胞類(lèi)型 phe[common_T, celltype] - phe_T[common_T, celltype.1] scRNAmeta.data - phe table(phe$orig.ident,phe$celltype) # B Cells CD 4 CD 8 Endothelial Epithelial Cells Fibroblasts Cells Myeloid Cells NK NKT γδ T # NT 12 55 79 1122 909 878 51 58 1 28 # T1L 60 139 111 663 135 1390 67 25 4 30 # T1R 300 637 363 222 66 425 192 22 16 82 # T2L 48 834 570 191 164 406 150 261 20 191 # T2R 559 1005 398 191 31 166 114 100 11 67 # T3L 11 260 160 60 1506 336 269 40 13 29 # T3R 5 175 332 159 3113 188 164 62 6 54 ## NT為癌旁組織其余為甲狀腺組織臨床分型為PTC ## 本次流程使用癌旁組織NT和 甲狀腺組織T1L這次我們挑選NT癌旁和T2L甲狀腺癌做對(duì)比NT樣本的B細(xì)胞12個(gè)NKT1個(gè)我們可以將NT樣本中的B Cells和NKT刪除這樣NT樣本中就只有CD 4 CD 8 Endothelial Epithelial Cells Fibroblasts Cells Myeloid Cells NK γδ T8種細(xì)胞類(lèi)型而T2L則相比較于NT多了兩種細(xì)胞類(lèi)型B Cells NKT實(shí)際操作提取矩陣和meta## 拆分樣本 obj.list - SplitObject(scRNA, split.by orig.ident) ## 刪除NT樣本中的B Cells 和NKT obj.list[[NT]] - subset( obj.list[[NT]], subset !(celltype %in% c(NKT, B Cells)) ) ## 查看兩個(gè)樣本的細(xì)胞類(lèi)型和數(shù)量 table(obj.list[[NT]]$celltype) # # CD 4 CD 8 Endothelial Epithelial Cells Fibroblasts Cells Myeloid Cells NK # 55 79 1122 909 878 51 58 # γδ T # 28 table(obj.list[[T2L]]$celltype) # # B Cells CD 4 CD 8 Endothelial Epithelial Cells Fibroblasts Cells Myeloid Cells # 48 834 570 191 164 406 150 # NK NKT γδ T # 261 20 191 ## 現(xiàn)在NT樣本中有8種細(xì)胞類(lèi)型而T2L種則有10種細(xì)胞類(lèi)型注意 T2L中的10中細(xì)胞類(lèi)型必須包含 NT樣本中的8種細(xì)胞類(lèi)型 # 根據(jù)研究情況進(jìn)行細(xì)胞排序T2L celltype_order - c( CD 4, CD 8, γδ T, NK, NKT, B Cells, Myeloid Cells, Fibroblasts Cells, Epithelial Cells, Endothelial ) ## 細(xì)胞的基因表達(dá)數(shù)據(jù)由于每個(gè)樣本只刪除幾個(gè)細(xì)胞所以不需要再做標(biāo)準(zhǔn)化直接提取就可以 data.input_T2L - GetAssayData(obj.list[[T2L]], slot data) # normalized data matrix meta_T2L - obj.list[[T2L]]meta.data[,c(orig.ident,celltype)] # 對(duì) meta 和 data.input 進(jìn)行排序 identical(rownames(meta_T2L), colnames(data.input_T2L)) meta_T2L$celltype - factor(meta_T2L$celltype ,levels celltype_order) ordered_indices - order(meta_T2L$celltype) meta_T2L - meta_T2L[ordered_indices, ] data.input_T2L - data.input_T2L[, ordered_indices] identical(rownames(meta_T2L),colnames(data.input_T2L)) # 根據(jù)研究情況進(jìn)行細(xì)胞排序NT celltype_order - c( CD 4, CD 8, γδ T, NK, Myeloid Cells, Fibroblasts Cells, Epithelial Cells, Endothelial ) data.input_NT - GetAssayData(obj.list[[NT]], slot data) # normalized data matrix ## metadata文件 meta_NT - obj.list[[NT]]meta.data[,c(orig.ident,celltype)] # 對(duì) meta 和 data.input 進(jìn)行排序 identical(rownames(meta_NT), colnames(data.input_NT)) meta_NT$celltype - factor(meta_NT$celltype ,levels celltype_order) ordered_indices - order(meta_NT$celltype) meta_NT - meta_NT[ordered_indices, ] data.input_NT - data.input_NT[, ordered_indices] identical(rownames(meta_NT),colnames(data.input_NT))創(chuàng)建cellchat# 加載數(shù)據(jù)庫(kù) CellChatDB - CellChatDB.human #人源樣本 # 查看數(shù)據(jù)的分類(lèi)情況與 # 具體內(nèi)容showDatabaseCategory(CellChatDB) dplyr::glimpse(CellChatDB$interaction) #篩選數(shù)據(jù)庫(kù)只保留“Secreted Signaling” CellChatDB.use - subsetDB(CellChatDB, search Secreted Signaling) ## NT樣品 cellchat_NT - createCellChat(object data.input_NT, meta meta_NT, group.by celltype) # 添加細(xì)胞信息 cellchat_NT - addMeta(cellchat_NT, meta meta_NT) cellchat_NT - setIdent(cellchat_NT, ident.use celltype) levels(cellchat_NTidents) groupSize_NT - as.numeric(table(cellchat_NTidents)) cellchat_NTDB - CellChatDB.use cellchat_NT - subsetData(cellchat_NT) # 只保留 配體/受體基因的表達(dá)矩陣 # 類(lèi)似于找高變基因 cellchat_NT - identifyOverExpressedGenes(cellchat_NT) cellchat_NT - identifyOverExpressedInteractions(cellchat_NT) cellchat_NT - computeCommunProb(cellchat_NT, type triMean) cellchat_NT - filterCommunication(cellchat_NT, min.cells 10) cellchat_NT - computeCommunProbPathway(cellchat_NT) cellchat_NT - aggregateNet(cellchat_NT) cellchat_NT - netAnalysis_computeCentrality(cellchat_NT, slot.name netP) ## T2L樣品 cellchat_T2L - createCellChat(object data.input_T2L, meta meta_T2L, group.by celltype) # 添加細(xì)胞信息 cellchat_T2L - addMeta(cellchat_T2L, meta meta_T2L) cellchat_T2L - setIdent(cellchat_T2L, ident.use celltype) levels(cellchat_T2Lidents) groupSize_T2L - as.numeric(table(cellchat_T2Lidents)) cellchat_T2LDB - CellChatDB.use cellchat_T2L - subsetData(cellchat_T2L) # 只保留 配體/受體基因的表達(dá)矩陣 # 類(lèi)似于找高變基因 cellchat_T2L - identifyOverExpressedGenes(cellchat_T2L) cellchat_T2L - identifyOverExpressedInteractions(cellchat_T2L) cellchat_T2L - computeCommunProb(cellchat_T2L, type triMean) cellchat_T2L - filterCommunication(cellchat_T2L, min.cells 10) cellchat_T2L - computeCommunProbPathway(cellchat_T2L) cellchat_T2L - aggregateNet(cellchat_T2L) cellchat_T2L -netAnalysis_computeCentrality(cellchat_T2L, slot.name netP)合并樣本重點(diǎn)## 更新為當(dāng)前版本兼容的對(duì)象結(jié)構(gòu),如果是自己從頭跑且期間沒(méi)有更新過(guò)cellchat包則不用跑 ## 如果是加載比別人的數(shù)據(jù)或者中途更新了包或者R版本則需要updateCellChat()更新數(shù)據(jù)類(lèi)型 cellchat_NT - updateCellChat(cellchat_NT) cellchat_T2L - updateCellChat(cellchat_T2L) # 添加細(xì)胞類(lèi)型前 table(cellchat_NTidents) CD 4 CD 8 γδ T NK Myeloid Cells Fibroblasts Cells Epithelial Cells 55 79 28 58 51 878 909 Endothelial 1122 ## 使用liftCellChat()給NT樣本添加和N2L一樣細(xì)胞類(lèi)型 group.new levels(cellchat_T2Lidents) cellchat_NT - liftCellChat(cellchat_NT, group.new) # 查看添加后細(xì)胞數(shù)量都是0 table(cellchat_NTidents) CD 4 CD 8 γδ T NK NKT B Cells Myeloid Cells 55 79 28 58 0 0 51 Fibroblasts Cells Epithelial Cells Endothelial 878 909 1122 ## 然后合并樣本 object.list - list(NT cellchat_NT, T2L cellchat_T2L) cellchat - mergeCellChat(object.list, add.names names(object.list), cell.prefix TRUE)可視化Circle plot## 查看兩個(gè)樣本有什么通路 lapply(object.list, function(x) xnetP$pathways) $NT [1] MIF CypA VEGF ANNEXIN MK CXCL GALECTIN PTN TNF SPP1 VISFATIN [12] CCL ANGPTL PARs PDGF GRN OSM IFN-II EGF PLAU TGFb GAS [23] ANGPT SEMA3 CX3C EDN IL16 TWEAK CALCR FGF BMP BAG PROS [34] KIT HGF $T2L [1] MIF CypA MK PARs GALECTIN VISFATIN TNF VEGF CCL TGFb [11] CXCL IFN-II ANNEXIN PTN EGF GRN ANGPT OSM GAS ANGPTL [21] LIGHT TWEAK COMPLEMENT PDGF PROS IL16 CD137 CD70 SLIT CX3C [31] BAFF TRAIL FASLG SEMA3 PLAU MHC-I WNT CSF NRG PERIOSTIN [41] APRIL BTLA BAG FGF ## 必須要挑選兩個(gè)樣本都有的代謝通路 pathways.show - c(MIF ) weight.max - getMaxWeight(object.list, slot.name c(netP), attribute pathways.show) # control the edge weights across different datasets par(mfrow c(1,2), xpdTRUE) for (i in 1:length(object.list)) { netVisual_aggregate(object.list[[i]], signaling pathways.show, layout circle, edge.weight.max weight.max[1], edge.width.max 10, signaling.name paste(pathways.show, names(object.list)[i])) }所有細(xì)胞類(lèi)型圍成一個(gè)圓 邊表示MIF 通路下的細(xì)胞—細(xì)胞通訊 邊粗細(xì)代表通訊強(qiáng)度特點(diǎn)不區(qū)分“誰(shuí)是信號(hào)發(fā)送者 / 接收者”強(qiáng)調(diào)的是網(wǎng)絡(luò)是否存在 哪些細(xì)胞之間連接更強(qiáng)Hierarchy plotpathways.show - c(MIF) weight.max - getMaxWeight(object.list, slot.name c(netP), attribute pathways.show) ## 指定接受端細(xì)胞1-5類(lèi)型為接收端 vertex.receiver seq(1,5) for (i in 1:length(object.list)) { netVisual_aggregate(object.list[[i]], signaling pathways.show, vertex.receiver vertex.receiver, edge.weight.max weight.max[1], edge.width.max 10, signaling.name paste(pathways.show, names(object.list)[i])) }Chord diagrampathways.show - c(MIF) par(mfrow c(1,2), xpdTRUE) for (i in 1:length(object.list)) { netVisual_aggregate(object.list[[i]], signaling pathways.show, layout chord, signaling.name paste(pathways.show, names(object.list)[i])) }重新指定分組## 跟上一期一樣我們把T/NK細(xì)胞合并為一組 group.merged - c(rep(T/NK Cells, 5), B Cells, Myeloid Cells, Fibroblasts Cells, Epithelial Cells, Endothelial) names(group.merged) - levels(object.list[[1]]idents) pathways.show - c(MIF) par(mfrow c(1,2), xpdTRUE) for (i in 1:length(object.list)) { netVisual_chord_cell(object.list[[i]], signaling pathways.show, group group.merged, title.name paste0(pathways.show, signaling network - , names(object.list)[i])) }于其他的可視化大家可以參考cellchat的第二篇雙多樣本對(duì)比。那么到這里cellchat的流程內(nèi)容就是更新完了祝大家科研順利