误差理论,方差监测和加速收敛
引言——蒙特卡罗积分方法的基本误差理论
马尔科夫不等式
如果X仅取非负值,则对于任意a>0: P ( X ≥ a ) ≤ E ( X ) a P(X\geq a) \leq \frac{E(X)}{a} P(X≥a)≤aE(X)
这个定理的证明过程在任何一本统计书上都有,就不详细描述。这个定理大概是说如果X全是正数的话,取值是个很大的数的可能性受一定的约束,约束条件和均值有关。
这个定理只是一个很粗略的估计,而且其哲学意义并不明显,但是以此为基础能推出一些非常有用的公式。
切比雪夫不等式
马尔科夫不等式的直接应用(将随机变量设为 ( X − μ ) 2 σ 2 \frac{(X-\mu)^{2}}{\sigma^{2}} σ2(X−μ)2)就能推出如下定理:
设X均值为 μ \mu μ,方差为 σ 2 \sigma^2 σ2的随机变量,对于k>0,有: P ( ∣ X − μ ∣ ≥ k σ ) ≤ 1 k 2 P(|X-\mu|\geq k\sigma)\leq \frac{1}{k^{2}} P(∣X−μ∣≥kσ)≤k21
这个公式即为切比雪夫不等式,其哲学意义非常明显:一个随机变量X偏离其均值的可能性不会太大,具体来说,偏离k倍方差的概率至少要小于 1 k 2 \frac{1}{k^2} k21。
大数定律
大数定律分为弱大数定律和强大数定律。
弱大数定律是切比雪夫公式的应用,叙述如下:
设 X 1 , X 2 , . . . , X n X_1,X_2,...,X_n X1,X2,...,Xn是均值为 μ \mu μ的独立同分布随机变量,当 n → 0 n\to0 n→0时,则对于任意 ε > 0 \varepsilon>0 ε>0有: P [ ( X 1 + X 2 + . . . + X n n − μ ) > ε ] → 0 P[(\frac{X_1+X_2+...+X_n}{n}-\mu)>\varepsilon ]\to0 P[(nX1+X2+...+Xn−μ)>ε]→0
这个定理用语言来描述就是随着样本数n的无限增大,样本均值偏离实际均值的概率无限降低,趋近于0。
强大数定律是弱大数定律的推广:
lim n → ∞ X 1 + X 2 + . . . + X n n = μ \lim\limits_{n \rightarrow \infty}\frac{X_1+X_2+...+X_n}{n}=\mu n→∞limnX1+X2+...+Xn=μ以概率1成立
根据强大数定律,可以确定一个随机变量的样本均值在样本量无穷大情况下收敛于理论均值。
中心极限定律
设 X 1 , X 2 , . . . , X n X_1,X_2,...,X_n X1,X2,...,Xn是均值为 μ \mu μ且方差为 σ 2 ( σ 2 < ∞ ) \sigma^2(\sigma^2<\infty) σ2(σ2<∞)的独立同分布随机变量,则对任意实数有:
lim n → ∞ P ( 1 √ n ( X 1 + X 2 + . . . + X n − n μ ) < x ) = Φ ( x ) \lim\limits_{n\to \infty}P(\frac{1}{\surd{n}}(X_1+X_2+...+X_n-n\mu)<x)=\Phi(x) n→∞limP(√n1(X1+X2+...+Xn−nμ)<x)=Φ(x)
这个定理,简写为CLT,是蒙特卡罗误差理论的基础。当蒙特卡罗生成的样本均可以被认为是从待估计的分布中抽出时,其样本均值偏离理论均值的误差可以用样本数和标准正态分布计算。从公式中可以看出,当n越大时误差越小。
估计的不确定性
这一节简单介绍几种常用的蒙特卡罗不确定度估计方法
直接法(蒙特卡罗的蒙特卡罗)
这种方法就是最简单直接的,反复运行同一种蒙特卡罗算法多次。只要运行次数足够多,就能完美无缺地进行不确定度的估计。
实验1 直接法进行蒙特卡罗数值积分的不确定度估计
待求的积分如下:
h
(
x
)
=
[
c
o
s
(
50
x
)
+
s
i
n
(
20
x
)
]
2
x
∈
U
(
0
,
1
)
h(x)=[cos(50x)+sin(20x)]^2 \qquad x\in\ U(0,1)
h(x)=[cos(50x)+sin(20x)]2x∈ U(0,1)
R代码如下。结果图中淡黄色区域为蒙特卡罗之蒙特卡罗得出的(2.5%,97.5%)误差线,黑色线为第一次蒙特卡罗的结果,正好位于范围中。
> h=function(x){(cos(50*x)+sin(20*x))^2} #设置函数
> x=matrix(h(runif(200*10000)),ncol=200) #进行200次蒙特卡罗,每次10000个样本点
> estint=apply(x,2,cumsum)/(1:10000) #进行求均值
> y=apply(estint,1,quantile,c(0.025,0.975)) #求出每次蒙特卡罗的2.5%和97.5%的分位数
> polygon(c(1:10000,10000:1),c(y[1,],rev(y[2,])),col="whwat") #按照分位数,画出误差限
> lines(estint[,1],lwd=2) #画出第一次蒙特卡罗的结果,作为示例
实时监测——有效样本数(effective sample size)
当利用重要性采样(importance sampling)进行蒙特卡罗时,有效样本数(effective sample size,ESS)也可以作为方差的一种表征。ESS的计算方法如下:
ω
n
o
r
m
i
=
ω
i
/
∑
j
=
1
n
ω
j
E
S
S
n
=
1
∑
i
=
1
n
(
ω
n
o
r
m
i
)
2
\omega_{norm}^{i}=\omega^{i}/\sum_{j=1}^{n}\omega^{j}\\ ESS_{n}=\frac{1}{\sum_{i=1}^{n}(\omega_{norm}^{i})^{2}}
ωnormi=ωi/j=1∑nωjESSn=∑i=1n(ωnormi)21
从公式中可以看出,
E
S
S
∈
[
0
,
n
]
ESS\in[0,n]
ESS∈[0,n],当所有样本都具有一样的权重时ESS=n,当全部样本都退化(权重为0)时,ESS=0。ESS越接近n说明蒙特卡罗效果越好。
除了ESS,还有另一种表征样本质量的方式:perplexity:
p
e
r
p
l
e
x
i
t
y
=
−
∑
i
=
1
n
ω
n
o
r
m
i
l
o
g
(
ω
n
o
r
m
i
)
perplexity=-\sum_{i=1}^{n}\omega_{norm}^{i}log(\omega_{norm}^{i})
perplexity=−i=1∑nωnormilog(ωnormi)
这里定义的perplexity可以被认为是提议分布g和目标分布f的K-L散度的一种近似,表征这两个分布的差别。很显然,差别越大说明重要性采样越成功。
实验2 贝叶斯推断并计算ESS
一个均值是柯西先验的正态分布:
X
∼
N
(
θ
,
1
)
X\sim N(\theta,1)
X∼N(θ,1),
θ
∼
C
a
u
c
h
y
(
0
,
1
)
\theta\sim Cauchy(0,1)
θ∼Cauchy(0,1),当已有一个观测值x=2.5时,
θ
\theta
θ的后验均值可以按下式计算:
δ
π
(
x
)
=
∫
−
∞
∞
θ
1
+
θ
2
e
−
−
(
x
−
θ
)
2
2
d
θ
/
∫
−
∞
∞
1
1
+
θ
2
e
−
−
(
x
−
θ
)
2
2
d
θ
\delta^{\pi}(x)=\int^{\infty}_{-\infty}\frac{\theta}{1+\theta^2}e^{-\frac{-(x-\theta)^2}{2}}d\theta/\int^{\infty}_{-\infty}\frac{1}{1+\theta^2}e^{-\frac{-(x-\theta)^2}{2}}d\theta
δπ(x)=∫−∞∞1+θ2θe−2−(x−θ)2dθ/∫−∞∞1+θ21e−2−(x−θ)2dθ
可以采用重要性采样近似以上均值:生成
θ
i
∼
N
(
0
,
1
)
\theta_{i}\sim N(0,1)
θi∼N(0,1),将
1
1
+
θ
2
\frac{1}{1+\theta^2}
1+θ21作为权重,则self-normalized形式的均值估计如下:
δ
n
π
(
x
)
=
∑
i
=
1
n
θ
i
1
+
θ
i
2
/
∑
i
=
1
n
1
1
+
θ
i
2
\delta^{\pi}_{n}(x)=\sum_{i=1}^{n}\frac{\theta_{i}}{1+\theta_{i}^{2}}/\sum_{i=1}^{n}\frac{1}{1+\theta_{i}^{2}}
δnπ(x)=i=1∑n1+θi2θi/i=1∑n1+θi21
进行估计的R代码如下:
> norma=matrix(rnorm(500*10000),ncol = 500)+2.5 #生成500份N(0,1)样本,每份10000个
> weit=1/(1+norma^2)
> esti=apply(norma*weit,2,cumsum)/apply(weit,2,cumsum) #求估计均值
> polt(esti[,250],ylim=c(1.6,1.9))
> band=apply(esti,1,quantile,c(0.025,0.975)) #估计上下界
> polygon(c(1:10000,10000:1),c(band[1,],rev(band[2,]))) #画出上下界
计算ESS的代码如下,可以看出当对这个问题使用10000个样本进行重要性采样均值估计时,等效的有效样本数约等于5500。
> ess=apply(weit,2,cumsum)^2/apply(weit^2,2,cumsum)
> plot(ess[,500],ylim=c(0,10000))
实时监测——基于经验公式
在书的4.5节Simultaneous Monitoring中,介绍了利用经验公式的置信区间估计方法:
θ
(
t
)
∈
[
μ
−
u
∗
n
σ
n
^
2
/
r
o
u
n
d
(
n
t
)
,
μ
+
u
∗
n
σ
n
^
2
/
r
o
u
n
d
(
n
t
)
]
n
∗
=
a
+
b
b
\theta(t)\in [\mu-u^{*}\sqrt{n\hat{\sigma_{n}}^{2}}/round(nt),\mu+u^{*}\sqrt{n\hat{\sigma_{n}}^{2}}/round(nt)]\\ n^{*}=a+b\sqrt{b}
θ(t)∈[μ−u∗nσn^2/round(nt),μ+u∗nσn^2/round(nt)]n∗=a+bb
其中t为当前使用的样本数是总样本数的比例,即
t
=
n
N
t=\frac{n}{N}
t=Nn,round为取整函数,a和b可以分别取0.1和3.15,
σ
n
^
\hat{\sigma_{n}}
σn^为使用n个样本时的样本标准差。
自助法(bootstrap)
这是一种著名的估计方法,思想是通过重复抽样估计总体分布。详细来说就是将生成的样本的 F n ( x ) F_{n}(x) Fn(x)当做想要生成的 F ( x ) F(x) F(x)的近似, θ ^ \hat{\theta} θ^是 θ \theta θ的一个估计,通过从已生成样本重复有放回抽样的方法生成这个经验CDF的其他实现 F n ∗ ( x ) F_{n}^{*}(x) Fn∗(x),就可以用新生成的 F n ∗ ( x ) F_{n}^{*}(x) Fn∗(x)的样本采用一样的方法得到 θ ^ ∗ \hat{\theta}^{*} θ^∗,利用一系列 θ ^ ∗ \hat{\theta}^{*} θ^∗实现 θ ^ \hat{\theta} θ^的置信区间评定。
更进一步来说,自助法估计步骤如下:
- 对第b次自助法重复试验(
b
=
1
,
.
.
.
,
B
b=1,...,B
b=1,...,B):
(1)从观测样本 x 1 , . . . , x n x_{1},...,x_{n} x1,...,xn中有放回地抽样生成样本 x ∗ ( b ) = ( x 1 ∗ , . . . , x n ∗ ) x^{*(b)}=(x_{1}^{*},...,x_{n}^{*}) x∗(b)=(x1∗,...,xn∗);
(2)对第b个自助法样本计算估计值 θ ^ ( b ) \hat\theta^{(b)} θ^(b); - F θ ^ F_{\hat \theta} Fθ^分布的自助法估计的分布为 θ ^ ( 1 ) , . . . , θ ^ ( b ) \hat\theta^{(1)},...,\hat\theta^{(b)} θ^(1),...,θ^(b)的经验分布。
对一个估计量
θ
^
\hat \theta
θ^的标准差进行自助法估计就是将自助法重复实验
θ
^
(
1
)
,
.
.
.
,
θ
^
(
B
)
\hat \theta^{(1)},...,\hat \theta^{(B)}
θ^(1),...,θ^(B)的样本标准差作为估计值:
s
e
^
(
θ
^
∗
)
=
1
B
−
1
∑
b
=
1
B
(
θ
^
(
b
)
−
θ
^
(
∗
)
‾
)
θ
^
(
∗
)
‾
=
1
B
∑
b
=
1
B
(
θ
^
(
b
)
)
\hat{se}(\hat \theta^{*})=\sqrt {\frac{1}{B-1}\sum^{B}_{b=1}(\hat \theta^{(b)}-\overline{\hat \theta^{(*)}} )} \\\overline{\hat \theta^{(*)}}=\frac{1}{B}\sum^{B}_{b=1}(\hat\theta^{(b)})
se^(θ^∗)=B−11b=1∑B(θ^(b)−θ^(∗))θ^(∗)=B1b=1∑B(θ^(b))
B指的是运行自助法需要的实验次数,一般取50即可,很少会超过200。
当利用自助法对
θ
^
\hat\theta
θ^的偏差进行估计时:
b
i
a
s
(
θ
^
)
=
θ
^
(
∗
)
‾
−
θ
^
θ
^
(
∗
)
‾
=
1
B
∑
b
=
1
B
(
θ
^
(
b
)
)
bias(\hat\theta)=\overline{\hat \theta^{(*)}}-\hat\theta \\\overline{\hat \theta^{(*)}}=\frac{1}{B}\sum^{B}_{b=1}(\hat\theta^{(b)})
bias(θ^)=θ^(∗)−θ^θ^(∗)=B1b=1∑B(θ^(b))
其中
θ
^
(
b
)
\hat\theta^{(b)}
θ^(b)是第b次自助法抽样后对样本计算的估计值。
实验 自助法进行估计值的标准差和偏差估计
bootstrap包中含有两个数据集:law和law82,都是法学生的LSAT成绩和GPA数据。law数据是law82数据的一个较小的样本(15个),采用law的数据集对LSAT成绩和GPA的相关性进行计算,并用自助法实现相关系数标准差和偏差的估计,将结果和law82数据集的LSAT成绩和GPA的相关系数进行对比。
先进行相关系数的标准差估计
library(bootstrap)
B<-200 #自助法次数,抽样200次
n<-nrow(law)
R<-numeric(B)
for (b in 1:B)
{
i<-sample(1:n,size=n,replace = TRUE)
#利用index进行有放回抽样,每次相当于重新实现一次law数据集
LSAT<-law$LSAT[i]
GPA<-law$GPA[i]
R[b]=cor(LSAT,GPA) #计算每次随机实现的law数据集中的LSAT成绩和GPA的相关系数
}
结果如下
> print(cor(law$LSAT,law$GPA)) #直接计算law数据集中的LAST成绩和GPA相关系数
[1] 0.7763745
> print(cor(law82$LSAT,law82$GPA)) #计算law82数据集中的LAST成绩和GPA相关系数,作为参考
[1] 0.7599979
> print(se.R<-sd(R)) #自助法估计的law数据集的LAST成绩和GPA相关系数的标准差
[1] 0.1219409
> hist(R,prob=TRUE) # 画R的分布直方图
之后进行相关系数的偏差估计
library(bootstrap)
theta.hat<-cor(law$LSAT,law$GPA)
B<-20000
n<-nrow(law)
theta.b<-numeric(B)
for (b in 1:B)
{
i<-sample(1:n,size=n,replace = TRUE)
LSAT<-law$LSAT[i]
GPA<-law$GPA[i]
theta.b[b]=cor(LSAT,GPA) #计算每次随机实现的law数据集中的LSAT成绩和GPA的相关系数
}
bias<-mean(theta.b-theta.hat)
#偏差即为200次law数据随机实现的估计值的均值和直接使用原始law数据集的估计量的差值
结果如下:
> print(bias)
[1] -0.005414397
计算出的bisa值可以说明law数据集对估计量的偏差值为-0.005,说明law数据集估计值倾向于高估。从上文可以看出,law数据集的相关系数估计值为0.7763745,law82数据集的相关系数估计值为0.7599979,和自助法估计的结果基本相符。
水手刀法(Jackknife)
水手刀法是比自助法更为古老的一种重抽样方法,也可以用于估计值的不确定估计。
水手刀法类似留一法,在第i次抽样中去除第i个样本,用剩下的 ( i − 1 ) (i-1) (i−1)个样本计算 θ ^ ( i ) \hat\theta_{(i)} θ^(i),如此得到 θ ^ ( 1 ) , . . . , θ ^ ( b ) \hat\theta_{(1)},...,\hat\theta_{(b)} θ^(1),...,θ^(b)。设参数 θ = t ( F ) \theta=t(F) θ=t(F)是分布F的函数,令 F n F_{n} Fn为一个服从分布F的随机样本的经验分布函数, θ \theta θ的嵌入式估计为 θ ^ = t ( F n ) \hat \theta=t(F_{n}) θ^=t(Fn)。如果数据的微小改变只会造成估计值的微小改变, θ ^ \hat \theta θ^的嵌入式估计是光滑的。
当利用水手刀法估计
θ
^
\hat \theta
θ^的估计偏差时:
b
i
a
s
^
j
a
c
k
−
k
n
i
f
e
=
(
n
−
1
)
(
θ
^
(
⋅
)
‾
−
θ
^
)
θ
^
(
⋅
)
‾
=
1
n
∑
i
=
1
n
θ
i
^
\hat{bias}_{jack-knife}=(n-1)(\overline {\hat{\theta}_{(\cdot)}}-\hat{\theta}) \\ \overline {\hat{\theta}_{(\cdot)}}=\frac{1}{n}\sum^{n}_{i=1}\hat{\theta_{i}}
bias^jack−knife=(n−1)(θ^(⋅)−θ^)θ^(⋅)=n1i=1∑nθi^
其中
(
n
−
1
)
(n-1)
(n−1)因子的原因和采用
1
n
∑
i
=
1
n
(
x
i
−
x
‾
)
2
\frac{1}{n}\sum^{n}_{i=1} (x_{i}-\overline x)^2
n1∑i=1n(xi−x)2估计方差是有偏的类似,使用
(
n
−
1
)
(n-1)
(n−1)因子修正偏差。
当使用水手刀法估计标准差时:
s
e
^
j
a
c
k
−
k
n
i
f
e
=
n
−
1
n
∑
i
=
1
n
(
θ
(
i
)
^
−
θ
^
(
⋅
)
‾
)
\hat {se}_{jack-knife}=\sqrt {\frac{n-1}{n}\sum^{n}_{i=1}(\hat {\theta _{(i)}}-\overline {\hat{\theta}_{(\cdot)}})}
se^jack−knife=nn−1i=1∑n(θ(i)^−θ^(⋅))
其中
n
−
1
n
\frac{n-1}{n}
nn−1因子的原因是因为当
θ
^
=
x
‾
\hat \theta=\overline x
θ^=x时,
v
a
r
(
x
‾
)
=
v
a
r
(
x
)
/
n
var(\overline x)=\sqrt {var(x)/n}
var(x)=var(x)/n,因此
n
−
1
n
\frac{n-1}{n}
nn−1因子使得
s
e
^
j
a
c
k
−
k
n
i
f
e
\hat {se}_{jack-knife}
se^jack−knife成为无偏估计量。
必须要注意到,水手刀法进行估计只能对光滑的统计量使用,对于非光滑的统计量比如中位数就会失效。当统计量不光滑时候可以采用弃d-水手刀法(每次重复实验丢弃d个观测数据),当 n / d → 0 \sqrt {n}/d \rightarrow 0 n/d→0且 n − d → 0 n-d\rightarrow 0 n−d→0时,弃d-水手刀法对中位数的情况是可以准确估计的,但是n和d的上升会造成计算量迅速增大。
实验 水手刀法进行估计值的偏差和标准差估计
使用bootstrap包中的patch数据集进行水手刀法实验。patch数据集是一个医学数据集,包含使用一种医用贴片后病人血液中某种激素的测量结果。其中需要计算的统计量为:
θ
=
E
(
新
贴
片
)
−
E
(
旧
贴
片
)
E
(
旧
贴
片
)
−
E
(
安
慰
剂
)
\theta=\frac{E(新贴片)-E(旧贴片)}{E(旧贴片)-E(安慰剂)}
θ=E(旧贴片)−E(安慰剂)E(新贴片)−E(旧贴片)
在数据集中,统计量可以表示为
θ
=
Y
‾
/
Z
‾
\theta=\overline Y/ \overline Z
θ=Y/Z,当
∣
θ
∣
<
0.2
|\theta|< 0.2
∣θ∣<0.2时认为新旧贴片效果相当。
library(bootstrap)
data("patch",package = "bootstrap")
n<-nrow(patch) #数据集的样本量即为水手刀法的采样次数
y<-patch$y
z<-patch$z
theta.hat<-mean(y)/mean(z) #使用公式直接计算估计量
print(theta.hat)
theta.jack<-numeric(n)
for (i in 1:n)
{
theta.jack[i]<-mean(y[-i])/mean(z[-i])
#计算每次留一法采样的估计值,[-i]表示除去数组中第i个元素
}
bias<-(n-1)*(mean(theta.jack)-theta.hat) #使用上文的水手刀法偏差公式计算估计量的偏差
print(bias)
结果如下:
> print(theta.hat)
[1] -0.0713061
> print(bias)
[1] 0.008002488
数值结果说明直接采用公式计算的 θ = Y ‾ / Z ‾ \theta=\overline Y/ \overline Z θ=Y/Z估计量有可能低估了0.008。
下面再采用水手刀法进行估计量的标准差估计,在完成偏差估计的基础上直接利用水手刀法标准差公式进行计算:
se<-sqrt((n-1)*mean((theta.jack-mean(theta.jack))^2))
结果如下:
> print(se)
[1] 0.1055278
自助法的水手刀法(Jackknife after bootstrap)
这种方法可以对自助法估计的偏差或者标准差在进行水手刀法方差估计,评判其准确程度。具体流程是:
(1)进行B次自助法抽样,每次抽样n个样本。计算
θ
\theta
θ估计量和
s
e
^
(
θ
^
)
\hat{se}(\hat\theta)
se^(θ^);
(2)对
i
=
1
:
n
i=1:n
i=1:n,每次选取上一步所有bootstrap样本中不含有
x
n
x_{n}
xn的样本,并重新计算
θ
j
(
i
)
\theta_{j(i)}
θj(i);
(3)对上一步生成的所有
θ
j
(
i
)
\theta_{j(i)}
θj(i)计算标准差,这个值即为
s
e
^
(
θ
^
)
\hat{se}(\hat\theta)
se^(θ^)的标准差。
实验 自助法的水手刀法(patch数据集)
data(patch,package='bootstrap')
n<-nrow(patch)
y<-patch$y
z<-patch$z
B<-2000
theta.b<-numeric(B)
indices<-matrix(0,nrow=B,ncol=n)
for (b in 1:B)
{
i<-sample(1:n,size=n,replace = TRUE)
y<-patch$y[i]
z<-patch$z[i]
theta.b[b]<-mean(y)/mean(z)
indices[b, ]<-i
}
se.jack<-numeric(n)
for (i in 1:n)
{
keep<-(1:B)[apply(indices,MARGIN = 1,FUN = function(k){!any(k==i)})]
se.jack[i]<-sd(theta.b[keep])
}
print(sd(theta.b))
print(sqrt((n-1)*mean((se.jack-mean(se.jack))^2)))
方差缩减的方法
对偶变量法
当采用蒙特卡罗方法估计
θ
=
E
[
X
]
\theta=E[X]
θ=E[X]时,假设产生同分布的
X
1
X_{1}
X1,
X
2
X_{2}
X2,则:
V
a
r
(
X
)
=
V
a
r
(
X
1
+
X
2
2
)
=
1
4
(
V
a
r
(
X
1
)
+
V
a
r
(
X
2
)
+
2
C
o
v
(
X
1
,
X
2
)
)
\begin{aligned} Var(X) &=Var(\frac{X_{1}+X_{2}}{2})\\ &=\frac{1}{4}(Var(X_{1})+Var(X_{2})+2Cov(X_{1},X_{2})) \end{aligned}
Var(X)=Var(2X1+X2)=41(Var(X1)+Var(X2)+2Cov(X1,X2))
从式中可以看出,当
X
1
X_1
X1,
X
2
X_2
X2有负相关关系时,
V
a
r
(
X
)
Var(X)
Var(X)可以减小。因此如果能够产生具有负相关关系的样本
X
1
X_1
X1,
X
2
X_2
X2,则估计量
E
(
X
1
+
X
2
2
)
E(\frac{X_{1}+X_{2}}{2})
E(2X1+X2)相比估计量
E
(
X
)
E(X)
E(X)在生成同样多的样本数时方差更小。
因此,使用对偶变量法的关键是研究一种生成同分布但是负相关的样本 X 1 X_1 X1, X 2 X_2 X2的算法。设 X 1 ∼ h ( u 1 , u 2 , . . . , u n ) X_1 \sim h(u_1,u_2,...,u_n) X1∼h(u1,u2,...,un), u 1 , . . . , u n u_1,...,u_n u1,...,un为在[0,1]范围内的均匀分布随机变量,若 X 2 ∼ h ( 1 − u 1 , 1 − u 2 , . . . , 1 − u n ) X_2 \sim h(1-u_1,1-u_2,...,1-u_n) X2∼h(1−u1,1−u2,...,1−un)则样本 X 1 X_1 X1, X 2 X_2 X2服从相同的分布且明显负相关。采用这种方法生成蒙特卡罗仿真数据实现方差降低即为对偶变量法的原理。
控制变量法
当我们已知随机变量Y的期望
E
(
Y
)
=
μ
y
E(Y)=\mu_y
E(Y)=μy时,待仿真的变量X的期望可以写成如下形式:
E
(
X
)
=
E
(
X
+
c
(
Y
−
μ
y
)
)
E(X)=E(X+c(Y-\mu_y))
E(X)=E(X+c(Y−μy))
其中c为待定参数。此时
X
+
c
(
Y
−
μ
y
)
X+c(Y-\mu_y)
X+c(Y−μy)的方差计算如下:
V
a
r
(
X
+
c
(
Y
−
μ
y
)
)
=
V
a
r
(
X
+
c
Y
)
=
V
a
r
(
X
)
+
c
2
V
a
r
(
Y
)
+
2
c
C
o
v
(
X
,
Y
)
\begin{aligned} Var(X+c(Y-\mu_y)) &=Var(X+cY)\\ &=Var(X)+c^2Var(Y)+2cCov(X,Y) \end{aligned}
Var(X+c(Y−μy))=Var(X+cY)=Var(X)+c2Var(Y)+2cCov(X,Y)
此时若以方差最小为目标函数对参数c进行优化,可以得到:
c
∗
=
a
r
g
m
a
x
(
V
a
r
(
X
+
c
(
Y
−
μ
y
)
)
)
=
a
r
g
m
a
x
(
V
a
r
(
X
)
+
c
2
V
a
r
(
Y
)
+
2
c
C
o
v
(
X
,
Y
)
)
=
−
C
o
v
(
X
,
Y
)
V
a
r
(
Y
)
\begin{aligned} c^* &=arg max(Var(X+c(Y-\mu_y))) \\ &=arg max(Var(X)+c^2Var(Y)+2cCov(X,Y)) \\ &=-\frac{Cov(X,Y)}{Var(Y)} \end{aligned}
c∗=argmax(Var(X+c(Y−μy)))=argmax(Var(X)+c2Var(Y)+2cCov(X,Y))=−Var(Y)Cov(X,Y)
取
c
=
c
∗
c=c^*
c=c∗时,估计量
X
+
c
(
Y
−
μ
y
)
X+c(Y-\mu_y)
X+c(Y−μy)的最小方差计算如下:
V
a
r
(
X
+
c
(
Y
−
μ
y
)
)
=
V
a
r
(
X
)
−
[
C
o
v
(
X
,
Y
)
]
2
V
a
r
(
Y
)
Var(X+c(Y-\mu_y))=Var(X)-\frac{[Cov(X,Y)]^2}{Var(Y)}
Var(X+c(Y−μy))=Var(X)−Var(Y)[Cov(X,Y)]2
因此,当随机变量X和Y有负相关关系时,利用统计量
E
(
X
+
c
(
Y
−
μ
y
)
)
E(X+c(Y-\mu_y))
E(X+c(Y−μy))代替
E
(
X
)
E(X)
E(X)并取
c
=
c
∗
c=c^*
c=c∗可以降低
E
(
X
)
E(X)
E(X)的蒙特卡罗估计方差
100
C
o
r
r
(
X
,
Y
)
%
100Corr(X,Y)\%
100Corr(X,Y)%。随机变量Y即为待估计变量X的控制变量,
E
(
X
+
c
(
Y
−
μ
y
)
)
E(X+c(Y-\mu_y))
E(X+c(Y−μy))即为控制估计量。控制估计量的方差估计为:
V
a
r
(
E
(
X
+
c
(
Y
−
μ
y
)
)
)
=
1
n
(
V
a
r
(
X
)
−
C
o
v
2
(
X
,
Y
)
V
a
r
(
Y
)
)
Var(E(X+c(Y-\mu_y)))=\frac{1}{n}(Var(X)-\frac{Cov^2(X,Y)}{Var(Y)})
Var(E(X+c(Y−μy)))=n1(Var(X)−Var(Y)Cov2(X,Y))
在实际应用中,通常
[
C
o
v
(
X
,
Y
)
]
[Cov(X,Y)]
[Cov(X,Y)]和
V
a
r
(
Y
)
Var(Y)
Var(Y)都未知,也需要利用蒙特卡罗方法进行仿真估计,然后基于估计值计算
c
∗
c^*
c∗:
c
∗
^
=
∑
i
=
1
n
(
X
i
−
X
‾
)
(
Y
i
−
Y
‾
)
∑
i
=
1
n
(
Y
i
−
Y
‾
)
2
\hat {c^*}=\frac{\sum^{n}_{i=1}(X_i-\overline X)(Y_i-\overline Y)}{\sum_{i=1}^{n}(Y_i-\overline Y)^2}
c∗^=∑i=1n(Yi−Y)2∑i=1n(Xi−X)(Yi−Y)
除了利用上面的公式直接计算 c ∗ c^* c∗,还可以在获取X和Y的蒙特卡罗样本后建立 X = a + b Y + e X=a+bY+e X=a+bY+e的线性模型,其中e为随机误差。利用线性回归求得系数 a ^ \hat a a^, b ^ \hat b b^,此时 b ^ = − c ∗ ^ \hat b=-\hat {c^*} b^=−c∗^,且 X ‾ + c ∗ ^ ( Y ‾ − μ y ) = a ^ + b ^ μ y \overline X+\hat {c^*}(\overline Y-\mu_y)=\hat a+\hat b\mu_y X+c∗^(Y−μy)=a^+b^μy,因此取 Y = μ y Y=\mu_y Y=μy时的线性模型输出即为X估计值,估计方差可以认为是 σ 2 ^ / n \hat{\sigma^2}/n σ2^/n, σ ^ \hat\sigma σ^为回归方差。
条件期望法
根据条件方差公式
V
a
r
(
X
)
=
E
(
V
a
r
(
X
∣
Y
)
)
+
V
a
r
(
E
(
X
∣
Y
)
)
Var(X)=E(Var(X|Y))+Var(E(X|Y))
Var(X)=E(Var(X∣Y))+Var(E(X∣Y))
由于
E
(
V
a
r
(
X
∣
Y
)
)
>
0
E(Var(X|Y))>0
E(Var(X∣Y))>0,明显
V
a
r
(
E
(
X
∣
Y
)
)
≤
V
a
r
(
X
)
Var(E(X|Y)) \leq Var(X)
Var(E(X∣Y))≤Var(X)。由此而得
E
(
X
∣
Y
)
E(X|Y)
E(X∣Y)作为
E
(
X
)
E(X)
E(X)的估计量比直接计算仿真样本X的均值更加优秀,因为
E
(
X
∣
Y
)
E(X|Y)
E(X∣Y)不仅是
E
(
X
)
E(X)
E(X)的无偏估计,而且方差更小。因此,可以使用添加变量Y并仿真估计
E
(
X
∣
Y
)
E(X|Y)
E(X∣Y)的方法减小
E
(
X
)
E(X)
E(X)的估计方差。这一理论结果有时候也被称为“Rao-Blackwell Theorem”。
这种方法的模拟分为两阶段进行,先仿真Y样本,然后再根据Y的值生成X在Y条件下的样本,最后就能计算
E
(
X
∣
Y
)
E(X|Y)
E(X∣Y)。一种典型的实现方法是进行分层抽样,先对有k个取值的离散随机变量Y进行仿真,
p
i
=
P
(
Y
=
y
i
)
,
i
=
1
,
.
.
.
,
k
p_i=P(Y=y_i),i=1,...,k
pi=P(Y=yi),i=1,...,k全部已知。之后对每个
y
i
y_i
yi,仿真
y
i
y_i
yi条件下的X样本,最后对所有的结果可以计算如下:
E
(
X
)
=
∑
i
=
1
k
E
(
X
∣
Y
=
y
i
)
p
i
E(X)=\sum_{i=1}^{k}E(X|Y=y_i)p_i
E(X)=i=1∑kE(X∣Y=yi)pi