Diagnostic MCMC Geweke

14

J'utilise un échantillonneur Metropolis (C ++) et je veux utiliser les échantillons précédents pour estimer le taux de convergence.

Un diagnostic facile à mettre en œuvre que j'ai trouvé est le diagnostic de Geweke , qui calcule la différence entre les deux moyennes d'échantillon divisée par son erreur standard estimée. L'erreur standard est estimée à partir de la densité spectrale à zéro.

Zn=θ¯Aθ¯B1nASθA^(0)+1nBSθB^(0),

, B sont deux fenêtres de la chaîne de Markov. J'ai fait quelques recherches sur ce que sont ^ S A θ ( 0 ) et ^ S B θ ( 0 ) mais je suis entré dans un désordre de littérature sur la densité spectrale d'énergie et la densité spectrale de puissance mais je ne suis pas un expert sur ces sujets; J'ai juste besoin d'une réponse rapide: ces quantités sont-elles identiques à la variance de l'échantillon? Sinon, quelle est la formule pour les calculer?ABSθA^(0)SθB^(0)

θθ(X)SθA^(0)

S

Yang
la source
vous pouvez regarder dans les entrailles de la codafonction geweke.diagpour voir ce qu'elle fait ...
Ben Bolker

Réponses:

4

Vous pouvez parcourir le code de la geweke.diagfonction dans le codapackage pour voir comment la variance est calculée, via l'appel à la spectrum.ar0fonction.


p

pλ

f(λ)=σ2(1j=1pαjexp(2πιjλ))2
αj

p0

f(0)=σ2(1j=1pαj)2

Le calcul ressemblerait alors à ceci (en substituant les estimateurs habituels aux paramètres):

tsAR2 = arima.sim(list(ar = c(0.01, 0.03)), n = 1000)  # simulate an AR(2) process
ar2 = ar(tsAR2, aic = TRUE)  # estimate it with AIC complexity selection

# manual estimate of spectral density at zero
sdMan = ar2$var.pred/(1-sum(ar2$ar))^2

# coda computation of spectral density at zer0
sdCoda = coda::spectrum0.ar(tsAr2)$spec

# assert equality
all.equal(sdCoda, sdMan)
tchakravarty
la source
0

Consultez la page wikipedia . Tu verrasSXX(ω), qui est la densité spectrale. Dans votre cas, vous devez utiliserSXX(0).

xuhdev
la source