单样本GSEA分析肿瘤组织免疫浸润

单样本GSEA分析即ssGSEA,可以计算肿瘤组织中免疫细胞的比例,从而量化免疫浸润。ssGSEA可以用R 当中的GSVA包来计算。

### 1. 下载,读入免疫细胞特征基因集

# http://cis.hku.hk/TISIDB/download.php 下载基因集

# Gene signatures of 28 tumor-infiltrating lymphocytes (TILs)
# wget http://cis.hku.hk/TISIDB/data/download/CellReports.txt

# TIL abundance across cancer types
# wget http://cis.hku.hk/TISIDB/data/download/TIL_abundance.zip

options(stringsAsFactors = F)
# setwd("/file/path")

# CellReports.txt 第一列为免疫细胞名称,第二列为NA,剩下的列为基因名
# R 读txt文件,每行的列数不一样,只能逐行读取并处理
contents <- readLines("CellReports.txt") 
geneSet <- list()
for (i in contents) {
  str_i <- strsplit(i,split = "\t")
  gene_num <- length(str_i[[1]])-2 
  name <- str_i[[1]][1]
  elements <- str_i[[1]][3:gene_num]
  geneSet[[name]] <- elements
  #print(str_i[[1]][1])
  #print(str_i[[1]][3:gene_num])
}

length(geneSet)
names(geneSet)
# View(geneSet)

### 2.读入基因表达数据
Dat <- read.table("TCGA-READ.htseq_fpkm-uq.tsv", 
                  sep = "\t",
                  header=T)

Dat[1:3,1:5]

# 行名转化,去掉版本号,如ENSG00000242268.2 -> ENSG00000242268
library(stringr)
Dat$ENSEMBL <- word(Dat$Ensembl_ID,1,sep=fixed("."))  # 提取点号前面的部分

## id转化,ENSEMBL -> SYMBOL, 因为geneSet中是SYMBOL
library(org.Hs.eg.db)

ls("package:org.Hs.eg.db")  # 查看包的信息

keytypes(org.Hs.eg.db)  # 基因编号系统名称
columns(org.Hs.eg.db)
##columns shows which kinds of data can be returned for the AnnotationDb object.
##keytypes allows the user to discover which keytypes can be passed in to select or ##keys and the keytype argument.

map_df <- select(org.Hs.eg.db, keys=keys(org.Hs.eg.db), 
                columns=c("SYMBOL","ENSEMBL"))
head(map_df)
Dat2 <- merge(Dat,map_df,by='ENSEMBL')
head(Dat2)
Dat2[1:3,1:5]

## 去除ENTREZID,Ensembl_ID列
Dat2 <- Dat2[,-c(1,2,ncol(Dat2)-1)]

## 检查是否有空值或NA
table(is.na(Dat2$SYMBOL))
table(Dat2$SYMBOL=="")

## 合并相同的symbol
Dat3 <- aggregate(.~SYMBOL,data=Dat2,mean)
head(Dat3)
Dat3[1:3,1:5]
dim(Dat3)

## 转化为最终的表达矩阵
rownames(Dat3) <- Dat3$SYMBOL
Dat3 <- Dat3[,-1] # 去除SYMBOL列
Dat3[1:3,1:5]
dim(Dat3) # [1] 行为基因:35302,列为样本:177 
MatrixData <- as.matrix(Dat3)

### 3. 单样本GSEA分析
#安装单样本GSEA分析包:GSVA
#if (!requireNamespace("BiocManager", quietly = TRUE))
#    install.packages("BiocManager")

#BiocManager::install("GSVA")
library(GSVA)
# ?gsva

gsva.es <- gsva(MatrixData,geneSet)
# kcdf 默认为"Gaussian",如果是RNA-seq的count值,参数设置为kcdf="Poisson"
dim(gsva.es)

# Min-Max标准化是指对原始数据进行线性变换
# 将每个样本中不同的免疫细胞比例标准化到0-1之间
gsva.es.norm <- gsva.es
for (i in colnames(gsva.es)) {
  gsva.es.norm[,i] <- (gsva.es[,i] -min(gsva.es[,i]))/(max(gsva.es[,i] )-min(gsva.es[,i] ))
  
}
# dim(gsva.es.norm)
# apply(gsva.es.norm[,1:6], 2, range)

# 查看样本类型
table(word(colnames(gsva.es.norm),4,sep=fixed(".")))
# 根据样本编号,进行分组 -11A结尾为正常
# sample_anno: 行名为样品名,列为分组信息
sample_anno <- data.frame(group = ifelse(grepl("11A$",colnames(gsva.es.norm)),
                                          "normal","cancer"))
rownames(sample_anno)=colnames(gsva.es.norm)

## 画热图
library(pheatmap)
pheatmap(gsva.es.norm,
         show_colnames = F,
         cluster_rows = T,
         cluster_cols = T,
         annotation=sample_anno,
         fontsize=5)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下是一份使用R语言进行GSEA分析的示例代码,供参考: ```{r} # 导入所需的R包 library(ggplot2) library(fgsea) library(org.Hs.eg.db) # 读取数据和基因注释信息 data <- read.table("data.txt", header = TRUE, row.names = 1) gene_symbols <- rownames(data) gene_entrez_ids <- mapIds(org.Hs.eg.db, gene_symbols, "ENTREZID", "SYMBOL") # 将数据按照基因表达水平从高到低排序 data_sorted <- data[order(rowMeans(data), decreasing = TRUE), ] # 定义高低风险组 high_risk_samples <- c("sample1", "sample2", "sample3") low_risk_samples <- c("sample4", "sample5", "sample6") # 计算高低风险组的基因表达平均值 high_risk_mean <- rowMeans(data_sorted[, high_risk_samples]) low_risk_mean <- rowMeans(data_sorted[, low_risk_samples]) # 计算基因表达差异 diff_expression <- high_risk_mean - low_risk_mean # 进行GSEA分析 gene_sets <- read.gmt("gene_sets.gmt") fgsea_res <- fgsea(gene_sets, diff_expression, nperm = 10000) # 绘制富集分析结果图 enrichment_plot <- ggplot(fgsea_res, aes(x = pathway, y = NES, fill = pval)) + geom_bar(stat = "identity", alpha = 0.8) + scale_fill_gradient(low = "blue", high = "red") + theme(axis.text.x = element_text(angle = 90, vjust = 0.5, hjust = 1)) + labs(x = "Pathway", y = "Normalized Enrichment Score (NES)", fill = "Adjusted p-value") enrichment_plot ``` 其中,`data.txt`是包含肿瘤样本基因表达数据的文件,`gene_sets.gmt`是包含基因集的GMT格式文件。在上述代码中,我们首先读取并排序基因表达数据,然后定义高低风险组,并计算基因表达差异。接着,我们使用`fgsea`函数进行GSEA分析,并绘制结果图。在绘制图表时,我们使用`ggplot2`包进行可视化,将富集分析结果按照`NES`和`adjusted p-value`进行着色。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值