Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >免疫浸润结果分子分型(一致性聚类ConsensusClusterPlus)

免疫浸润结果分子分型(一致性聚类ConsensusClusterPlus)

作者头像
医学和生信笔记
发布于 2023-08-30 05:01:12
发布于 2023-08-30 05:01:12
1.8K00
代码可运行
举报
运行总次数:0
代码可运行

分子分型也是生信灌水的常见知识点之一。可以用于分子分型的方法非常多,比如:一致性聚类、非负矩阵分解、PCA等等,当然这些方法不需要我们手动去计算,都是有成熟的R包帮我们做。

比较常见的做分子分型的R包:ConsensusClusterPlus, cola, CancerSubtypes, MOVICS, diceR,等等。

可以用于分子分型的数据那更是五花八门啦,理论上只要你有一个数值型矩阵,都可以做分型。

今天给大家演示一个根据免疫浸润结果进行分子分型的示例。

加载数据

我们就用之前批次矫正的数据做演示:批次效应去除之combat和removebatcheffect

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
rm(list = ls())
load(file = "step1_output.rdata")

expr_combat[1:4,1:4]
##        TCGA-D5-6540-01A-11R-1723-07 TCGA-AA-3525-11A-01R-A32Z-07
## MT-CO2                     14.50611                     14.11911
## MT-CO3                     14.43620                     13.98267
## MT-ND4                     14.36872                     13.31916
## MT-CO1                     14.61993                     13.99882
##        TCGA-AA-3525-01A-02R-0826-07 TCGA-AA-3815-01A-01R-1022-07
## MT-CO2                     14.04289                     14.85734
## MT-CO3                     14.20102                     14.67482
## MT-ND4                     13.51694                     14.52215
## MT-CO1                     13.62324                     14.51841
expr_lnc_combat[1:4,1:4]
##        TCGA-D5-6540-01A-11R-1723-07 TCGA-AA-3525-11A-01R-A32Z-07
## MALAT1                     5.841875                     4.441612
## NORAD                      7.840943                     6.649570
## SNHG6                      7.012464                     5.548106
## SNHG29                     6.309729                     6.020166
##        TCGA-AA-3525-01A-02R-0826-07 TCGA-AA-3815-01A-01R-1022-07
## MALAT1                     5.579839                     6.041946
## NORAD                      6.780140                     6.638278
## SNHG6                      6.435600                     6.290823
## SNHG29                     8.097017                     7.249777

只要肿瘤样本,然后再对表达矩阵做z-score转换,不做也可以,大家可以探索下做与不做的差别。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
expr <- expr_combat[,clin_info$sample_type == "tumor"]
expr_lnc <- expr_lnc_combat[,clin_info$sample_type == "tumor"]
clin_info <- clin_info[clin_info$sample_type == "tumor",]
expr[1:4,1:4]
##        TCGA-D5-6540-01A-11R-1723-07 TCGA-AA-3525-01A-02R-0826-07
## MT-CO2                     14.50611                     14.04289
## MT-CO3                     14.43620                     14.20102
## MT-ND4                     14.36872                     13.51694
## MT-CO1                     14.61993                     13.62324
##        TCGA-AA-3815-01A-01R-1022-07 TCGA-D5-6923-01A-11R-A32Z-07
## MT-CO2                     14.85734                     14.47264
## MT-CO3                     14.67482                     14.13317
## MT-ND4                     14.52215                     13.75709
## MT-CO1                     14.51841                     13.93638

expr <- scale(expr)
#save(expr_lnc,file = "step1_expr_lnc.rdata")

免疫浸润分析

还是用之前介绍过的非常好用的IOBR进行ssGSEA分析。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
suppressMessages(library(IOBR))
load(file = "G:/bioinfo/000files/ssGSEA28.Rdata")

1行代码即可:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
im_ssgsea <- calculate_sig_score(eset = expr
                                 , signature = cellMarker 
                                 , method = "ssgsea" 
                                 )
## 
## >>> Calculating signature score using ssGSEA method
## >>> log2 transformation is not necessary
## Estimating ssGSEA scores for 28 gene sets.
## [1] "Calculating ranks..."
## [1] "Calculating absolute values from ranks..."
## 
  |                                                                            
  |                                                                      |   0%
  |                                                                            
  |======================================================================| 100%
