MCMC मेट्रोपोलिस-हेस्टिंग्स विविधताओं के साथ उलझन में: रैंडम-वॉक, नॉन-रैंडम-वॉक, स्वतंत्र, महानगर


15

पिछले कुछ हफ़्तों से मैं MCMC और मेट्रोपोलिस-हेस्टिंग्स एल्गोरिदम को समझने की कोशिश कर रहा हूँ। हर बार जब मुझे लगता है कि मैं समझता हूं कि मुझे एहसास है कि मैं गलत हूं। अधिकांश कोड उदाहरण मुझे ऑन-लाइन लागू होते हैं जो वर्णन के अनुरूप नहीं है। यानी: वे कहते हैं कि वे मेट्रोपोलिस-हेस्टिंग्स को लागू करते हैं लेकिन वे वास्तव में रैंडम-वॉक महानगर लागू करते हैं। अन्य (लगभग हमेशा) चुपचाप हेस्टिंग्स सुधार अनुपात के कार्यान्वयन को छोड़ देते हैं क्योंकि वे एक सममित प्रस्ताव वितरण का उपयोग कर रहे हैं। वास्तव में, मुझे एक भी सरल उदाहरण नहीं मिला है जो अब तक के अनुपात की गणना करता है। इससे मुझे और भी उलझन होती है। क्या कोई मुझे निम्नलिखित उदाहरण (किसी भी भाषा में) दे सकता है:

  • वेनिला नॉन-रैंडम वॉक मेट्रोपोलिस-हेस्टिंग्स एल्गोरिथम हेस्टिंग्स सुधार अनुपात गणना के साथ (भले ही यह सममित प्रस्ताव वितरण का उपयोग करते समय 1 हो जाएगा)।
  • वेनिला रैंडम वॉक मेट्रोपोलिस-हेस्टिंग्स एल्गोरिथम।
  • वेनिला इंडिपेंडेंट मेट्रोपोलिस-हेस्टिंग्स एल्गोरिथम।

मेट्रोपोलिस एल्गोरिदम प्रदान करने की कोई आवश्यकता नहीं है क्योंकि अगर मुझे मेट्रोपोलिस और मेट्रोपोलिस-हेस्टिंग्स के बीच एकमात्र अंतर नहीं है, तो यह है कि पहले वाले हमेशा एक सममित वितरण से नमूना लेते हैं और इस प्रकार उनके पास हेस्टिंग्स सुधार अनुपात नहीं होता है। एल्गोरिदम का विस्तृत विवरण देने की आवश्यकता नहीं है। मुझे मूल बातें समझ में आती हैं, लेकिन मैं महानगर-हेस्टिंग्स एल्गोरिथ्म के विभिन्न रूपों के लिए सभी अलग-अलग नामों से भ्रमित हूं, लेकिन यह भी कि आप व्यावहारिक रूप से वेनिला नॉन-रैंडम-वॉक एमएच पर हेस्टिंग्स सुधार अनुपात कैसे लागू करेंगे। कृपया उन पेस्ट लिंक की नकल न करें जो आंशिक रूप से मेरे सवालों का जवाब देते हैं क्योंकि सबसे अधिक संभावना है कि मैं उन्हें पहले ही देख चुका हूं। उन कड़ियों ने मुझे इस उलझन में पहुँचा दिया। धन्यवाद।

जवाबों:


10

यहां आप जाते हैं - तीन उदाहरण। मैंने तर्क को स्पष्ट करने के लिए एक वास्तविक एप्लिकेशन में कोड को बहुत कम कुशल बनाया है (मुझे आशा है कि)।

# We'll assume estimation of a Poisson mean as a function of x
x <- runif(100)
y <- rpois(100,5*x)  # beta = 5 where mean(y[i]) = beta*x[i]

# Prior distribution on log(beta): t(5) with mean 2 
# (Very spread out on original scale; median = 7.4, roughly)
log_prior <- function(log_beta) dt(log_beta-2, 5, log=TRUE)

# Log likelihood
log_lik <- function(log_beta, y, x) sum(dpois(y, exp(log_beta)*x, log=TRUE))

# Random Walk Metropolis-Hastings 
# Proposal is centered at the current value of the parameter

