Posso interpretare l'inclusione di un termine quadratico nella regressione logistica come indicativo di una svolta?


12

In una regressione logistica solo con termini lineari e quadratici, se ho un coefficiente lineare e un coefficiente quadratico , posso dire che esiste un punto di svolta della probabilità in ?β 2 - β 1 / ( 2 β 2 )β1β2β1/(2β2)

Risposte:


17

Si, puoi.


Il modello è

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

Quando β2 è diverso da zero, questo ha un estremo globale in x=β1/(2β2) .

La regressione logistica stima questi coefficienti come . Poiché questa è una stima della massima verosimiglianza (e le stime ML delle funzioni dei parametri sono le stesse funzioni delle stime), possiamo stimare che la posizione dell'estremo sia a .(b0,b1,b2)b1/(2b2)

Un intervallo di confidenza per tale stima sarebbe di interesse. Per set di dati sufficientemente grandi da applicare la teoria della massima verosimiglianza asintotica, possiamo trovare gli endpoint di questo intervallo nel moduloβ0+β1x+β2x2

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

e scoprire quanto può essere variata prima che la probabilità di log diminuisca troppo. "Troppo" è, asintoticamente, metà del quantile di una distribuzione chi-quadrato con un grado di libertà.γ1α/2

Questo approccio funzionerà bene a condizione che gli intervalli di coprano entrambi i lati del picco e ci sia un numero sufficiente di risposte e tra i valori per delineare quel picco. Altrimenti, la posizione del picco sarà altamente incerta e le stime asintotiche potrebbero essere inaffidabili.x1 anno01y


Ril codice per eseguire questa operazione è di seguito. Può essere utilizzato in una simulazione per verificare che la copertura degli intervalli di confidenza sia vicina alla copertura prevista. Si noti come il picco reale sia e, osservando la riga inferiore degli istogrammi, come la maggior parte dei limiti di confidenza inferiori siano inferiori al valore reale e la maggior parte dei limiti di confidenza superiori siano maggiori del valore reale, come speriamo. In questo esempio la copertura prevista era e la copertura effettiva (scontando quattro casi su cui la regressione logistica non convergeva) era , indicando che il metodo funziona bene (per i tipi di dati simulati Qui).1/212(0.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")

risultati

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, ottima risposta. Lei menziona alcuni avvertimenti riguardo all'approccio asintotico; cosa pensi del bootstrap dell'IC in casi come questo? Una volta l'ho fatto per dimostrare che il picco di una curva quadratica adatta per un gruppo era maggiore di quello dell'altro gruppo.
gung - Ripristina Monica

Potrebbe funzionare, @gung, ma la teoria del bootstrap è anche per grandi campioni. Nella tua applicazione forse un test di permutazione potrebbe essere giustificato.
whuber

Freddo. Ma la svolta non potrebbe essere al di fuori dell'intervallo di dati? E poi sarebbe pericoloso estrapolare.
Peter Flom - Ripristina Monica

@Peter Esatto, motivo per cui ho commentato che "Questo approccio funzionerà bene purché le gamme di x coprano entrambi i lati del picco".
whuber

@whuber Oops, mi sono perso.
Ci
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.