Bland-Altman 음모를 어떻게 해석합니까? 다른 측정 방법을 비교하는 다른 방법보다

평범한 영어로, Bland-Altman 음모를 어떻게 해석합니까?

두 가지 다른 측정 방법을 비교하는 다른 방법보다 Bland-Altman 플롯을 사용하면 어떤 이점이 있습니까?



답변

Bland-Altman 플롯은 Tukey 평균 차이 플롯 (John Tukey http://en.wikipedia.org/wiki/John_Tukey에 의해 고안된 많은 차트 중 하나)으로 더 널리 알려져 있습니다.

아이디어는 x 축이 두 측정의 평균이며 “올바른”결과에 대한 최선의 추측이며 y 축은 두 측정 차이의 차이입니다. 그런 다음 차트는 측정에서 특정 유형의 이상을 강조 표시 할 수 있습니다. 예를 들어, 하나의 방법으로 항상 결과가 너무 높으면 모든 점이 0 선 위 또는 아래에 표시됩니다. 예를 들어, 한 방법이 높은 값을 과대 평가하고 낮은 값을 과소 평가한다는 사실도 알 수 있습니다.

Bland-Altman 플롯의 점이 0 위와 아래에 흩어져있는 것을 볼 경우 한 접근 방식과 다른 접근 방식 사이에 일관된 편향이 없다는 것을 암시합니다 (물론이 플롯이하는 숨겨진 편향이있을 수 있음) 표시되지 않음).

기본적으로 데이터 탐색을위한 첫 번째 단계입니다. 측정의보다 특정한 종류의 행동을 파헤 치기 위해 다른 기술이 사용될 수있다.


답변

차이 대 평균 그림 외에도 Bland 및 Altman 그림은 비율 대 평균 일 수 있습니다. 줄거리.

예를 들어, 60, 70, 80 kg의 사람들이 밟을 때 새로운 계량기는 다음 데이터를 제공합니다.

66kg 77kg 88kg

이러한 시나리오에서 계량기는 매번 중량을 10 % 과대 평가합니다. 따라서 비율 대 평균 그림은이 경우 더 나은 데이터 시각화를 제공합니다.


답변

이것은 Bland-Altman 플롯의 Wikipedia 정의입니다.

분석 화학 또는 생의학에서 Bland-Altman 플롯 (차이 플롯)은 서로 다른 두 가지 분석 간의 일치 성을 분석하는 데 사용되는 데이터 플롯 방법입니다. 이 용어 는 다른 분야에서 알려진 이름 인 Tukey 평균 차이 플롯 1 과 동일 하지만 J. Martin Bland 및 Douglas G. Altman에 의해 의료 통계에서 대중화되었습니다.

파이썬에서 Bland-Altman 플롯을 구현하려면 다음을 사용할 수 있습니다.

파이썬에서 이것을하고 싶다면이 코드를 사용할 수 있습니다

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 루프를 쉽게 추가하고 여러 플롯을 만들 수 있습니다