আমি হ্যানলির & ম্যাকনিলের 1982-এর কাগজটি ' রিসিভার অপারেটিং বৈশিষ্ট্যযুক্ত (আরওসি) বক্ররেখার অধীনে অঞ্চলটির অর্থ এবং ব্যবহার ' সুপারিশ করব।
উদাহরণ
তাদের রোগের স্থিতি এবং পরীক্ষার ফলাফলের নীচের সারণী রয়েছে (উদাহরণস্বরূপ, একটি লজিস্টিক মডেল থেকে আনুমানিক ঝুঁকি)। ডানদিকে প্রথম সংখ্যাটি সত্যিকারের রোগের অবস্থা 'সাধারণ' এবং দ্বিতীয় সংখ্যাটি সত্য রোগের রোগীদের সংখ্যা 'অস্বাভাবিক':
(1) অবশ্যই স্বাভাবিক: 33/3
(2) সম্ভবত স্বাভাবিক: 6/2
(3) প্রশ্নোত্তর: 6/2
(4) সম্ভবত অস্বাভাবিক: 11/11
(5) অবশ্যই অস্বাভাবিক: 2/33
সুতরাং এখানে মোট 58 'সাধারণ' রোগী এবং '51' অস্বাভাবিক লোক রয়েছে। আমরা দেখতে পাই যে ভবিষ্যদ্বাণীকারী 1, 'অবশ্যই স্বাভাবিক', রোগী সাধারণত স্বাভাবিক (36 রোগীর মধ্যে 33 এর ক্ষেত্রে সত্য) এবং যখন এটি 5 হয়, 'অবশ্যই অস্বাভাবিক' রোগীরা সাধারণত অস্বাভাবিক হন (33 টির ক্ষেত্রে সত্য) 35 জন রোগী), সুতরাং ভবিষ্যদ্বাণীকারী বোধগম্য হয়। তবে কীভাবে আমরা 2, 3, বা 4 এর স্কোর সহ একজন রোগীর বিচার করব? ফলস্বরূপ পরীক্ষার সংবেদনশীলতা এবং সুনির্দিষ্টতা নির্ধারণ করার জন্য রোগীদের অস্বাভাবিক বা সাধারণ হিসাবে বিচার করার জন্য আমরা কী আমাদের কাট অফ সেট করেছি।
সংবেদনশীলতা এবং নির্দিষ্টতা
আমরা বিভিন্ন কাট অফের জন্য অনুমান সংবেদনশীলতা এবং নির্দিষ্টতা গণনা করতে পারি । (আমি এখন থেকে 'সংবেদনশীলতা' এবং 'নির্দিষ্টতা' লিখব, মানগুলির অনুমানিত প্রকৃতিকে অন্তর্নিহিত হতে দেই))
যদি আমরা আমাদের কাট অফটি বেছে নিই যাতে আমরা সমস্ত রোগীদের অস্বাভাবিক হিসাবে শ্রেণিবদ্ধ করি , তাদের পরীক্ষার ফলাফল যা বলুক না কেন (যেমন, আমরা কাটফট 1+ বেছে নিই), আমরা 51/51 = 1 এর সংবেদনশীলতা পাব The / 58 = 0. এত ভাল শোনাচ্ছে না।
ঠিক আছে, সুতরাং একটি কম কঠোর কাটঅফ চয়ন করি। আমরা কেবলমাত্র রোগীদের 2 বা ততোধিক পরীক্ষার ফলাফল পেলে অস্বাভাবিক হিসাবে শ্রেণিবদ্ধ করি। তারপরে আমরা 3 অস্বাভাবিক রোগী মিস করি এবং 48/51 = 0.94 এর সংবেদনশীলতা রয়েছে। তবে আমাদের 33/58 = 0.57 এর অনেক বেশি নির্দিষ্টতা রয়েছে।
আমরা এখন এটি চালিয়ে যেতে পারি, বিভিন্ন কাট অফগুলি (3, 4, 5,> 5) চয়ন করে। (শেষের ক্ষেত্রে, আমরা কোনও রোগীকে অস্বাভাবিক হিসাবে শ্রেণিবদ্ধ করব না , এমনকি যদি তাদের সর্বোচ্চ 5 এর স্কোর পরীক্ষাও হয়)
আরওসি বক্ররেখা
যদি আমরা এটি সমস্ত সম্ভাব্য কাটঅফগুলির জন্য করি, এবং 1 বিয়োগের স্পষ্টতার বিরুদ্ধে সংবেদনশীলতাটি আমরা পাই, তবে আমরা আরওসি বক্ররেখা পাই। আমরা নিম্নলিখিত আর কোড ব্যবহার করতে পারি:
# Data
norm = rep(1:5, times=c(33,6,6,11,2))
abnorm = rep(1:5, times=c(3,2,2,11,33))
testres = c(abnorm,norm)
truestat = c(rep(1,length(abnorm)), rep(0,length(norm)))
# Summary table (Table I in the paper)
( tab=as.matrix(table(truestat, testres)) )
আউটপুটটি হ'ল:
testres
truestat 1 2 3 4 5
0 33 6 6 11 2
1 3 2 2 11 33
আমরা বিভিন্ন পরিসংখ্যান গণনা করতে পারি:
( tot=colSums(tab) ) # Number of patients w/ each test result
( truepos=unname(rev(cumsum(rev(tab[2,])))) ) # Number of true positives
( falsepos=unname(rev(cumsum(rev(tab[1,])))) ) # Number of false positives
( totpos=sum(tab[2,]) ) # The total number of positives (one number)
( totneg=sum(tab[1,]) ) # The total number of negatives (one number)
(sens=truepos/totpos) # Sensitivity (fraction true positives)
(omspec=falsepos/totneg) # 1 − specificity (false positives)
sens=c(sens,0); omspec=c(omspec,0) # Numbers when we classify all as normal
এবং এটি ব্যবহার করে আমরা (আনুমানিক) আরওসি বক্ররেখা প্লট করতে পারি:
plot(omspec, sens, type="b", xlim=c(0,1), ylim=c(0,1), lwd=2,
xlab="1 − specificity", ylab="Sensitivity") # perhaps with xaxs="i"
grid()
abline(0,1, col="red", lty=2)
ম্যানুয়ালি এওসি গণনা করা হচ্ছে
ট্র্যাপিজয়েডের ক্ষেত্রের সূত্রটি ব্যবহার করে আমরা খুব সহজেই আরওসি বক্ররেখার অঞ্চলটি গণনা করতে পারি:
height = (sens[-1]+sens[-length(sens)])/2
width = -diff(omspec) # = diff(rev(omspec))
sum(height*width)
ফলাফল 0.8931711।
একটি সম্মতি পরিমাপ
এটিউকে একত্রীকরণ ব্যবস্থা হিসাবেও দেখা যেতে পারে। আমরা সব সম্ভব না নেন তাহলে জোড়া রোগীদের যেখানে এক স্বাভাবিক এবং অন্যান্য অস্বাভাবিক হয়, আমরা নিরূপণ করতে পারেন কত ঘন ঘন এটা অস্বাভাবিক এক সর্বোচ্চ (অধিকাংশ 'অস্বাভাবিক সুদর্শন') পরীক্ষার ফলাফল হয়েছে যে (তারা একই মান আছে যদি, আমরা এটি 'অর্ধেক বিজয়' হিসাবে গণনা করুন):
o = outer(abnorm, norm, "-")
mean((o>0) + .5*(o==0))
উত্তরটি আবার 0.8931711, আরওসি বক্ররেখার অধীনে অঞ্চল। সর্বদা এটি হবে।
সম্মিলনের একটি গ্রাফিকাল ভিউ
হ্যারেল তার উত্তরে যেমন উল্লেখ করেছেন, এর গ্রাফিকাল ব্যাখ্যাও রয়েছে। এক্স- এক্সিসে y -axis এবং সত্য রোগের স্থিতির উপর পরীক্ষা স্কোর (ঝুঁকি প্রাক্কলন) প্লট করা যাক ( ওভারল্যাপিং পয়েন্টগুলি দেখানোর জন্য এখানে কিছু বিড়ম্বনা সহ):
plot(jitter(truestat,.2), jitter(testres,.8), las=1,
xlab="True disease status", ylab="Test score")
এখন আসুন বাম দিকে (একটি 'স্বাভাবিক' রোগী) এবং ডানদিকে প্রতিটি পয়েন্টের (একটি 'অস্বাভাবিক' রোগী) এর মধ্যে একটি লাইন আঁকুন। ধনাত্মক opeালের সাথে রেখাগুলির অনুপাত (যেমন, সম্মিলিত জোড়গুলির অনুপাত ) সম্মতি সূচক (সমতল রেখাগুলি '50% একত্রীকরণ 'হিসাবে গণনা করা হয়)।
সম্পর্কের সংখ্যার (সমতুল্য ঝুঁকির স্কোর) কারণে এই উদাহরণের জন্য প্রকৃত লাইনগুলি কল্পনা করা কিছুটা কঠিন, তবে কিছুটা ক্ষোভ এবং স্বচ্ছতার সাথে আমরা যুক্তিসঙ্গত প্লট পেতে পারি:
d = cbind(x_norm=0, x_abnorm=1, expand.grid(y_norm=norm, y_abnorm=abnorm))
library(ggplot2)
ggplot(d, aes(x=x_norm, xend=x_abnorm, y=y_norm, yend=y_abnorm)) +
geom_segment(colour="#ff000006",
position=position_jitter(width=0, height=.1)) +
xlab("True disease status") + ylab("Test\nscore") +
theme_light() + theme(axis.title.y=element_text(angle=0))
আমরা দেখতে পাই যে বেশিরভাগ লাইন upালু উপরের দিকে থাকে, সুতরাং সম্মতি সূচকটি বেশি হবে। আমরা প্রতিটি ধরণের পর্যবেক্ষণ জোড়া থেকে সূচকে অবদানও দেখতে পাই। এটি বেশিরভাগই 5 (1-5 জোড়া) এর ঝুঁকির স্কোর সহ অস্বাভাবিক রোগীদের সাথে 1 পেয়ারযুক্ত ঝুঁকিপূর্ণ স্কোর সহ সাধারণ রোগীদের কাছ থেকে আসে তবে বেশ কিছুটা 1–4 জোড়া এবং 4-55 জোড়া থেকেও আসে। এবং opeালের সংজ্ঞা অনুসারে প্রকৃত সম্মিলিত সূচক গণনা করা খুব সহজ:
d = transform(d, slope=(y_norm-y_abnorm)/(x_norm-x_abnorm))
mean((d$slope > 0) + .5*(d$slope==0))
উত্তরটি আবার 0.8931711, অর্থাৎ এটিসি।
উইলকক্সন – মান – হুইটনি পরীক্ষা
সম্মিলন পরিমাপ এবং উইলকক্সন – মান – হুইটনি পরীক্ষার মধ্যে একটি ঘনিষ্ঠ যোগাযোগ রয়েছে। প্রকৃতপক্ষে, পরের পরীক্ষাগুলি যদি সম্মতির সম্ভাবনা থাকে (যেমন এটি কোনও এলোমেলো স্বাভাবিক-অস্বাভাবিক জোড়ের অস্বাভাবিক রোগী যার সর্বাধিক 'অস্বাভাবিক দেখায়' পরীক্ষার ফলাফল হয়) ঠিক 0.5 হয়। এবং এর পরীক্ষার পরিসংখ্যানগুলি আনুমানিক সম্মতির সম্ভাবনার কেবলমাত্র একটি সাধারণ রূপান্তর:
> ( wi = wilcox.test(abnorm,norm) )
Wilcoxon rank sum test with continuity correction
data: abnorm and norm
W = 2642, p-value = 1.944e-13
alternative hypothesis: true location shift is not equal to 0
পরীক্ষার পরিসংখ্যান ( W = 2642
) সম্মতিযুক্ত জোড়গুলির সংখ্যা গণনা করে। যদি আমরা এটি সম্ভাব্য জোড় সংখ্যার দ্বারা ভাগ করি তবে আমরা একটি ফ্যামিলার নম্বর পাই:
w = wi$statistic
w/(length(abnorm)*length(norm))
হ্যাঁ, এটি 0.8931711, আরওসি বক্ররেখার অধীনে অঞ্চল।
AUC গণনা করার সহজ উপায় (আর মধ্যে)
তবে আসুন আমরা নিজের জন্য জীবনকে আরও সহজ করে তুলি। বিভিন্ন প্যাকেজ রয়েছে যা আমাদের জন্য স্বয়ংক্রিয়ভাবে এটিউকে গণনা করে।
এপিআই প্যাকেজ
Epi
প্যাকেজ (AUC সহ) এমবেডেড বিভিন্ন পরিসংখ্যান একটা চমৎকার আরওসি বক্ররেখা তৈরি করে:
library(Epi)
ROC(testres, truestat) # also try adding plot="sp"
পিআরসি প্যাকেজ
আমি pROC
প্যাকেজটিও পছন্দ করি , যেহেতু এটি আরওসি প্রাক্কলনকে মসৃণ করতে পারে (এবং স্মুথড আরওসি এর ভিত্তিতে একটি এউসি অনুমান গণনা করে):
(লাল রেখাটি মূল আরওসি, এবং কালো রেখাটি স্মুটেড আরওসি। এছাড়াও ডিফল্ট 1: 1 টির অনুপাতটিও নোট করুন this এটি ব্যবহার করা বোধগম্য হয়, কারণ সংবেদনশীলতা এবং নির্দিষ্টতা উভয়েরই একটি 0-11 পরিসীমা রয়েছে))
থেকে আনুমানিক AUC মসৃণ আরওসি 0,9107, অনুরূপ, কিন্তু চেয়ে সামান্য বড়, unsmoothed রকপাখি থেকে AUC (যদি আপনি চিত্রে তাকান, আপনি সহজেই দেখতে পারেন কেন এটা বড় ব্যাপার)। (যদিও আমাদের কাছে মসৃণ এউসি গণনা করার জন্য খুব কম সম্ভাব্য স্বতন্ত্র পরীক্ষার ফলাফলের মান রয়েছে)।
আরএমএস প্যাকেজ
হ্যারেলের rms
প্যাকেজটি rcorr.cens()
ফাংশনটি ব্যবহার করে বিভিন্ন সম্পর্কিত সম্মিলিত পরিসংখ্যান গণনা করতে পারে । C Index
তার আউটপুটে AUC হল:
> library(rms)
> rcorr.cens(testres,truestat)[1]
C Index
0.8931711
CATools প্যাকেজ
অবশেষে, আমাদের caTools
প্যাকেজ এবং এর colAUC()
কার্যকারিতা রয়েছে। অন্যান্য প্যাকেজগুলির তুলনায় এর কয়েকটি সুবিধা রয়েছে (মূলত গতি এবং বহু-মাত্রিক ডেটা দিয়ে কাজ করার ক্ষমতা - দেখুন ?colAUC
) যা কখনও কখনও সহায়ক হতে পারে। তবে অবশ্যই এটি একই উত্তর দেয় যা আমরা বারবার গণনা করেছি:
library(caTools)
colAUC(testres, truestat, plotROC=TRUE)
[,1]
0 vs. 1 0.8931711
চূড়ান্ত শব্দ
অনেকের মনে হয় মনে হয় যে এইউসি আমাদের জানায় যে পরীক্ষা কতটা 'ভাল'। এবং কিছু লোক মনে করেন যে পরীক্ষাগুলি সঠিকভাবে কোনও রোগীকে শ্রেণিবদ্ধ করবে এমন সম্ভাবনা হ'ল এটিউ। এটা হয় না । উপরের উদাহরণ এবং গণনা থেকে আপনি দেখতে পাচ্ছেন, এইউসি আমাদের পরীক্ষার একটি পরিবার সম্পর্কে প্রতিটি কথা বলে , প্রতিটি সম্ভাব্য কাটঅফের জন্য একটি করে পরীক্ষা।
এবং এটিউ কে কাট অফসের উপর ভিত্তি করে গণনা করা হয় যার ব্যবহারে কখনও ব্যবহার করা যায় না। কেন আমাদের 'সংবেদনহীন' কাট অফ মানগুলির সংবেদনশীলতা এবং নির্দিষ্টতা সম্পর্কে যত্ন নেওয়া উচিত? তবুও, এইউসি এটিই (আংশিক) ভিত্তিক। (অবশ্যই, যদি এইউসি খুব কাছাকাছি হয় 1, প্রায় প্রতিটি সম্ভাব্য পরীক্ষার দুর্দান্ত বৈষম্যমূলক ক্ষমতা থাকবে এবং আমরা সকলেই খুব খুশি হব))
এউসির 'এলোমেলো স্বাভাবিক – অস্বাভাবিক' জুটির ব্যাখ্যাটি দুর্দান্ত (এবং এটি বাড়ানো যেতে পারে, উদাহরণস্বরূপ, বেঁচে থাকার মডেলগুলিতে, যেখানে আমরা দেখতে পাই এটির সর্বোচ্চ (আপেক্ষিক) ঝুঁকিযুক্ত ব্যক্তিটি যদি খুব শীঘ্রই মারা যায়)) তবে কেউ কখনও তা ব্যবহারে ব্যবহার করতে পারে না। এটি একটি বিরল ক্ষেত্রে যেখানে একজন জানে যে একজনের একজন স্বাস্থ্যকর এবং একজন অসুস্থ ব্যক্তি রয়েছে, জানেন না কোন ব্যক্তি অসুস্থ এবং তিনি কোনটি চিকিত্সা করবেন তা সিদ্ধান্ত নিতে হবে। (যে কোনও ক্ষেত্রে, সিদ্ধান্তটি সহজ; সর্বাধিক অনুমানিত ঝুঁকির সাথে আচরণ করুন))
সুতরাং আমি মনে করি সত্যিকারের আরওসি বক্ররেখা অধ্যয়ন করা কেবলমাত্র এউসি সংক্ষিপ্ত পরিমাপের চেয়ে বেশি উপকারী হবে। এবং আপনি যদি অধ্যয়ন করছেন তার বেসের হারের সাথে মিথ্যা ধনাত্মক এবং মিথ্যা নেতিবাচক ব্যয়ের (অনুমানের) একসাথে আরওসি ব্যবহার করে , আপনি কোথাও পেতে পারেন।
এছাড়াও লক্ষ করুন যে এইউসি কেবলমাত্র বৈষম্য পরিমাপ করে , ক্রমাঙ্কন নয়। এটি, এটি ঝুঁকির স্কোরের উপর ভিত্তি করে আপনি দুটি ব্যক্তির (একজন অসুস্থ এবং একজন স্বাস্থ্যকর) মধ্যে বৈষম্য রাখতে পারবেন কিনা তা মাপ দেয়। এর জন্য, এটি কেবল আপেক্ষিক ঝুঁকিপূর্ণ মানগুলি (অথবা আপনি যদি এটি করেন তবে সিফ। উইলকক্সন – মান – হুইটনি পরীক্ষার ব্যাখ্যা) দেখায় , পরম মান নয়, যার জন্য আপনার আগ্রহী হওয়া উচিত example উদাহরণস্বরূপ, যদি আপনি প্রতিটি ঝুঁকি ভাগ করে থাকেন আপনার লজিস্টিক মডেলটি 2 দ্বারা অনুমান করুন, আপনি ঠিক একই এওসি (এবং আরওসি) পাবেন।
ঝুঁকিপূর্ণ মডেলটি মূল্যায়ন করার সময়, ক্রমাঙ্কন করাও খুব গুরুত্বপূর্ণ। এটি পরীক্ষা করতে, আপনি চারপাশের ঝুঁকিপূর্ণ স্কোর সহ সমস্ত রোগীর দিকে নজর রাখবেন, উদাহরণস্বরূপ, 0.7 এবং এগুলির মধ্যে প্রায় 70% অসুস্থ ছিল কিনা তা দেখুন। প্রতিটি সম্ভাব্য ঝুঁকিপূর্ণ স্কোরের জন্য এটি করুন (সম্ভবত কোনও ধরণের স্মুথিং / লোকাল রিগ্রেশন ব্যবহার করে)। ফলাফলগুলি প্লট করুন এবং আপনি ক্রমাঙ্কনের একটি গ্রাফিকাল পরিমাপ পাবেন ।
যদি ভাল ক্রমাঙ্কন এবং ভাল বৈষম্য উভয়ই সহ একটি মডেল থাকে , তবে আপনার ভাল মডেল হওয়া শুরু হয়। :)