超全面讲透,贝叶斯检验 !!

哈喽,大家好~

我们平时做统计分析的时候,经常会遇到“假设检验”这种情况。

简单来说,假设检验就是想通过数据来验证一个假设是否成立。比如,你可能会想:“这两组数据有没有显著差异?”或者“这个新药的效果是不是比旧药好?”统计检验就是帮助我们回答这些问题的工具。

贝叶斯检验的核心思想是:你之前可能对某个假设有一些预期(比如你觉得某个新药比旧药更有效),而贝叶斯方法就是根据新的数据来调整这种预期。

这就像是你在不断地收集证据,然后不断地调整你对某个事情的判断。

比较贝叶斯检验与传统的假设检验

传统的假设检验(比如p值检验)是通过设定一个原假设(假设两组数据没有差异)来进行检验。如果数据足够支持原假设被拒绝,那么你就会认为替代假设(两组数据有差异)成立。p值越小,拒绝原假设的证据越强。

但是贝叶斯检验不太一样。它不单单告诉你是否应该拒绝原假设,而是给你提供一个关于假设的“信心度”或“概率”。贝叶斯方法会考虑之前的知识(例如,你知道某种药物已经有了一些效果的历史数据),然后结合新的数据,给你一个更新后的“信心值”。

举个例子:假设你正在测试一个药物是否有效。传统的检验方法可能只会告诉你药物有效的证据是否足够强(通过p值来判断)。而贝叶斯方法则会告诉你:在结合现有证据后,药物有效的概率是多少。假如你一开始就有50%的信心药物有效,经过实验数据后,这个信心可能变成70%,或者降低到30%。

贝叶斯检验的优点

  1. 灵活性高:它可以把以前的知识(先验概率)和新数据结合起来,做出更“实时”的判断。
  2. 结果直观:你可以直接看到每个假设成立的概率,比较容易理解。

总的来说,贝叶斯检验就是一种通过不断更新假设的概率来帮助你做决策的方法。它不像传统的假设检验那样只关注“是否拒绝原假设”,而是更关注如何根据新数据调整对不同假设的信心。

原理详解

好的!既然你希望深入了解贝叶斯检验的数学原理、公式推理和算法流程,我将详细介绍这一方法的核心原理和公式推导。请准备好,可能会涉及一些数学符号,但我会尽量清晰地解释。

1. 贝叶斯定理

贝叶斯检验的基础是贝叶斯定理,它描述了如何根据数据更新对一个事件的信念。

贝叶斯定理的基本形式如下:

其中:

  •  后验概率,即给定数据  后假设  为真的概率。
  •  似然函数,即在假设  为真的条件下,观测到数据  的概率。
  •  先验概率,即在看到数据之前,假设  为真的初始概率。
  •  证据边际似然,即在所有可能的假设下,观测到数据  的总概率。

2. 贝叶斯检验的核心思想

贝叶斯检验的核心是通过贝叶斯定理来更新某个假设  的后验概率。

简单来说,你将基于先前的知识(先验概率)和观测到的新数据(似然函数)来计算假设的可信度(后验概率)。

3. 贝叶斯检验中的关键步骤

步骤一:定义假设空间

在贝叶斯检验中,首先需要定义你的假设空间。

通常,你会有一个原假设  和一个备择假设 (也可以有更多的假设,但最常见的是两者)。

例如:

  • :新药没有效果
  • :新药有效

步骤二:设定先验概率

先验概率    反映了你在获得数据之前对每个假设的信念。这些先验可以基于历史数据、专家知识或对问题的直觉来设定。

  • 如果你对  更有信心,可以设置  较大, 较小。
  • 先验概率的选择会影响最终结果,因此选择合适的先验是非常重要的。

步骤三:计算似然函数

似然函数  是在某个假设下观察到数据的可能性。假设你进行的是实验数据的检验,那么似然函数就是在给定假设条件下,数据发生的概率。

例如,在检验药物有效性时,似然函数可能会基于药物治疗效果的分布来进行推导。

步骤四:计算边际似然

边际似然  是所有可能假设下,观测到数据的总概率。它是通过对所有假设  进行加权平均得到的:

