Pro e contro di Log Link contro Identity Link per la regressione di Poisson


12

Sto eseguendo una regressione di Poisson con l'obiettivo finale di confrontare (e prendere la differenza) la media prevista conta tra due livelli di fattore nel mio modello: , tenendo premuto altro modello covariate (che sono tutte binarie) costanti. Mi chiedevo se qualcuno potesse fornire alcuni consigli pratici su quando usare un collegamento di registro rispetto a un collegamento di identità. Quali sono i pro che i contro di queste due diverse funzioni di collegamento nella regressione di Poisson, dato il mio obiettivo di confrontare le differenze?μ^1-μ^2

Ho anche in mente lo stesso obiettivo per una regressione logistica / binomiale (utilizzare un collegamento logit o un collegamento identità) per confrontare la differenza nelle proporzioni tra due livelli di fattori e ho bisogno di consigli simili. Ho letto alcuni dei post qui che toccano questo problema, ma nessuno sembra spiegare perché o quando uno potrebbe scegliere un collegamento rispetto all'altro e quali potrebbero essere i pro / contro. Grazie in anticipo per il vostro aiuto!

AGGIORNARE:

Mi rendo anche conto che lo scopo principale dell'uso di determinate funzioni di collegamento è limitare l'intervallo di intervallo dei possibili valori previsti in modo che rientri nell'intervallo della risposta media (ad es. Per la logistica, l'intervallo è limitato tra 0 e 1 e per il registro link, le previsioni sono limitate ai numeri positivi). Quindi, suppongo che ciò che sto chiedendo sia che se uso un collegamento di identità per dire una regressione logistica / binomiale e i miei risultati sono compresi nell'intervallo (0,1), c'è davvero bisogno di usare una funzione di collegamento logistico o potrei semplicemente pensare che sia più semplice utilizzare un collegamento di identità?


2
È una buona domanda Dato come è affermato, tuttavia, potrebbe essere utile sapere che quando si ha un solo fattore binario e nessuna altra variabile, non fa differenza quale collegamento si sceglie.
whuber

1
Grazie, @whuber. Ho aggiornato la mia domanda per chiarire che ci sono altre covariate nel modello. Ho anche aggiunto una sezione "AGGIORNAMENTO" che spiega ulteriormente la mia domanda.
StatStudent

1
Per un diverso punto di vista sul ruolo delle funzioni di collegamento, vedere la mia risposta alla domanda strettamente correlata all'indirizzo stats.stackexchange.com/questions/63978 .
whuber

1
Esempio affascinante @whuber!
StatStudent

1
Di solito direi che la scelta della funzione di collegamento è dettata dal problema e dai dati a portata di mano - vedi sotto per un esempio concreto ...
Tom Wenseleers,

Risposte:


4

I contro di un collegamento di identità nel caso della regressione di Poisson sono:

  • Come hai già detto, può produrre previsioni fuori portata.
  • Potresti ottenere strani errori e avvisi quando tenti di adattare il modello, perché il collegamento consente a lambda di essere inferiore a 0, ma la distribuzione di Poisson non è definita per tali valori.
  • Poiché la regressione di Poisson presuppone che la media e la varianza siano uguali, quando si modifica il collegamento si cambiano anche le ipotesi sulla varianza. La mia esperienza è stata che quest'ultimo punto è il più significativo.

Ma alla fine questa è una domanda empirica. Misura entrambi i modelli. Esegui qualsiasi controllo desideri. Se il collegamento di identità ha un AIC inferiore e funziona bene o meglio su tutti gli altri controlli, eseguire con il collegamento di identità.

Nel caso del modello logit rispetto al modello di probabilità lineare (ovvero quello che si chiama collegamento di identità), la situazione è molto più semplice. Fatta eccezione per alcuni casi molto esotici in econometria (che troverai se fai una ricerca), il modello logit è migliore: fa meno ipotesi ed è quello che la maggior parte delle persone usa. L'uso del modello di probabilità lineare al suo posto sarebbe quasi perverso.