## 
## [1] "Normalizing..."
im_ssgsea[1:4,1:4]
## # A tibble: 4 × 4
##   ID                           `Activated B cell` `Activated CD4 T cell` Activ…¹
##   <chr>                                     <dbl>                  <dbl>   <dbl>
## 1 TCGA-3L-AA1B-01A-11R-A37K-07             -0.116                 0.0874   0.264
## 2 TCGA-4N-A93T-01A-11R-A37K-07             -0.169                 0.0784   0.222
## 3 TCGA-4T-AA8H-01A-11R-A41B-07             -0.273                 0.130    0.185
## 4 TCGA-5M-AAT4-01A-11R-A41B-07             -0.326                 0.162    0.205
## # … with abbreviated variable name ¹`Activated CD8 T cell`

#save(im_ssgsea,file = "step_ssgsea.rdata")

有了这个结果就可以进行分子分型的操作了。

我们今天介绍的是ConsensusClusterPlus一致性聚类进行分子分型。

一致性聚类

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
library(ConsensusClusterPlus)

调整下数据格式:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
df <- as.data.frame(im_ssgsea)
rownames(df) <- df$ID
df <- df[,-1]
df <- t(df)
df[1:4,1:4]
##                          TCGA-3L-AA1B-01A-11R-A37K-07
## Activated B cell                          -0.11564923
## Activated CD4 T cell                       0.08738077
## Activated CD8 T cell                       0.26405669
## Activated dendritic cell                   0.12538222
##                          TCGA-4N-A93T-01A-11R-A37K-07
## Activated B cell                          -0.16893409
## Activated CD4 T cell                       0.07835561
## Activated CD8 T cell                       0.22205116
## Activated dendritic cell                   0.10961118
##                          TCGA-4T-AA8H-01A-11R-A41B-07
## Activated B cell                          -0.27278589
## Activated CD4 T cell                       0.12999000
## Activated CD8 T cell                       0.18464372
## Activated dendritic cell                   0.09445642
##                          TCGA-5M-AAT4-01A-11R-A41B-07
## Activated B cell                           -0.3264560
## Activated CD4 T cell                        0.1621332
## Activated CD8 T cell                        0.2045764
## Activated dendritic cell                    0.1490167
boxplot(df[,1:20])
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
df1 <- sweep(df,1,apply(df,1,median))#已经做了z-score了,还需要这个中位数归一化的操作吗?大家自己探索下
boxplot(df1[,1:20])

进行一致性聚类,其实就是1行代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ccres <- ConsensusClusterPlus(df1,
                              maxK=9,
                               reps=100,
                               pItem=0.8,
                               pFeature=1,
                               tmyPal = c("white","#C75D30"),
                               title='ConsensusCluster/',
                               clusterAlg="km",
                               distance="euclidean",
                               seed=123456,
                               plot="pdf"
                              )
## end fraction
## clustered
## clustered
## clustered
## clustered
## clustered
## clustered
## clustered
## clustered

iclres <- calcICL(ccres,title="ics of ssgsea res")

结果会保存到指定目录下的一个PDF文件中,里面有多张图形:

确定最佳聚类个数

标准非常多,比如根据聚类热图看色块干净,没有掺杂;CDF图上升平缓,突然陡峭;delta area拐点(类似于聚类分析的碎石图)

也有大佬根据PAC(模糊聚类比例)确定最佳聚类个数:现在可以直接使用diceR或者cola实现。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
## PAC = Proportion of ambiguous clustering 模糊聚类比例
Kvec = 2:9
x1 = 0.1; x2 = 0.9 
PAC = rep(NA,length(Kvec)) 
names(PAC) = paste("K=",Kvec,sep="") 
for(i in Kvec){
  M = ccres[[i]]$consensusMatrix
  Fn = ecdf(M[lower.tri(M)])
  PAC[i-1] = Fn(x2) - Fn(x1)
}
optK = Kvec[which.min(PAC)]
optK
## [1] 3

根据PAC和上面一致性聚类给出的图来看,分成3个亚型是最合适的,但是为了演示我们选2!

分型后的数据