rw_proposal <- function(current) rnorm(1, current, 0.25)
rw_p_proposal_given_current <- function(proposal, current) dnorm(proposal, current, 0.25, log=TRUE)
rw_p_current_given_proposal <- function(current, proposal) dnorm(current, proposal, 0.25, log=TRUE)

rw_alpha <- function(proposal, current) {
   # Due to the structure of the rw proposal distribution, the rw_p_proposal_given_current and
   # rw_p_current_given_proposal terms cancel out, so we don't need to include them - although
   # logically they are still there:  p(prop|curr) = p(curr|prop) for all curr, prop
   exp(log_lik(proposal, y, x) + log_prior(proposal) - log_lik(current, y, x) - log_prior(current))
}

# Independent Metropolis-Hastings
# Note: the proposal is independent of the current value (hence the name), but I maintain the
# parameterization of the functions anyway.  The proposal is not ignorable any more
# when calculation the acceptance probability, as p(curr|prop) != p(prop|curr) in general.

ind_proposal <- function(current) rnorm(1, 2, 1) 
ind_p_proposal_given_current <- function(proposal, current) dnorm(proposal, 2, 1, log=TRUE)
ind_p_current_given_proposal <- function(current, proposal) dnorm(current, 2, 1, log=TRUE)

ind_alpha <- function(proposal, current) {
   exp(log_lik(proposal, y, x)  + log_prior(proposal) + ind_p_current_given_proposal(current, proposal) 
       - log_lik(current, y, x) - log_prior(current) - ind_p_proposal_given_current(proposal, current))
}

# Vanilla Metropolis-Hastings - the independence sampler would do here, but I'll add something
# else for the proposal distribution; a Normal(current, 0.1+abs(current)/5) - symmetric but with a different
# scale depending upon location, so can't ignore the proposal distribution when calculating alpha as
# p(prop|curr) != p(curr|prop) in general

van_proposal <- function(current) rnorm(1, current, 0.1+abs(current)/5)
van_p_proposal_given_current <- function(proposal, current) dnorm(proposal, current, 0.1+abs(current)/5, log=TRUE)
van_p_current_given_proposal <- function(current, proposal) dnorm(current, proposal, 0.1+abs(proposal)/5, log=TRUE)

van_alpha <- function(proposal, current) {
   exp(log_lik(proposal, y, x)  + log_prior(proposal) + ind_p_current_given_proposal(current, proposal) 
       - log_lik(current, y, x) - log_prior(current) - ind_p_proposal_given_current(proposal, current))
}


# Generate the chain
values <- rep(0, 10000) 
u <- runif(length(values))
naccept <- 0
current <- 1  # Initial value
propfunc <- van_proposal  # Substitute ind_proposal or rw_proposal here
alphafunc <- van_alpha    # Substitute ind_alpha or rw_alpha here
for (i in 1:length(values)) {
   proposal <- propfunc(current)
   alpha <- alphafunc(proposal, current)
   if (u[i] < alpha) {
      values[i] <- exp(proposal)
      current <- proposal
      naccept <- naccept + 1
   } else {
      values[i] <- exp(current)
   }
}
naccept / length(values)
summary(values)

वेनिला नमूना के लिए, हम प्राप्त करते हैं:

> naccept / length(values)
[1] 0.1737
> summary(values)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
  2.843   5.153   5.388   5.378   5.594   6.628 

जो एक कम स्वीकृति की संभावना है, लेकिन फिर भी ... प्रस्ताव को ट्यून करने से यहां मदद मिलेगी, या एक अलग तरीके को अपनाना होगा। यहाँ यादृच्छिक चलना प्रस्ताव परिणाम हैं:

> naccept / length(values)
[1] 0.2902
> summary(values)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
  2.718   5.147   5.369   5.370   5.584   6.781 

इसी तरह के परिणाम, जैसा कि एक उम्मीद करेगा, और एक बेहतर स्वीकार्यता संभावना (एक पैरामीटर के साथ ~ 50% के लिए लक्ष्य)।

और, पूर्णता के लिए, स्वतंत्रता नमूना:

> naccept / length(values)
[1] 0.0684
> summary(values)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
  3.990   5.162   5.391   5.380   5.577   8.802 

