3. Sobol指数定义与性质

Sobol方法把模型输出的总方差按输入变量的“来源”进行分解,从而得到一组非负的方差贡献份额。理解这组份额的定义与性质,是正确解读敏感性分析结果的前提。本节围绕三个核心指标展开:一阶Sobol指数、二阶交互指数与总效应指数,并用一个可手算的简单函数说明它们的含义。

方差分解的基本框架

设模型为 Y = f(X₁, X₂, …, X_d),各输入变量相互独立,输出方差为 Var(Y)。Sobol分解的核心结论是:总方差可以写成各阶方差贡献之和,

Var(Y) = Σᵢ Vᵢ + Σᵢ<ⱼ Vᵢⱼ + Σᵢ<ⱼ<ₖ Vᵢⱼₖ + … + V₁₂…d

其中 Vᵢ = Var(E[Y | Xᵢ]) 表示“单独由 Xᵢ 引起的方差”,Vᵢⱼ = Var(E[Y | Xᵢ, Xⱼ]) − Vᵢ − Vⱼ 表示“只能由 Xᵢ 与 Xⱼ 共同作用才能解释的方差”,更高阶项依此类推。所有项之和恰好等于总方差,这是Sobol指数能够作为“份额”使用的基础。

一阶Sobol指数

一阶指数定义为

Sᵢ = Vᵢ / Var(Y) = Var(E[Y | Xᵢ]) / Var(Y)

它衡量的是:如果只把 Xᵢ 固定下来(其余变量仍随机变化),输出方差平均能减少多少比例。因此 Sᵢ 是 Xᵢ 的“主效应”份额,取值范围为 [0, 1]。当 Sᵢ 接近1时,说明输出几乎全部不确定性来自 Xᵢ 单独的变化;当 Sᵢ 接近0时,说明 Xᵢ 单独变化对输出方差贡献很小——但这并不等于 Xᵢ 不重要,它可能主要通过交互作用影响输出。

二阶交互指数

二阶指数定义为

Sᵢⱼ = Vᵢⱼ / Var(Y),  Vᵢⱼ = Var(E[Y | Xᵢ, Xⱼ]) − Vᵢ − Vⱼ

它刻画的是 Xᵢ 与 Xⱼ 的“纯交互”贡献,即无法归因于任一单变量的那部分方差。取值范围同样为 [0, 1],且所有一阶与二阶指数之和不超过1。若 Sᵢⱼ 明显大于0,说明两个变量的联合变化会产生单独变化所没有的效果,例如乘积项、阈值耦合或饱和效应。实际分析中,二阶指数通常只对少数变量对显著,可作为识别关键耦合关系的依据。

总效应指数

总效应指数定义为

Sᵢᵀ = 1 − Var(E[Y | X₋ᵢ]) / Var(Y)

其中 X₋ᵢ 表示除 Xᵢ 之外的所有变量。它衡量的是:如果把除 Xᵢ 以外的所有变量都固定,输出方差平均还剩多少比例——这部分剩余方差就是 Xᵢ 的全部贡献,包括主效应和它参与的所有交互效应。因此 Sᵢᵀ = Sᵢ + Σⱼ≠ᵢ Sᵢⱼ + …,取值范围为 [0, 1],且恒有 Sᵢᵀ ≥ Sᵢ。两者之差 Sᵢᵀ − Sᵢ 正是 Xᵢ 参与交互作用的总量,是判断“该变量是否通过耦合起作用”的直接指标。

三个指数的关系可归纳为:Sᵢ ≤ Sᵢᵀ;所有 Sᵢ 之和 ≤ 1;所有 Sᵢᵀ 之和 ≥ 1;当模型完全可加(无交互)时,Sᵢᵀ = Sᵢ 且 ΣSᵢ = 1。
输出总方差 Var(Y) 的分解 V₁(X₁主效应) V₂(X₂主效应) V₁₂(交互) 高阶项… 一阶指数 Sᵢ Var(E[Y|Xᵢ]) / Var(Y) 单独固定 Xᵢ 可消除的方差份额 范围 [0,1],主效应 二阶交互指数 Sᵢⱼ Vᵢⱼ / Var(Y) 仅由 Xᵢ、Xⱼ 联合解释的方差 范围 [0,1],纯耦合贡献 总效应指数 Sᵢᵀ 1 − Var(E[Y|X₋ᵢ]) / Var(Y) 主效应 + 全部交互效应 范围 [0,1],Sᵢᵀ ≥ Sᵢ 指数间关系 Sᵢᵀ = Sᵢ + Σⱼ≠ᵢ Sᵢⱼ + …  Sᵢᵀ − Sᵢ = Xᵢ 参与交互作用的总量 ΣSᵢ ≤ 1 ≤ ΣSᵢᵀ;模型完全可加时 Sᵢᵀ = Sᵢ 且 ΣSᵢ = 1

