在前面的三节中,Fisher 和 Neyman 的方法都将潜在结果 视为定值,但只是观测到了一部分即 。随机性主要来自于分配机制 ;如果考虑样本是从总体抽样得到的话,这一步也会引入一定的随机性。而在回归模型以及这章中,我们将会把 同样视为随机变量——即使在考虑有限样本下依然如此。后面我们会看到,基于模型的方法1. 带来了相当大的灵活性——我们可以和之前一样给出平均组间效应,我们还可以给出分位数、给出 的方差等等。事实上,我们可以对任何估计量 ,甚至 给出推断(当然,我们会要求这个 是行可交换的)。 2. 可以很容易的扩展到总体样本的情况。3. 可以在观察实验(也就是我们无法对分配机制 做干预) 下发挥作用。

基于模型的算法的核心只有两步

  1. 给出
  2. 推导 的分布并进行推断

数据

序号
1 0 ? 0 0
2 ? 9.9 1 9.9
3 12.4 ? 0 12.4
4 ? 3.6 1 3.6
5 0 ? 0 0
6 ? 24.9 1 24.9

我们关心的是

由于 的缺失,我们只能给出估计值,此时为

因此核心就在于给出

朴素模型一

使用各组观测到的平均值来替换缺失值,即

此时给出的估计

这个方法的劣势在于,由于完全没有随机性,因此我们只能给出点估计而无法给出精确度,正如 Fisher 的方法一样。而且这样的赋值方法也没有保存下来 的方差。比如 中我们已经观测到了 3.9,9.9,24.9,但我们的赋值湮灭了这一点。

朴素模型二

对于每一个缺失值,从已观测到的值中抽样,以本数据为例子就是

显然此时有 种赋值方式,使用代码跑一下得到均值 8.7,标准差 3.1

这一模型比上一模型复杂,但可以给我们一个区间估计。但他并没有囊括所有的随机性——理论上我们应该从 精确分布中抽样然后填入缺失值,但我们这里只用了观测到的数据来替代这一行为。为了将总体的信息引入,我们使用下面的贝叶斯模型。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
Y0 = c(0,0,12.4)
Y1 = c(9.9,3.6,24.9)
exacts = rep(NA, 729)
for (i in 1:729) {
id1 = i %% 3 + 1
id2 = round(i/3) %% 3 + 1
id3 = round(i/9) %% 3 + 1
id4 = round(i/27) %% 3 + 1
id5 = round(i/81) %% 3 + 1
id6 = round(i/243) %% 3 + 1
y0 = c(Y0, Y0[id1], Y0[id2], Y0[id3])
y1 = c(Y1, Y1[id4], Y1[id5], Y1[id6])
exacts[i] = mean(y1-y0)
}
mean(exacts) # 8.666667
sd(exacts) # 3.084173
# or you can just sample to get an approximate vallue
taus = rep(NA, 10000)
set.seed(42)
for (i in 1:10000) {
y0 = c(Y0, sample(Y0, 3, replace=T))
y1 = c(Y1, sample(Y1, 3, replace=T))
taus[i] = mean(y1-y0)
}
mean(taus) # 8.671788
sd(taus) # 3.069502

贝叶斯模型的建立

三个输入

  1. 潜在结果的联合分布

    由于行可交换,其可以写成各样本的乘积

    因此我们需要给出第二个输入

  2. 即参数的先验分布

  3. 在观察实验中,我们可能还需要引入 。但在完全随机试验中,我们知道其在支撑集上其为常数 ,因此无需引入。

第一步:推导

首先我们有

接着我们有

在完全随机试验下

注意到 可以写为 的变换,因此我们可以推导

这也称为 的后验预测分布

第二步:推导

首先我们有似然函数

于是

第三步:推导

上面两式合并得

于是

第四步:推导

我们知道

而给定 后,我们可以得到 的条件分布,也就可以得到 的条件分布

贝叶斯模型(无协变量)的例子

三个输入

首先,我们假设给定参数 后我们的服从二元正态分布如下

而我们的参数的先验为

分配机制

第一步:推导

我们有

第二步:推导

于是 ,合并指数项后可以推出

代入数据得

第三步:推导

注意到后面这两项都是正态分布,可以推出 也服从正态分布

利用这些信息即得分布

第四步:推导

代入数据得