根据分型结果提取数据,我们选2:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#提取结果
sample_subtypes <- ccres[[2]][["consensusClass"]]
table(sample_subtypes)
## sample_subtypes
##   1   2 
## 331 319

331个样本是第1型,319个样本是第2型。

免疫浸润箱线图

这个数据的样本顺序和ssGSEA结果的样本顺序是完全一致的,可以直接用,所以我们就根据这个分型,探索下不同亚型的免疫浸润情况:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
suppressMessages(library(tidyverse))

im_ssgsea %>% 
  mutate(sample_subtypes = factor(sample_subtypes)) %>% 
  pivot_longer(-c(ID,sample_subtypes), names_to = "cell_type",values_to = "value") %>% 
  ggplot(aes(cell_type,value,fill=sample_subtypes))+
  geom_boxplot()+
  labs(x=NULL)+
  theme(legend.position = "top",axis.text.x = element_text(angle = 45,hjust = 1))

这种箱线图大家可能已经审美疲劳了,我给大家介绍一种更好看的小提琴图,当然我是从文献里看到的,但是代码来自于stackoverflow。使用关键词搜索即可得到这段代码。

首先我们自己定义一个GeomSplitViolin,然后就可以和ggplot2对接使用了!

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# https://stackoverflow.com/questions/47651868/split-violin-plot-with-ggplot2-with-quantiles
library(ggplot2)

GeomSplitViolin <- ggproto("GeomSplitViolin", GeomViolin,
  draw_group = function(self, data, ..., draw_quantiles = NULL) {
    # Original function by Jan Gleixner (@jan-glx)
    # Adjustments by Wouter van der Bijl (@Axeman)
    data <- transform(data, xminv = x - violinwidth * (x - xmin), xmaxv = x + violinwidth * (xmax - x))
    grp <- data[1, "group"]
    newdata <- plyr::arrange(transform(data, x = if (grp %% 2 == 1) xminv else xmaxv), if (grp %% 2 == 1) y else -y)
    newdata <- rbind(newdata[1, ], newdata, newdata[nrow(newdata), ], newdata[1, ])
    newdata[c(1, nrow(newdata) - 1, nrow(newdata)), "x"] <- round(newdata[1, "x"])
    if (length(draw_quantiles) > 0 & !scales::zero_range(range(data$y))) {
      stopifnot(all(draw_quantiles >= 0), all(draw_quantiles <= 1))
      quantiles <- create_quantile_segment_frame(data, draw_quantiles, split = TRUE, grp = grp)
      aesthetics <- data[rep(1, nrow(quantiles)), setdiff(names(data), c("x", "y")), drop = FALSE]
      aesthetics$alpha <- rep(1, nrow(quantiles))
      both <- cbind(quantiles, aesthetics)
      quantile_grob <- GeomPath$draw_panel(both, ...)
      ggplot2:::ggname("geom_split_violin", grid::grobTree(GeomPolygon$draw_panel(newdata, ...), quantile_grob))
    }
    else {
      ggplot2:::ggname("geom_split_violin", GeomPolygon$draw_panel(newdata, ...))
    }
  }
)

create_quantile_segment_frame <- function(data, draw_quantiles, split = FALSE, grp = NULL) {
  dens <- cumsum(data$density) / sum(data$density)
  ecdf <- stats::approxfun(dens, data$y)
  ys <- ecdf(draw_quantiles)
  violin.xminvs <- (stats::approxfun(data$y, data$xminv))(ys)
  violin.xmaxvs <- (stats::approxfun(data$y, data$xmaxv))(ys)
  violin.xs <- (stats::approxfun(data$y, data$x))(ys)
  if (grp %% 2 == 0) {
    data.frame(
      x = ggplot2:::interleave(violin.xs, violin.xmaxvs),
      y = rep(ys, each = 2), group = rep(ys, each = 2)
    )
  } else {
    data.frame(
      x = ggplot2:::interleave(violin.xminvs, violin.xs),
      y = rep(ys, each = 2), group = rep(ys, each = 2)
    )
  }
}

