Kommentarer
- Jag skrev en bok som heter Introducerar Monte Carlo-metoder med R som du kan kontrollera för sådana exempel.
Svar
Problem
Antag $ Y \ sim \ text {N} (\ text {mean} = \ mu, \ text {Var} = \ frac {1} {\ tau}) $.
Baserat på ett exempel, få de bakre fördelningarna av $ \ mu $ och $ \ tau $ med Gibbs sampler.
Notering
$ \ mu $ = populationsmedelvärde
$ \ tau $ = befolkningsprecision (1 / varians )
$ n $ = provstorlek
$ \ bar {y} $ = provmedelvärde
$ s ^ 2 $ = provvarians
Gibbs sampler
[ Casella, G. & George, EI (1992). Förklara Gibbs Sampler. Den amerikanska statistikern, 46, 167–174. ]
Vid iteration $ i $ ($ i = 1, \ dots, N $ ):
- exempel $ \ mu ^ {(i)} $ från $ f (\ mu \, | \, \ tau ^ {(i – 1)}, \ text {data} ) $ (se nedan)
- exempel $ \ tau ^ {(i)} $ från $ f (\ tau \, | \, \ mu ^ {(i)}, \ text {data}) $ (se nedan)
Teorin säkerställer att efter ett tillräckligt stort antal iterationer, $ T $, satsen $ \ {( \ mu ^ {(𝑖)}, \ tau ^ {(𝑖)}): i = T + 1, \ punkter, 𝑁 \} $ kan ses som ett slumpmässigt urval från den gemensamma bakre fördelningen.
Priors
$ f (\ mu, \ tau) = f (\ mu) \ gånger f (\ tau) $, med
$ f (\ mu) \ propto 1 $
$ f (\ tau) \ propto \ tau ^ {- 1} $
Villkorligt bakre för medelvärdet, med tanke på precisionen $$ (\ mu \, | \, \ tau, \ text {data}) \ sim \ text {N} \ Big (\ bar {y}, \ frac {1} {n \ tau} \ Big) $$
Villkorligt bakre för precisionen , med tanke på medelvärdet $$ (\ tau \, | \, \ mu, \ text {data}) \ sim \ text {Gam} \ Big (\ frac {n} {2}, \ frac {2} {(n-1) s ^ 2 + n (\ mu – \ bar {y}) ^ 2} \ Big) $$
(snabb) R-implementering
# summary statistics of sample n <- 30 ybar <- 15 s2 <- 3 # sample from the joint posterior (mu, tau | data) mu <- rep(NA, 11000) tau <- rep(NA, 11000) T <- 1000 # burnin tau[1] <- 1 # initialisation for(i in 2:11000) { mu[i] <- rnorm(n = 1, mean = ybar, sd = sqrt(1 / (n * tau[i - 1]))) tau[i] <- rgamma(n = 1, shape = n / 2, scale = 2 / ((n - 1) * s2 + n * (mu[i] - ybar)^2)) } mu <- mu[-(1:T)] # remove burnin tau <- tau[-(1:T)] # remove burnin
$$ $$
hist(mu) hist(tau)
Kommentarer
- +1 Detta är sättet att svara på en uppenbarligen kodspecifik fråga: ge den teoretiska förklaringen (vilket gör det till ämnet här) och sedan (för att tillfredsställa OP) ge också koden. Trevligt att se dig tillbaka!
- Tack för förklaringen. Finns det ett sätt som jag kan lära mig kodning för all statistisk algoritm. Jag är student och vill lära mig lite kodning för R så att jag kan lösa mitt problem.
- Kan du hjälpa mig att se den här frågan stats.stackexchange .com / frågor / 498646 / … ? Tack.