前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >用Pythn进行简单的Bland-Altman分析

用Pythn进行简单的Bland-Altman分析

作者头像
活用数据
发布2019-12-19 19:34:57
3.3K0
发布2019-12-19 19:34:57
举报
文章被收录于专栏:数据医生专栏数据医生专栏

参考资料:

Bland-Altman分析在临床测量方法一致性评价中的应用 bland-altman-plot-in-python

在医学中,经常会遇到评价两种或多种检测、测量方法结果一致性(agreement)的问题。一般情况下,其中一种方法是目前广泛应用的被称为“金标准”的方法,而另一种则是更先进、更便于应用的方法。通过对两种测量方法进行一致性评价可以回答“这两种方法能否相互替代”这样的问题, Bland-Altman正是广泛使用的一种一致性评价方法

原理和方法

基本思想:计算出两种测量结果的一致性界限(limits of agreement),并用图形的方法直观地反映这个一致性界限。最后结合临床实际,得出两种测量方法是否具有一致性的结论。

1.一致性界限

进行两种方法的测定时,通常是对同一批受试对象进行测量。这两种方法一般不会获得完全相同的结果,总是存在着一定趋势的差异,如一种方法的测量结果经常大于(或小于)另一种方法的结果,这种差异被称为偏倚(bias)。 偏倚可以用两种方法测定的结果的差值的均数

\overline{d}
\overline{d}

进行估计,

\overline{d}
\overline{d}

的变异情况则利用差值的标准差

S_d
S_d

来描述。

如果差值的分布服从正态分布,则95%的差值应该位于

\overline{d}-1.96S_d
\overline{d}-1.96S_d

\overline{d}+1.96S_d
\overline{d}+1.96S_d

之间。我们称这个区间为95%的一致性界限,绝大多数差值都位于该区间内。

如果两种测量结果的差异位于一致性界限内在临床上是可以接受的,则可以认为这两种方法具有较好的一致性,这两种方法可以互换使用。

当样本量较小时,抽样误差会相对较大,因此还要给出95%一致性界限的上下限的置信区间差值均数的标准误

SE(\overline{d})=\frac{S_d}{\sqrt{n}}
SE(\overline{d})=\frac{S_d}{\sqrt{n}}

,一致性界限的上、下限的标准误近似等于

1.71SE(\overline{d})
1.71SE(\overline{d})

,则可以分别计算出一致性界限上限的95%置信区间和下限的95%置信区间。

2.一致性界限的图形表示——Bland-Altman图

Bland-Altman法可以通过Bland-Altman图进行一个直观的展示:

  • x轴表示两种方法测量每个对象的平均值;
  • y轴表示两种方法测量每个对象的差值;
  • 上下两条水平实线代表95%一致性的上下限;
  • 中间实线代表差值的均数,虚线代表差值均数为0。

根据95%一致性界限外的数据点数和一致性界限内的最大差值,以及临床上的可接受程度,对待评价的两种方法的一致性做出评价。

简单实例分析

1.原始数据

通过pandas简单构造出16组数据,如下图DataFrame所示:

“y_true”列为参考值,而“y_pred”则为测量值。

2.用差值进行Bland-Altman分析

计算“y_true”列和“y_pred”列差值结果如下:

通过describe()函数,我们可以看到两组数据差值的情况大概如下:

  • 差值的均数:
\overline{d}=-3.16
\overline{d}=-3.16
  • 差值的标准差:
S_d = 14.35
S_d = 14.35
  • 95%一致性界限:
-3.16 \pm 1.96*14.35
-3.16 \pm 1.96*14.35

,即(-31.73,24.53)

通过下面的Python代码,我们可以绘制Bland-Altman图:

代码语言:javascript
复制
def bland_altman_plot(data1, data2, *args, **kwargs):
    data1     = np.asarray(data1)
    data2     = np.asarray(data2)
    mean      = np.mean([data1, data2], axis=0)
    diff      = data1 - data2                   # Difference between data1 and data2
    md        = np.mean(diff)                   # Mean of the difference
    sd        = np.std(diff, axis=0)            # Standard deviation of the difference

    plt.scatter(mean, diff, *args, **kwargs)
    plt.axhline(md,           color='gray', linestyle='--')
    plt.axhline(md + 1.96*sd, color='red')
    plt.axhline(md - 1.96*sd, color='red')

差值的Bland-Altman图如下:

从图中可以看出,1/16的点在95%一致性界限以外;在一致性界限范围内,差值的绝对值最大为23.21。由于两种测量结果最大相差23.21,两种方法测量结果平均为115.99,这种相差的幅度在临床上是可以接受的,因此可以认为两种方法具有较好的一致性,在临床上可以互相代替。

小结

本文只是对Bland-Altman法进行了一个简单的介绍,同时介绍了Python绘制Bland-Altman图的方法,而Bland-Altman不仅有差值的分析方法,也有比值的分析方法,除此之外,Bland-Altman法还有许多需要注意到的点,在此暂不做进一步深入讨论。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 原理和方法
    • 1.一致性界限
      • 2.一致性界限的图形表示——Bland-Altman图
      • 简单实例分析
        • 1.原始数据
          • 2.用差值进行Bland-Altman分析
          • 小结
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档