geom_split_violin <- function(mapping = NULL, data = NULL, stat = "ydensity", position = "identity", ..., 
                              draw_quantiles = NULL, trim = TRUE, scale = "area", na.rm = FALSE, 
                              show.legend = NA, inherit.aes = TRUE) {
  layer(data = data, mapping = mapping, stat = stat, geom = GeomSplitViolin, position = position, 
        show.legend = show.legend, inherit.aes = inherit.aes, 
        params = list(trim = trim, scale = scale, draw_quantiles = draw_quantiles, na.rm = na.rm, ...))
}

接下来就画图即可,是不是还挺别致的:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
im_ssgsea %>% 
  mutate(sample_subtypes = factor(sample_subtypes)) %>% 
  pivot_longer(-c(ID,sample_subtypes), names_to = "cell_type",values_to = "value") %>% 
  ggplot(aes(cell_type,value,fill=sample_subtypes))+
  geom_split_violin(draw_quantiles = c(0.25, 0.5, 0.75))+
  theme_bw()+
  theme(legend.position = "top",
        axis.text.x = element_text(angle = 45,hjust = 1)
        )
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#保存下数据
save(clin_info,sample_subtypes,im_ssgsea,file = "step2_output.rdata")

样本信息热图

有了这个分子亚型的数据,再结合其他临床数据,我们就可以画出一个热图,综合展现不同类型样本的免疫浸润情况。

我们选择生存状态,年龄,性别,病理分期,MSI这几个临床信息进行展示。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
clin_sub <- clin_info[,c("vital_status","age_at_diagnosis","gender","ajcc_pathologic_stage","paper_MSI_status")]
clin_sub$sample_cluster <- sample_subtypes
names(clin_sub) <- c("status","age","gender","stage","msi","cluster")

clin_sub$msi <- as.character(clin_sub$msi)
str(clin_sub)
## 'data.frame': 650 obs. of  6 variables:
##  $ status : chr  "Alive" "Alive" "Alive" "Alive" ...
##  $ age    : int  24282 32871 23922 21118 23825 26541 15842 22574 29194 30237 ...
##  $ gender : chr  "male" "male" "female" "male" ...
##  $ stage  : chr  "Stage I" "Stage IIIB" "Stage IIA" "Stage I" ...
##  $ msi    : chr  NA "MSI-H" "MSI-H" NA ...
##  $ cluster: int  1 1 1 1 1 2 1 1 2 2 ...

table(clin_sub$stage)
## 
##    Stage I   Stage IA   Stage II  Stage IIA  Stage IIB  Stage IIC  Stage III 
##        110          1         38        185         14          2         25 
## Stage IIIA Stage IIIB Stage IIIC   Stage IV  Stage IVA  Stage IVB 
##         15         85         60         65         24          2
table(clin_sub$msi)
## 
##         MSI-H         MSI-L           MSS Not Evaluable 
##            41            46           196             1

对这几个信息重新整理一下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 把NA变成字符型的“NA”,方便后面使用!
clin_sub[is.na(clin_sub)] <- 'NA'

# 亚型重新编码为c1 c2
# 年龄变为 >65  <=65  "NA">23725 TRUE
# 病理分期变为1,2,3,4期
# 然后都变成因子型
clin_sub <- clin_sub %>% 
  mutate(cluster = ifelse(cluster == 1, "c1","c2"),
         msi = ifelse(msi=="Not Evaluable","NA",msi),
         age = ifelse(age == "NA","NA",ifelse(age>23725,">65","<=65")),
         stage = case_when(stage %in% c("Stage I","Stage IA") ~ "I",
                           stage %in% c("Stage II","Stage IIA","Stage IIB","Stage IIC") ~ "II",
                           stage %in% c("Stage III","Stage IIIA","Stage IIIB","Stage IIIC") ~ "III",
                           stage %in% c("Stage IV","Stage IVA","Stage IVB") ~ "IV",
                           .default = stage
                           )
         ) %>% 
  mutate(age = factor(age,levels = c('<=65','>65',"NA")),
         stage = factor(stage, levels=c('I','II','III','IV',"NA")),
         gender = factor(gender, levels=c('female','male',"NA")),
         status = factor(status, levels=c("Alive","Dead", "NA" )),
         msi=factor(msi, levels=c("MSI-H","MSI-L","MSS","NA"))
         )

