বার্ন-ইন দৈর্ঘ্য সেট করতে আমি কি এমসিসিএম রূপান্তর ডায়াগনস্টিককে আধা-স্বয়ংক্রিয় করতে পারি?


13

আমি এমসিসিএম চেইনের জন্য বার্ন-ইন-এর পছন্দটি স্বয়ংক্রিয় করতে চাই, যেমন কনভার্জেন্স ডায়াগোনস্টিকের উপর ভিত্তি করে প্রথম এন সারিগুলি সরিয়ে।

এই পদক্ষেপটি কতটা নিরাপদে স্বয়ংক্রিয়ভাবে চালিত হতে পারে? এমনকি যদি আমি স্বতঃসংশোধন, এমএমসিআরসি ট্রেস এবং পিডিএফগুলি দ্বিগুণ পরীক্ষা করে দেখি তবে বার্ন-ইন দৈর্ঘ্য স্বয়ংক্রিয়ভাবে বেছে নেওয়া ভাল লাগবে।

আমার প্রশ্নটি সাধারণ, তবে আপনি যদি আর এম এমসিএমসি.ওজেক্টের সাথে ডিল করার জন্য নির্দিষ্ট বিবরণ সরবরাহ করতে পারেন তবে তা দুর্দান্ত হবে; আমি আরজেজেগ এবং কোডা প্যাকেজ ব্যবহার করছি


যদিও মূল প্রশ্নের মধ্যে অন্তর্ভুক্ত করা হয়নি তবে আমার উত্তরে প্রস্তাবিত হিসাবে পাতলা ব্যবধানটি স্বয়ংক্রিয়ভাবে সেট করতেও এটি কার্যকর হবে।
ডেভিড লেবাউর

1
আমি কেবল উল্লেখ করতে চাই যে যে কেউ জেনেরিক এমসিসিএম অ্যালগরিদম তৈরি করতে আগ্রহী, সহজেই অনেক সমস্যার ক্ষেত্রে প্রযোজ্য, আমি এই বিষয়ে খুব আগ্রহী।
জন সালভাটিয়ার

উত্তর:


6

এখানে অটোমেশনের একটি পদ্ধতি রয়েছে। মতামত অনেক প্রশংসা। মানক অনুশীলনের সাথে তাল মিলিয়ে প্রাথমিক ভিজ্যুয়াল ইন্সপেকশনকে গণনার সাথে প্রতিস্থাপনের চেষ্টা করা হবে এবং এরপরে ভিজ্যুয়াল পরিদর্শন করা হবে।

এই সমাধানটিতে দুটি সম্ভাব্য সমাধান অন্তর্ভুক্ত করা হয়, প্রথমে কিছু থ্রেশহোল্ড পৌঁছানোর আগে শৃঙ্খলার দৈর্ঘ্য অপসারণ করতে বার্ন-ইন গণনা করুন এবং তারপরে পাতলা ব্যবধান গণনা করার জন্য স্বতঃসংশ্লিষ্ট ম্যাট্রিক্স ব্যবহার করে।

  1. সকল ভেরিয়েবলের জন্য গেমম্যান-রুবিন কনভার্জেনশন ডায়াগোনস্টিক সঙ্কুচিত ফ্যাক্টর (জিআরএসএফ) এর একটি ভেক্টর গণনা করুন
  2. সমস্ত ভেরিয়েবল জুড়ে grsf কিছুটা দোরের নীচে চলে গেছে এমন ন্যূনতম সংখ্যার সন্ধান করুন, উদাহরণস্বরূপ ১.১, সম্ভবত অনুশীলনে কম
  3. এই বিন্দু থেকে চেইনের শেষ অবধি শৃঙ্খলাগুলি উপ নমুনা করুন
  4. সর্বাধিক স্বতঃসংশ্লিষ্ট চেইনের স্বতঃসংশ্লিষ্ট ব্যবহার করে চেইনটি পাতলা করুন
  5. দর্শনীয়ভাবে ট্রেস, স্বতঃসংশোধন এবং ঘনত্ব প্লটগুলির সাথে সংযোগটি নিশ্চিত করুন

এমএমসিসি অবজেক্টটি এখানে ডাউনলোড করা যাবে: jags.out.Rdata

# jags.out is the mcmc.object with m variables
library(coda)    
load('jags.out.Rdata')
# 1. calculate max.gd.vec, 
# max.gd.vec is a vector of the maximum shrink factor
max.gd.vec     <- apply(gelman.plot(jags.out)$shrink[, ,'median'], 1, max)
# 2. will use window() to subsample the jags.out mcmc.object
# 3. start window at min(where max.gd.vec < 1.1, 100) 
window.start   <- max(100, min(as.numeric(names(which(max.gd.vec - 1.1 < 0)))))
jags.out.trunc <- window(jags.out, start = window.start)
# 4. calculate thinning interval
# thin.int is the chain thin interval
# step is very slow 
# 4.1 find n most autocorrelated variables
n = min(3, ncol(acm))
acm             <- autocorr.diag(jags.out.trunc)
acm.subset      <- colnames(acm)[rank(-colSums(acm))][1:n]
jags.out.subset <- jags.out.trunc[,acm.subset]
# 4.2 calculate the thinning interval
# ac.int is the time step interval for autocorrelation matrix
ac.int          <- 500 #set high to reduce computation time
thin.int        <- max(apply(acm2 < 0, 2, function(x) match(T,x)) * ac.int, 50)
# 4.3 thin the chain 
jags.out.thin   <- window(jags.out.trunc, thin = thin.int)
# 5. plots for visual diagnostics
plot(jags.out.thin)
autocorr.plot(jags.win.out.thin)

