ロジスティック回帰に2次項が含まれることを、ターニングポイントを示すものとして解釈できますか?


12

線形項と二次項のみのロジスティック回帰では、線形係数と二次係数\ beta_2がある場合、-\ beta_1 /(2 \ beta_2)に確率の転換点があると言えますか?β1β2β1/2β2

回答:


17

はい、できます。


モデルは

PrY=1=11+exp[β0+β1バツ+β2バツ2]

場合β2ゼロで、これはグローバルで極値を有するバツ=β1/2β2

ロジスティック回帰では、これらの係数をとして推定します。これは最尤推定値であり(およびパラメーターの関数のML推定値は推定値の同じ関数であるため)、極値の位置はと推定できます。b 1 /2 b 2b0b1b2b1/2b2

その推定値の信頼区間が重要です。 漸近的最尤法理論を適用するのに十分な大きさのデータセットの場合、を再表現することにより、この区間の終点を見つけることができますβ0+β1バツ+β2バツ2

β0+β1バツ+β2バツ2=β0β12/4β2+β2バツ+β1/2β22=β+β2バツ+γ2

対数尤度が低下しすぎる前に、どれだけのを変化させることができるかを見つけます。「多すぎる」とは、漸近的に、自由度が1のカイ2乗分布の分位の半分です。1 - α / 2γ1α/2

このアプローチは、の範囲がピークの両側をカバーし、値の間に十分な数のと応答があり、そのピークを描写する場合にうまく機能します。そうでない場合、ピークの位置は非常に不確実になり、漸近的な推定値は信頼できない可能性があります。バツ01y


Rこれを実行するコードは次のとおりです。シミュレーションで使用して、信頼区間のカバレッジが意図したカバレッジに近いことを確認できます。真のピークがあり、ヒストグラムの一番下の行を見ると、信頼性の下限のほとんどが真の値よりも小さく、信頼性の上限のほとんどが真の値よりも大きいことに注意してください。希望どおり。この例では、意図したカバレッジはで、実際のカバレッジ(ロジスティック回帰が収束しなかったケースのうち4つを割り引く)はであり、メソッドがシミュレートされたデータの種類に対してここに)。1/2120.05=0.905000.91

n <- 50            # Number of observations in each trial
beta <- c(-1,2,2)  # Coefficients
x <- seq(from=-3, to=3, length.out=n)
y0 <- cbind(rep(1,length(x)), x, x^2) %*% beta

# Conduct a simulation.
set.seed(17)
sim <- replicate(500, peak(x, rbinom(length(x), 1, logistic(y0)), alpha=0.05))

# Post-process the results to check the actual coverage.
tp <- -beta[2] / (2 * beta[3])
covers <- sim["lcl",] <= tp & tp <= sim["ucl",]
mean(covers, na.rm=TRUE) # Should be close to 1 - 2*alpha

# Plot the distributions of the results.
par(mfrow=c(2,2))
plot(x, logistic(y0), type="l", lwd=2, col="#4040d0", main="Simulated Data",ylim=c(0,1))
points(x, rbinom(length(x), 1, logistic(y0)), pch=19)
hist(sim["peak.x",], main="Estimates"); abline(v=tp, col="Red")
hist(sim["lcl",], main="Lower Confidence Limits"); abline(v=tp, col="Red")
hist(sim["ucl",], main="Upper Confidence Limits"); abline(v=tp, col="Red")

結果

logistic <- function(x) 1 / (1 + exp(-x))

peak <- function(x, y, alpha=0.05) {
  #
  # Estimate the peak of a quadratic logistic fit of y to x
  # and a 1-alpha confidence interval for that peak.
  #
  logL <- function(b) {
    # Log likelihood.
    p <- sapply(cbind(rep(1, length(x)), x, x*x) %*% b, logistic)
    sum(log(p[y==1])) + sum(log(1-p[y==0]))
  }
  f <- function(gamma) {
    # Deviance as a function of offset from the peak.
    b0 <- c(b[1] - b[2]^2/(4*b[3]) + b[3]*gamma^2, -2*b[3]*gamma, b[3])
    -2.0 * logL(b0)
  }
  # Estimation.
  fit <- glm(y ~ x + I(x*x), family=binomial(link = "logit"))
  if (!fit$converged) return(rep(NA,3))

  b <- coef(fit)
  tp <- -b[2] / (2 * b[3])

  # Two-sided confidence interval:
  # Search for where the deviance is at a threshold determined by alpha.
  delta <- qchisq(1-alpha, df=1)
  u <- sd(x)
  while(fit$deviance - f(tp+u) + delta > 0) u <- 2*u # Find an upper bound
  l <- sd(x)
  while(fit$deviance - f(tp-l) + delta > 0) l <- 2*l # Find a lower bound
  upper <- uniroot(function(gamma) fit$deviance - f(gamma) + delta, 
                   interval=c(tp, tp+u))
  lower <- uniroot(function(gamma) fit$deviance - f(gamma) + delta, 
                   interval=c(tp-l, tp))

  # Return a vector of the estimate, lower limit, and upper limit.
  c(peak=tp, lcl=lower$root, ucl=upper$root)
}

+1、素晴らしい答え。漸近的アプローチに関するいくつかの警告に言及しています。このような場合にCIをブートストラップするとはどう思いますか?私はかつて、あるグループに適合する二次曲線のピークが他のグループのピークよりも大きいことを示すためにそれを行いました。
GUNG -復活モニカ

@gungでうまくいくかもしれませんが、ブートストラップ理論は大規模なサンプル用でもあります。アプリケーションでは、おそらく置換テストを正当化できます。
whuber

涼しい。しかし、転換点はデータ範囲外ではないでしょうか?そして、外挿するのは危険です。
ピーターフロム-モニカの復職

@Peterそうです。だからこそ、「このアプローチは、ピークの両側をカバーするxの範囲であればうまく機能する」とコメントしたのです。
whuber

@whuberおっと、私はそれを見逃した。ごめんなさい
ピーター・フロム-モニカの復職
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.