Diagnosi MCMC Geweke


14

Sto eseguendo un campionatore Metropolis (C ++) e voglio utilizzare i campioni precedenti per stimare il tasso di convergenza.

Una diagnostica facile da implementare che ho trovato è la diagnostica Geweke , che calcola la differenza tra i due mezzi di campionamento divisa per l'errore standard stimato. L'errore standard è stimato dalla densità spettrale a zero.

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

dove , B sono due finestre all'interno della catena di Markov. Ho fatto qualche ricerca su cosa sono ^ S A θ ( 0 ) e ^ S B θ ( 0 ) ma mi immergo nella letteratura sulla densità spettrale di energia e sulla densità spettrale di potenza ma non sono un esperto di questi argomenti; Ho solo bisogno di una risposta rapida: queste quantità sono uguali alla varianza del campione? In caso contrario, qual è la formula per elaborarli?ABSθA^(0)SθB^(0)

Un altro dubbio su questa diagnostica Geweke è come scegliere ? La letteratura di cui sopra ha detto che è un certo θ ( X ) e dovrebbe implicare l'esistenza di una densità spettrale ^ S A θ ( 0 ) , ma per comodità immagino che il modo più semplice sia usare la funzione identità (usare i campioni stessi). È corretto?θθ(X)SθA^(0)

Il pacchetto R coda ha una descrizione ma non specifica nemmeno come calcolare i valori S


potresti guardare nelle viscere della codafunzione geweke.diagper vedere cosa fa ...
Ben Bolker,

Risposte:


4

Puoi cercare nel codice la geweke.diagfunzione nel codapacchetto per vedere come viene calcolata la varianza, tramite la chiamata alla spectrum.ar0funzione.


p

pλ

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

p0

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

Il calcolo sarebbe quindi simile a questo (sostituendo i soliti stimatori per i parametri):

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)

0

Sxx(ω)Sxx(0)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.