2015-04-17 44 views
3

我試圖實現使用MH簡單的MCMC algorith有R的問題是,我得到這個錯誤(我試圖來計算α和它不是一個NA的問題)都市報斯MCMC有R

Error in if (runif(1) <= alpha) { : missing value where TRUE/FALSE needed 

這裏是我的功能任何人都可以發現問題嗎?

PoissonMetropolisHastingRW = function(n=100000,lambda=10,p=0.5,x0=0){ 

    x=rep(0,n); y=0; alpha = 0 

    x[1]=x0 
    for(i in 2:n){ 

    if (x[i-1] == 0){ 
     y = sample(c(0,1),1, prob=c(0.5,0.5)) 
     alpha = min(1,((lambda^y)*x[i-1]*p)/((lambda^x[i-1])*y*(1-p))) 
     #alpha = min(1, (((lambda^y)*x[i-1])/((lambda^x[i-1])*y))*(p/(1-p)))) 
     if(runif(1)<=alpha) {x[i]=y} 
     else {x[i]= x[i-1]} 

    } 
    if (x[i-1] > 0){ 
     y = sample(c(x[i-1]-1,x[i-1]+1), 1, prob=c(1-p,p)) 
     alpha = min(1,((lambda^y)*x[i-1]*p)/((lambda^x[i-1])*y*(1-p))) 
     #alpha = min(1, (((lambda^y)*x[i-1]/((lambda^x[i-1])*y))*(p/(1-p)))) 
     if(runif(1) <= alpha) {x[i]=y} 
     else {x[i]= x[i-1]} 
    } 
    } 
    return(x) 



} 
+1

像@bergant說的那樣,問題是一個被零除的問題。然後你可以使用'min(c(1,NaN),na.rm = TRUE)'去除非數字值。 –

回答

3

如果y恰好是0(並用0.5概率對於每次迭代,這將肯定地發生),然後是alpha 0/0(因爲x[i-1] == 0)。它給你NaN。條件something <= NaN提供了一個NA