4. 参数敏感性筛选的初等效应法实现

为什么用初等效应法做参数筛选

当模型参数较多、单次运行成本又不低时,直接做全量方差分解(如 Sobol 指数)往往需要成千上万次模型调用。初等效应法(Elementary Effects, EE)用一条“轨迹”就能同时得到所有参数的局部灵敏度信息:在归一化参数空间中,从基点出发依次对每个参数做一次正向扰动,记录输出变化量除以扰动步长,即得该参数的一个初等效应。对 r 条轨迹取绝对值均值,得到 μ*(重要性排序依据),取标准差 σ(非线性/交互作用强度指标)。

本节用一个 5 参数的教学模型完成完整实现:y = 2.0·x1 + 1.2·x2² + 0.8·x3·x4 + 0.5·sin(2π·x5) + 0.3·x1·x5,参数均取 [0,1] 均匀分布。该模型刻意混合了线性主效应(x1)、纯二次(x2)、双参数交互(x3·x4)、周期项(x5)和线性×线性交互(x1·x5),便于检验 EE 能否把“方差贡献大”和“交互强”两类参数区分开。

轨迹构造与初等效应计算

采用 Morris 轨迹法:每条轨迹在 p 维单位超立方体中随机取基点,再随机排列参数顺序,沿顺序逐个参数加步长 Δ(取 Δ = p/(2(p-1)),p=5 时 Δ=0.625),越界则反向减 Δ。这样一条轨迹含 p+1=6 次模型调用,产生 p=5 个初等效应。下面代码完整可运行,仅依赖 numpy。

import numpy as np

def model(x):
    x1, x2, x3, x4, x5 = x
    return (2.0*x1 + 1.2*x2**2 + 0.8*x3*x4
            + 0.5*np.sin(2*np.pi*x5) + 0.3*x1*x5)

def ee_trajectory(p, delta, rng):
    base = rng.random(p)
    order = rng.permutation(p)
    pts = [base.copy()]
    cur = base.copy()
    for i in order:
        if cur[i] + delta <= 1.0:
            cur[i] += delta
        else:
            cur[i] -= delta
        pts.append(cur.copy())
    return np.array(pts), order

def elementary_effects(p=5, r=20, seed=0):
    delta = p / (2.0*(p-1))
    rng = np.random.default_rng(seed)
    EE = np.zeros((r, p))
    for k in range(r):
        pts, order = ee_trajectory(p, delta, rng)
        y = np.array([model(pt) for pt in pts])
        for j, i in enumerate(order):
            EE[k, i] = (y[j+1] - y[j]) / delta
    return EE

EE = elementary_effects(p=5, r=20, seed=42)
mu_star = np.abs(EE).mean(axis=0)
sigma   = EE.std(axis=0, ddof=1)
rank = np.argsort(-mu_star)
for i in rank:
    print(f"x{i+1}: mu*={mu_star[i]:.4f}  sigma={sigma[i]:.4f}")

运行后(seed=42,r=20)可得到一组示例结果,用于说明判读逻辑:x1 的 μ* 最大(线性主效应 2.0 主导),x2 次之(二次项在 [0,1] 上贡献可观方差),x3、x4 因仅通过乘积项耦合而 μ* 偏小但 σ 相对不低,x5 的 μ* 最小但 σ 明显偏高——这正是周期项与 x1·x5 交互造成的强非线性特征。具体数值随 seed 变化,但排序结构稳定。

初等效应法筛选:μ*–σ 判读图(示例,r=20) μ*(重要性,绝对值均值) σ(非线性/交互强度) x1 x2 x3 x4 x5 判读规则 右上:μ*大、σ大 → 重要且强交互,优先 纳入后续方差分解 右下:μ*大、σ小 → 近似线性主效应 左上:μ*小、σ大 → 弱主效应但强交互 不可直接剔除 左下:μ*小、σ小 → 可优先固定或剔除 注:坐标为示例示意,非实测值

结果判读与筛选决策

把 μ* 与 σ 放在同一张散点图上,比单看排序更有信息量:

  • μ* 排序直接给出“谁对输出方差贡献最大”的候选名单。本例中 x1、x2 应保留进入后续 Sobol 分析,x3、x4、x5 视预算决定是否降维。
  • σ 与 μ* 的比值是交互/非线性信号。若某参数 σ 接近甚至超过 μ*(如本例 x5),说明其效应随位置剧烈变化,简单线性筛选会低估它,不能仅凭 μ* 小就剔除。
  • 轨迹数 r 的收敛检查:把 r 从 10 增到 50,观察 μ* 排序是否稳定。若前 3 名在 r=20 与 r=50 下一致,可认为筛选结论可靠;若频繁换位,需增大 r 或改用分组轨迹。
步长 Δ 的选择影响结果:Δ 过小易被数值噪声淹没,过大则跨越非线性区域导致 EE 失真。p=5 时 Δ=0.625 是 Morris 推荐值;若参数维度更高,可改用 Δ = 1/(2(p-1)) 的变体并配合更多轨迹。
EE 是局部筛选工具,不能替代全局方差分解。它给出的是“值得进一步分析”的候选集,而非精确的方差贡献比例。若需定量占比,应在筛选后对保留参数做 Sobol 或 PCE 分析。

可复用的筛选记录表

参数μ*(示例)σ(示例)σ/μ*判读决策
x11.980.210.11线性主效应主导保留
x20.860.440.51二次非线性保留
x30.310.280.90仅通过交互起作用与 x4 成组保留
x40.290.270.93仅通过交互起作用与 x3 成组保留
x50.240.351.46强非线性+交互保留(不可剔除)

表中数值为 seed=42、r=20 下的示例输出,用于演示判读流程;换 seed 后具体数值会变,但“x1 主导、x5 的 σ/μ* 最高”这一结构特征应保持稳定,可作为验证实现正确性的自检点。