Bland-Altman Plots(一致性评价)在python中的实现

假设有reader1 和reader2,分别对一定数量病人的某一影像指标进行评分,现在想看一下这两位研究者评分的一致性,绘制Bland-Altman图是一种较为直观、简单的方式。python代码实现方法如下:

首先读入数据

folderPath = "/Users/.../ICC/features4ICC/"

data1 = pd.read_excel(os.path.join(folderPath,"reader1_ap.xlsx"))
data2 = pd.read_excel(os.path.join(folderPath,"reader2_ap.xlsx"))

data1.insert(0,"reader",np.ones(data1.shape[0]))
data2.insert(0,"reader",np.ones(data2.shape[0])*2)

data1.insert(0,"target",range(data1.shape[0]))
data2.insert(0,"target",range(data2.shape[0]))

data = pd.concat([data1,data2])
print(data)
input_data.png
Method 1
import numpy as np
import pingouin as pg

ax = pg.plot_blandaltman(data1['original_shape_Elongation'], data2['original_shape_Elongation'])
method_1.png
Method 2
# pip install pyCompare # for the first time
import pyCompare
pyCompare.blandAltman(data1['original_shape_Elongation'], data2['original_shape_Elongation'], 
                      percentage=False, 
                      title='Bland-Altman Plot 2',
                      limitOfAgreement=1.96)
method_2.png
pyCompare.blandAltman(data1['original_shape_Elongation'], data2['original_shape_Elongation'],
            savePath='SavedFigure.tiff',
            figureFormat='tiff')
Method 3
import matplotlib.pyplot as plt
import numpy as np

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='gray', linestyle='--')
    plt.axhline(md - 1.96*sd, color='gray', linestyle='--')
from numpy.random import random

bland_altman_plot(data1['original_shape_Elongation'], data2['original_shape_Elongation'])
plt.title('Bland-Altman Plot 3')
plt.show()
method_3.png

参考资料:
Pingouin official documentation
Why & How to use the Bland-Altman plot for A/B testing | Python + code
Bland-Altman plot with confidence interval boundary in python

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 假设有reader1 和reader2,分别对一定数量病人的某一影像指标进行评分,现在想看一下这两位研究者评分的一...
    北欧森林阅读 6,994评论 1 1
  • 临床上,如何评判两种检测方法学的一致性呢?对于定性资料,一般是通过kappa一致性分析:比如,如何评价C13呼气试...
    dming1024阅读 28,273评论 1 2
  • 久违的晴天,家长会。 家长大会开好到教室时,离放学已经没多少时间了。班主任说已经安排了三个家长分享经验。 放学铃声...
    飘雪儿5阅读 7,609评论 16 22
  • 今天感恩节哎,感谢一直在我身边的亲朋好友。感恩相遇!感恩不离不弃。 中午开了第一次的党会,身份的转变要...
    迷月闪星情阅读 10,627评论 0 11
  • 在妖界我有个名头叫胡百晓,无论是何事,只要找到胡百晓即可有解决的办法。因为是只狐狸大家以讹传讹叫我“倾城百晓”,...
    猫九0110阅读 3,368评论 7 3