微卫星不稳定性(Microsatellite Instability,MSI), 是肿瘤基因组的一种特征,理论上是需要DNA测序的, 但是目前绝大部分的ngs样品都是转录组层面的,所以仅仅是根据部分基因的表达量高低来预测肿瘤样品的微卫星不稳定蛮有意义的。
恰好学员群有人问到了R包PreMSIm根据基因表达量来预测微卫星不稳定的问题,借花献佛分享给大家,文章发表在Computational and structural biotechnology journal 2020, 标题是:《PreMSIm: An R package for predicting microsatellite instability from the expression profiling of a gene panel in cancer.》
MSI诊断检测的方法和应用
正常情况下,可以通过DNA检测和免疫组织化学(immunohistochemistry,IHC)法,根据结直肠癌中MSI被检测出的频率可以将其分为三类 :
- MSS,无明显的MSI出现;
- MSI-L,MSI出现频率低,一般低于30%;
- MSI-H,MSI出现频率低,一般高于30%。
MSI检测可作结直肠癌预后良好的标志 MSI结直肠癌5年生存率要显著高于MSS结直肠癌,MSI-H结直肠癌比MSS结直肠癌有更好的预后,同时,研究者还发现MSI结直肠癌转化为恶性肿瘤的机率较其他类型低,尤其对年轻的MSI结直肠癌患者来说,治愈机率很大。
PreMSIm的原理
PreMSIm本质上是一个分类模型而已,它首先针对 MSI-high (MSI-H) 和 MSI-low/microsatellite stability (MSS)的两个分组的,转录组差异分析,拿到了的统计学显著的差异基因去建模,得到了15个基因的模型,包括:DDX27, EPM2AIP1, HENMT1, LYG1, MLH1, MSH4, NHLRC1, NOL4L, RNLS, RPL22L1, RTF2, SHROOM4, SMAP1, TTC30A, and ZSWIM3.
如下所示:
PreMSIm本质上是一个分类模型
建模的差异分析,在TCGA的6个癌症队列,six cancer cohorts (eso- phageal, colon, rectum, gastric, uterine, and endometrial cancers) 进行,验证选择了十几个gse数据集。
模型效果是非常好:
模型效果是非常好
PreMSIm的用法
目前它在GitHub上面,见:https://github.com/WangX-Lab/PreMSIm
安装很简单:
代码语言:javascript复制if (!requireNamespace("devtools", quietly = TRUE))
install.packages("devtools")
devtools::install_github("WangX-Lab/PreMSIm")
用法也超级简单, 只需要你的肿瘤样品的转录组测序或者表达量芯片数据里面的15个基因存在,并且表达量被0-1 scale 即可。
这个包的测试数据,如下所示:
代码语言:javascript复制# Prediction of MSI ---------------------------------------------------------------------------
library(PreMSIm)
path = system.file("extdata", "example.txt", package = "PreMSIm", mustWork = TRUE)
input_data = data_pre(path, type = "ID")
pheatmap::pheatmap(input_data)
可以看到,作者给出来的表达量矩阵已经是筛选了基因,并且0-1 scale 了的。
包的测试数据
有了15个基因在8个样品的表达量矩阵,接下来就是运行msi_pre函数即可:
代码语言:javascript复制> msi_pre(input_data)
Sample MSI_status
1 Sample1 0
2 Sample2 0
3 Sample3 1
4 Sample4 0
5 Sample5 1
6 Sample6 0
7 Sample7 0
8 Sample8 0
可以看到, Sample3 和 Sample5 被预测为1,这个函数的帮助文档里面写的是:
- Prediction results ("1" indicates MSI-high, and "0" MSI-low/microsatellite stability).
如果你有自己的表达量矩阵,也可以使用它内置的一个数据清洗函数:data_pre
代码语言:javascript复制library(PreMSIm)
path = system.file("extdata", "example.txt", package = "PreMSIm", mustWork = TRUE)
path
# "/Library/Frameworks/R.framework/Versions/4.1/Resources/library/PreMSIm/extdata/example.txt"
data_pre(path, type = "ID")
可以看到 The "type" refers to official gene symbol or Entrez gene ID. 所以它 /PreMSIm/extdata/example.txt 的文件里面的表达量矩阵是 Entrez gene ID.格式的,如下所示:
表达量矩阵
这个 函数:data_pre 超级简单,就是把 ID转换一下,并且提取它这个模型需要的15个基因。我打开了这个 函数:data_pre 的代码,写的有点丑,不过没关系,实习功能就好。
而且这个函数略微有点偷懒,它其实是内置了15个基因的不同名字,如下所示:
代码语言:javascript复制> feature
Symbol ID
1 DDX27 55661
2 EPM2AIP1 9852
3 HENMT1 113802
4 LYG1 129530
5 MLH1 4292
6 MSH4 4438
7 NHLRC1 378884
8 NOL4L 140688
9 RNLS 55328
10 RPL22L1 200916
11 RTF2 51507
12 SHROOM4 57477
13 SMAP1 60682
14 TTC30A 92104
15 ZSWIM3 140831
它并没有对表达量矩阵的两万多个基因进行ID转换,仅仅是提取感兴趣的基因即可。而且是提取了表达量子集后,就简简单单的 0-1 scale :
代码语言:javascript复制 a <- apply(t(a), 2, function(x) {
(x - min(x))/(max(x) - min(x))
})
a[is.nan(a)] <- 1
因为作者选择的是转录组测序矩阵,仅仅是简简单单的 0-1 scale ,不足以把这个模型泛化到芯片矩阵哦,所以作者指出来了:PreMSIm did not achieve satisfactory results in predicting MSI for some microarray datasets
学徒作业
任意选择TCGA的一个癌症,做一个类似的分类模型,可以是区分癌症样品和对照组织,也可以是区分不同TMN分期分级的癌症,或者是不同的分子分型哦!
分类模型一般来说不需要太多基因的, 需要自己去搜索 k-Nearest Neighbors (k-NN, k = 5) classifier 和 10-fold cross validation (CV) 哦。
当然了,开发了分类模型,通常是还需要做大量验证,所以需要收集对应的癌症的其它数据集来评价你的模型。如果能开发成为了一个R包是最好的,甚至可以写成一个R包。