포아송 회귀에 대한 ID 링크와 로그 링크의 장단점


12

내 모델에서 와 같이 두 모델 수준 간의 예측 평균 수를 비교하고 차이를 취하는 최종 목표로 포아송 회귀 분석을 수행하고 있습니다. 다른 모형 공변량 (모두 이진) 상수입니다. 누구든지 로그 링크와 신원 링크를 언제 사용해야하는지에 대한 실용적인 조언을 제공 할 수 있는지 궁금합니다. 차이점을 비교하려는 나의 목표를 고려할 때 포아송 회귀 분석에서이 두 가지 링크 함수의 장점은 무엇입니까?μ^1μ^2

또한 로지스틱 링크 또는 아이덴티티 링크를 사용하는 로지스틱 / 이항 회귀 분석에서 두 요인 수준의 비율 차이를 비교하고 비슷한 조언이 필요하다는 동일한 목표를 가지고 있습니다. 나는이 문제에 관해 다루는 게시물 중 일부를 읽었지만, 왜 하나 또는 다른 링크를 통해 링크를 선택할 수 있는지와 장단점이 무엇인지 설명하는 사람은 없습니다. 도움을 주셔서 감사합니다.

최신 정보:

또한 특정 링크 함수를 사용하는 주된 목적은 가능한 예측 값의 범위 범위가 평균 응답 범위 내에 있도록 제한하는 것입니다 (예 : 물류, 범위는 0과 1 사이, 로그는 제한됨) 링크의 경우 예측은 양수로 제한됩니다. 따라서 내가 묻는 것은 로지스틱 / 이항 회귀 분석을 위해 ID 링크를 사용하고 결과가 (0,1) 범위 내에 있으면 실제로 물류 링크 함수를 사용해야 할 필요가 있거나 아이디 링크를 사용하는 것이 더 간단하다고 생각할 수 있습니까?


2
좋은 질문입니다. 그러나 그것이 어떻게 표현되는지를 감안할 때, 하나의 이진 계수가 있고 다른 변수가 없을 때 선택한 링크와 차이가 없다는 것을 아는 것이 유용 할 수 있습니다.
whuber

1
감사합니다, @whuber. 모델에 다른 공변량이 있음을 분명히하기 위해 내 질문을 업데이트했습니다. 또한 내 질문을 조금 더 설명하는 "업데이트"섹션을 추가했습니다.
Stats 학생

1
링크 함수의 역할에 관한 다른 관점은 stats.stackexchange.com/questions/63978 에서 밀접하게 관련된 질문에 대한 나의 답변을 참조하십시오 .
whuber

1
매혹적인 예 @whuber!
Stats 학생

1
일반적으로 링크 기능의 선택은 문제와 데이터에 따라 결정됩니다. 구체적인 예는 아래를 참조하십시오.
Tom Wenseleers

답변:


4

포아송 회귀 분석의 경우 신원 링크의 단점은 다음과 같습니다.

  • 앞에서 언급했듯이 범위를 벗어난 예측을 생성 할 수 있습니다.
  • 링크를 통해 람다가 0보다 작을 수 있지만 포아송 분포는 이러한 값에 대해 정의되지 않기 때문에 모형에 적합을 시도 할 때 이상한 오류와 경고가 표시 될 수 있습니다.
  • 푸 아송 회귀 분석에서는 평균과 분산이 동일하다고 가정하므로 링크를 변경하면 분산에 대한 가정도 변경됩니다. 나의 경험은이 마지막 요점이 가장 중요하다는 것이 었습니다.

그러나 궁극적으로 이것은 경험적인 질문입니다. 두 모델을 모두 장착하십시오. 원하는대로 수행하십시오. 자격 증명 링크의 AIC가 낮고 다른 모든 검사에서 잘 수행되는 경우 자격 증명 링크로 실행하십시오.

로짓 모형 대 선형 확률 ​​모형 (즉, 신원 링크라고하는 것)의 경우 상황이 훨씬 더 간단합니다. 계량 경제학에서 매우 이례적인 경우를 제외하고 (검색을하면 찾을 수 있음) 로짓 모델이 더 좋습니다. 그 자리에 선형 확률 ​​모델을 사용하면 왜곡되는 경향이 있습니다.

모델 해석과 관련하여 R을 사용하는 경우 모든 무거운 작업을 수행하는 두 가지 훌륭한 패키지가 있습니다. 효과 가 매우 사용하기 쉽고 효과 가 있지만 예측을하려는 경우에는 zelig .


1
선형 확률 ​​모델은 "이국적"이지만 경제학자 (나 자신은 통계 학자)와의 상호 작용으로 인해 두 개의 수용소가있는 것 같습니다. 그 중 하나는 가정이 적고 예측을 직접 모델링하기 때문에 선형 확률이 더 낫다고 주장합니다. 이는 일반적으로 관심을 갖는 부분입니다.
zipzapboing

1
나는 경제학의 이국적인 사례를 언급하여 내 대답을주의했다. 그러나 선형 확률 ​​모델의 문제점은 OLS를 통해 추정하면 일반적으로 가정을 위반한다는 것입니다. 모수에서 모형이 선형이라는 가정은 많은 경우에 그럴듯하지 않습니다 (즉, OLS를 사용하여 추정 할 경우 0과 1 이외의 확률을 얻을 수 있음). 그리고 잔차는 원격으로 법선에 가깝지 않으므로 샌드위치 추정 기나 다른 것을 사용해야합니다.
Tim

