2016-10-22 7 views
1

NaN이() I 로그 우도 함수를 작성하기위한 <code>dnbinom()</code>를 사용하고 난 16 경고를 가지고 있다는 문제가 R.</p>에 <p>을 <code>mle2()</code> {bbmle}를 이용하여 파라미터를 추정하고

1 : 내 음 이항 모델 모두 NaN이 이것처럼 제조 dnbinom에서는 (Y, 뮤 = (μ)의 크기 = K = TRUE 로그) NaN이이

내 코드를 생성 :

# data 
x <- c(0.35,0.45,0.90,0.05,1.00,0.50,0.45,0.25,0.15,0.40,0.26,0.37,0.43,0.34,0.00,0.11,0.00,0.00,0.00,0.41,0.14,0.80,0.60,0.23,0.17,0.31,0.30,0.00,0.23,0.33,0.30,0.00,0.00) 
y <- c(1,10,0,0,67,0,9,5,0,0,0,82,36,0,32,7,7,132,14,33,0,67,11,39,41,67,9,1,44,62,111,52,0) 

# log-likelihood function 
negbinglmLL = function(beta,gamma,k) { 
    mu= exp(beta+gamma*x) 
    -sum(dnbinom(y,mu=mu, size=k, log=TRUE)) 
} 

# maximum likelihood estimator 
model <- mle2(negbinglmLL, start=list(beta=mean(y), gamma= 0, k=mean(y)^2/(var(y)-mean(y)))) 

이러한 경고의 의미는 무엇이며, 심각한 문제인 경우 어떻게해야합니까?

답변

0

음수 대수 우도 함수가 음수 값인 k에서 시도하는 것을 제한하지 않습니다. 이 은 아마도 일 뿐이므로 최종 답을 엉망으로 만들지는 않겠지 만 가능한 경우 이러한 종류의 경고를 피하는 것이 가장 좋습니다. 두 간단한 전략 :

negbinglmLL = function(beta,gamma,logk) { 
    mu= exp(beta+gamma*x) 
    -sum(dnbinom(y,mu=mu, size=exp(logk), log=TRUE)) 
} 

model <- mle2(negbinglmLL, 
       start=list(beta=mean(y), 
         gamma= 0, 
         logk=log(mean(y)^2/(var(y)-mean(y))))) 

그런데 :

  • 다음과 같이
  • 은 로그 스케일의 k 파라미터에 맞게 (method=L-BFGS-B 전환) k에 하한을 넣어 이와 같은 간단한 문제의 경우 다음과 같이 수식 기반 바로 가기를 사용할 수 있습니다.

    mle2(y~dnbinom(mu=exp(logmu),size=exp(logk)), 
        parameters=list(logmu~x), 
        start=list(logmu=0,logk=0), 
        data=data.frame(x,y)) 
    

    이 간단한 사례의 경우 MASS::glm.nb도 완벽하게 작동해야합니다 (그러나 이것은 더 복잡해 지거나/glm.nb의 범위를 넘어서는 가장 단순한 버전 일 수 있습니다).

+0

답변 해 주셔서 감사합니다. 첫 번째 대안을 사용하기로 결정했습니다. model <- mle2 (negbinglmLL, start = list (베타 = 평균 (y), 감마 = 0, k = 평균 (y)^2/(var (y) -man (y))), 방법 = "L-BFGS-B", 하위 = c (베타 = -Inf, 감마 = -Inf, k = 0), 상 = c (베타 = Inf, 감마 = Inf, k = Inf)) –

+0

유일한 문제는 method = L-BFGS-B를 사용할 때 계수의 표준 오차가 glm.nb 함수를 사용하여 얻은 것과 상당히 다르다는 것입니다. 당신은 옳았습니다, 나는 glm.nb를 사용하지 않을 것이기 때문에 로그와 같은 함수에 용어를 추가하려고 합니다만,이 간단한 경우에는 유사한 결과를 기대하고있었습니다. –

+0

흠, "상당히 다른"의미는 무엇입니까? 'mle2'와'L-BFGS-B'와'glm.nb'을 비교하면, 나는 절편에 대해 0.445와 0.460의 표준 오차를 얻었고, 0.266과 0.249는 기울기에 대한 표준 오차를 얻었습니다 ... 여러분이 가진 오차의 크기입니다 걱정? 그들은 "비슷한"것 같습니다 ... –