본문 바로가기
파이썬/tkinter GUI (코로나 양성예측도,음성예측도)

[파이썬 tkinter GUI 만들기] #1. 코로나 진단키트 예측도 계산 프로그램

by 만다린망고 2022. 1. 30.
반응형

 

 

아래와 같은 프로그램을 만들어보려고 합니다. 

 

 

진단키트의 민감도, 특이도, 질병발생률을 입력하면 음성예측도와 양성예측도를 알려주는 프로그램입니다. 언어는 파이썬을 이용하겠습니다. 

 

몇가지 사전지식이 필요하다. 아래 용어들을 알아야 한다. 

 

민감도(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를 계산해주는 프로그램을 만들어볼 것입니다. 

 

반응형

댓글