Pro dan Kontra dari Tautan Log vs. Tautan Identitas untuk Regresi Poisson

12

Saya melakukan regresi Poisson dengan tujuan akhir membandingkan (dan mengambil perbedaan) rata-rata yang diprediksi dihitung antara dua tingkat faktor dalam model saya: , sambil memegang kovariat model lain (yang semuanya biner) konstan. Saya bertanya-tanya apakah ada yang bisa memberikan saran praktis tentang kapan harus menggunakan tautan log versus tautan identitas. Apa kelebihan yang dapat kontra dari dua fungsi tautan yang berbeda ini dalam regresi Poisson, mengingat tujuan saya membandingkan perbedaan?μ^1-μ^2

Saya juga memiliki tujuan yang sama dalam pikiran untuk regresi logistik / binomial (untuk menggunakan tautan logit atau tautan identitas) untuk membandingkan perbedaan proporsi antara dua tingkat faktor dan memerlukan saran yang sama. Saya telah membaca beberapa posting di sini yang menyentuh masalah ini, tetapi tidak ada yang menjelaskan mengapa atau kapan seseorang memilih satu tautan di atas yang lain dan apa pro / kontra yang mungkin terjadi. Terima kasih sebelumnya atas bantuan Anda!

MEMPERBARUI:

Saya juga menyadari bahwa tujuan utama menggunakan fungsi tautan tertentu adalah untuk membatasi rentang kisaran nilai prediksi yang mungkin berada dalam kisaran respons rata-rata (misalnya untuk logistik, kisaran dibatasi antara 0 dan 1 dan untuk log tautan, prediksi dibatasi menjadi angka positif). Jadi, saya kira yang saya tanyakan adalah jika saya menggunakan tautan identitas untuk mengatakan regresi logistik / binomial, dan hasil saya berada dalam kisaran (0,1), apakah benar-benar ada kebutuhan untuk menggunakan fungsi tautan logistik atau dapatkah saya membuatnya lebih mudah dengan menggunakan tautan identitas?

StatsStudent
sumber
2
Itu pertanyaan yang bagus. Mengingat bagaimana hal itu dinyatakan, mungkin berguna untuk mengetahui bahwa ketika Anda hanya memiliki satu faktor biner dan tidak ada variabel lain, maka tidak ada bedanya tautan apa yang Anda pilih.
whuber
1
Terima kasih, @whuber. Saya telah memperbarui pertanyaan saya untuk menjelaskan bahwa ada kovariat lain dalam model. Saya juga menambahkan bagian "PEMBARUAN" yang menjelaskan pertanyaan saya sedikit lebih jauh.
StatsStudent
1
Untuk sudut pandang berbeda tentang peran fungsi tautan, lihat jawaban saya untuk pertanyaan terkait erat di stats.stackexchange.com/questions/63978 .
whuber
1
Contoh menarik @whuber!
StatsStudent
1
Biasanya saya akan mengatakan pilihan fungsi tautan ditentukan oleh masalah dan data yang ada - lihat di bawah untuk contoh nyata ...
Tom Wenseleers

Jawaban:

4

Kontra dari tautan identitas dalam kasus regresi Poisson adalah:

  • Seperti yang telah Anda sebutkan, ini dapat menghasilkan prediksi di luar jangkauan.
  • Anda mungkin mendapatkan kesalahan dan peringatan aneh ketika mencoba menyesuaikan model, karena tautan memungkinkan lambda kurang dari 0, tetapi distribusi Poisson tidak ditentukan untuk nilai-nilai tersebut.
  • Karena regresi Poisson mengasumsikan bahwa mean dan variansnya sama, ketika Anda mengubah tautan Anda juga mengubah asumsi tentang varians. Pengalaman saya adalah bahwa poin terakhir ini paling jitu.