Per quanto riguarda l'interpretazione dei modelli, se stai usando R, ci sono due fantastici pacchetti che faranno tutto il lavoro pesante: effetti , che è super facile da usare, e zelig , che è più difficile da usare ma ottimo se vuoi fare previsioni .


1
Dici che i modelli di probabilità lineari sono "esotici" ma dalle mie interazioni con gli economisti (io stesso sono uno statistico) sembra che ci siano due campi, uno dei quali sostiene che la probabilità lineare è migliore perché comporta meno ipotesi e modella direttamente le aspettative , che è ciò di cui normalmente ci si preoccupa.
zipzapboing

1
Ho avvertito la mia risposta facendo riferimento a casi esotici in economia. Detto questo, il problema con il modello di probabilità lineare è che se lo si stima tramite OLS i suoi presupposti vengono comunemente violati. Il presupposto che il modello sia lineare nei parametri non è plausibile in molti casi (vale a dire, se stimato utilizzando OLS è possibile ottenere probabilità al di fuori di 0 e 1). Inoltre, i residui non possono essere remotamente vicini alla norma, quindi è necessario utilizzare uno stimatore a sandwich o qualcosa del genere.
Tim

Nel caso dei modelli di Poisson direi anche che l'applicazione spesso determina se le covariate agiranno in modo additivo (il che implicherebbe quindi un collegamento di identità) o in modo moltiplicativo su una scala lineare (che implicherebbe quindi un collegamento di registro). Ma anche i modelli di Poisson con un collegamento di identità hanno normalmente senso e possono essere stabilmente adatti solo se si impongono vincoli di non negatività sui coefficienti adattati - questo può essere fatto usando la funzione nnpois nel pacchetto R addreg o usando la funzione nnlm nel pacchetto NNLM .
Tom Wenseleers,

0

Nel caso dei modelli di Poisson direi anche che l'applicazione spesso determina se le covariate agiranno in modo additivo (il che implicherebbe quindi un collegamento di identità) o in modo moltiplicativo su una scala lineare (che implicherebbe quindi un collegamento di registro). Ma anche i modelli di Poisson con un collegamento di identità hanno normalmente senso e possono essere stabilmente adatti solo se si impongono vincoli di non negatività sui coefficienti adattati - questo può essere fatto usando la nnpoisfunzione nel addregpacchetto R o usando la nnlmfunzione nelNNLMpacchetto. Quindi non sono d'accordo sul fatto che uno dovrebbe adattarsi ai modelli di Poisson sia con un collegamento di identità che di registro e vedere quale finisce per avere il migliore AIC e dedurre il miglior modello basato su motivi puramente statistici - piuttosto, nella maggior parte dei casi è dettato dal struttura sottostante del problema che si cerca di risolvere o dei dati a portata di mano.

Ad esempio, nella cromatografia (analisi GC / MS) si misurerebbe spesso il segnale sovrapposto di diversi picchi approssimativi a forma gaussiana e questo segnale sovrapposto viene misurato con un moltiplicatore di elettroni, il che significa che il segnale misurato è conte di ioni e quindi distribuito Poisson. Poiché ciascuno dei picchi ha per definizione un'altezza positiva e agisce in modo additivo e il rumore è Poisson, un modello di Poisson non negativo con collegamento di identità sarebbe appropriato qui, e un modello di collegamento di Poisson sarebbe chiaramente sbagliato. Nell'ingegneria la perdita di Kullback-Leibler è spesso usata come una funzione di perdita per tali modelli, e minimizzare questa perdita equivale a ottimizzare la probabilità di un modello di Poisson non legato all'identità (ci sono anche altre misure di divergenza / perdita come la divergenza alfa o beta che ha Poisson come caso speciale).

