假设检验的中心思想可以用一句话概括:“如果原假设正确,那么你观测到极端统计量(当前情况及更差情况)的概率仅有3%。”
推断的一个替代方法是将未知参数视为随机变量。从参数的先验分布(prior distribution)出发,再利用观测数据和贝叶斯定理计算出更新后的后验分布(posterior distribution)。不再对检验本身给出概率判断,而是对参数本身给出概率判断。
我们先了解一些基本的有关贝叶斯推断的内容。
Beta函数和函数(ganma函数)的关系
由此,Beta分布 可写为
在贝叶斯概率理论中,如果后验概率P(θ|x)和先验概率p(θ)满足同样的分布律,那么,先验分布和后验分布被叫做共轭分布,同时,先验分布叫做似然函数的共轭先验分布。
使用Beta(1, 1)作为先验分布,结合贝叶斯公式和二项分布似然函数,计算出的后验分布也为Beta分布。
共轭分布可以这样表示:Beta(a, b) + 实验数据(事件A m次,非事件A n次) ~ Beta(a + m, b + n
比如,如果未知参数是概率(就像掷硬币的例子,不知道质地是否均匀的硬币抛出正面的概率为随机变量),我们使用Beta 分布(Beta distribution)作为先验分布,Beta 分布仅对0 和1 赋值(因为Beta分布属于概率的分布,所有x的取值范围[0,1]):
#beta函数
def B(alpha, beta):
return math.gamma(alpha) * math.gamma(beta) / math.gamma(alpha + beta)
#相关概率x的概率密度分布
def beta_pdf(x, alpha, beta):
if x < 0 or x > 1: # [0, 1]之外没有权重
return 0
return x ** (alpha - 1) * (1 - x) ** (beta - 1) / B(alpha, beta)
一般来说,以上分布的权重中心为:alpha / (alpha + beta)。
alpha 和beta 越大,分布就越“紧密”。
例如,如果alpha 和beta 都是1,那么刚好是均匀分布(以0.5 为中心,非常分散)。如果alpha 比beta 大很多,那么大多数权重接近1。如果alpha 比beta 小很多,那么大多数权重接近零。图7-1 展示了几种不同的Beta 分布。
让我们先假设一个先验分布p。如果对硬币是否均匀不预设立场,那么将alpha 与beta 都设定为1。或者如果我们坚信硬币有55% 的可能正面朝上,就选择让alpha 等于55,beta等于45。
然后我们多次掷起硬币,结果有h 次正面朝上,有t 次背面朝上。根据贝叶斯定理(共轭分布),p 的先验分布仍然是Beta 分布,但参数分别为alpha + h 和beta + t。
后验分布也是Beta 分布,这并非偶然。二项分布给出了正面朝上的数字,Beta 是二项分布的共轭先验分布(conjugate prior,http://www.johndcook.com/blog/conjugate_prior_diagram/)。这意味着,无论你何时使用从相关的二项分布中得到的观测值更新Beta 先验分布,你还是会得到一个Beta 后验分布。
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei'] #用来显示中文标签
plt.rcParams['axes.unicode_minus']=False #用来正常显示负号
fig=plt.figure(figsize=(12,8)) #表示绘制图形的画板尺寸为6*4.5;
x=np.linspace(0,1,10000)
plt.plot(x,[beta_pdf(i,1,1) for i in x],label='Beta(1,1)')
plt.plot(x,[beta_pdf(i,10,10) for i in x],label='Beta(10,10)')
plt.plot(x,[beta_pdf(i,4,16) for i in x],label='Beta(4,16)')
plt.plot(x,[beta_pdf(i,16,4) for i in x],label='Beta(16,4)')
plt.legend(loc='upper center',fontsize=15)
plt.show()
输出:
假设你掷硬币10 次并且观测到3 次正面朝上。
如果你从均匀分布的先验开始(有时候不会采取硬币均匀的立场),那么你的后验分布为Beta(4, 8),中心为0.33。如果你认为所有的可能性都相等,那么你最好的猜测就会非常接近观测到的概率。
如果你从Beta(20, 20) 开始(表明硬币大致上是均匀的),那么你的后验分布为Beta(23,27),中心为0.46,这表明可能硬币稍稍倾向于背面朝上。
如果你从Beta(30, 10) 开始(表明硬币是不均匀的,即有75% 的可能会正面朝上),那么你的后验分布为Beta(33, 17),中心为0.66。这种情况下,你仍然相信正面朝上的概率会大一些,只是没有一开始那么坚定了。这几个不同的后验分布如图所示。
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei'] #用来显示中文标签
plt.rcParams['axes.unicode_minus']=False #用来正常显示负号
fig=plt.figure(figsize=(12,8)) #表示绘制图形的画板尺寸为6*4.5;
x=np.linspace(0,1,10000)
plt.plot(x,[beta_pdf(i,4,8) for i in x],label='Beta(4,8)')
plt.plot(x,[beta_pdf(i,23,27) for i in x],label='Beta(23,27)')
plt.plot(x,[beta_pdf(i,33,17) for i in x],label='Beta(33,17)')
plt.legend(loc='upper left',fontsize=15)
plt.show()
如果你多次掷硬币,无论你最初选择了什么样的先验分布,先验分布对后验分布的影响会越来越小,直到最后得到(几乎)相同的后验分布。
比如,无论你最初对掷硬币的结果有怎样的倾向猜想,当看到2000 次掷硬币的结果中有1000 次正面朝上时,你都会很难维持原先的看法(除非你极端地选择了Beta(1000000, 1)这样的先验分布)。
有趣的是,这允许我们对假设“基于先验分布和已观测数据,正面朝上的概率介于49% ~51% 的可能性仅有5%”做出概率判断。这在哲学上不同于论断“如果硬币是均匀的,那么只有5% 的机会能观测到极端数据”。
用贝叶斯推断进行假设检验是饱受争议的——部分源于它的数学原理非常复杂,部分源于选择先验分布的主观性。