MCMCを使用した既知の密度の2変量分布からのサンプリング


9

RのMetropolisアルゴリズムを使用して2変量密度からシミュレーションを試みましたが、うまくいきませんでした。密度はとして表すことができます 。ここで、はSingh-Maddala分布です。p y | x p x p x p(x,y)p(y|x)p(x)p(x)

p(x)=aqxa1ba(1+(xb)a)1+q

パラメータ、、、およびは対数正規であり、対数平均は分数であり、log-sdは定数です。私のサンプルが私が欲しいものかどうかをテストするために、の限界密度を見ました。これはであるはずです。RパッケージのMCMCpack、mcmc、dreamとは異なるMetropolisアルゴリズムを試しました。バーンイン、シンニング、サイズ100万までのサンプルを廃棄しましたが、結果として得られる限界密度は、提供したものではありませんでした。qaqp y | x x x p x bp(y|x)xxp(x)

これが私が使用した私のコードの最終版です:

logvrls <- function(x,el,sdlog,a,scl,q.arg) {
    if(x[2]>0) {
         dlnorm(x[1],meanlog=el*log(x[2]),sdlog=sdlog,log=TRUE)+
         dsinmad(x[2],a=a,scale=scl,q.arg=q.arg,log=TRUE)
    }
    else -Inf    
}

a <- 1.35
q <- 3.3
scale <- 10/gamma(1 + 1/a)/gamma(q - 1/a)*  gamma(q) 

Initvrls <- function(pars,nseq,meanlog,sdlog,a,scale,q) {
    cbind(rlnorm(nseq,meanlog,sdlog),rsinmad(nseq,a,scale,q))
}

library(dream)
aa <- dream(logvrls,
        func.type="logposterior.density",
        pars=list(c(0,Inf),c(0,Inf)),
        FUN.pars=list(el=0.2,sdlog=0.2,a=a,scl=scale,q.arg=q),
        INIT=Initvrls,
        INIT.pars=list(meanlog=1,sdlog=0.1,a=a,scale=scale,q=q),
        control=list(nseq=3,thin.t=10)
        )

それは収束までサンプリングするので、私は夢のパッケージに落ち着きました。3つの方法で正しい結果が得られるかどうかをテストしました。KS統計を使用し、変位値を比較し、結果のサンプルから最尤でSingh-Maddala分布のパラメーターを推定します。

ks.test(as.numeric(aa$Seq[[2]][,2]),psinmad,a=a,scale=scale,q.arg=q)

lsinmad <- function(x,sample)
    sum(dsinmad(sample,a=x[1],scale=x[2],q.arg=x[3],log=TRUE))
 optim(c(2,20,2),lsinmad,method="BFGS",sample=aa$Seq[[1]][,2])

 qq <- eq(0.025,.975,by=0.025)   
 tst <- cbind(qq,
              sapply(aa$Seq,function(l)round(quantile(l[,2],qq),3)),
              round(qsinmad(qq,a,scale,q),3))
 colnames(tst) <- c("Quantile","S1","S2","S3","True")

 library(ggplot2)
 qplot(x=Quantile,y=value,
       data=melt(data.frame(tst),id=1), 
       colour=variable,group=variable,geom="line")

これらの比較の結果を見ると、KS統計は、ほとんどの場合、サンプルは指定されたパラメーターを使用したSingh-Maddala分布からのものであるという帰無仮説を棄却します。最尤推定パラメーターは、その真の値に近づく場合がありますが、通常、サンプリングプロシージャが成功したことを受け入れるには快適ゾーンから離れすぎています。分位点についても同じですが、経験的分位点は遠すぎませんが、遠すぎます。

私の質問は私が間違っていることですか?私自身の仮説:

  1. MCMCはこのタイプのサンプリングには適していません
  2. 理論上の理由により、MCMCは収束できません(分布関数は、必要なプロパティを満たしていません)。
  3. Metropolisアルゴリズムを正しく使用していません
  4. 独立したサンプルがないので、私の配布テストは正しくありません。

シン・Maddala分布リンク、PDFは、2つのパラメータ有する- {C、K}を、未だR関数は、dsinmad3つのパラメータを取るまたは私は何かが欠けています。
csgillespie 2010

申し訳ありませんが、ウィキペディアのリンクは間違った式を引用しています。私が質問を作成していたとき、それは一見大丈夫に見えました。準備ができたリンクが見つからなかったので、式を質問に入れました。
mpiktas 2010

回答:


3

順序は正しいと思いますが、p(x)とp(y | x)に割り当てられたラベルが間違っていました。元の問題では、p(y | x)は対数正規であり、p(x)はSingh-Maddalaです。っていうことは

  1. Singh-MaddalaからXを生成し、

  2. 生成されたXの一部である平均をもつ対数正規からYを生成します。


3

実際、問題は非常に単純なので、MCMCを実行するべきではありません。このアルゴリズムを試してください:

ステップ1:通常ログからXを生成する

ステップ2:このXを固定したまま、Singh MaddalaからYを生成します。

ほら!サンプル準備完了!!!


私はあなたがステップを逆にしたことを意味したと思います。しかし、これが非常に単純な場合、なぜギブスサンプリングが必要なのでしょうか。
mpiktas 2010

1
いいえ、手順1と2を記述した順に示しました。結局のところ、yの分布はXを条件として指定されるため、Yの前にXを生成する必要があります。ギブスサンプリングに関しては、これはより複雑な問題を意味するより複雑なソリューションです。あなたが言うように、あなたは私にとってはかなり単純です。
Mohit

1
p(y|x)p(x|y)p(x)
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.