2013-05-06 4 views
7

Можно ли сделать Bland-Altman plot в Python? Кажется, я ничего не могу найти.Заговор Bland-Altman в Python

Другим названием для этого типа является Tukey разностный график.

Пример:

enter image description here

+2

Почему вы не просто построить точки с помощью 'plt.plot' и добавить горизонтальные линии с помощью' plt.axhline'? Этот сюжет кажется достаточно простым. –

+0

Да, проложение легко. Но я подумал, что, возможно, в библиотеке есть модуль, который тоже делал вычисления. Например, я передаю свои 2 сигнала, и это замышляет мой сюжет. Это всегда среднее по оси x и разница в 2 сигналах по оси y. Горизонтальные линии являются средними стандартными отклонениями (neg и pos) – Ojtwist

ответ

18

Если я правильно понял теорию, лежащую в основе сюжета, этот код должен обеспечивать базовое построение графика, тогда как вы можете настроить его в соответствии с вашими конкретными потребностями.

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

Соответствующие элементы в data1 и data2 используются для вычисления координат для точек на графике.

Затем вы можете создать график, выполнив, например.

from numpy.random import random 

bland_altman_plot(random(10), random(10)) 
plt.title('Bland-Altman Plot') 
plt.show() 

Bland-Altman Plot

+1

Не должно быть 'md + 1.96 * sd' и' md - 1.96 * sd' вместо? –

0

может быть, я что-то не хватает, но это, кажется, довольно легко:

from numpy.random import random 
import matplotlib.pyplot as plt 

x = random(25) 
y = random(25) 

plt.title("FooBar") 
plt.scatter(x,y) 
plt.axhline(y=0.5,linestyle='--') 
plt.show() 

Здесь я просто создать некоторые случайные данные между 0 и 1 и I случайным образом ставит горизонтальную линию при y = 0,5 - но вы можете поместить столько, сколько хотите, где хотите.

Смежные вопросы