想象你是一位刚上任的城市数据分析师,管理的对象是一座“细胞城市”。城市里有约两万个岗位,我们叫它基因。每个岗位都有一份锁在档案室保险柜里的岗位说明书(DNA),从不轻易离开档案室;只有当城市需要某种能力时,档案室才把说明书复印一份发往车间执行——这些复印本就是 mRNA(转录本)。细胞里所有正在执行的工作单加在一起,就叫转录组。 问题来了:这座城市每天发出海量工作单,如何知道每个岗位到底加了多少班?RNA-seq 转录组测序,就是统计这些工作单的系统。但原始数据高维又嘈杂,两万多个岗位的忙闲变化深埋在噪声里。于是 AI 登场:统计检验找出“过度加班”和“停工”的岗位(差异表达),聚类把工作模式相似的城市归成一类,自编码器把整份日报压缩成风格摘要,图神经网络分析岗位间的协作牵制,通路富集定位集体加班的部门,最后还能据此给生病的城市划分亚型、对症施策。这篇教程将带你把“读日报—找异常—分班—画网络—查部门—定分型”的完整链路走一遍。准备好了吗?翻开第一份城市日报吧。
对 AI 从业者来说,转录组分析是进入生命科学赛道的黄金入口:掌握差异表达、聚类与深度特征提取,你就能从海量基因数据中发现疾病标志物,成为生物信息团队中不可替代的算法工程师。
目录
可视化演示
演示RNA-seq数据比对与标准化、自编码器降维聚类发现疾病亚型,以及差异表达与通路富集三个核心环节。
本节配有交互动效(进入视口后自动加载,约 3KB)。
数据标准化:TPM跨样本可比 读段比对到参考转录本 转录本定量消除测序深度差异 批次效应校正与质控过滤 TPM=(read×10⁶)/length 标准化后表达水平可跨样本比较
转录组基础:先看懂城市的工作日报
请把每个细胞想象成一座分工精细的城市。两万多个基因就是两万多个岗位:有制造胰岛素的“食品厂工人”,有负责 DNA 修复的“电路检修员”,有传递信号的“外卖小哥”。每个岗位的职责都写成一份岗位说明书,锁在市中心档案室(细胞核)的保险柜里——这份说明书就是 DNA,它从不轻易离开档案室。当城市需要某个岗位开工时,档案室会复印一份说明书交给车间执行,这份复印本就叫 mRNA。此刻城市里所有正在流通的工单加在一起,就是这座城市的“工作日报”——转录组。
RNA-seq 就是清点这份日报的系统:先把城市里所有 mRNA 抽出来,反转录成稳定的 cDNA,上机测序得到一条条短读段,再把读段“贴回”参考基因组,数一数每个基因名下有多少条读段——读段越多,说明这个岗位今天越忙碌。但直接解读原始计数有两个陷阱:长的基因更容易被读到,测序量大的实验所有计数都会整体膨胀。就像统计工单时,印刷字体大的部门天然多占纸张,而日报总页数变多时所有部门看起来都在忙。
于是需要归一化,最常用的指标是 TPM(Transcripts Per Million,每百万转录本数),它同时校正基因长度和测序深度两个偏差:
1. 计算读段密度:把基因 i 的读段数 r_i 除以基因长度 l_i,得到每碱基上的读段数,消除“长基因天然被多读到”的长度偏差。
2. 归一化为占比:用该基因的密度除以所有基因密度之和,表达它占城市全部工单数的比例,消除测序深度带来的整体放大效应。
3. 放大到百万量级:乘上 10^6,得到“每百万条转录本中该基因占多少条”,数值更直观、便于跨样本比较。
有了 TPM 这把公平的尺子,跨城市、跨实验比较才成为可能。接下来,我们要把健康城市和生病城市的日报摆在一起,逐岗核对谁在疯狂加班、谁已彻底停工——这正是差异表达分析的工作。
差异表达分析:找出加班与停工的岗位
现在手头有两类城市:健康的和生病的。我们的目标是翻遍两万多个岗位的工作记录,找出哪些岗位在生病城市里明显多开工(上调表达)或彻底停工(下调表达)。但城市每天发工单的数量有随机波动,就像昨天全城外卖 3 万单、今天 3.2 万单,不能仅凭数字变化就断定外卖行业变繁荣了。这需要一场统计学审问:眼前这个差别,到底是真实差异,还是随机波动?
经典做法是对每个基因做两样本 t 检验:把两种城市里该基因的表达量看成两组观测值,比较它们的均值差是否显著大于组内波动。公式如下:
1. 分子:两组平均表达之差:拿出患病城市与健康城市中该基因的平均表达量相减,反映岗位繁忙度的变化方向与幅度。
2. 分母:合并标准误:把两个城市的组内波动按各自样本量折算后相加再开方,衡量均值差的“测量噪声”有多大。
3. 比值即检验统计量:均值差除以标准误得到 t 值,|t| 越大,p 值越小,越说明差异不太可能由随机波动造成。
4. BH 校正控制假阳性:对全部基因的 p 值按秩调整得到 FDR(错误发现率),常与倍数变化阈值组合成双条件筛选。
经过这一轮“审问”,我们得到一张火山图:横轴是 log2 倍数变化(变化幅度),纵轴是 -log10 p 值(变化可信度),右上角和左上角的点就是值得关注的差异基因。但差异基因往往成百上千个,它们背后有没有隐藏的结构性规律?下一节,我们学习如何给城市画像、分班。
聚类分析:给城市的工作风格分班
假设你是教育局局长,要对 60 座城市的运行手册做调研,但每份手册有两万多个指标——人脑根本看不过来。聪明的做法是先抓“城市风格”的主干:有的城市重工业,有的重服务业,有的重科研。聚类分析就是这个“分班”过程:让工作模式相似的城市自然聚成一个班,全程不需要事先贴标签,属于无监督学习。
转录组数据动辄上万维,直接聚类会受噪声和冗余干扰,所以第一步通常用 PCA 或 UMAP 把高维表达谱压缩到可视化的低维空间,相当于只考几门“代表科目”来概括学生水平。然后在低维空间做 K 均值聚类,它的目标非常直白:找到 K 个聚类中心,让每个样本到所属中心距离的平方和最小:
1. 随机初始化 K 个中心:先随机放 K 个“班主任”站位,比如 K=3,代表我们想分三个班。
2. 样本归属最近中心:每个样本(城市)划给距离最近的班主任,形成初始分班。
3. 用类内均值更新中心:每班所有学生的平均位置成为新班主任站位,班级“重心”随成员变化而移动。
4. 迭代至收敛:重复“归类—更新中心”两步,直到班主任位置不再明显移动,输出稳定分班结果。
聚类让我们看到城市之间存在天然的“风格部落”。但把两万维数据硬压到两三个维度时,线性降维难免丢失非线性细节——有没有更聪明的压缩方式?下一节的自编码器,交给神经网络来学“怎么写摘要”。
自编码器:AI 笔下的城市摘要师
聚类之前我们用 PCA 做机械压缩,但 PCA 是线性变换,而城市的工作风格可能是高度非线性的:岗位之间的协作、代偿、级联都藏在工单数字里。这时可以请出一位“摘要师”——自编码器(Autoencoder)。它像个实习生,读完整份两万行的日报,只允许写 20 个字的摘要;但必须凭摘要尽可能还原出原日报。如果还原得像,说明那 20 个字真的抓住了精髓。
自编码器由编码器 f 和解码器 g 组成:编码器把高维表达向量 x_i 压缩成低维潜变量 z_i,解码器把 z_i 还原成重建向量 \hat{x}_i。训练目标就是最小化重建误差——原文与“摘要重建文”之间的差距:
1. 编码器压缩:高维表达向量经过多层非线性网络,压成远小于原维度的潜变量 z_i。
2. 解码器重建:潜变量再经过对称结构的网络,还原成与原维度相同的重建向量。
3. 最小化重建误差:用均方误差衡量原文与重建文的差距,梯度回传同时更新编码器和解码器参数。
4. 潜变量即特征:训练完成后,把 z_i 取出来作为样本的低维特征,可用于聚类、疾病分型,甚至批次效应校正。
摘要师提炼出的低维特征,往往比原始两万维数据更干净、更抗噪。但岗位之间并非各自独立,它们构成了一张协作网——要真正读懂这张网,需要图神经网络登场。
图神经网络:透视岗位协作牵制网
城市里的岗位从来不是孤岛:外卖需求暴增,餐饮店、包装厂、交通调度都会跟着忙起来;某条供应链断裂,上下游部门连锁反应。要把这种“联动关系”写进模型,光靠向量不够,还需要一张图——节点是基因,边是它们之间的调控或共表达关系,这就是基因调控网络。
图神经网络(GNN)的核心操作叫消息传递:每一层,每个节点不仅要更新自己的特征,还要“听取”邻居节点的特征,把自己的状态与邻居状态融合。层数越多,节点能感知的“朋友圈”范围越广。一个典型的消息传递公式如下:
1. 自身特征变换:节点自己上一层的表示乘上权重矩阵,保留“历史存量”信息。
2. 聚合邻居信息:把每个邻居 u 的特征乘权重后求和,相当于把一圈朋友圈的意见汇总起来。
3. 融合并激活:自身信息与邻居信息相加,过非线性激活函数 σ(如 ReLU),得到节点的新表示,进入下一层。
有了 GNN,我们不仅能看单个基因的异常,还能看“异常如何通过网络扩散”——这比单独看基因更贴近疾病真实机制。不过故事还没完:成百上千个差异基因扎堆出现,会不会它们其实属于同一条流水线?下一节我们找一找“集体加班的部门”。
通路富集:定位集体加班的部门
假设城市日报显示:消防局、医院、交警队、应急管理局同时大量开工。单独看,四个部门各自在加班;但把名单放在一起,立刻明白——城市可能发生了重大事故。生物学里也有类似的“部门”:通路(Pathway)。KEGG、GO 等数据库把参与同一功能的基因编成基因集,就像把员工编入同一个部门目录。
通路富集分析要回答:我们筛出的差异基因,是显著集中出现在某个通路里,还是纯属随机凑巧?这可以用超几何检验定量:想象一个装满 N 个基因的大口袋,其中 M 个属于某通路;随机摸出 n 个差异基因,恰好有 k 个来自该通路的概率服从超几何分布。富集的 p 值就是“摸到 ≥k 个通路基因”的尾概率:
1. 定义四个关键参数:N 为全部基因数,M 为该通路基因数,n 为差异基因总数,k 为差异基因中属于该通路的个数。
2. 单点概率:任意抽 n 个基因中恰有 i 个通路基因的超几何概率,即“恰好重叠 i 个”的组合数占比。
3. 累计尾概率:从总概率 1 中减去“重叠少于 k 个”的所有概率,剩下的就是“≥k 个重叠”的富集 p 值,越小越富集。
富集分析把“一堆基因”升华成“一条机制”,给疾病故事提供了叙事主线。现在所有线索都齐了——差异基因、低维特征、调控网络、富集通路——该用它们做点真正有价值的事:给疾病“分型”,走向精准医疗。
疾病分型应用:从一刀切到精准分班
同一个病名的患者,预后可能天差地别:有人对药物敏感,有人完全无效。就像同一本教材教出来的学生,学习风格各不相同。过去医学常按组织形态“一刀切”分型,如今我们希望用转录组数据驱动,把患者精确分班,让每个班匹配最合适的治疗方案,这就是疾病分型(如乳腺癌的 PAM50 亚型、肺癌的免疫亚型)。
一套典型流程是:先做差异表达与富集分析,筛选一组标志基因签名;再用自编码器提取低维特征,配合聚类或分类器把患者划入亚型;最后用生存分析与临床指标评估分型是否有预后价值。给患者打分常用的“签名分数”公式:
1. 挑选标志基因集合:从差异基因与富集通路里挑出 m 个最具代表性的基因,构成疾病标签签名。
2. 标准化消除量纲:每个基因在不同患者间做 z-score,消除绝对表达量差异,让权重可以跨基因比较。
3. 加权求和得分数:把患者 i 在各标志基因上的标准化表达乘权重 w_j 后累加,得到分型分数。
4. 划分并验证亚型:设定阈值或结合聚类结果把患者划入不同亚型,再用生存曲线、AUC 等指标验证分型效果。
从读日报、找差异、聚类画像、神经网络压缩、网络透视、通路定位,到分型落地——最初那座混沌的细胞城市,已经在 AI 的帮助下变得井井有条。这就是计算生物学与精准医学结合的美妙之处:数据驱动,但每一步都映照着真实的生物学机制。
AI 应用场景
场景一:肿瘤精准分型平台
阶段:特征学习与下游建模
解决的问题:传统病理分型依赖形态学观察,同一癌种患者预后差异大,医生难以判断该用靶向治疗还是免疫治疗;AI 能从转录组中自动提取亚型特征,量化分子层面的差异。
具体案例:某三甲医院基因组中心收集 800 例乳腺癌患者的 RNA-seq 数据,先用 TPM 归一化与质量控制,再用自编码器把两万维表达压缩到 32 维,最后用 K 均值聚类得到 4 个亚型,结合生存分析发现其中一个亚型五年生存率显著更低,医生据此为患者调整辅助治疗方案。
场景二:单细胞转录组的细胞类型鉴定
阶段:数据降维与聚类
解决的问题:单细胞 RNA-seq 数据规模达数十万细胞,人工标记细胞类型不仅耗时,而且主观性强、标准不统一。
具体案例:研究团队先对 10 万个人脑细胞用 UMAP 降维 + 聚类获得候选细胞群,再用 GNN 在细胞—基因二分图上做节点分类,把未知细胞归入已知类型,最终发现了一个此前被忽略的稀有神经元亚群,为神经科学提供了新线索。
场景三:药物响应预测
阶段:模型训练与临床预测
解决的问题:免疫治疗有效率仅 20%—30%,盲目用药代价高昂;需要从分子层面提前预测哪些患者可能受益。
具体案例:制药公司构建了肿瘤相关基因调控网络,用 GNN 聚合每个患者的突变与表达信息,预测其对 PD-1 抑制剂是否响应,在独立验证队列中 AUC 达到 0.82,成为医生临床决策的辅助依据。
Python 演示
import math import numpy as np def simulate_rnaseq(n_genes=400, n_ctrl=30, n_case=30, seed=42): """模拟两个组的 RNA-seq 计数矩阵, 并埋入 25 个真实差异基因.""" rng = np.random.default_rng(seed) ctrl = rng.poisson(lam=50, size=(n_genes, n_ctrl)).astype(float) case = rng.poisson(lam=50, size=(n_genes, n_case)).astype(float) truth = rng.choice(n_genes, size=25, replace=False) case[truth, :] = np.round(case[truth, :] * 2.5) return ctrl, case, truth def diff_express(ctrl, case): """对每个基因做两样本 t 检验, 返回 p 值与 log2 倍数变化.""" n = ctrl.shape[0] pvals = np.ones(n) log2fc = np.zeros(n) for g in range(n): a, b = ctrl[g] + 1.0, case[g] + 1.0 na, nb = len(a), len(b) va, vb = a.var(ddof=1), b.var(ddof=1) t = abs(a.mean() - b.mean()) / np.sqrt(va / na + vb / nb) pvals[g] = 2 * (1 - 0.5 * (1 + math.erf(t / math.sqrt(2)))) log2fc[g] = np.log2(b.mean() / a.mean()) return pvals, log2fc def bh_correct(pvals, fdr=0.05): """BH 方法做多重假设校正, 返回是否显著的真值数组.""" order = np.argsort(pvals) q = pvals[order] * len(pvals) / np.arange(1, len(pvals) + 1) q = np.minimum.accumulate(q[::-1])[::-1] qvals = np.empty_like(pvals) qvals[order] = np.minimum(q, 1.0) return qvals < fdr def kmeans(X, k=2, iters=20, seed=0): """对样本表达谱做 K 均值聚类, 返回每个样本的簇标签.""" rng = np.random.default_rng(seed) centers = X[rng.choice(len(X), k, replace=False)] labels = np.zeros(len(X), dtype=int) for _ in range(iters): dists = np.linalg.norm(X[:, None, :] - centers[None, :, :], axis=2) labels = dists.argmin(axis=1) for j in range(k): if np.any(labels == j): centers[j] = X[labels == j].mean(axis=0) return labels def main(): ctrl, case, truth = simulate_rnaseq() pvals, log2fc = diff_express(ctrl, case) de_idx = np.where(bh_correct(pvals) & (np.abs(log2fc) >= 1.0))[0] hits = int(np.isin(de_idx, truth).sum()) print("DE genes:", len(de_idx), "| true hits:", hits) sig = np.hstack([ctrl[de_idx], case[de_idx]]).T labels = kmeans(sig, k=2) acc = max((labels[:30] == 0).mean(), (labels[:30] == 1).mean()) print("Sample clustering accuracy: %.1f%%" % (acc * 100)) if __name__ == "__main__": main()
case[truth, :] = np.round(case[truth, :] * 2.5)把 25 个“真差异基因”在患病组放大 2.5 倍,埋入已知答案供后续验证,就像事先知道哪几个岗位真的在加班。a, b = ctrl[g] + 1.0, case[g] + 1.0给计数加 1 再做对数处理,避免零计数导致除零或无穷大。t = abs(a.mean() - b.mean()) / np.sqrt(va / na + vb / nb)两样本 t 检验统计量:均值差除以合并标准误,是“差异表达”核心审问公式的代码实现。pvals[g] = 2 * (1 - 0.5 * (1 + math.erf(t / math.sqrt(2))))用正态近似计算双侧 p 值,等价于查 t 分布表。q = pvals[order] * len(pvals) / np.arange(1, len(pvals) + 1)把 p 值排序后按秩放大,是 BH 多重假设校正的关键一步。np.minimum.accumulate(q[::-1])[::-1]逆向累积最小值,保证校正后的 q 值单调不减,符合 FDR 的数学定义。dists = np.linalg.norm(X[:, None, :] - centers[None, :, :], axis=2)利用广播机制一次性算出每个样本到所有聚类中心的欧氏距离,对应 K 均值“就近分班”步骤。de_idx = np.where(bh_correct(pvals) & (np.abs(log2fc) >= 1.0))[0]FDR 与倍数变化双阈值筛选差异基因,呼应正文“既要可信度、又要幅度”的筛选逻辑。
常见误区
误区“转录组测序和全基因组测序差不多,都是把 DNA 序列读出来,只是名字不同而已。”
正解RNA-seq 测的是细胞里“正在执行”的 mRNA 拷贝,反映的是各岗位的工单数量(表达量),而不是岗位说明书本身。全基因组测序看的是城市规划图——每个岗位是否存在、有没有突变;转录组测序数的是今天各工种发出多少工单——哪些岗位在忙、忙到什么程度。两者用的仪器相似,但回答的问题完全不同。
为何常见:两者都会产出“序列”且都依赖高通量测序仪,术语相近、流程相似,初学者极易混淆测序对象和生物学含义。
误区“差异表达分析做完,只要 p 值小于 0.05 的基因我都当作真发现,直接写进论文。”
正解一次检验两万多个基因,按 0.05 的阈值,纯随机也会冒出约 5% 的假阳性——相当于两万个基因里凭空多出上千个“假加班岗位”。因此必须用 BH 等 FDR 方法做多重假设校正,并叠加倍数变化阈值双重过滤,才能把假阳性压到可接受水平。
为何常见:初学者习惯单次检验的阈值标准,容易忽略“检验次数越多,假阳性累积越多”这一统计事实。
误区“自编码器这么强,把原始 counts 直接扔进去就行,归一化、质控这些步骤都可以省了。”
正解自编码器对量纲和分布极其敏感。原始 counts 受测序深度、基因长度影响严重,若不先做 TPM/CPM 归一化和质量控制,模型学到的“特征”很可能是测序深度的伪影,而不是真实的生物学差异。深度学习是“端到端”,但不等于“不做清洗”。
为何常见:误以为端到端学习就等于无需任何特征工程和数据清洗,忽略了深度模型同样“垃圾进、垃圾出”。
误区“K 均值聚出三个类,就说明这种病有三种亚型,临床就该按这个分。”
正解聚类只是数据驱动的分组假设,K 的选择、降维方式都会影响结果。分型结论必须结合临床指标(生存期、病理分期)、独立队列重复验证,以及标志基因的可解释性,才可能成为真正的分型依据。GNN、自编码器等模型的输出同样需要严谨的生物学与临床验证。
为何常见:容易把“数据里发现模式”直接等同于“生物学因果结论”,跳过了验证环节。
误区“看差异表达时只关注表达量最高的那批基因,它们肯定是关键致病基因。”
正解重要性看的是“差异”而非“绝对量”。管家基因表达量极高但几乎不变化,而一些转录因子表达量很低却调控全局。正确做法是把差异表达、通路富集、GNN 网络中心性结合起来,才能定位真正关键的核心基因。
为何常见:把“出场多=重要”的日常直觉迁移到生物学里,忽略了调控网络中的杠杆效应。
面试题
Q1. RNA-seq 直接测量的是细胞中的什么?
- A.基因组 DNA 的碱基序列
- B.细胞中各种 mRNA 的丰度← 正确答案
- C.蛋白质的空间三维结构
- D.染色体的甲基化水平
答案:B。RNA-seq 测的是转录本(mRNA)的丰度,就像统计城市每天发出多少工单,而不是翻阅档案室里的岗位说明书(基因组序列)。A 是全基因组测序,C 是结构生物学,D 是表观遗传学,均不是 RNA-seq 的直接测量对象。
Q2. 火山图中横轴通常表示什么?
- A.基因序列的长度
- B.log2 倍数变化值← 正确答案
- C.样本的数量大小
- D.测序的深度大小
答案:B。火山图横轴常用 log2 倍数变化(log2FC)表示表达量变化幅度,纵轴是 -log10 p 值表示变化可信度。基因长度、样本数量、测序深度都不是火山图的标准横轴,它们通常在预处理阶段被归一化消除。
Q3. 中心法则描述的遗传信息流向是?
- A.RNA → DNA → 蛋白质
- B.蛋白质 → RNA → DNA
- C.DNA → RNA → 蛋白质← 正确答案
- D.RNA → 蛋白质 → DNA
答案:C。中心法则是分子生物学的基石:DNA 通过转录生成 mRNA,mRNA 通过翻译生成蛋白质。A 是逆转录病毒的特殊路径,B 和 D 违背了信息流的单向性,均不属于中心法则的主流描述。
Q4. 为什么差异表达分析要做多重假设校正?
- A.因为同时检验的基因数量极多易出假阳性← 正确答案
- B.因为样本数量不足导致方差估计偏高
- C.因为测序仪本身存在系统性偏差
- D.因为基因表达数据不服从正态分布
答案:A。一次检验两万多个基因,按 0.05 的阈值纯随机也会出现约 5% 的假阳性,累积起来数量惊人。BH 等 FDR 方法正是为了控制“大量同时检验”带来的假阳性膨胀。样本量、测序偏差和分布假设是建模时考虑的问题,但不是多重校正的直接原因。
Q5. K 均值聚类中样本归属簇的判定依据是?
- A.与最近聚类中心的距离最小← 正确答案
- B.与最远聚类中心的距离最大
- C.与所有聚类中心的距离相等
- D.与聚类中心连线的角度最小
答案:A。K 均值的每次迭代都会把每个样本划给欧氏距离最近的聚类中心,随后用类内均值更新中心位置。B、C、D 都与算法定义不符——K 均值从不追求“最远”“相等”或“角度”。
Q6. 自编码器在转录组分析中的主要作用是?
- A.直接预测基因的 DNA 序列
- B.将高维表达数据压缩成低维特征← 正确答案
- C.替代显微镜观察细胞形态特征
- D.提高测序仪器本身的读出速度
答案:B。自编码器通过“编码—解码—重建”把两万维表达向量压成低维潜变量,既做特征提取也用于批次效应校正。它不预测 DNA 序列、不替代显微镜,更与测序硬件无关。
Q7. 关于通路富集分析,下列说法正确的有哪些?(选两项)
- A.它检验差异基因是否在某通路中富集← 正确答案
- B.它直接给出基因的突变概率
- C.它依赖基因集数据库如 GO 和 KEGG← 正确答案
- D.它用序列长度计算富集分数
答案:AC。通路富集用超几何检验看差异基因是否显著集中于某个功能基因集,基因集来自 GO、KEGG 等数据库。它关注的是“功能富集”而非突变概率,也不涉及序列长度,因此 B、D 错误。
Q8. 转录组数据预处理通常包括哪些步骤?(选两项)
- A.质量控制并过滤低质量的序列片段← 正确答案
- B.将表达量归一化以便跨样本比较← 正确答案
- C.直接删除样本中的所有差异表达基因
- D.用测序深度转换全部样本的标签信息
答案:AB。高质量分析必须先做质量控制(过滤低质量读段)和归一化(TPM/CPM 等消除深度与长度偏差)。C 会彻底毁掉数据;D 把测序深度和样本标签混为一谈,毫无生物学意义。
Q9. 图神经网络用于转录组分析时,图中的节点可以是哪些?(选两项)
- A.单个基因或转录本← 正确答案
- B.单个样本或单个细胞← 正确答案
- C.测序仪器的型号信息
- D.实验室的房间编号信息
答案:AB。GNN 的节点既可以是基因(基因调控网络),也可以是样本/细胞(细胞邻接图),边表示调控或相似关系。仪器型号、房间编号属于实验元数据,不是生物学图中的节点。
Q10. 关于 BH 多重假设校正,下列说法正确的是?
- A.它保证所有基因的 p 值都不变
- B.它按秩调整 p 值以控制假发现率← 正确答案
- C.它把所有基因的 p 值取平均
- D.它只校正差异倍数最大的基因
答案:B。BH 方法先把 p 值排序,按秩放大后做逆向累积最小,得到控制 FDR 的 q 值。它既不是保持 p 值不变,也不是简单取平均或只挑显著基因,而是整体控制“宣称显著时犯错的概率”。