我们的生物信息学马拉松授课的一个最重要的环节就是表达量矩阵数据处理,其中让大家练习最频繁的就是传统的表达量芯片的差异分析和富集分析啦。其中有一个学员是临床医师, 感兴趣的是胃肠道间质瘤(Gastrointestinal Stromal Tumor)这个疾病,但是他在复现一个芯片数据的时候,发现了临床实验结果和表达量芯片数据出现了冲突!
我们首先让人工智能大模型帮我们介绍一下,胃肠道间质瘤(Gastrointestinal Stromal Tumor)这个疾病:
是一种发生在胃肠道的软组织肉瘤,通常起源于胃肠道的间质细胞(Cajal细胞)。这些肿瘤可以发生在消化道的任何部位,但最常见于胃和小肠。GIST的治疗和预后因其生物学特性和临床行为的多样性而复杂。
比如仁济医院的2014的文章:《CTHRC1 Acts as a Prognostic Factor and Promotes Invasiveness of Gastrointestinal Stromal Tumors by Activating Wnt/PCP-Rho Signaling》,就提到了需要这么多信息才能准确判断GIST病人的原因:
这些纳入标准有助于确保研究的准确性和可靠性,同时保护患者的权益。通过这些严格的标准,研究人员可以更准确地评估GIST的生物学特性、治疗效果和预后因素,从而为未来的治疗策略和临床实践提供科学依据。GIST的治疗通常包括手术切除、靶向治疗(如使用酪氨酸激酶抑制剂)和在某些情况下的辅助治疗。由于GIST的罕见性和复杂性,对这种疾病的研究需要精确的患者选择和详细的数据收集。
文章有大量的实验结果, 就为了说明这个CTHRC1是典型的癌基因(恶性高表达,坏的预后):
如下所示:
CTHRC1是典型的癌基因(恶性高表达,坏的预后)
这个文章可能是觉得自己的超400病人的临床实验结果不可靠,然后使用了公共数据(表达量芯片)进行辅助说明,如下所示:
By analyzing the GIST microarray dataset (GSE21315) from the GEO database (Figure W1A), we found that CTHRC1 expression in GIST with liver metastasis was remarkably higher than in primary GIST tissues(fold change> 3, P < 0.05).
如下所示:
GSE21315
使用我们马拉松授课的芯片的数据处理代码即可:
library(AnnoProbe)
library(GEOquery)
gse_number <- 'GSE21315'
list.files()
if(T){gset <- geoChina(gse_number)}
a=gset[[1]]
dat=exprs(a) #a现在是一个对象,取a这个对象通过看说明书知道要用exprs这个函数
dim(dat)#看一下dat这个矩阵的维度
dat[1:4,1:4] #查看dat这个矩阵的1至4行和1至4列,逗号前为行,逗号后为列
library(limma)
a=gset[[1]]
#根据生物学背景及研究目的人为分组
##通过查看说明书知道取对象a里的临床信息用pData
pd=pData(a)
library(stringr)
##~~~分组信息编号需修改~~~
group_list=ifelse(grepl('pri',pd$title,ignore.case = T ),
"primary","metastatic")
table(group_list)
group_list <- factor(group_list,levels = c( "primary","metastatic"))
table(group_list)
a
a@annotation
# #获取芯片注释信息
# ##~~~芯片编号需修改~~~
ids=idmap( a@annotation ,'soft')
head(ids)
# 8147777 CTHRC1
boxplot(dat['8147777',] ~ group_list)
group_list
有了表达量矩阵很容易进行基本的质量控制,如下所示:
然后limma进行差异分析即可,从里面查询我们感兴趣的基因:
> t(deg['CTHRC1',])
CTHRC1
logFC "0.3724"
AveExpr "0.03416"
t "2.073"
P.Value "0.07356"
adj.P.Val "0.4286"
B "-4.476"
v "1.133"
g "stable"
name "CTHRC1"
前面提到了这个基因是 (fold change> 3, P < 0.05), 但是我们做出来并不是这样的,所以问题在哪里呢,是统计学算法吗,难道作者并没有使用limma这个最经典的表达量芯片数据处理方法吗?
实际上,如果大家仔细看上面的表达量箱线图,会发现只有6个样品:
dat["CTHRC1", ]
GSM532745 -0.46192
GSM532746 -0.01652
GSM532747 -0.11738
GSM532748 -0.24399
GSM532749 0.01651
GSM532750 0.37873
GSM532751 0.37551
GSM532752 0.34229
为什么要删除呢?本来就使用了如此古老的数据集来验证,还自己动了手脚。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有