क्योंकि यह पोस्टीरियर के आकार के लिए "अनुकूलन" नहीं करता है, यह सबसे खराब स्वीकृति संभावना है और इस समस्या के लिए अच्छी तरह से ट्यून करने के लिए सबसे कठिन है।

ध्यान दें कि आम तौर पर बोलते हुए हम फेल्ट टेल के साथ प्रस्तावों को प्राथमिकता देते हैं, लेकिन यह एक पूरा विषय है।


Q

1
@floyd - यह कई स्थितियों में उपयोगी है, उदाहरण के लिए, यदि आपके पास वितरण के केंद्र के स्थान का एक अच्छा विचार है (उदाहरण के लिए, क्योंकि आपने MLE या MOM अनुमानों की गणना की है) और वसा-पूंछ वाले प्रस्ताव को चुन सकते हैं। वितरण, या यदि प्रति गणना समय की गणना का समय बहुत कम है, तो आप किस मामले में बहुत लंबी श्रृंखला (जो कम स्वीकृति दर के लिए बना है) चला सकते हैं - इस प्रकार आपको विश्लेषण और प्रोग्रामिंग समय की बचत होती है, जो अक्षम रनटाइम की तुलना में बहुत अधिक हो सकती है। यह सामान्य रूप से पहला प्रयास प्रस्ताव नहीं होगा, हालांकि, यह यादृच्छिक चलना होगा।
जुम्मन

Qp(xt+1|xt)

1
p(xt+1|xt)=p(xt+1)

1

देख:

निर्माण से, एल्गोरिथ्म सामान्यीकरण स्थिरांक पर निर्भर नहीं करता है, क्योंकि पीडीएफ के अनुपात में क्या मायने रखता है। एल्गोरिथ्म की भिन्नता जिसमें प्रस्ताव पीडीएफq()एक्स

विकिपीडिया लेख एक अच्छा पूरक पढ़ा है। जैसा कि आप देख सकते हैं, मेट्रोपोलिस में भी "सुधार अनुपात" है, लेकिन जैसा कि ऊपर उल्लेख किया गया है, हेस्टिंग्स ने एक संशोधन पेश किया जो गैर-सममित प्रस्ताव वितरण के लिए अनुमति देता है।

मेट्रोपोलिस एल्गोरिथ्म को आर पैकेज mcmcमें कमांड के तहत लागू किया गया है metrop()

अन्य कोड उदाहरण:

http://www.mas.ncl.ac.uk/~ndjw1/teaching/sim/metrop/

http://pcl.missouri.edu/jeff/node/322

http://darrenjw.wordpress.com/2010/08/15/metropolis-hastings-mcmc-algorithms/


आपके जवाब के लिए धन्यवाद। दुर्भाग्य से यह मेरे किसी भी प्रश्न का उत्तर नहीं देता है। मुझे केवल रैंडम-वॉक महानगर, गैर-रैंडम-वॉक महानगर और स्वतंत्र एमएच दिखाई देते हैं। dnorm(can,mu,sig)/dnorm(x,mu,sig)पहले लिंक के स्वतंत्रता नमूने में हेस्टिंग्स सुधार अनुपात 1 के बराबर नहीं है। मैंने सोचा कि यह सममित प्रस्ताव वितरण का उपयोग करते समय 1 के बराबर होना चाहिए था। क्या ऐसा इसलिए है क्योंकि यह एक स्वतंत्र नमूना है और सादा नॉन-रैंडम-वॉक एमएच नहीं है? यदि हाँ, तो प्लेन नॉन-रैंडम-वॉक एमएच के लिए हेस्टिंग्स अनुपात क्या है?
AstrOne

@AstrOne - एमएच स्वीकृति की संभावना की गणना करते समय प्रस्ताव को आग लगाने के लिए एक सममित प्रस्ताव वितरण का उपयोग करना पर्याप्त नहीं है। आपके उदाहरण से पता चलता है कि क्यों। आपको क्या चाहिएपी(वर्तमान|प्रस्ताव)=पी(प्रस्ताव|वर्तमान), यानी, यदि अनुपात 1 के बराबर नहीं है, तो आप उन्हें अनदेखा नहीं कर सकते।
जूलमैन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.