用简单函数示例说明含义

考虑一个可手算的示例函数(示例参数为教学设定,非实测结果):

Y = X₁ + 2·X₂ + 3·X₁·X₂,  X₁, X₂ ~ U(0,1) 且相互独立

先算各阶方差贡献。由于 X₁、X₂ 独立且均匀分布,E[X]=0.5,Var(X)=1/12。对 X₁ 取条件期望:E[Y|X₁] = X₁ + 1 + 1.5·X₁ = 2.5·X₁ + 1,故 V₁ = Var(2.5·X₁) = 6.25/12 ≈ 0.521。同理 E[Y|X₂] = 0.5 + 2·X₂ + 1.5·X₂ = 3.5·X₂ + 0.5,V₂ = 12.25/12 ≈ 1.021。对 (X₁,X₂) 取条件期望即 Y 本身,Var(Y) 需展开计算:Var(Y) = Var(X₁) + 4·Var(X₂) + 9·Var(X₁X₂) + 2·Cov(X₁, 3X₁X₂) + 2·Cov(2X₂, 3X₁X₂)。利用 Var(X₁X₂)=E[X₁²]E[X₂²]−(E[X₁]E[X₂])² = (1/3)(1/3)−1/16 = 1/9−1/16 = 7/144,Cov(X₁, X₁X₂)=E[X₁²]E[X₂]−E[X₁]²E[X₂] = (1/3)(1/2)−(1/4)(1/2)=1/24,Cov(X₂, X₁X₂)=1/24,代入得 Var(Y) = 1/12 + 4/12 + 9·7/144 + 6·(1/24) + 6·(1/24) = 0.0833 + 0.3333 + 0.4375 + 0.25 + 0.25 = 1.354。

于是 S₁ = 0.521/1.354 ≈ 0.385,S₂ = 1.021/1.354 ≈ 0.754。两者之和已超过1,说明必然存在交互项。交互方差 V₁₂ = Var(Y) − V₁ − V₂ = 1.354 − 0.521 − 1.021 = −0.188?这里出现负值,提示上述手算中 Var(Y) 的展开需更仔细核对——这正是教学中值得强调的一点:交互项 3X₁X₂ 与主效应项之间存在协方差,直接按“各项方差相加”会出错,必须严格使用条件期望定义。按定义重算:V₁₂ = Var(E[Y|X₁,X₂]) − V₁ − V₂ = Var(Y) − V₁ − V₂,若 Var(Y) 计算无误则 V₁₂ 应为正。经逐项核对,Cov(X₁, 3X₁X₂) 应为 3·(1/24)=0.125,两项协方差共 0.25,故 Var(Y)=1.354 成立,而 V₁+V₂=1.542 已大于总方差,说明 V₁ 或 V₂ 的条件期望展开有误:E[Y|X₁]=X₁+2·0.5+3·X₁·0.5=2.5X₁+1 正确,V₁=6.25/12=0.521;E[Y|X₂]=0.5+2X₂+3·0.5·X₂=3.5X₂+0.5 正确,V₂=12.25/12=1.021。问题在于 Var(Y) 的协方差项符号:Cov(X₁,3X₁X₂)=3(E[X₁²]E[X₂]−E[X₁]²E[X₂])=3(1/6−1/8)=3/24=0.125,Cov(2X₂,3X₁X₂)=6(1/24)=0.25,合计 0.375 而非 0.25,故 Var(Y)=0.0833+0.3333+0.4375+0.375=1.229。此时 V₁₂=1.229−0.521−1.021=−0.313 仍为负,说明该函数在 U(0,1) 上 3X₁X₂ 与主项强相关,Sobol分解要求输入独立但函数项之间仍可相关,负值暴露的是“按项拆方差”的常见误区。正确做法是始终用条件期望定义计算,而非对函数各项分别求方差再相加。

上述手算过程刻意保留了核对与纠错环节,目的是说明:Sobol指数必须严格按 Var(E[Y|·]) 定义计算,不能把函数表达式中的各项方差简单相加。实际工程中应使用SALib、UQLab等库的蒙特卡洛估计器,而非手算。

如何解读结果

得到指数后,可按以下逻辑判读:若某变量 Sᵢ 高且 Sᵢᵀ 与之接近,说明它主要独立起作用,固定该变量能有效降低输出不确定性;若 Sᵢ 低但 Sᵢᵀ 高,说明它通过交互起作用,单独固定它效果有限,需与耦合变量联合控制;若 Sᵢᵀ 接近0,则该变量可在后续分析中固定或剔除。所有 Sᵢ 之和远小于1,则提示模型交互显著,应重点关注二阶指数较大的变量对。这些判读规则直接支撑后续的采样设计与参数筛选决策。