--হালনাগাদ--

আর-তে বাস্তবায়িত হয়েছে অটোকোরেলিকেশন ম্যাট্রিক্সের গণনাটি কিছুটা হলেও আকাঙ্ক্ষিত (> কিছু ক্ষেত্রে 15 মিনিট) এর চেয়ে ধীর গতির, তাই জিআর সঙ্কোচনের কারণের গণনা। কিভাবে Stackoverflow উপর ধাপ 4 গতি বাড়াতে সম্পর্কে একটি প্রশ্ন আছে এখানে

- আপডেট অংশ 2--

অতিরিক্ত উত্তর:

  1. রূপান্তরকরণের নির্ণয় করা সম্ভব নয়, কেবল রূপান্তরতার অভাব নির্ণয় করার জন্য (ব্রুকস, জিউডিসি এবং ফিলিপ, 2003)

  2. প্যাকেজ রানজাগগুলি থেকে ফাংশন অটোরুন.জ্যাগগুলি রান দৈর্ঘ্য এবং কনভার্জেন্সি ডায়াগনস্টিকের গণনা স্বয়ংক্রিয় করে দেয়। গেলম্যান রুবিন ডায়াগনস্টিকটি 1.05 এর নীচে না হওয়া পর্যন্ত এটি চেইনটি পর্যবেক্ষণ শুরু করে না; এটি রাফারি এবং লুইস ডায়াগনস্টিক ব্যবহার করে চেইনের দৈর্ঘ্য গণনা করে।

  3. গেলম্যান এট আল (গেলম্যান 2004 বায়েশিয়ান ডেটা অ্যানালাইসিস, পৃষ্ঠা 295, গেলম্যান অ্যান্ড শর্লি, ২০১০ ) লিখেছেন যে তারা শৃঙ্খলার 1 ম অর্ধকে বাতিল করার একটি রক্ষণশীল পন্থা ব্যবহার করে। যদিও তুলনামূলকভাবে সহজ সমাধান, বাস্তবে এটি আমার মডেল এবং ডেটাগুলির নির্দিষ্ট সেটগুলির জন্য সমস্যাটি সমাধান করার পক্ষে যথেষ্ট।


#code for answer 3
chain.length <- summary(jags.out)$end
jags.out.trunc <- window(jags.out, start = chain.length / 2)
# thin based on autocorrelation if < 50, otherwise ignore
acm <- autocorr.diag(jags.out.trunc, lags = c(1, 5, 10, 15, 25))
# require visual inspection, check acceptance rate
if (acm == 50) stop('check acceptance rate, inspect diagnostic figures') 
thin.int <- min(apply(acm2 < 0, 2, function(x) match(TRUE, x)), 50)
jags.out.thin <- window(jags.out.trunc, thin = thin.int)

2
দুটি নীতি প্রযোজ্য: আপনার চেইনটি স্থিতিশীল বিতরণে রূপান্তরিত হয়েছে কিনা তা আপনি কখনই জানতে পারবেন না। এবং রূপান্তরকরণের জন্য যে কোনও পরীক্ষা আপনি ম্যানুয়ালি করতে পারেন, আপনি স্বয়ংক্রিয় করতে পারেন। সুতরাং আপনার পদ্ধতির যথেষ্ট মনে হয়।
ত্রিস্তান

রানজ্যাগস ডকুমেন্টেশনে আমি দেখতে পাই যে অটোরুন.জ্যাগগুলি বলে যে মডেলটি স্বয়ংক্রিয়ভাবে রূপান্তরকরণ এবং পর্যাপ্ত নমুনার আকারের জন্য ফিরে আসার আগে মূল্যায়ন করা হয়। আপনি কি আমাকে ইঙ্গিত করতে পারেন যেখানে আপনি পেয়েছেন যে জেলম্যান রুবিন ডায়াগনস্টিকটি 1.05 এর নীচে না চলে অবধি অটোরান.জাগগুলি চেইন পর্যবেক্ষণ শুরু করে না? আপনাকে ধন্যবাদ
ব্যবহারকারীর 1068430

@ user1068430 এ autorun.jags, ...প্যারামিটারগুলিকে add.summaryফাংশনে পাস করার অনুমতি দেয়। add.summaryফাংশন একটি আর্গুমেন্ট রয়েছে psrf.target1.05 একটি ডিফল্ট মান
ডেভিড LeBauer
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.