2016-10-30 18 views
1

私のメトロポリス - ヘイスティングス問題は固定の二項分布を持ち、すべての提案分布q(i、j)は0.5です。プロットとヒストグラムを参照して、アルゴリズムを0.5付近に集中させると、二項分布からの確率は?RのMetropolis-Hastingsアルゴリズム:正しい結果はありますか?

pi <- function(x, n, p){ 
# returning value from binomial distribution 
    result <- (factorial(n)/(factorial(x) * factorial(n - x))) * 
     p^x * (1 - p)^(n - x) 
    return(result) 
} 


metropolisAlgorithm <- function(n, p, T){ 
# implementation of the algorithm 
# @n,p binomial parameters 
# @T number of time steps 
    X <- rep(runif(1),T) 
    for (t in 2:T) { 
     Y <- runif(1) 
     alpha <- pi(X[t - 1], n, p)/pi(Y, n, p) 
     if (runif(1) < alpha) X[t] <- Y 
     else X[t] < X[t - 1] 
    } 
    return(X) 
} 

# calling M-H algorithm and plotting result 
test <- metropolisAlgorithm(40,0.5,5000) 
par(mfrow=c(2,1)) 
plot(test, type = "l") 
hist(test, breaks = 40) 

enter image description here

+0

それは良い質問ですが、私はネイティブ関数を探すことを考慮しませんでした:/チップのおかげで! –

+2

あなたのコードを繰り返し実行すると、私はあなたが主張しているものが見当たりません。生成された最初の乱数の近くに集中しているようなものが見られます。これはしばしば0.5からかなり離れています。したがって、実装には問題があります。あなたの提案の配布は奇妙に見えます。 –

+1

'' X''は '[0,1]'の値ではなく整数値を取るべきですか? –

答えて

2

あなたは3つの問題だった:あなたのランダムウォークが範囲1:nの整数ではなく実数でかけなければなりませんので、あなたは、二項分布をシミュレートするように見える

1)範囲は[0,1]です。

2)あなたは分子を持っていたし、分母はあなたがX[t] < X[t - 1]にタイプミスがあったalpha

3)の計算に切り替えます。

(@ZheyuanLiが提案されているようdbinom機能の使用を含む)ビットをこれらを修正し、あなたのコードをクリーンアップ利回り:

metropolisAlgorithm <- function(n, p, T){ 
    # implementation of the algorithm 
    # @n,p binomial parameters 
    # @T number of time steps 
    X <- rep(0,T) 
    X[1] <- sample(1:n,1) 
    for (t in 2:T) { 
    Y <- sample(1:n,1) 
    alpha <- dbinom(Y,n,p)/dbinom(X[t-1],n,p) 
    if (runif(1) < alpha){ 
     X[t] <- Y 
    }else{ 
     X[t] <- X[t - 1]} 
    } 
    return(X) 
} 

# calling M-H algorithm and plotting result 
test <- metropolisAlgorithm(40,0.5,5000) 
par(mfrow=c(2,1)) 
plot(test, type = "l") 
hist(test) breaks = 40) 

(完璧な理にかなっている)の典型的な出力:

enter image description here

+0

私はそれを正しく/完全に提示しなかったにもかかわらず実際に問題を理解していました。何のヒーロー、ありがとう! –

+1

@ErikLまったくの偶然の一致によって、私はこの記事を見たとき、メトロポリスアルゴリズムの実装(Excel VBAで、以前はRで行っていましたが)でコンピュータに座っていました。 –

+0

その偶然が良くなった。私はちょうどすべての尾を救う栄光でこの場所が大好きです:) –

関連する問題