아래와 같은 프로그램을 만들어보려고 합니다.
진단키트의 민감도, 특이도, 질병발생률을 입력하면 음성예측도와 양성예측도를 알려주는 프로그램입니다. 언어는 파이썬을 이용하겠습니다.
몇가지 사전지식이 필요하다. 아래 용어들을 알아야 한다.
민감도(Sensitivity, SE) : 병에 걸린 사람이 양성이 나올 확률 (참양성)
특이도(Specificity, SP) : 병에 걸리지 않은 사람이 음성이 나올 확률 (참음성)
양성예측도(Positive Predictive Value, PPV) : 양성이 나왔을 때 병에 걸려있을 확률
음성예측도(Negative Predictive Value, NPV) : 음성이 나왔을 때 병에 걸리지 않았을 확률
유병률(Prevalence Rate) : 병의 발생 확률
수식으로 유도하겠지만 민감도,특이도,유병률을 이용하면 양성예측도와 음성예측도를 구할 수가 있습니다.
민감도와 특이도는 키트에서 제공한다. 아래는 식약처 보도자료이다.
우리가 궁금한 것은 양성예측도와 음성예측도이다. 둘다 조건부확률을 통해 구할 수 있다. 한번 구해보자. 먼저 양성예측도이다.
1. 양성예측도
양성예측도(PPV) : 양성(Positive, PSTV)이 나왔을 때 병에 걸려있을(Disease, D) 확률
$PPV=P(D | PSTV)$
우변을 아래와 같이 바꿀 수 있다.
$PPV=\frac{P(D \cap PSTV) }{P(PSTV)}$
전체확률법칙을 적용하면 분모를 아래와 같이 바꿀수 있습니다. ND는 병에 걸리지 않은 것입니다.
$PPV=\frac{P(D \cap PSTV) }{P(D)P(PSTV|D)+P(ND)P(PSTV|ND)}$
조건부확률의 정의를 이용하면 분자는 아래와 같이 바꿀 수 있습니다.
$PPV=\frac{P(D)P(PSTV|D) }{P(D)P(PSTV|D)+P(ND)P(PSTV|ND)}$
변형은 끝났습니다. 우변 각 항의 의미는 아래와 같습니다.
P(D) : 코로나 걸릴 확률 (Prevalence Rate)
P(PSTV|D) : 코로나에 걸렸을 때, 양성일 확률 (민감도)
P(PSTV|ND) : 코로나에 걸리지 안았을 때 양성일 확률 (1-특이도)
수식을 용어를 넣어 바꿔봅시다.
$PPV=\frac{(PrevalenceRate)(Sensitivity)}{(PrevalenceRate)(Sensitivity)+(1-PrevalenceRate)(1-Specificity)}$
2. 음성예측도
음성예측도(NPV) : 음성(Negative, NGTV)이 나왔을 때 병에 걸려있지 않을(ND) 확률
$NPV=P(ND | NGTV)$
우변을 아래와 같이 바꿀 수 있다.
$NPV=\frac{P(D \cap NGTV) }{P(NGTV)}$
전체확률법칙을 적용하면 분모를 아래와 같이 바꿀수 있습니다. ND는 병에 걸리지 않은 것입니다.
$NPV=\frac{P(ND \cap NGTV) }{P(D)P(NGTV|D)+P(ND)P(NGTV|ND)}$
조건부확률의 정의를 이용하면 분자는 아래와 같이 바꿀 수 있습니다.
$NPV=\frac{P(ND)P(NGTV|ND) }{P(D)P(NGTV|D)+P(ND)P(NGTV|ND)}$
변형은 끝났습니다. 우변 각 항의 의미는 아래와 같습니다.
P(ND) : 코로나 안걸릴 확률 (1-PrevalenceRate)
P(NGTV|D) : 코로나에 걸렸을 때, 음성일 확률 (1-민감도)
P(NGTV|ND) : 코로나에 걸리지 안았을 때 음성일 확률 (특이도)
수식을 용어를 넣어 바꿔봅시다.
$NPV=\frac{(1-PrevalenceRate)(Specificity)}{(1-PrevalenceRate)(Specificity)+(PrevalenceRate)(1-Sensitivity)}$
요약하면 아래와 같습니다. 우리가 구할 두가지 값입니다.
$PPV=\frac{(PrevalenceRate)(Sensitivity)}{(PrevalenceRate)(Sensitivity)+(1-PrevalenceRate)(1-Specificity)}$
$NPV=\frac{(1-PrevalenceRate)(Specificity)}{(1-PrevalenceRate)(Specificity)+(PrevalenceRate)(1-Sensitivity)}$
병에 걸릴 확률, 민감도, 특이도를 입력하면 PPV 와 NPV를 계산해주는 프로그램을 만들어볼 것입니다.
'파이썬 > tkinter GUI (코로나 양성예측도,음성예측도)' 카테고리의 다른 글
[파이썬 tkinter GUI 만들기] #6. 버튼 눌러서 값 입력받기 (0) | 2022.02.01 |
---|---|
[파이썬 tkinter GUI 만들기] #5. 입력 창 만들기 (0) | 2022.01.31 |
[파이썬 tkinter GUI 만들기] #4. 라벨 하나 추가해보기 (0) | 2022.01.31 |
[파이썬 tkinter GUI 만들기] #3. 화면 만들고 이름,사이즈 설정 (0) | 2022.01.31 |
[파이썬 tkinter GUI 만들기] #2. 레이아웃 짜기 (0) | 2022.01.31 |
댓글