边际似然是一个归一化常数,它确保所有后验概率的和为 1。实际上,这个常数通常不需要单独计算,因为它在不同假设之间是相同的,且在贝叶斯更新时起到归一化作用。

步骤五:计算后验概率

通过贝叶斯定理,计算后验概率   ,它们分别是给定数据  后原假设和备择假设的概率。

后验概率的计算公式为:

这两个后验概率分别表示在数据  下,原假设  和备择假设  成立的概率。

4. 贝叶斯检验的决策规则

通常我们希望通过比较后验概率来做出决策。贝叶斯检验的一个简单决策规则是:

  • 如果 ,我们拒绝原假设 ,支持备择假设 
  • 如果 ,我们接受原假设 ,拒绝备择假设 

5. 计算贝叶斯因子

在贝叶斯检验中,贝叶斯因子(Bayes Factor)是一种用于衡量两个假设相对证据强度的指标。

它是原假设和备择假设的后验概率比值,通常用来评估假设之间的相对支持度。

贝叶斯因子的公式为:

其中:

  •  表示在数据  下,备择假设  相对于原假设  的支持度。
  • 如果 ,则数据支持备择假设 
  • 如果 ,则数据支持原假设 

贝叶斯因子提供了一种更加直观的方式来比较不同假设的相对支持度。

完整案例

假设我们在进行一个药物研究,目标是比较两种药物的效果。

药物A为新药,药物B为旧药,我们要检验药物A是否比药物B更有效。

为了完成这个任务,我们收集了100名患者的数据,每名患者接受其中一种药物的治疗。

每个患者的效果评分越高表示药物效果越好。

我们将通过贝叶斯检验来回答如下问题:

  • 原假设 :药物A和药物B的效果没有差异。
  • 备择假设 :药物A的效果比药物B更好。

我们将模拟药物A和药物B的效果评分。假设药物A的评分均值为70,标准差为10,药物B的评分均值为65,标准差为12。

import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
from scipy.stats import norm
import pymc3 as pm

np.random.seed(42)

# 参数设置:药物A和药物B的效果评分均值和标准差
n_samples = 100# 每组样本数
mean_a, mean_b = 7065# 药物A和药物B的均值
std_a, std_b = 1012# 药物A和药物B的标准差

# 生成模拟数据
data_a = np.random.normal(mean_a, std_a, n_samples)  # 药物A的效果评分
data_b = np.random.normal(mean_b, std_b, n_samples)  # 药物B的效果评分

# 创建DataFrame
df = pd.DataFrame({
    'DrugA': data_a,
    'DrugB': data_b
})

# 查看前几行数据
df.head()

数据可视化

为了更好地理解数据,我们绘制药物A和药物B的效果评分的核密度估计(KDE)图,帮助我们比较两者的效果。

# 数据可视化:绘制药物A和药物B的效果评分分布
plt.figure(figsize=(106))

# 绘制药物A的核密度估计图
sns.kdeplot(data_a, label='Drug A', color='blue', shade=True)

# 绘制药物B的核密度估计图
sns.kdeplot(data_b, label='Drug B', color='red', shade=True)

# 图形美化
plt.title("Distribution of Drug A and Drug B Effectiveness", fontsize=16)
plt.xlabel("Effectiveness Score", fontsize=12)
plt.ylabel("Density", fontsize=12)
plt.legend()

plt.show()

这段代码生成了药物A和药物B效果评分的分布图。

可以看到,药物A的效果评分似乎稍微高于药物B,说明药物A可能更有效。

4. 贝叶斯模型建立

接下来,我们使用PyMC3建立贝叶斯模型,假设药物A和药物B的效果评分分别服从正态分布,并且其均值和标准差为未知参数。我们需要通过贝叶斯推断来估计这些参数。

定义贝叶斯模型

在贝叶斯模型中,我们为药物A和药物B的均值和标准差定义先验分布,然后根据数据更新这些先验分布,得到后验分布。

