泊松回归的Log Link和Identity Link的优缺点


12

我执行泊松回归与比较(和采取的差)在我的模型中的两个因子水平的预测均值计数的最终目标 ,而持有其他模型协变量(这些都是二进制) 不变。我想知道是否有人可以提供有关何时使用日志链接和身份链接的实用建议。考虑到我比较差异的目标,这两个不同链接函数在Poisson回归中的利弊是什么?μ^1μ^2

对于Logistic /二项式回归(使用Logit链接或Identity链接)以比较两个因子水平之间的比例差异,我也有相同的目标,需要类似的建议。我读过一些有关此问题的文章,但似乎没有人解释为什么或何时选择一个链接而不是另一个链接,以及优点/缺点。在此先感谢您的帮助!

更新:

我还意识到使用某些链接函数的主要目的是将可能的预测值的范围限制在平均响应范围内(例如,对于逻辑,该范围限制在0到1之间,对于对数链接,则将预测限制为正数)。因此,我想问的是,如果我使用身份链接进行逻辑/二项式回归,而我的结果在(0,1)范围内,是否真的需要使用逻辑链接功能或我可以简单地考虑使用身份链接吗?


2
这是一个好问题。但是,考虑到它的表述方式,了解当您只有一个二元因子而没有其他变量时,选择所选择的链接没有区别可能会很有用。
ub

1
谢谢,@ whuber。我已经更新了我的问题,以明确说明模型中还有其他协变量。我还添加了“更新”部分,以进一步解释我的问题。
StatsStudent 2013年

1
对于有关链接功能的作用的不同观点,请参阅stats.stackexchange.com/questions/63978上与我密切相关的问题的答案
ub

1
有趣的例子@whuber!
统计学生'16

1
通常,我会说链接功能的选择取决于问题和手头的数据-参见下面的具体示例……
Tom Wenseleers

Answers:


4

在Poisson回归的情况下,身份链接的缺点是:

  • 正如您已经提到的,它可能会产生超出范围的预测。
  • 尝试拟合模型时,您可能会得到怪异的错误和警告,因为链接允许lambda小于0,但未为此类值定义Poisson分布。
  • 因为泊松回归假设均值和方差相同,所以当您更改链接时,您也在更改有关方差的假设。我的经验是,最后一点最能说明问题。

但是,最终这是一个经验问题。适合两个模型。执行您喜欢的任何检查。如果身份链接的AIC较低,并且在所有其他检查中的性能都相同或更好,请使用身份链接运行。

对于logit模型与线性概率模型(即,您称为恒等链接),情况要简单得多。除了计量经济学中一些非常特殊的情况(如果您进行搜索就会发现),logit模型会更好:它进行的假设较少,是大多数人使用的假设。在其位置使用线性概率模型将濒临错误。

关于模型的解释,如果您使用的是R,则有两个出色的软件包可以完成所有繁重的工作:effects(超级易用)和zelig(难于使用,但是如果您要进行预测,则非常有用) 。


1
您提到线性概率模型是“异国情调”的,但从我与经济学家(我自己是统计学家)的互动来看,似乎有两个阵营,其中一个阵营认为线性概率更好,因为它涉及较少的假设并直接对期望进行建模,这是人们通常关心的。
zipzapboing

1
我确实提到了经济学中的异乎寻常的案例,从而给出了自己的答案。话虽如此,线性概率模型的麻烦在于,如果您通过OLS对其进行估算,则通常会违反其假设。在许多情况下,模型在参数上是线性的假设是不合理的(即,使用OLS进行估算时,您可能获得0和1以外的概率)。而且,残差不能接近正常值,因此您需要使用三明治估计器或其他方法。
蒂姆(Tim)

对于泊松模型,我还要说的是,该应用程序通常会决定您的协变量是在线性范围内相加作用(这将暗示一个身份链接)还是在线性范围上相乘(这将暗示一个对数链接)。但是带有身份链接的Poisson模型通常也才有意义,并且只有在对拟合系数施加非负约束的情况下才能稳定地拟合-这可以使用R addreg软件包中的nnpois函数或NNLM软件包中的nnlm函数来完成。 。
Tom Wenseleers

0

对于泊松模型,我还要说的是,该应用程序通常会决定您的协变量是在线性范围内相加作用(这将暗示一个身份链接)还是在线性范围上相乘(这将暗示一个对数链接)。但是具有身份链接的Poisson模型通常也才有意义,并且只有在对拟合系数施加非负约束的情况下才能稳定地拟合-可以使用nnpoisR addreg包中的nnlm函数或使用R 包中的函数来完成。NNLM包。因此,我不同意让一个人同时使用具有身份和对数链接的泊松模型,看看哪个最终拥有最佳AIC并基于纯粹的统计依据推断出最佳模型-而是,在大多数情况下,该模型是由试图解决的问题或现有数据的底层结构。

例如,在色谱分析(GC / MS分析)中,通常会测量几个近似高斯形峰的叠加信号,然后用电子倍增器测量该叠加信号,这意味着测得的信号是离子计数,因此是泊松分布。由于每个峰在定义上都具有正高度并相加作用,并且噪声是泊松,因此此处使用具有身份链接的非负泊松模型将是合适的,而对数链接泊松模型将是错误的。在工程学中,通常将Kullback-Leibler损耗用作此类模型的损耗函数,而将这种损耗最小化等效于优化非负身份链接泊松模型的可能性(还有其他差异/损失度量,例如alpha或beta差异) 以Poisson为特例)。

以下是一个数字示例,其中包括一个常规无约束身份链接Poisson GLM不适合(因为缺少非负约束)的演示,以及有关如何使用以下方法拟合非负身份链接Poisson模型的一些详细信息nnpois,在此背景下,使用带状协变量矩阵对卷积的色谱峰和泊松噪声进行叠加,对卷积后的色谱峰进行解卷积,该协变量矩阵包含单个峰的测量形状的移位副本。这里的非负性很重要,原因有以下几个:(1)它是手头数据的唯一现实模型(此处的峰不能有负高度),(2)这是将Poisson模型与身份链接稳定拟合的唯一方法(因为否则,对于某些协变量值的预测可能会变为负值,这将无济于事,并且在人们尝试评估可能性时会产生数值问题。)(3)非负性可以使回归问题正规化并极大地有助于获得稳定的估计值(例如,通常,您不会像普通的无约束回归那样遇到过拟合问题,非负约束导致稀疏估计通常更接近于基本事实;对于下面的反卷积问题,例如,性能大约与LASSO正则化一样好,但是不需要调整任何正则化参数。L0-pseudonorm惩罚回归仍然表现稍好,但计算成本更高

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

在此处输入图片说明

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

在此处输入图片说明

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

在此处输入图片说明

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

在此处输入图片说明

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

在此处输入图片说明

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

在此处输入图片说明


1
Y1Y

1
@whuber我现在添加了一个具体示例来更清楚地说明我的观点!我对使用加权非负最小二乘法近似实际非负身份链接泊松模型的任何想法也将受到欢迎!
汤姆·温塞勒斯

顺便说一句-我用来近似非负身份链接Poisson GLM的加权nnls实际上对应于使用迭代加权的非负最小二乘算法的一次迭代来拟合非负Poisson GLM(R本身在其中使用1 /(y + 0.1) Poisson GLM适合作为初始化)
Tom Wenseleers
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.