glimpse(clin_sub)
## Rows: 650
## Columns: 6
## $ status  <fct> Alive, Alive, Alive, Alive, Alive, Alive, Alive, Dead, Alive, …
## $ age     <fct> >65, >65, >65, <=65, >65, >65, <=65, <=65, >65, >65, >65, >65,…
## $ gender  <fct> male, male, female, male, male, male, male, female, female, fe…
## $ stage   <fct> I, III, II, I, III, I, III, III, III, III, III, IV, III, III, …
## $ msi     <fct> NA, MSI-H, MSI-H, NA, NA, MSI-L, NA, NA, NA, MSI-H, NA, NA, MS…
## $ cluster <chr> "c1", "c1", "c1", "c1", "c1", "c2", "c1", "c1", "c2", "c2", "c…

identical(rownames(clin_sub),im_ssgsea$ID)
## [1] FALSE

让免疫浸润结果的样本顺序和我们准备的临床信息的样本顺序一致,方便使用:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
clin_sub <- clin_sub[match(im_ssgsea$ID, rownames(clin_sub)),]
identical(rownames(clin_sub),im_ssgsea$ID)
## [1] TRUE

把样本这一列变成行名:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ssgsea_df <- column_to_rownames(im_ssgsea,"ID")

然后就可以画图,本来准备使用tidyHeatmap的,但是注释条中不能有缺失值,差评!

还是要使用画热图最强大的R包:ComplexHeatmap,靠谱!

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 不能有NA
#library(tidyHeatmap)

library(ComplexHeatmap)

columnAnno <- HeatmapAnnotation(status = clin_sub$status,
                                age = clin_sub$age,
                                gender = clin_sub$gender,
                                stage = clin_sub$stage,
                                msi = clin_sub$msi,
                                cluster = clin_sub$cluster
                                #,na_col = "white"
                                )
scaled_ssgsea <- scale(t(ssgsea_df))
scaled_ssgsea[scaled_ssgsea>2] <- 2
scaled_ssgsea[scaled_ssgsea< -2] <- -2

ComplexHeatmap::Heatmap(scaled_ssgsea, na_col = "white",show_column_names = F,
                        row_names_side = "left",name = "fraction",
                        column_order = c(rownames(ssgsea_df)[c(grep("c1",clin_sub$cluster),grep("c2",clin_sub$cluster))]),
                        column_split = clin_sub$cluster, column_title = NULL,
                        cluster_columns = F,
                        top_annotation = columnAnno
                        )

这个信息还是很全面的,这种热图也是各类生信文章中常见的图形。

estimate评估免疫纯度

我们还可以使用其他方法评价一下不同亚型的免疫浸润情况,每种方法都试一下,增加可信度和工作量......

这里我们就选择estimate

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 还是使用estimate,1行代码即可
estires <- deconvo_estimate(expr, platform = "illumina")
## 
## >>> Running ESTIMATE
## [1] "Merged dataset includes 9883 genes (529 mismatched)."
## [1] "1 gene set: StromalSignature  overlap= 136"
## [1] "2 gene set: ImmuneSignature  overlap= 140"

# 调整样本顺序
estires <- estires[match(rownames(clin_sub),estires$ID),]
identical(estires$ID,rownames(clin_sub))
## [1] TRUE

# 加上亚型信息
estires$cluster <- clin_sub$cluster

# 简单画个图
ggplot(estires, aes(cluster, ImmuneScore_estimate))+
  geom_boxplot()+
  ggpubr::stat_compare_means(aes(group = cluster,label = ..p.signif..),
                     method = "wilcox.test")+
  theme_classic()

结果并不显著哦~大家可以尝试其他免疫浸润方法,都看看,这样就可以把显著的结果放在文章里了!

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
save(expr, clin_info, clin_sub, im_ssgsea, file = "step3_output.rdata")

