| ElasticNetPerturbationOptions {SMRUCC.genomics.Analysis.CellPhenotype} | .NET clr documentation |
基于弹性网络线性调控网络的虚拟扰动参数。
扰动值采用 乘性比例 语义(与真实的 CRISPRi/CRISPRa 实验更接近):
Knockout : target = 0
Knockdown : target = KnockdownResidual * baseline
Overexpression : target = OverexpressionFold * baseline
Custom : target = spec.Value (模型空间之中的绝对值)
当 ElasticNetPerturbationOptions.Scale 为 PerturbationScale.Log2Plus1 的时候, 上面的比例会先反变换到线性空间、按比例施加、再变换回 log 空间(见该枚举的说明)。
这个约定与 InterventionSpec.GetInterventionValue() 的 mean +/- k * SD 公式不同,因此同一个基因在本引擎与贝叶斯网络引擎 上面的敲降/过表达效应量不能直接横向比较。
# namespace SMRUCC.genomics.Analysis.CellPhenotype
export class ElasticNetPerturbationOptions {
# 是否把迭代过程之中预测出来的表达量裁剪回观测区间。
#
# 线性模型可以给出负的表达量,打开这个开关之后预测值会被裁剪到 [观测最小值, 观测最大值 + 观测跨度] 区间之内(这样既避免了负表达, 又不会过早地把级联效应截断)。干预值本身不受这个区间限制。
ClampToObserved: boolean;
# Jacobi 迭代的阻尼系数,取值范围 (0, 1],默认为 1。
#
# 取值小于 1 的时候每一轮只施加一部分修正量,可以抑制强反馈环上面的振荡。
#
# 注意:这个系数只影响级联过程,ElasticNetInterventionResult.FirstOrderDelta 永远是未经阻尼的一阶效应。
Damping: double;
# 敲降之后保留下来的表达量比例,取值范围 [0, 1),默认 0.2(即约 80% 的敲降)。
KnockdownResidual: double;
# 模型空间的整体偏移量,默认 0。
#
# 当拟合矩阵做过"逐样本减去跨基因均值"的去全局因子处理时,模型空间是 x' = log2(CPM + 1) - offset,其中 offset 是该样本的跨基因均值 (再加上中位数校准)。此时:
#
#
#
# - 真实的对数表达量是
x' + offset,因此 2^((x' + offset)) - 1 才是 CPM;
# - 直接对
x' 做 2^x' - 1 会把负值压成 0,得到"敲到底"甚至反向的假象。
#
#
#
# 本属性把偏移量加回之后再施加敲降/过表达比例,最后再减掉, 从而保证扰动幅度按真实的 CPM 计算,而报告出来的仍然是模型空间的数值。
LogOffset: double;
# PerturbationScale.Log2Plus1 空间之中的伪计数偏移,默认 1。
#
# 它必须与拟合网络时所用的变换保持一致(例如 log2(x + 1) 对应 1)。
LogPseudoCount: double;
# 过表达之后的表达量相对于基线的倍数,默认 3。
OverexpressionFold: double;
# 效应传播方式,默认为级联到稳态。
Propagation: PropagationMode;
# 蒙特卡洛抽样的随机数种子,默认 42。
RandomSeed: integer;
# 是否记录级联过程之中每一步的表达量轨迹(仅在确定性模式下有效),默认关闭。
#
# InterventionResult.DynamicTrajectory 之中第 0 行是干预之前的基线, 之后每一行是一次迭代的结果。轨迹的每个元素都是一个长度为 1 的数组, 因此内存占用约为 (步数 + 1) * 基因数量 * 40 字节:在大网络之上 逐基因地做批量扰动的时候建议保持关闭。
#
# ElasticNet.SimulateCascade() 会自动开启轨迹记录。
RecordTrajectory: boolean;
# 模型输入表达量的数值空间,默认为 PerturbationScale.Linear。
#
# 如果拟合网络所用的表达矩阵是取过对数的(例如 log2(CPM+1)),必须设置为 PerturbationScale.Log2Plus1,否则敲降/过表达的幅度会偏大 2~3 倍。
Scale: PerturbationScale;
# 显著性判据:变化量超过多少个标准差才算显著,默认 0.5。
#
# 默认值与 BnInterventionAnalyzer 的 |FC| > 0.5 * SD 判据一致。
SignificanceZ: double;
# 级联迭代的最大步数(默认 50)。
#
# 把它设置为 1 等价于 PropagationMode.OneHop。 迭代会在相邻两轮的表达量最大变化小于 ElasticNetPerturbationOptions.Tolerance 的时候提前结束。
Steps: integer;
# 级联迭代的收敛阈值,即相邻两轮之间表达量的最大允许变化量(默认 1e-6)。
Tolerance: double;
}
Propagation: PropagationModeScale: PerturbationScale