一个人如何解释一个平淡无奇的奥特曼情节?

机器算法验证 数据可视化 平淡的奥特曼情节
2022-03-24 20:47:07

用简单的英语,如何解释 Bland-Altman 情节?

与比较两种不同测量方法的其他方法相比,使用 Bland-Altman 图有什么优势?

3个回答

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 循环并制作多个绘图