可以看到均值和之前保持一致,而方差比之前的模型增大了。这是十分合理的——因为我们现在的模型在估计 的时候引入了额外的随机性。

数学模拟

学过贝叶斯推断的话应该知道,很多时候我们很难像上面的推导过程一样给出精确的解析解:其难点都集中在后验分布 (如 ) 的导出——往往我们能给出其非归一化的概率密度,即 ,但归一化因子 一般不好得出。事实上贝叶斯推断针对这一难点给出了相当多的解决方案——比如经典的 MCMC 方法。

仍以该题为例子说明,由于我们已经显式得得到了 这两个后验分布,因此我们的数值模拟是十分简单和直接的:先从后验分布采样出 ,然后采样出 ,接着计算得出 ,并根据模拟结果推得均值和方差。一份简单的模拟如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
set.seed(42)
taus = rep(NA, 10000)
y_obs_0_mean = mean(c(0, 12.4, 0))
y_obs_1_mean = mean(c(9.9, 3.6, 24.9))
tau_obs = y_obs_1_mean - y_obs_0_mean
for (i in 1:10000) {
mu_c = rnorm(1, 4.1, 5.8)
mu_t = rnorm(1, 12.8, 4.6)
y_mis_0_mean = mean(rnorm(3, mu_c, 10))
y_mis_1_mean = mean(rnorm(3, mu_t, 8))
tau_mis = y_mis_1_mean - y_mis_0_mean
taus[i] = (tau_obs + tau_mis) / 2
}
mean(taus) # 8.748153
sd(taus) # 5.195695

如果没有简单的形式,则采样的时候需要使用其他的方法从非归一化的概率密度中进行采样。详细的介绍在之前写过的 【Series】 贝叶斯数据分析 中的采样章节有着详细的介绍。

变形——去除潜在结果间的独立性假设

在上面的推到中,我们假设 是独立(至少不相关)的,即

现在我们将其放宽至

为此, ,此时

但如果推导一下 ,就会发现其和 无关,因此我们的似然函数 也和 无关。(这是十分自然的:我们每次只拿到了 的一个,凭此数据不可能得到 的有效推断——因为数据中完全不包含这一信息,事实上,贝叶斯推断里也专门针对此问题有过讨论),因此参数 的后验分布也会等于先验分布,因为数据无法提供信息进行更新。

现在考虑一个具体而极端的例子——

可以导出

由于此时协方差不为零,导致 的边缘分布发生了变化,为

这里方差为 可以直接推导,也可以由 直接给出。

注意到参数后验 不因为 的引入而改变,因此和之前的推导一致。

类似的,最后可以得到 的后验期望、方差和协方差,并得到 的方差和协方差。代入数据最后得到结果

均值没变——这自然符合预期。方差进一步增大——这可能有点困惑。但如果读者之前看到 Neyman 里面的方差和 的关系后,应该能够理解这一现象。

变形——引入协变量

此时模型变形为

引入的先验为

这一独立性假设在实践中通常会被采用,但其不总是无害的——比如协变量包含之前观测的时序数据,特别是和结果 高度相关的,那么我们的参数 可能会含有很强的控制组的分布的信息,但这一假设通常会大大简化我们的模型——我们只需 对 进行建模,仍以二元正态为例,此时为

其中

而后续的步骤完全一样。

变形——考察全体分布下的估计

之前讨论的都是有限样本下的估计,现在我们将样本视为从一个全体分布抽样得到的结果,再次考察

当我们的模型已经建立好时,通常 可以视为参数 的一个函数,即

在我们之前的模型种,则就是

如果有协变量,则 其中

实际计算时,我们只需从 的后验分布中采取大量样本,然后计算 ,即可得到均值和方差,而无需再次从 中抽样再计算。

回到我们之前的例子,由于

我们可以得到

同样均值一样,但是方差比独立下的方差来得大 (),因为我们引入了样本的随机性,即使我们获得了我们拿到的样本的所有潜在结果并精确的算出了 ,我们仍然对 抱有一定的随机性;但比 的极端情况来的小 。而 则相当于给出了一个最坏的、最保守的一个估计,但同时也给出了 的一个无偏估计。

另外值得注意的是,我们关注的量 不依赖于 ,因为似然函数不包含 ,则 的后验分布也不会包含 ,如果 独立的话。