포아송 모델의 경우, 공변량이 가산 적으로 작용할 것인지 (즉, 신원 링크를 암시 할 것인지) 선형 척도에서 곱셈 적으로 작용할 것인지 (응용 프로그램이 로그 링크를 암시 할 것인지) 응용 프로그램이 종종 지시한다고 말합니다. 그러나 아이덴티티 링크가있는 포아송 모델은 일반적으로 의미가 있으며 적합 계수에 음이 아닌 구속 조건을 부과하는 경우에만 안정적으로 적합 할 수 있습니다. 이는 R addreg 패키지의 nnpois 함수 또는 NNLM 패키지의 nnlm 함수를 사용하여 수행 할 수 있습니다 .
Tom Wenseleers

0

포아송 모델의 경우, 공변량이 가산 적으로 작용할 것인지 (즉, 신원 링크를 암시 할 것인지) 선형 척도에서 곱셈 적으로 작용할 것인지 (응용 프로그램이 로그 링크를 암시 할 것인지) 응용 프로그램이 종종 지시한다고 말합니다. 그러나 아이덴티티 링크가있는 포아송 모델은 일반적으로 의미가 있으며 적합 계수에 비 음성 구속 조건을 부과하는 경우에만 안정적으로 적합 할 수 있습니다 nnpois. 이는 R addreg패키지의 nnlm함수 또는 R 의 함수를 사용하여 수행 할 수 있습니다 .NNLM꾸러미. 따라서 Poisson 모델에 ID 및 로그 링크를 모두 맞추고 어느 것이 가장 좋은 AIC를 가지고 있는지 확인하고 순수한 통계적 근거를 기반으로 가장 좋은 모델을 추론해야한다는 데 동의하지 않습니다. 대부분의 경우 해결하려는 문제의 기본 구조 또는 해당 데이터.

예를 들어, 크로마토 그래피 (GC / MS 분석)에서 종종 대략 몇 가지 가우스 모양의 피크의 중첩 된 신호를 측정 할 수 있으며이 중첩 된 신호는 전자 곱셈기로 측정됩니다. 이는 측정 된 신호가 이온 수이므로 포아송 분포됨을 의미합니다. 각 피크는 정의에 따라 양의 높이를 가지며 부가 적으로 작용하고 노이즈가 포아송이기 때문에, 여기에는 동일 링크를 가진 음이 아닌 포아송 모델이 적합하며, 로그 링크 포아송 모델은 명백하지 않습니다. 엔지니어링에서 Kullback-Leibler 손실은 종종 이러한 모델의 손실 함수로 사용되며,이 손실을 최소화하는 것은 음이 아닌 ID 링크 Poisson 모델의 가능성을 최적화하는 것과 같습니다 ( 알파 또는 베타 분기 와 같은 다른 분기 / 손실 측정이 있습니다) Poisson을 특별한 경우로 사용).

아래는 정규 비제 한 신원 링크 Poisson GLM이 적합하지 않음 (비 음성 제약이 없기 때문에)이 아닌 음의 신원 링크 Poisson 모델을 사용하는 방법대한 세부 사항을 포함한 수치 예제입니다.nnpois여기서, 단일 피크의 측정 된 형상의 시프트 된 카피를 포함하는 밴드 공변량 매트릭스를 사용하여 포아송 노이즈와 함께 크로마토 그래피 피크의 측정 된 중첩을 디콘 볼 루팅하는 맥락에서. 비 음성은 여기에서 몇 가지 이유로 중요합니다 : (1) 현재 데이터에 대한 유일한 현실적인 모델입니다 (여기서는 네거티브 높이를 가질 수 없습니다). (2) 신원 링크를 사용하여 포아송 모델을 안정적으로 맞추는 유일한 방법입니다 그렇지 않으면 일부 공변량 값에 대한 예측이 음수가 될 수 있으며, 이는 이해가되지 않으며 가능성을 평가하려고 할 때 수치 적 문제를 야기 할 수 있습니다), (3) 비 음성은 회귀 문제를 정규화하고 안정적인 추정치를 얻는 데 크게 도움이됩니다 일반적으로 제한되지 않은 일반적인 회귀와 같이 과적 합 문제가 발생하지 않습니다.비 음성 제약으로 인해 희박한 추정치가 산출되는 경우가 종종 있습니다. 아래의 디컨 볼 루션 문제의 경우, 예를 들어 성능은 LASSO 정규화와 비슷하지만 정규화 매개 변수를 조정할 필요가 없습니다. ( L0-pseudonorm penalized regression은 여전히 ​​약간 더 우수하지만 계산 비용이 많이 듭니다 )

# 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
나는 모든 적합 계수가 음이 아니도록 강제하는 비 음성 제약의 필요성 또는 타당성을 이해하지 못합니다. 결국, 응답의 코딩을 간단히 뒤집기 만하면 ( 를 로 변환 ), 모든 계수는 무효화되어 그 중 하나의 부호가 의미가 없음을 나타냅니다. 그런 제약으로 인해 당신이 무엇을 의미하는지 오해하고 있습니까? 1 - YY1Y
whuber

1
@ whuber 나는 이제 더 명확하게 내 요점을 만들기 위해 구체적인 예를 추가했습니다! 실제 음이 아닌 신원 링크 Poisson 모델에 근사한 가중치가 아닌 음이 아닌 최소 제곱을 사용하는 것에 대한 의견도 환영합니다!
Tom Wenseleers

Btw-내가 음이 아닌 신원 링크 Poisson GLM을 근사화하는 데 사용하는 가중 nnl은 실제로 음이 아닌 Poisson GLM (R 자체에서 1 / (y + 0.1)을 사용하기 위해 반복적으로 가중 된 음이 아닌 최소 제곱 알고리즘의 단일 반복 사용에 해당합니다 포아송 GLM)는 초기화로 적합
톰 Wenseleers에게
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.