一、基本思想
在蒙特卡洛模拟中,我们常希望估计某个随机变量的期望:
直接取样本均值:
虽然是无偏估计,但其方差
可能非常大,导致结果不稳定。
控制变量法(Control Variates)通过引入与 (Y) 高度相关的另一个随机变量 (X),并利用 (X) 的已知期望来抵消部分波动,从而显著降低方差。
二、构造思路
假设存在一个随机变量 (X),满足:
- (X) 与 (Y) 有较强相关性;
- 其期望 是已知的。
则可以构造一个新的估计量:
其中:
参数 (b) 称为控制系数(control coefficient),用于调整校正强度。
三、无偏性与方差推导
由于,
可得:
→ 仍然是一个无偏估计。
其方差为:
四、最优控制系数
为了最小化方差,对 (b) 求导并令其为零:
得到最优值:
将其代入方差公式:
其中 () 为 (X) 与 (Y) 的相关系数。
方差降低比例 = ()若 (),方差可减少 81%;若 (),方差可减少 98%。
五、多变量推广
若存在多个控制变量 (),
则最优系数向量为:
新的估计量为:
其方差为:
等价于回归中“去除解释部分后的残差方差”,与 (R2) 的概念相对应。
六、几何与统计直觉
- 从线性回归视角看,控制变量法相当于回归 (Y) 对 (X),然后只保留残差部分:
即用 (X) 的已知信息解释掉 (Y) 的部分波动,使残差方差最小。
- 从几何视角看,(X) 提供了 (Y) 波动的“方向”,
减去这部分后,剩余噪声更小,估计更稳定。
七、具体示例
🌰 示例:估计 (),其中 ()
目标:
选取控制变量:
计算:
于是:
结果:
与普通蒙特卡洛相比,方差降低约 98%。
八、代码示例
import numpy as np n = 10000 U = np.random.rand(n) # 每次同时生成 U Y = np.exp(U) # 目标变量 X = U # 控制变量 mu_X = 0.5 # E[U] b_opt = np.cov(X, Y, bias=True)[0, 1] / np.var(X) theta_cv = np.mean(Y + b_opt * (mu_X - X)) theta_mc = np.mean(Y) print(f"普通MC估计: {theta_mc:.5f}") print(f"控制变量估计: {theta_cv:.5f}")
九、方法总结
项目 | 内容 |
目标 | 利用已知期望的相关变量降低方差 |
估计量 | |
最优系数 | |
方差降低比例 | |
条件 | 需已知,且 |
典型应用 | 期权定价、积分估计、排队仿真、金融风险模拟 |