二項ロジスティック回帰は、1と0の上限と下限の漸近線をそれぞれ持っています。ただし、精度データ(例として)には、1や0とは大きく異なる上限と下限の漸近線がある場合があります。これに対する3つの解決策が考えられます。
- 関心のある領域内でうまく適合している場合は、心配する必要はありません。うまくフィットしない場合:
- サンプルの正しい応答の最小数と最大数が0と1の比率になるようにデータを変換します(たとえば0と0.15ではなく)。
または - 非線形回帰を使用して、漸近線を指定するか、フィッターに代行させることができます。
オプション1と2は、主に単純化の理由から、オプション3よりも優先されるようです。この場合、オプション3は、より多くの情報を提供できるため、おそらくより良いオプションでしょうか。
編集
ここに例があります。精度の可能な正しい合計は100ですが、この場合の最大精度は〜15です。
accuracy <- c(0,0,0,0,0,1,3,5,9,13,14,15,14,15,16,15,14,14,15)
x<-1:length(accuracy)
glmx<-glm(cbind(accuracy, 100-accuracy) ~ x, family=binomial)
ndf<- data.frame(x=x)
ndf$fit<-predict(glmx, newdata=ndf, type="response")
plot(accuracy/100 ~ x)
with(ndf, lines(fit ~ x))
オプション2(コメントに従って、私の意味を明確にするため)がモデルになります
glmx2<-glm(cbind(accuracy, 16-accuracy) ~ x, family=binomial)
オプション3(完全を期すため)は次のようなものです。
fitnls<-nls(accuracy ~ upAsym + (y0 - upAsym)/(1 + (x/midPoint)^slope),
start = list("upAsym" = max(accuracy), "y0" = 0, "midPoint" = 10, "slope" = 5),
lower = list("upAsym" = 0, "y0" = 0, "midPoint" = 1, "slope" = 0),
upper = list("upAsym" = 100, "y0" = 0, "midPoint" = 19, hillslope = Inf),
control = nls.control(warnOnly = TRUE, maxiter=1000),
algorithm = "port")
cbind(accuracy, 16-accuracy)
)ではなく16を最大値として使用することですが、それが数学的に正当化されるかどうか心配です。