用简单的英语,如何解释 Bland-Altman 情节?
与比较两种不同测量方法的其他方法相比,使用 Bland-Altman 图有什么优势?
用简单的英语,如何解释 Bland-Altman 情节?
与比较两种不同测量方法的其他方法相比,使用 Bland-Altman 图有什么优势?
Bland-Altman 图更广为人知的是Tukey 均值差图(John Tukey http://en.wikipedia.org/wiki/John_Tukey设计的众多图表之一)。
这个想法是 x 轴是您两次测量的平均值,这是您对“正确”结果的最佳猜测,而 y 轴是两次测量差异之间的差异。然后,该图表可以突出显示测量中的某些类型的异常。例如,如果一种方法总是给出太高的结果,那么您将获得高于或低于零线的所有点。例如,它还可以揭示一种方法高估了高值而低估了低值。
如果您看到 Bland-Altman 图上的点散布在各处,高于和低于零,则表明一种方法与另一种方法没有一致的偏差(当然,该图可能存在隐藏的偏差不出现)。
从本质上讲,这是探索数据的良好第一步。可以使用其他技术来挖掘更特定类型的测量行为。
除了差值与平均值图之外,Bland 和 Altman 图也可以是比值与平均值图。情节。
例如,一台新的称重机,当体重为 60、70 和 80 公斤的人踩到它时,会给出以下数据。
66 公斤 77 公斤 88 公斤
在这种情况下,称重机每次都会高估10%的重量。因此,在这种情况下,比率与平均值图将更好地可视化数据。
这是 Wikipedia 对 Bland-Altman 图的定义:
分析化学或生物医学中的 Bland-Altman 图(差异图)是一种数据绘图方法,用于分析两种不同测定之间的一致性。它与 Tukey 均值差图1相同,这是在其他领域众所周知的名称,但由 J. Martin Bland 和 Douglas G. Altman 在医学统计学中普及
如果你想在 Python 中实现一个 Bland-Altman 图,你可以使用这个:
如果您想在 Python 中执行此操作,可以使用此代码
import matplotlib.pyplot as plt
import numpy as np
from numpy.random import random
%matplotlib inline
plt.style.use('ggplot')
我刚刚添加了最后一行,因为我喜欢 ggplot 样式。
def plotblandaltman(x,y,title,sd_limit):
plt.figure(figsize=(20,8))
plt.suptitle(title, fontsize="20")
if len(x) != len(y):
raise ValueError('x does not have the same length as y')
else:
for i in range(len(x)):
a = np.asarray(x)
b = np.asarray(x)+np.asarray(y)
mean_diff = np.mean(b)
std_diff = np.std(b, axis=0)
limit_of_agreement = sd_limit * std_diff
lower = mean_diff - limit_of_agreement
upper = mean_diff + limit_of_agreement
difference = upper - lower
lowerplot = lower - (difference * 0.5)
upperplot = upper + (difference * 0.5)
plt.axhline(y=mean_diff, linestyle = "--", color = "red", label="mean diff")
plt.axhline(y=lower, linestyle = "--", color = "grey", label="-1.96 SD")
plt.axhline(y=upper, linestyle = "--", color = "grey", label="1.96 SD")
plt.text(a.max()*0.85, upper * 1.1, " 1.96 SD", color = "grey", fontsize = "14")
plt.text(a.max()*0.85, lower * 0.9, "-1.96 SD", color = "grey", fontsize = "14")
plt.text(a.max()*0.85, mean_diff * 0.85, "Mean", color = "red", fontsize = "14")
plt.ylim(lowerplot, upperplot)
plt.scatter(x=a,y=b)
最后我只是做一些随机值并在这个函数中比较它们
x = np.random.rand(100)
y = np.random.rand(100)
plotblandaltman(x,y,"Bland-altman plot",1.96)
通过一些小的修改,您可以轻松添加一个 for 循环并制作多个绘图