二項回帰漸近線


8

二項ロジスティック回帰は、1と0の上限と下限の漸近線をそれぞれ持っています。ただし、精度データ(例として)には、1や0とは大きく異なる上限と下限の漸近線がある場合があります。これに対する3つの解決策が考えられます。

  1. 関心のある領域内でうまく適合している場合は、心配する必要はありません。うまくフィットしない場合:
  2. サンプルの正しい応答の最小数と最大数が0と1の比率になるようにデータを変換します(たとえば0と0.15ではなく)。
    または
  3. 非線形回帰を使用して、漸近線を指定するか、フィッターに代行させることができます。

オプション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")

なぜここに問題があるのですか?ロジスティック回帰は、確率のロジット(ログオッズ)が説明変数と線形関係にあると仮定します。ログオッズの有効範囲は、実数のセット全体です。それらを超える可能性はありません!
whuber

たとえば、0.15の確率正解の上位漸近線があるとします。その場合、回帰はデータにうまく適合しません。例を挙げましょう。
Matt Albrecht、

素晴らしい質問を1つ。私の本能は100(cbind(accuracy, 16-accuracy))ではなく16を最大値として使用することですが、それが数学的に正当化されるかどうか心配です。
David Robinson、

回答:


3

興味深い質問です。私の頭に浮かぶ可能性は、「リンク」関数の上限を制御するために追加のパラメーターを含めることです。p[0,1]

ましょう、の独立した観測値とすることが、、は説明変数のベクトルで、は回帰係数のベクトルで、はリンク関数です。次に、尤度関数は{xj,yj,nj}j=1,...,nyjBinomial{ni,pF(xjTβ)}p[0,1]xj=(1,xj1,...,xjk)Tβ=(β0,...,βk)F1

L(β,p)j=1npyjF(xjTβ)yj[1pF(xjTβ)]njyj

次のステップは、ロジスティック分布などのリンクを選択し、対応するMLEを見つけることです。(β,p)

および用量反応モデルを使用した次のシミュレーションされたおもちゃの例を考えてみましょう、N = 31(β0,β1,p)=(0.5,0.5,0.25)n=31

dose = seq(-15,15,1)
a = 0.5
b = 0.5
n=length(dose)
sim = rep(0,n)
for(i in 1:n) sim[i] = rbinom(1,100,0.25*plogis(a+b*dose[i]))

plot(dose,sim/100)

lp = function(par){
if(par[3]>0& par[3]<1) return(-(n*mean(sim)*log(par[3]) +  sum(sim*log(plogis(par[1]+par[2]*dose)))  + sum((100-sim)*log(1-par[3]*plogis(par[1]+par[2]*dose))) ))
else return(-Inf)
}

optim(c(0.5,0.5,0.25),lp)

私が得た結果の1つはです。したがって、それは正確なようです。バイナリ回帰モデルに含めたパラメータは難しいことができ、MLEの識別性又は存在の問題は、ステージ上にジャンプすることができるので、当然のことながら、このモデルのより詳細な探索が必要であろう1 2(β^0,β^1,p^)=(0.4526650,0.4589112,0.2395564)

編集する

(問題を大幅に変更する)編集があれば、以前に提案した方法を変更して、提供したデータを適合させることができます。モデルを検討する

accuracy=pF(x;μ,σ),

ここで、はロジスティックCDF、は位置パラメーター、はスケールパラメーター、パラメーターは前のモデルと同様に曲線の高さを制御します。このモデルは、非線形最小二乗法を使用して近似できます。次のRコードは、データに対してこれを行う方法を示しています。μ σ PFμσp

rm(list=ls())
y = c(0,0,0,0,0,1,3,5,9,13,14,15,14,15,16,15,14,14,15)/100
x = 1:length(y)
N = length(y)

plot(y ~ x)

Data = data.frame(x,y)

nls_fit = nls(y ~ p*plogis(x,m,s), Data, start = list(m = 10, s = 1,  p = 0.2) )

lines(Data$x, predict(nls_fit), col = "red")

1
これは興味深いアプローチです。3つのパラメータの非線形回帰関数よりもこの方法を使用する利点は何ですか?
マットアルブレヒト

@MattAlbrecht関心をお寄せいただきありがとうございます。このアプローチの長所と短所を見ることができます。長所の1つは、ロジット回帰に類似したアプローチの解釈可能性です。一方、非線形回帰関数はより柔軟な場合があります。適切に推定するには、リンク関数のテールに集中していない優れた実験計画が必要であると思われます。モデルが以前に研究されたかどうかはわかりません。p

2
利点は、二項変動性を正しく組み込むことです。
Aniko

@MattAlbrechtこのメソッドはフィット関数の形状をS字型に制限し、パラメーターは高さを制御しますが、検討しているノンパラメトリックメソッドはそうではありません。ところで、このモデルで推定されるパラメーターはです。p(μ^,σ^,p^)=(8.5121,0.8987,0.1483)

2

成功の合計数として、Xベクトルの最大値を使用します。(これは、成功の真の最大数の偏った見積もりですが、十分なデータがある場合はかなりうまくいくはずです)。

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, max(accuracy)-accuracy) ~ x, family=binomial)
ndf<- data.frame(x=x)
ndf$fit<-predict(glmx, newdata=ndf, type="response")
plot(accuracy/max(accuracy) ~ x)
with(ndf, lines(fit ~ x))

これにより、次のようなプロットが作成されます。

ここに画像の説明を入力してください


1

二項回帰は、個々のケースごとにバイナリ応答があることに基づいていることに注意してください。個々の応答は、2つの値のいずれかを取ることができる必要があります。比率に制限がある場合は、値を1つしか取ることができない場合もあったはずです。

バイナリデータではなく、有限範囲のデータを扱っているようです。これが事実である場合、ベータ回帰はより適切に聞こえます。ベータ分布は次のように書くことができます。

p(di|LUμiϕ)=(diL)μiϕ1(Udi)(1μi)ϕ1B(μiϕ,(1μi)ϕ)(UL)ϕ1

次に、間隔を実数にマッピングするリンク関数と同じようにを設定します。これらのモデルにフィットするために使用できるRパッケージがありますが、境界を知る必要があると思います。その場合は、新しい変数再定義します。[ L U ] Y I = D I - Lg(μi)=xiTβ[L,U]yi=diLUL


ご回答ありがとうございます。これは、xポイントごとに合計100の二分法の選択肢であるT | Fシリーズをシミュレートするためのデータで構成されています。したがって、制限は0が正しいか100が正しいですが、この特定のケースでは約15が正しくなります。betaregパッケージを使用しています... pacc <-precision / 100 + 0.00001; b1 <-betareg(pacc〜x)...は二項式と同じように見える回帰を与えます。これはあなたが意味したことですか?または、事後的なデータベースの制限を課すことを提案していますか?どちらもポストホック制限が与えられている場合、ベータと2項式の違いは何ですか。
マットアルブレヒト
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.