有了这个分型后,你还可以根据这个分型做各种分析,比如生存分析、差异分析、富集分析等等,反正就是查看两种亚型之间的各种差别以及和各种临床信息的联系,我就不再演示了,大家自己尝试下即可。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-07-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 医学和生信笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
免疫浸润结果可视化
在之前的推文中我们介绍了2行代码实现9种免疫浸润方法,今天给大家介绍下常见的免疫浸润结果的可视化。
医学和生信笔记
2023/08/30
1.3K0
免疫浸润结果可视化
1行代码完成8种免疫浸润分析
免疫浸润一直是生信数据挖掘的重点,免疫浸润的各种算法也是大家学习生信数据挖掘必学的知识点。
医学和生信笔记
2023/08/30
1.4K1
1行代码完成8种免疫浸润分析
WGCNA实战:识别免疫相关lncRNA
前面的推文给大家介绍了3种识别免疫相关lncRNA的方法:免疫相关lncRNA的识别
医学和生信笔记
2023/08/30
7130
WGCNA实战:识别免疫相关lncRNA
老瓶新装:TCGA+GEO分子分型发5+分
大家好,今天和大家分享的是2020年3月发表在Cancer genetics(IF=3.105)上的一篇文章:“Heterogeneity of MSI-H gastric cancer identifies a subtype with worse survival”,作者通过生信分析手段将MSI-H胃癌数据分为了两个亚组,并进一步使用了基因集富集分析等多种方法,探究了两个亚组在临床特征,预后情况,肿瘤免疫等因素之间的差异,并探讨了MSI-H1亚组预后较差的原因。
科研菌
2020/09/22
1.9K0
老瓶新装:TCGA+GEO分子分型发5+分
Cibersort免疫浸润的在线分析及R语言代码实现
上期展示了ESITMATE(基于转录组数据)计算免疫得分和肿瘤纯度的一个例子,详见ggplot2实现分半小提琴图绘制基因表达谱和免疫得分。实际上计算肿瘤纯度的方法还有InfiniumPurify(基于甲基化数据)、ABSOLUTE(基于体细胞拷贝数变异)、PurityEst(基于突变数据)等等,而计算免疫浸润的有Cibersort、ssGSEA、TIMER等算法。
生信宝典
2022/01/18
6.2K0
Cibersort免疫浸润的在线分析及R语言代码实现
免疫相关lncRNA分型竟然发表在14分Nature子刊!
lncRNA与肿瘤发生、进展、预后密切相关。因此,有必要将lncRNA 纳入临床前模型以开发预后生物标志物。
作图丫
2022/03/29
5030
免疫相关lncRNA分型竟然发表在14分Nature子刊!
ProTICS 揭示了不同分子亚型中肿瘤浸润免疫细胞的预后影响
这是生信技能树知识整理工作的第2个文档,前面的是:基于支持向量机模型的TNBC的分子亚型预测
生信技能树
2022/07/26
6400
ProTICS 揭示了不同分子亚型中肿瘤浸润免疫细胞的预后影响
RNAseq|组学分型-ConsensusClusterPlus(一致性聚类), NMF(非负矩阵分解)
肿瘤分型分析是生信文章中的常客,大致是通过将基因的表达量进行聚类或者非负矩阵分解,发现新的亚型,然后对不同亚型的临床特征,免疫特征等进行比较分析,文章末尾简单的列了一些应用。
生信补给站
2023/08/25
6K2
RNAseq|组学分型-ConsensusClusterPlus(一致性聚类), NMF(非负矩阵分解)
转录组8种免疫浸润分析方法整理
探索疾病的免疫微环境是当下研究的热点,因此这也要求我们对免疫浸润分析的各种工具要有所了解,这些工具包括: CIBERSORT,quanTIseq,EPIC (这三种方法可得到不同细胞亚群的百分比结果/绝对丰度), xCell,TIMER,MCPcounter,ImmuCellAI (这四种方法可得到相对丰度),ESTIMATE (用于进行基质、免疫、Estimate和肿瘤纯度评分)等。
凑齐六个字吧
2024/08/17
1.6K0
转录组8种免疫浸润分析方法整理
新TCGA+文献复现里的几种算法
reads计数数据(测序的短片段),会匹配到基因。若匹配到,则匹配到的基因会count+1。(一个基因对应4个read,即count为4)
用户10758803
2024/03/10
3460
8分+的肿瘤免疫浸润和预后模型的文章思路!
头颈鳞状细胞癌(HNSCC)是全球人类最常见的第六大恶性肿瘤,每年约有60万例新诊断病例。超过50%的HNSCC的患者被诊断时处于晚期,晚期HNSCC预后较差,治疗方法有限。免疫治疗由于其安全性和不良反应较少,可能会对晚期HNSCC患者产生更好的治疗效果
作图丫
2022/03/29
1.4K0
8分+的肿瘤免疫浸润和预后模型的文章思路!
批次效应去除之combat和removebatcheffect
我们直接用easyTCGA下载结肠癌和直肠癌的转录组基因表达数据,它会自动帮我们把数据合并在一起。
医学和生信笔记
2023/08/30
1.9K1
批次效应去除之combat和removebatcheffect
GSVA和ssGSEA
最近写了这么多关于富集分析的推文,不知道大家看懂了没有,其实富集分析主要就分为两种:ORA和GSEA。
医学和生信笔记
2023/08/30
1.2K0
GSVA和ssGSEA
9步骤完成单细胞数据挖掘文章全部图表复现
文章图表复现: Integration of scRNA-Seq and Bulk RNA-Seq to Analyse the Heterogeneity of Ovarian Cancer Immune Cells and Establish a Molecular Risk Model
生信技能树jimmy
2023/08/31
1.1K0
9步骤完成单细胞数据挖掘文章全部图表复现
WGCNA分类性状处理
这篇推文主要探讨下WGCNA如何处理分类性状。之前已经演示过WGCNA实战了:WGCNA实战:识别免疫相关lncRNA
医学和生信笔记
2023/10/23
5230
WGCNA分类性状处理
多组学、多算法聚类神器-MOVICS
了解到一个发表在bioinformatics的用于多组学聚类的R包MOVICS,学习下他的Vignette。它支持10个聚类算法,综合考虑多组学数据,多算法聚类,并且可以直接做出发表级的图,很强大。还是做肿瘤资源多呀,除了TCGA上哪里去找这么大样本量的、同一批人的多组学数据呢。 使用browseVignettes("MOVICS")这句代码即可召唤作者写的详细教程啦。
用户11414625
2024/12/20
1800
多组学、多算法聚类神器-MOVICS
1行代码计算肿瘤突变负荷TMB
肿瘤突变负荷(TMB, tumor mutation burden)在生信数据挖掘领域是很古老的东西了,没想到还有人在用它进行各种分析...
医学和生信笔记
2023/02/14
1.9K1
1行代码计算肿瘤突变负荷TMB
tigeR免疫治疗数据分析工具学习和整理
该工具内置了 11 个黑色素瘤数据集、3 个肺癌数据集、2 个肾癌数据集、1 个胃癌数据集、1 个低级别胶质瘤数据集、1 个胶质母细胞瘤数据集和 1 个头颈鳞状细胞癌数据集的 1060 例具有免疫治疗临床信息的样本。23个重要的免疫治疗反应相关的生物标志物。10种TME去积卷方法工具和7种机器学习算法。
凑齐六个字吧
2024/10/15
2250
tigeR免疫治疗数据分析工具学习和整理
免疫浸润结合5+分新思路!
大家好,今天和大家分享的是2020年8月26日发表在Cancer Immunol. Immunother上IF=5.442的一篇文章——T‑cell complexity and density are associated with sensitivity to neoadjuvant chemoradiotherapy in patients with rectal cancer。作者运用高通量T细胞受体(TCR)β测序技术与免疫组化的方法 ,对比了接受CRT(化疗)前后直肠癌患者TCR库复杂性与密度的变化,发现TCR多样性指数和CD8+ TIL密度分别与CRT的良好预后有关。
科研菌
2020/12/08
7910
免疫浸润结合5+分新思路!
定量免疫浸润在单细胞研究中的应用
最近听说定量免疫浸润很火,于是我也报名参加了果子老师的课程,跑了几个R包,你比如说xCell啊,GSVA啊,MCPcounter啊,ConsensusTME,ImmuneSubtypeClassifier,当然还有大名鼎鼎的CIBERSORT。安装R包跑实例文件这件事是我经常做的,但是很少做的这么系统。相比于跑R包,对我的更大难点在于理解定量免疫浸润这件事。
生信技能树jimmy
2020/07/16
2.8K1
定量免疫浸润在单细胞研究中的应用
相关推荐
免疫浸润结果可视化
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验