График Бланда-Альтмана с границей доверительного интервала в питоне - PullRequest
0 голосов
/ 11 мая 2019

Я пытаюсь построить Блэнд-Альтман график.

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(random(10), random(10))
plt.title('Bland-Altman Plot')
plt.show()

Приведенный выше код дает следующий результат: Bland-Altman Plot

Я пытаюсь построить границу доверительного интервала так же, как на следующем графике. Допустим, координаты доверительного интервала для верхней строки:

Слева (0,3, 0,5), (0,3, 0,4) и Справа (0,9, 0,5), (0,9, 0,4)

Для нижней строки:

Слева (0,3, 0,7), (0,3, 0,5) и Справа (0,9, 0,7), (0,9, 0,5)

enter image description here

Но я не знаю, как я могу изобразить это так в matplotlib . Было бы здорово, если бы кто-то мог помочь мне с этим.

1 Ответ

2 голосов
/ 11 мая 2019

Я думаю, что вы хотите errorbar:

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='--')

    # set up params for ci_loa
    # change these accordingly
    ci_loa_height = np.std(mean)
    ci_loa_x = mean.min(), mean.max()

    # draw the errorbar/ci intervals
    # change color and capsize as wished
    plt.errorbar(ci_loa_x, [md + 1.96*sd]*2, 
                 yerr=ci_loa_height, fmt='none',
                 capsize=10, c='r')

    plt.errorbar(ci_loa_x, [md - 1.96*sd]*2, 
                 yerr=ci_loa_height, fmt='none',
                 capsize=10, c='r')
    plt.title('Bland-Altman Plot')
    plt.show()

Тогда:

np.random.seed(10)
bland_altman_plot(np.random.random(10), np.random.random(10))

производит:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...