您的位置:

Bland-Altman分析法

一、Bland-Altman分析法简介

Bland-Altman分析法又称差异图法,是一种常用的数据变换方法,用于比较两种测量方法的一致性。它基于一种简单的统计原理,即两种测量方法的测值差异随着测值增加而有可能发生变化。这种方法能够直观地体现两种测量方法之间的偏倚和随机误差,同时可以用来确定两种方法的测量差异是否显著。

二、如何进行Bland-Altman分析

进行Bland-Altman分析共需要4个步骤:

1. 采集数据:使用两种测量方法对同一批被测量物进行测试,记录下各自的测量值。

import numpy as np
#假设存在两种测量方法A和B
A = [2.1, 2.0, 2.2, 2.5, 2.3, 2.6, 2.4, 2.7, 2.5, 2.4]
B = [2.0, 2.2, 2.3, 2.8, 2.4, 2.5, 2.7, 2.6, 2.5, 2.3]

2. 计算平均值和差值:对每对测量值,计算其平均值和差值。

mean = np.mean([A, B], axis=0)
diff = A - B

3. 绘制Bland-Altman图:将差异与平均值的平均值绘制成散点图,使用一条水平线绘制平均差异值(bias)。

import matplotlib.pyplot as plt
plt.scatter(mean, diff)
plt.axhline(y=np.mean(diff), color='r', linestyle='-')
plt.xlabel('Mean')
plt.ylabel('Difference')
plt.title('Bland-Altman Plot')
plt.show()

4. 分析结果:分析散点图和平均差异值,确定两种测量方法之间的一致性和差异是否具有显著性。

三、Bland-Altman图的解读

Bland-Altman图常用于展示两种测量方法之间的一致性和差异,其中,散点图展示了每对测量值的平均值和差异值,水平线表示平均差异值。观察Bland-Altman图需要特别注意以下几点:

1. 散点分布是否随机,是否呈现明显的聚集现象。

2. 平均差异值是否为0,如果不为0,是否存在系统误差或常数偏倚。

3. 平均差异值的95%限制是否太宽,如果过宽,说明两种测量方法之间的一致性较差。

四、如何制作Bland-Altman图

制作Bland-Altman图可以按照以下步骤:

1. 建立两个向量:其中一个向量包括每对测量值的平均值,另一个向量包括差异值。

mean = np.mean([A, B], axis=0)
diff = A - B

2. 绘制散点图:使用matplotlib.pyplot.scatter()函数绘制散点图,其中横坐标为平均值,纵坐标为差异值。

import matplotlib.pyplot as plt
plt.scatter(mean, diff)

3. 添加水平线:使用matplotlib.pyplot.axhline()函数绘制一条水平线,代表平均差异值。

plt.axhline(y=np.mean(diff), color='r', linestyle='-')

4. 添加标签和标题:使用matplotlib.pyplot.xlabel()、matplotlib.pyplot.ylabel()和matplotlib.pyplot.title()函数添加标签和标题。

plt.xlabel('Mean')
plt.ylabel('Difference')
plt.title('Bland-Altman Plot')

5. 显示图形:使用matplotlib.pyplot.show()函数显示Bland-Altman图。

plt.show()

五、Bland-Altman一致性分析

Bland-Altman一致性分析是一种用于测定两种测试方法之间一致性的方法,可用于图像分析。其基本原理是通过计算两种方法之间的平均差异程度,来比较它们的一致性。如果平均差异很小,则说明这两种方法相对一致,反之则说明两种方法存在差异。

def get_limits(data):
    mean = np.mean(data)
    std = np.std(data, ddof=1)
    limits = [mean-1.96*std, mean+1.96*std]
    return limits

def get_confidence_interval(data, alpha):
    mean = np.mean(data)
    std = np.std(data, ddof=1)
    n = len(data)
    t = 2.131  # 使用t分布进行置信区间计算
    interval = t*(std/np.sqrt(n))
    ci = [mean-(interval*alpha), mean+(interval*alpha)]
    return ci

mean_diff = np.mean(diff)
limits = get_limits(diff)
ci95 = get_confidence_interval(diff, 1.96)
ci99 = get_confidence_interval(diff, 2.58)

以上是计算Bland-Altman一致性分析所需的函数以及计算例子。其中,get_limits()函数用于计算95%的置信限,get_confidence_interval()函数用于计算置信区间,mean_diff为平均差异值,limits为95%置信限,ci95为95%置信区间,ci99为99%置信区间。