Tapi, pada akhirnya ini adalah pertanyaan empiris. Pas kedua model. Lakukan pemeriksaan apa pun yang Anda suka. Jika tautan identitas memiliki AIC yang lebih rendah, dan melakukan dengan baik atau lebih baik pada semua cek Anda yang lain, maka jalankan dengan tautan identitas.

Dalam kasus model logit vs model probabilitas linier (yaitu, apa yang Anda sebut sebagai tautan identitas), situasinya jauh lebih mudah. Kecuali untuk beberapa kasus yang sangat eksotis dalam ekonometrik (yang akan Anda temukan jika Anda melakukan pencarian), model logit lebih baik: itu membuat asumsi lebih sedikit dan apa yang kebanyakan orang gunakan. Menggunakan model probabilitas linier sebagai gantinya akan hampir menjadi sesat.

Mengenai menafsirkan model, jika Anda menggunakan R, ada dua paket hebat yang akan melakukan semua pengangkatan berat: efek , yang super mudah digunakan, dan zelig , yang lebih sulit digunakan tetapi hebat jika Anda ingin membuat prediksi .

Tim
sumber
1
Anda menyebutkan bahwa model probabilitas linier adalah "eksotis" tetapi dari interaksi saya dengan para ekonom (saya sendiri seorang ahli statistik) tampaknya ada dua kubu, salah satunya berpendapat bahwa probabilitas linier lebih baik karena melibatkan lebih sedikit asumsi dan secara langsung memodelkan harapan. , yang biasanya orang pedulikan.
zipzapboing
1
Saya menolak jawaban saya dengan merujuk pada kasus-kasus eksotis di bidang ekonomi. Karena itu, masalah dengan model probabilitas linier adalah bahwa jika Anda memperkirakannya melalui OLS asumsinya biasanya dilanggar. Asumsi bahwa model linear dalam parameter tidak masuk akal dalam banyak kasus (yaitu, ketika diperkirakan menggunakan OLS Anda bisa mendapatkan probabilitas di luar 0 dan 1). Dan, residu tidak bisa mendekati normal, jadi Anda perlu menggunakan estimator sandwich atau sesuatu.
Tim
Dalam kasus model Poisson, saya juga akan mengatakan bahwa aplikasi sering menentukan apakah kovariat Anda akan bertindak secara aditif (yang kemudian akan menyiratkan tautan identitas) atau multiplikatif pada skala linier (yang kemudian akan menyiratkan tautan log). Tetapi model Poisson dengan tautan identitas juga biasanya hanya masuk akal dan hanya dapat secara stabil cocok jika seseorang memaksakan batasan nonnegativitas pada koefisien yang dipasang - ini dapat dilakukan dengan menggunakan fungsi nnpois dalam paket R addreg atau menggunakan fungsi nnlm dalam paket NNLM .
Tom Wenseleers
0

Dalam kasus model Poisson, saya juga akan mengatakan bahwa aplikasi sering menentukan apakah kovariat Anda akan bertindak secara aditif (yang kemudian akan menyiratkan tautan identitas) atau multiplikatif pada skala linier (yang kemudian akan menyiratkan tautan log). Tetapi model Poisson dengan tautan identitas juga biasanya hanya masuk akal dan hanya dapat secara stabil sesuai jika seseorang memaksakan batasan nonnegativitas pada koefisien yang dipasang - ini dapat dilakukan dengan menggunakan nnpoisfungsi dalam addregpaket R atau menggunakan nnlmfungsi dalamNNLMpaket. Jadi saya tidak setuju bahwa seseorang harus cocok dengan model Poisson dengan kedua identitas dan tautan log dan melihat mana yang akhirnya memiliki AIC terbaik dan menyimpulkan model terbaik berdasarkan pada dasar statistik murni - lebih tepatnya, dalam banyak kasus itu ditentukan oleh struktur yang mendasari masalah yang berusaha dipecahkan atau data yang ada.

