我的实验室使用PI所谓的“修正的Bland-Altman图”来分析回归质量。我使用Seaborn编写的代码仅处理离散数据,我想对此进行概括。

Bland–Altman plot将两个量度之间的差异与其平均值进行比较。 “修改”是x轴是地面真实值,而不是平均值。 y轴是预测值和真实值之间的差。实际上,修改后的B–A图可以看作是y = x线中的残差图。 predicted=truth行。



下面给出了生成该图的代码以及示例。

def modified_bland_altman_plot(predicted, truth):
    predicted = np.asarray(predicted)
    truth = np.asarray(truth, dtype=np.int)  # np.int is a hack for stripplot
    diff = predicted - truth

    ax = sns.stripplot(truth, diff, jitter=True)
    ax.set(xlabel='truth', ylabel='difference from truth', title="Modified Bland-Altman Plot")

    # Plot a horizontal line at 0
    ax.axhline(0, ls=":", c=".2")

    return ax


python - Seaborn的修改后的Bland–Altman图-LMLPHP

可以肯定的是,此示例在其预测中具有严重的偏差,如下降斜率所示。



我对两件事感到好奇:


这些“修改后的Bland-Altman图”是否有一个公认的名称?
如何为非离散数据创建这些文件?我们使用stripplot,它需要离散数据。我知道seaborn具有residplot函数,但是对于从中测量残差的线并没有采用自定义函数,例如predicted=true。相反,它从计算出的最佳拟合线进行度量。

最佳答案

您似乎在这里寻找标准散点图:

python - Seaborn的修改后的Bland–Altman图-LMLPHP

import matplotlib.pyplot as plt
import numpy as np; np.random.seed(1)


def modified_bland_altman_plot(predicted, truth):
    predicted = np.asarray(predicted)
    truth = np.asarray(truth)
    diff = predicted - truth

    fig, ax = plt.subplots()
    ax.scatter(truth, diff, s=9, c=truth, cmap="rainbow")
    ax.set_xlabel('truth')
    ax.set_ylabel('difference from truth')
    ax.set_title("Modified Bland-Altman Plot")

    # Plot a horizontal line at 0
    ax.axhline(0, ls=":", c=".2")

    return ax

x = np.random.rayleigh(scale=10, size=201)
y = np.random.normal(size=len(x))+10-x/10.

modified_bland_altman_plot(y, x)

plt.show()

08-24 14:08