Kann ich die Einbeziehung eines quadratischen Terms in die logistische Regression als Hinweis auf einen Wendepunkt interpretieren?


12

Kann ich in einer logistischen Regression mit nur linearen und quadratischen Termen, wenn ich einen linearen Koeffizienten β1 und einen quadratischen Koeffizienten β2 , sagen, dass es einen Wendepunkt der Wahrscheinlichkeit bei -β1/(2β2) ?

Antworten:


17

Ja, du kannst.


Das Modell ist

Pr(Y=1)=11+exp([β0+β1x+β2x2]).

Wenn ungleich Null ist, hat dies ein globales Extremum bei x = - β 1 / ( 2 β 2 ) .β2x=β1/(2β2)

Die logistische Regression schätzt diese Koeffizienten als . Da dies eine Maximum-Likelihood-Schätzung ist (und ML-Schätzungen von Funktionen von Parametern die gleichen Funktionen der Schätzungen sind), können wir die Position des Extremums bei - b 1 / ( 2 b 2 ) schätzen .(b0,b1,b2)b1/(2b2)

Ein Konfidenzintervall für diese Schätzung wäre von Interesse. Für Datensätze, die groß genug sind, um die asymptotische Maximum-Likelihood-Theorie anzuwenden, können wir die Endpunkte dieses Intervalls durch erneutes Ausdrücken von in der Formβ0+β1x+β2x2

β0+β1x+β2x2=β0β12/(4β2)+β2(x+β1/(2β2))2=β+β2(x+γ)2

und Finden, wie viel & variiert werden kann, bevor die logarithmische Wahrscheinlichkeit zu stark abnimmt. "Zu viel" ist asymptotisch die Hälfte des 1 - α / 2- Quantils einer Chi-Quadrat-Verteilung mit einem Freiheitsgrad.γ1α/2

Dieser Ansatz funktioniert gut, vorausgesetzt, die Bereiche von decken beide Seiten des Peaks ab und es gibt eine ausreichende Anzahl von 0 und 1 Antworten unter den y- Werten, um diesen Peak abzugrenzen. Andernfalls ist der Ort des Peaks sehr unsicher und die asymptotischen Schätzungen können unzuverlässig sein.x01y


RCode, um dies auszuführen, ist unten. Es kann in einer Simulation verwendet werden, um zu überprüfen, ob die Abdeckung der Konfidenzintervalle nahe an der beabsichtigten Abdeckung liegt. Beachten Sie, wie die wahre Spitze ist und - durch in der unteren Reihe von Histogrammen suchen - wie die meisten der unteren Vertrauensgrenzen weniger sind als der wahre Wert und die meisten der oberen Vertrauensgrenzen sind größer als der wahre Wert, wie wir hoffen würden. In diesem Beispiel betrug die beabsichtigte Abdeckung 1 - 2 ( 0,05 ) = 0,90 und die tatsächliche Abdeckung (abzüglich vier von 500 Fällen, in denen die logistische Regression nicht konvergierte) 0,911/212(0.05)=0.905000.91Dies zeigt an, dass die Methode gut funktioniert (für die hier simulierten Datentypen).

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")

Ergebnisse

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, tolle Antwort. Sie erwähnen einige Vorbehalte bezüglich des asymptotischen Ansatzes. Was halten Sie davon, das CI in solchen Fällen zu booten? Ich habe das einmal gemacht, um zu zeigen, dass die Spitze einer quadratischen Kurve, die für eine Gruppe passt, größer ist als die der anderen Gruppe.
gung - Wiedereinsetzung von Monica

Es könnte funktionieren, @gung, aber die Bootstrapping-Theorie gilt auch für große Samples. In Ihrer Anwendung könnte möglicherweise ein Permutationstest gerechtfertigt sein.
whuber

Cool. Liegt der Wendepunkt aber nicht außerhalb des Datenbereichs? Und dann wäre es gefährlich zu extrapolieren.
Peter Flom - Wiedereinsetzung von Monica

@Peter Das ist richtig, weshalb ich sagte: "Dieser Ansatz wird gut funktionieren, vorausgesetzt, die Bereiche von x decken beide Seiten des Peaks ab."
whuber

@whuber Ups, das habe ich verpasst. Entschuldigung
Peter Flom - Wiedereinsetzung von Monica
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.