Misalnya, dalam kromatografi (analisis GC / MS) orang akan sering mengukur sinyal yang ditumpangkan dari beberapa puncak berbentuk Gaussian dan sinyal yang ditumpangkan ini diukur dengan pengali elektron, yang berarti bahwa sinyal yang diukur adalah jumlah ion dan karena itu didistribusikan Poisson. Karena setiap puncak memiliki definisi tinggi positif dan bertindak secara aditif dan kebisingannya adalah Poisson, model Poisson non-negatif dengan tautan identitas akan sesuai di sini, dan model log tautan Poisson akan jelas salah. Dalam rekayasa, kehilangan Kullback-Leibler sering digunakan sebagai fungsi kerugian untuk model seperti itu, dan meminimalkan kerugian ini setara dengan mengoptimalkan kemungkinan model Poisson-link nonnegatif identitas (ada juga langkah-langkah divergensi / kehilangan lainnya seperti divergensi alfa atau beta yang memiliki Poisson sebagai kasus khusus).

Di bawah ini adalah contoh numerik, termasuk demonstrasi bahwa tautan identitas biasa yang tidak dibatasi Poisson GLM tidak cocok (karena kurangnya kendala nonnegativitas) dan beberapa detail tentang cara menyesuaikan model tautan-identitas non-negatif yang menggunakan model Poisson menggunakannnpois, di sini dalam konteks mendekonvolusi superposisi terukur puncak kromatografi dengan derau Poisson pada mereka menggunakan matriks kovariat berpita yang berisi salinan bergeser dari bentuk terukur satu puncak tunggal. Nonnegativitas di sini penting karena beberapa alasan: (1) itu adalah satu-satunya model realistis untuk data yang ada (puncak di sini tidak dapat memiliki ketinggian negatif), (2) itu adalah satu-satunya cara untuk secara stabil menyesuaikan model Poisson dengan tautan identitas (seperti jika tidak, prediksi untuk beberapa nilai kovariat menjadi negatif, yang tidak masuk akal dan akan memberikan masalah numerik ketika seseorang mencoba untuk mengevaluasi kemungkinannya), (3) tindakan nonnegativitas untuk mengatur masalah regresi dan sangat membantu untuk mendapatkan perkiraan yang stabil (misalnya Anda biasanya tidak mendapatkan masalah overfitting seperti dengan regresi tidak terbatas biasa,kendala nonnegativitas menghasilkan perkiraan sparser yang seringkali lebih dekat dengan kebenaran dasar; untuk masalah dekonvolusi di bawah ini, mis. kinerjanya sama baiknya dengan regularisasi LASSO, tetapi tanpa mengharuskan seseorang untuk menyetel parameter regularisasi apa pun. ( L0-pseudonorm dihukum regresi masih berkinerja sedikit lebih baik tetapi dengan biaya komputasi yang lebih besar )

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

masukkan deskripsi gambar di sini

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

masukkan deskripsi gambar di sini

# 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!!!

masukkan deskripsi gambar di sini

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

masukkan deskripsi gambar di sini

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

masukkan deskripsi gambar di sini

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

masukkan deskripsi gambar di sini

Tom Wenseleers
sumber
1
Y1-Y
1
@whuber Saya sekarang menambahkan contoh konkret untuk lebih jelas membuat poin saya! Setiap pemikiran tentang penggunaan kuadrat terkecil non-negatif tertimbang untuk mendekati model Poisson-link identitas non-negatif juga akan diterima!
Tom Wenseleers
Btw - nnls tertimbang yang saya gunakan untuk memperkirakan tautan identitas nonnegatif Poisson GLM sebenarnya sesuai dengan menggunakan satu iterasi dari kuadrat terkecil nonnegatif berulang yang disesuaikan agar sesuai dengan Poisson GLM nonnegatif (R sendiri menggunakan 1 / (y + 0,1) di Poisson GLM cocok sebagai inisialisasi)
Tom Wenseleers