포아송 회귀 분석을 사용하여 이진 데이터에서 조정 된 위험 비율 추정


9

로지스틱 회귀를 사용하여 조정 된 승산 비를 추정하는 방법과 유사한 조정 된 위험률을 추정하는 데 관심이 있습니다. 일부 문헌 (예 : this )은 Huber-White 표준 오류와 함께 포아송 회귀 분석을 사용하는 것이 모델 기반 방법임을 나타냅니다.

연속 공변량을 조정하는 것이 어떻게 영향을 미치는지에 대한 문헌을 찾지 못했습니다. 다음의 간단한 시뮬레이션은이 문제가 그렇게 간단하지 않음을 보여줍니다.

arr <- function(BLR,RR,p,n,nr,ce)
{
   B = rep(0,nr)
   for(i in 1:nr){
   b <- runif(n)<p 
   x <- rnorm(n)
   pr <- exp( log(BLR) + log(RR)*b + ce*x)
   y <- runif(n)<pr
   model <- glm(y ~ b + x, family=poisson)
   B[i] <- coef(model)[2]
   }
   return( mean( exp(B), na.rm=TRUE )  )
}

set.seed(1234)
arr(.3, 2, .5, 200, 100, 0)
[1] 1.992103
arr(.3, 2, .5, 200, 100, .1)
[1] 1.980366
arr(.3, 2, .5, 200, 100, 1)
[1] 1.566326 

이 경우 실제 위험 비율은 2이며 공변량 효과가 작을 때 안정적으로 회복됩니다. 그러나 공변량 효과가 크면 왜곡됩니다. 공변량 효과가 상한 (1)에 대해 상승 할 수 있고 이는 추정을 오염시키기 때문에 이것이 발생한다고 가정합니다.

조정 된 위험 비율 추정에서 연속 공변량 조정에 대한 문헌을 보았지만 찾지 못했습니다. 이 사이트의 다음 게시물을 알고 있습니다.

그러나 그들은 내 질문에 대답하지 않습니다. 이것에 대한 논문이 있습니까? 운동해야 할 알려진주의 사항이 있습니까?


1
당신에게 관심이있을 수 있습니다 : aje.oxfordjournals.org/content/162/3/199.full
StatsStudent

또한이 Q & A stats.stackexchange.com/questions/18595/… 가 도움이 될 수 있습니다.
mdewey

답변:


1

이 질문에 대한 답이 여전히 필요한지 모르겠지만 Poisson 회귀를 사용하려는 비슷한 문제가 있습니다. 코드를 실행할 때 모델을 다음과 같이 설정하면

model <- glm(y ~ b + x, family=binomial(logit)

Poisson 회귀 모델이 아니라 동일한 결과가 발생합니다. ce가 1에 가까워 질 때 추정 된 OR은 ~ 1.5입니다. 따라서 이진 결과에 Poisson 회귀를 사용할 때 발생 가능한 문제에 대한 정보를 제공하는 예는 확실하지 않습니다.


1
로짓 모델을 맞추는 데 따른 문제점은 1보다 큰 위험을 예측하지는 않지만 확률 비율은 위험 비율의 편향 추정치이며 결과가 널리 퍼질수록 바이어스가 급격히 증가한다는 것입니다. binomial(link=log)실제로 상대 위험 모델에 적합하도록 지정할 수 있지만 결과를 과대 예측하여 거의 수렴하지 않습니다.
AdamO

1

적절한 확률 함수와 함께 직접 최대 가능성을 사용하면 상대 위험의 추정이 크게 향상됩니다. 절단 된 위험 함수를 프로세스의 예상 비율로 직접 지정할 수 있습니다.

여기에 이미지 설명을 입력하십시오

일반적으로 우리는 Hessian을 사용하여 추정치에 대한 CI를 만듭니다. Huber White 오류에서이를 "B"행렬 (고기)로 사용하고 "A"행렬 (빵)을 얻기 위해 적절한 위험을 사용하는 가능성을 탐색하지는 않았지만 작동 할 수 있다고 생각합니다! 더 구체적으로 부트 스트랩을 사용하여 잘못 지정된 평균-분산 관계에 강력한 모델 오류를 얻을 수 있습니다.

## the negative log likelihood for truncated risk function
negLogLik <- function(best, X, y) { 
  pest <- pmin(1, exp(X %*% best))
  -sum(dpois(x = y, lambda = pest, log=TRUE))
}

set.seed(100)

sim <- replicate(100, {
  n <- 200
  X <- cbind(1, 'b'=rbinom(n, 1, 0.5), 'x'=rnorm(n))
  btrue <- c(log(0.3), log(2), 1)
  ptrue <- pmin(1, exp(X %*% matrix(btrue)))
  y <- rbinom(n, 1, ptrue) ## or just take y=ptrue for immediate results
  nlm(f = logLik, p = c(log(mean(y)),0,0), X=X, y=y)$estimate
})

rowMeans(exp(sim))

제공합니다 :

> rowMeans(exp(sim))
[1] 0.3002813 2.0680780 3.0888280

중간 계수는 원하는 것을 제공합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.