এবং β সম্পর্কিত হয়। আমি ডায়াগনস্টিক পরীক্ষার মাধ্যমে পয়েন্টটি চিত্রিত করার চেষ্টা করব। ধরা যাক যে আপনার একটি ডায়াগনস্টিক পরীক্ষা আছে যা রক্তের চিহ্নিতকারীটির মাত্রা পরিমাপ করে। এটি জানা যায় যে একটি নির্দিষ্ট রোগে আক্রান্ত ব্যক্তিদের স্বাস্থ্যকর মানুষের তুলনায় এই চিহ্নিতকারীটির মাত্রা কম থাকে। এটি অবিলম্বে পরিষ্কার হয়ে গেছে যে আপনাকে একটি কাট অফের মান নির্ধারণ করতে হবে, যার নীচে একজন ব্যক্তিকে "অসুস্থ" হিসাবে শ্রেণিবদ্ধ করা হয়েছে যেখানে এই কাটফের উপরের মানগুলির লোকেরা স্বাস্থ্যকর বলে মনে করা হচ্ছে। এটি খুব সম্ভাব্য যে, bloodmarker বিতরণের এমনকি যথেষ্ট তারতম্য হয়মধ্যেঅসুস্থ এবং সুস্থ মানুষ। কিছু সুস্থ ব্যক্তিদের পুরোপুরি সুস্থ থাকা সত্ত্বেও রক্তের মার্কার মাত্রা খুব কম থাকে। এবং কিছু অসুস্থ ব্যক্তিদের এই রোগ থাকলেও উচ্চ মাত্রায় রক্তের মার্কার থাকে।αβ
চারটি সম্ভাব্য সংঘটিত ঘটতে পারে:
- একজন অসুস্থ ব্যক্তি সঠিকভাবে অসুস্থ হিসাবে চিহ্নিত (সত্য ধনাত্মক = টিপি)
- অসুস্থ ব্যক্তিকে মিথ্যাভাবে স্বাস্থ্যকর হিসাবে শ্রেণিবদ্ধ করা হয় (মিথ্যা নেতিবাচক = এফএন)
- একটি সুস্থ ব্যক্তি সঠিকভাবে স্বাস্থ্যকর হিসাবে চিহ্নিত (সত্য নেতিবাচক = টিএন)
- একটি স্বাস্থ্যবান ব্যক্তি মিথ্যাভাবে অসুস্থ হিসাবে শ্রেণীবদ্ধ করা হয়েছে (মিথ্যা ধনাত্মক = এফপি)
এই সম্ভাবনাগুলি 2x2 টেবিল দিয়ে চিত্রিত করা যেতে পারে :
Sick Healthy
Test positive TP FP
Test negative FN TN
মিথ্যা ইতিবাচক হার, যা উল্লেখ করে α = এফ পি / ( এফ পি + + টি এন ) । β হল মিথ্যা নেতিবাচক হার, যা β = এফ এন / ( টি পি + এফ এন ) । পরিস্থিতি চিত্রক্রমে বর্ণনা করার জন্যআমি একটি সহজস্ক্রিপ্টলিখেছিলাম।αα = এফপি/ (চপি+ টিএন)ββ= এফএন/ (টিপি+ এফএন)R
alphabeta <- function(mean.sick=100, sd.sick=10, mean.healthy=130, sd.healthy=10, cutoff=120, n=10000, side="below", do.plot=TRUE) {
popsick <- rnorm(n, mean=mean.sick, sd=sd.sick)
pophealthy <- rnorm(n, mean=mean.healthy, sd=sd.healthy)
if ( side == "below" ) {
truepos <- length(popsick[popsick <= cutoff])
falsepos <- length(pophealthy[pophealthy <= cutoff])
trueneg <- length(pophealthy[pophealthy > cutoff])
falseneg <- length(popsick[popsick > cutoff])
} else if ( side == "above" ) {
truepos <- length(popsick[popsick >= cutoff])
falsepos <- length(pophealthy[pophealthy >= cutoff])
trueneg <- length(pophealthy[pophealthy < cutoff])
falseneg <- length(popsick[popsick < cutoff])
}
twotable <- matrix(c(truepos, falsepos, falseneg, trueneg), 2, 2, byrow=T)
rownames(twotable) <- c("Test positive", "Test negative")
colnames(twotable) <- c("Sick", "Healthy")
spec <- twotable[2,2]/(twotable[2,2] + twotable[1,2])
alpha <- 1 - spec
sens <- pow <- twotable[1,1]/(twotable[1,1] + twotable[2,1])
beta <- 1 - sens
pos.pred <- twotable[1,1]/(twotable[1,1] + twotable[1,2])
neg.pred <- twotable[2,2]/(twotable[2,2] + twotable[2,1])
if ( do.plot == TRUE ) {
dsick <- density(popsick)
dhealthy <- density(pophealthy)
par(mar=c(5.5, 4, 0.5, 0.5))
plot(range(c(dsick$x, dhealthy$x)), range(c(c(dsick$y, dhealthy$y))), type = "n", xlab="", ylab="", axes=FALSE)
box()
axis(1, at=mean(pophealthy), lab=substitute(mu[H[0]]~paste("=",m, sep=""), list(m=mean.healthy)), cex.axis=1.5,tck=0.02)
axis(1, at=mean(popsick), lab=substitute(mu[H[1]]~paste("=",m, sep=""), list(m=mean.sick)), cex.axis=1.5, tck=0.02)
axis(1, at=cutoff, lab=substitute(italic(paste("Cutoff=",coff, sep="")), list(coff=cutoff)), pos=-0.004, tick=FALSE, cex.axis=1.25)
lines(dhealthy, col = "steelblue", lwd=2)
if ( side == "below" ) {
polygon(c(cutoff, dhealthy$x[dhealthy$x<=cutoff], cutoff), c(0, dhealthy$y[dhealthy$x<=cutoff],0), col = "grey65")
} else if ( side == "above" ) {
polygon(c(cutoff, dhealthy$x[dhealthy$x>=cutoff], cutoff), c(0, dhealthy$y[dhealthy$x>=cutoff],0), col = "grey65")
}
lines(dsick, col = "red", lwd=2)
if ( side == "below" ) {
polygon(c(cutoff,dsick$x[dsick$x>cutoff],cutoff),c(0,dsick$y[dsick$x>cutoff],0) , col="grey90")
} else if ( side == "above" ) {
polygon(c(cutoff,dsick$x[dsick$x<=cutoff],cutoff),c(0,dsick$y[dsick$x<=cutoff],0) , col="grey90")
}
legend("topleft",
legend=(c(as.expression(substitute(alpha~paste("=", a), list(a=round(alpha,3)))),
as.expression(substitute(beta~paste("=", b), list(b=round(beta,3)))))), fill=c("grey65", "grey90"), cex=1.2, bty="n")
abline(v=mean(popsick), lty=3)
abline(v=mean(pophealthy), lty=3)
abline(v=cutoff, lty=1, lwd=1.5)
abline(h=0)
}
#list(specificity=spec, sensitivity=sens, alpha=alpha, beta=beta, power=pow, positiv.predictive=pos.pred, negative.predictive=neg.pred)
c(alpha, beta)
}
একটি উদাহরণ তাকান। আমরা ধরে নিয়েছি যে অসুস্থ ব্যক্তিদের মধ্যে রক্তের চিহ্নিতকারকের গড় স্তরটি 10 এর একটি মানিক বিচ্যুতি সহ 100 হয়। স্বাস্থ্যকর মানুষদের মধ্যে, গড় রক্তের মাত্রা 150 এর মানক বিচ্যুতি সহ 140 হয় clin ক্লিনিকটি কাটফটকে 120 এ সেট করে।
alphabeta(mean.sick=100, sd.sick=10, mean.healthy=140, sd.healthy=15, cutoff=120, n=100000, do.plot=TRUE, side="below")
Sick Healthy
Test positive 9764 901
Test negative 236 9099
α = 901 / ( 901 + 9099 ) ≈ 0.09β= 236 / ( 236 + 9764 ) ≈ 0.024
Sick Healthy
Test positive 6909 90
Test negative 3091 9910
αβ
αβ
cutoffs <- seq(0, 200, by=0.1)
cutoff.grid <- expand.grid(cutoffs)
plot.frame <- apply(cutoff.grid, MARGIN=1, FUN=alphabeta, mean.sick=100, sd.sick=10, mean.healthy=140, sd.healthy=15, n=100000, do.plot=FALSE, side="below")
plot(plot.frame[1,]~cutoffs, type="l", las=1, xlab="Cutoff value", ylab="Alpha/Beta", lwd=2, cex.axis=1.5, cex.lab=1.2)
lines(plot.frame[2,]~cutoffs, col="steelblue", lty=2, lwd=2)
legend("topleft", legend=c(expression(alpha), expression(beta)), lwd=c(2,2),lty=c(1,2), col=c("black", "steelblue"), bty="n", cex=1.2)
αβ
এখানে আমাদের অর্থে একটি "নিখুঁত" পরীক্ষা আছে যে 150 এর কাট অফ অসুস্থকে স্বাস্থ্যকর থেকে বৈষম্য করে।
বনফেরনি অ্যাডজাস্টমেন্টস
αββ0.020.31α0.090.01