# 定义贝叶斯模型
with pm.Model() as model:
    # 药物A的先验分布:均值为70,标准差为10
    mu_a = pm.Normal('mu_a', mu=70, sigma=10)  # 药物A的均值
    sigma_a = pm.HalfNormal('sigma_a', sigma=10)  # 药物A的标准差

    # 药物B的先验分布:均值为65,标准差为12
    mu_b = pm.Normal('mu_b', mu=65, sigma=10)  # 药物B的均值
    sigma_b = pm.HalfNormal('sigma_b', sigma=12)  # 药物B的标准差

    # 观测数据:药物A和药物B的效果评分分别服从正态分布
    obs_a = pm.Normal('obs_a', mu=mu_a, sigma=sigma_a, observed=data_a)
    obs_b = pm.Normal('obs_b', mu=mu_b, sigma=sigma_b, observed=data_b)

    # 使用MCMC方法进行采样,获取后验分布
    trace = pm.sample(2000, chains=1, cores=1, return_inferencedata=False)

采样与结果分析

通过MCMC(马尔科夫链蒙特卡洛)方法,我们从后验分布中采样2000个样本。

接下来,我们分析后验分布的结果。

# 使用traceplot显示后验分布的采样结果
pm.traceplot(trace)
plt.show()

这个图展示了药物A和药物B的均值和标准差的后验分布。

你可以看到不同参数的采样轨迹,以及它们的后验分布。

后验分布分析

通过查看后验分布,我们可以更好地理解药物A和药物B的效果差异。我们将绘制均值的后验分布。

# 可视化药物A和药物B均值的后验分布
plt.figure(figsize=(126))

# 药物A的均值后验分布
sns.histplot(trace['mu_a'], kde=True, color='blue', label='Drug A Mean', stat="density")

# 药物B的均值后验分布
sns.histplot(trace['mu_b'], kde=True, color='red', label='Drug B Mean', stat="density")

# 添加图表标题和标签
plt.title("Posterior Distributions of Drug A and Drug B Means", fontsize=16)
plt.xlabel("Mean Effectiveness", fontsize=12)
plt.ylabel("Density", fontsize=12)
plt.legend()

plt.show()

这张图展示了药物A和药物B均值的后验分布,帮助我们判断两者是否有显著的差异。

5. 贝叶斯因子计算

贝叶斯因子(Bayes Factor)是用来衡量两个假设(原假设和备择假设)相对证据强度的工具。

在我们的案例中,贝叶斯因子可以用来量化药物A是否更有效。

贝叶斯因子计算公式如下:

其中    分别是药物A和药物B的效果评分的边际似然。

# 计算贝叶斯因子:比较药物A和药物B的效果评分
bf_10 = np.mean(trace['mu_a'] > trace['mu_b'])
print(f"Bayes Factor (BF10): {bf_10:.3f}")

贝叶斯因子值越大,表示数据对药物A比药物B更有利。若,则表明药物A的效果比药物B更好。

6. 结果优化与总结

我们通过贝叶斯方法对药物A和药物B的效果差异进行了分析。

贝叶斯方法的优势在于它不仅考虑了数据,还能够融入先验知识,并通过后验分布来更新我们的信念。

模型优化

  1. 先验选择:在实际应用中,先验的选择可以对模型结果产生显著影响。如果有更多的历史数据或专家知识,可以通过调整先验分布来提高模型的准确性。

  2. 样本数量:贝叶斯方法对样本数量较为敏感。在样本较少时,先验知识对后验的影响较大。随着数据量的增加,后验分布会更多地反映数据本身的信息。

  3. 计算优化:在实际应用中,可以通过使用更高效的采样方法(如HMC和NUTS)来提高模型的计算速度。

通过贝叶斯检验,我们不仅得到了药物A和药物B的效果比较,还通过后验分布分析、贝叶斯因子等工具,为我们的决策提供了有力支持。

最后

宝子们,快来领取16大块的内容,124个算法问题的总结,完整的机器学习小册,免费领取~
领取:备注「算法小册」即可~
围观朋友圈,满满的干货!~
PS:我们最近发布了《机器学习必修数学》,感兴趣可以看看~

声明:内容取材于网络,仅代表作者观点,如有内容违规问题,请联系处理。 
检验
Copyright © 2025 成都科技区角科技有限公司
蜀ICP备2025143415号-1
  
川公网安备51015602001305号