Di seguito è riportato un esempio numerico, tra cui una dimostrazione che un normale collegamento di identità non vincolato Poisson GLM non si adatta (a causa della mancanza di vincoli di non negatività) e alcuni dettagli su come adattare i modelli di Poisson con collegamento di identità non negativo utilizzandonnpois, qui nel contesto della deconvoluzione di una sovrapposizione misurata di picchi cromatografici con rumore di Poisson su di essi usando una matrice covariata fasciata che contiene copie spostate della forma misurata di un singolo picco. La non negatività qui è importante per diversi motivi: (1) è l'unico modello realistico per i dati a portata di mano (i picchi qui non possono avere altezze negative), (2) è l'unico modo per adattare stabilmente un modello di Poisson con collegamento di identità (come altrimenti le previsioni potrebbero per alcuni valori covariati diventare negative, il che non avrebbe senso e darebbe problemi numerici quando si proverebbe a valutare la probabilità), (3) la non negatività agisce per regolarizzare il problema di regressione e aiuta notevolmente ad ottenere stime stabili (ad es. in genere non si verificano problemi di adattamento eccessivo come nella normale regressione non vincolata,i vincoli di non negatività comportano stime più rare che sono spesso più vicine alla verità fondamentale; per il problema di deconvoluzione di seguito, ad esempio, le prestazioni sono buone quanto la regolarizzazione LASSO, ma senza che sia necessario sintonizzare alcun parametro di regolarizzazione. (La regressione penalizzata con L0-pseudonorm funziona ancora leggermente meglio ma a un costo computazionale maggiore )

# we first simulate some data
require(Matrix)
n = 200
x = 1:n
npeaks = 20
set.seed(123)
u = sample(x, npeaks, replace=FALSE) # unkown peak locations
peakhrange = c(10,1E3) # peak height range
h = 10^runif(npeaks, min=log10(min(peakhrange)), max=log10(max(peakhrange))) # unknown peak heights
a = rep(0, n) # locations of spikes of simulated spike train, which are assumed to be unknown here, and which needs to be estimated from the measured total signal
a[u] = h
gauspeak = function(x, u, w, h=1) h*exp(((x-u)^2)/(-2*(w^2))) # peak shape function
bM = do.call(cbind, lapply(1:n, function (u) gauspeak(x, u=u, w=5, h=1) )) # banded matrix with peak shape measured beforehand
y_nonoise = as.vector(bM %*% a) # noiseless simulated signal = linear convolution of spike train with peak shape function
y = rpois(n, y_nonoise) # simulated signal with random poisson noise on it - this is the actual signal as it is recorded
par(mfrow=c(1,1))
plot(y, type="l", ylab="Signal", xlab="x", main="Simulated spike train (red) to be estimated given known blur kernel & with Poisson noise")
lines(a, type="h", col="red")

inserisci qui la descrizione dell'immagine

# let's now deconvolute the measured signal y with the banded covariate matrix containing shifted copied of the known blur kernel/peak shape bM

# first observe that regular OLS regression without nonnegativity constraints would return very bad nonsensical estimates
weights <- 1/(y+1) # let's use 1/variance = 1/(y+eps) observation weights to take into heteroscedasticity caused by Poisson noise
a_ols <- lm.fit(x=bM*sqrt(weights), y=y*sqrt(weights))$coefficients # weighted OLS
plot(x, y, type="l", main="Ground truth (red), unconstrained OLS estimate (blue)", ylab="Peak shape", xlab="x", ylim=c(-max(y),max(y)))
lines(x,-y)
lines(a, type="h", col="red", lwd=2)
lines(-a_ols, type="h", col="blue", lwd=2)

inserisci qui la descrizione dell'immagine

# now we use weighted nonnegative least squares with 1/variance obs weights as an approximation of nonnegative Poisson regression
# this gives very good estimates & is very fast
library(nnls)
library(microbenchmark)
microbenchmark(a_wnnls <- nnls(A=bM*sqrt(weights),b=y*sqrt(weights))$x) # 7 ms
plot(x, y, type="l", main="Ground truth (red), weighted nnls estimate (blue)", ylab="Signal (black) & peaks (red & blue)", xlab="Time", ylim=c(-max(y),max(y)))
lines(x,-y)
lines(a, type="h", col="red", lwd=2)
lines(-a_wnnls, type="h", col="blue", lwd=2)
# note that this weighted least square estimate in almost identical to  the nonnegative Poisson estimate below and that it fits way faster!!!

inserisci qui la descrizione dell'immagine

# an unconstrained identity-link Poisson GLM will not fit:
glmfit = glm.fit(x=as.matrix(bM), y=y, family=poisson(link=identity), intercept=FALSE)
# returns Error: no valid set of coefficients has been found: please supply starting values

# so let's try a nonnegativity constrained identity-link Poisson GLM, fit using bbmle (using port algo, ie Quasi Newton BFGS):
library(bbmle)
XM=as.matrix(bM)
colnames(XM)=paste0("v",as.character(1:n))
yv=as.vector(y)
LL_poisidlink <- function(beta, X=XM, y=yv){ # neg log-likelihood function
  -sum(stats::dpois(y, lambda = X %*% beta, log = TRUE)) # PS regular log-link Poisson would have exp(X %*% beta)
}
parnames(LL_poisidlink) <- colnames(XM)
system.time(fit <- mle2(
  minuslogl = LL_poisidlink ,
  start = setNames(a_wnnls+1E-10, colnames(XM)), # we initialise with weighted nnls estimates, with approx 1/variance obs weights
  lower = rep(0,n),
  vecpar = TRUE,
  optimizer = "nlminb"
)) # very slow though - takes 145s 
summary(fit)
a_nnpoisbbmle = coef(fit)
plot(x, y, type="l", main="Ground truth (red), nonnegative Poisson bbmle ML estimate (blue)", ylab="Signal (black) & peaks (red & blue)", xlab="Time", ylim=c(-max(y),max(y)))
lines(x,-y)
lines(a, type="h", col="red", lwd=2)
lines(-a_nnpoisbbmle, type="h", col="blue", lwd=2)

inserisci qui la descrizione dell'immagine

# much faster is to fit nonnegative Poisson regression using nnpois using an accelerated EM algorithm:
library(addreg)
microbenchmark(a_nnpois <- nnpois(y=y,
                                  x=as.matrix(bM),
                                  standard=rep(1,n),
                                  offset=0,
                                  start=a_wnnls+1.1E-4, # we start from weighted nnls estimates 
                                  control = addreg.control(bound.tol = 1e-04, epsilon = 1e-5),
                                  accelerate="squarem")$coefficients) # 100 ms
plot(x, y, type="l", main="Ground truth (red), nonnegative Poisson nnpois estimate (blue)", ylab="Signal (black) & peaks (red & blue)", xlab="Time", ylim=c(-max(y),max(y)))
lines(x,-y)
lines(a, type="h", col="red", lwd=2)
lines(-a_nnpois, type="h", col="blue", lwd=2)

inserisci qui la descrizione dell'immagine

# or to fit nonnegative Poisson regression using nnlm with Kullback-Leibler loss using a coordinate descent algorithm:
library(NNLM)
system.time(a_nnpoisnnlm <- nnlm(x=as.matrix(rbind(bM)),
                                 y=as.matrix(y, ncol=1),
                                 loss="mkl", method="scd",
                                 init=as.matrix(a_wnnls, ncol=1),
                                 check.x=FALSE, rel.tol=1E-4)$coefficients) # 3s
plot(x, y, type="l", main="Ground truth (red), nonnegative Poisson nnlm estimate (blue)", ylab="Signal (black) & peaks (red & blue)", xlab="Time", ylim=c(-max(y),max(y)))
lines(x,-y)
lines(a, type="h", col="red", lwd=2)
lines(-a_nnpoisnnlm, type="h", col="blue", lwd=2)

inserisci qui la descrizione dell'immagine


1
Y1-Y

1
@whuber Ora ho aggiunto un esempio concreto per chiarire più chiaramente il mio punto! Qualunque pensiero sul mio uso di minimi quadrati non negativi ponderati per approssimare un vero modello di Poisson di collegamento identitario non negativo sarebbe il benvenuto!
Tom Wenseleers,

Btw - le nnls ponderate che uso per approssimare un collegamento non identitario di identità Poisson GLM in realtà corrispondono all'utilizzo di una singola iterazione di un algo minimo non negativo iterativamente ripesato per adattarsi a un GLM di Poisson non negativo (R stesso usa 1 / (y + 0.1) in Poisson GLM si adatta come inizializzazione)
Tom Wenseleers
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.