MCMC- এ উচ্চতর স্ব-সংশোধন পরিচালনা করা


10

আমি আর এবং জেজিএস ব্যবহার করে একটি মেটা-বিশ্লেষণের জন্য একটি বরং জটিল শ্রেণিবদ্ধ বায়েসিয়ান মডেল তৈরি করছি। একটু সরলীকৃত, মডেল দুটি কী মাত্রা আছে যেখানে হয় এর ম পর্যবেক্ষণ শেষবিন্দু (এই ক্ষেত্রে, জিএম বনাম অ জিএম ফসল উৎপাদনের) গবেষণায় , অধ্যয়নের জন্য প্রভাব , গুলি বিভিন্ন গবেষণায় পর্যায়ের ভেরিয়েবলের জন্য প্রভাব দেশের অর্থনৈতিক উন্নয়ন অবস্থা হয় (যেখানে অধ্যয়ন করা হয়েছিল, ফসলের প্রজাতি, অধ্যয়নের পদ্ধতি ইত্যাদি) এর একটি পরিবার দ্বারা , এবংα = Σ γ ( ) + + ε Y আমি আমি α γ ε γ γ γ বনাম পি আমি এন জি γ বনাম এল পি ডি

yij=αj+ϵi
αj=hγh(j)+ϵj
yijijαjjγhϵগুলি ত্রুটি শর্তাবলী। মনে রাখবেন যে এস ডামি ভেরিয়েবলের সহগ নেই। পরিবর্তে, বিভিন্ন অধ্যয়ন-স্তরের মানগুলির জন্য স্বতন্ত্র ভেরিয়েবল রয়েছে। উদাহরণস্বরূপ, আছে উন্নয়নশীল দেশের জন্য এবং উন্নত দেশে জন্য। γγγdevelopingγdeveloped

আমি প্রাথমিকভাবে am এর মানগুলি অনুমান করতে আগ্রহী । এর অর্থ মডেল থেকে অধ্যয়ন-স্তরের ভেরিয়েবলগুলি বাদ দেওয়া কোনও ভাল বিকল্প নয়। γ

অধ্যয়ন-স্তর ভেরিয়েবলগুলির মধ্যে বেশিরভাগের মধ্যে উচ্চ সম্পর্ক রয়েছে এবং আমি মনে করি এটি আমার এমসিমিসি চেইনে বড় আকারের স্ব-সংশোধন তৈরি করছে। এই ডায়াগোনস্টিক প্লটটি চেইন ট্রাজেক্টোরিজগুলি (বাম) এবং ফলাফল স্বতঃসংশ্লিষ্ট (ডান) চিত্রিত করে:
এমসিসিএম আউটপুটে উচ্চ স্বতঃসংশ্লিষ্ট

স্বতঃসংশোধনের ফলস্বরূপ, আমি প্রত্যেকে 10,000 টি নমুনার 4 টি চেইন থেকে 60-120 এর কার্যকর নমুনা আকার পাচ্ছি।

আমার দুটি প্রশ্ন আছে, একটি পরিষ্কারভাবে উদ্দেশ্যমূলক এবং অন্যটি আরও বিষয়গত।

  1. পাতলা হওয়া, আরও চেইন যুক্ত করা এবং দীর্ঘকাল ধরে স্যাম্পেলার চালানো ছাড়া এই স্বয়ংস্কার সম্পর্কিত সমস্যাটি পরিচালনা করতে আমি কোন কৌশলগুলি ব্যবহার করতে পারি? "পরিচালনা" বলতে আমার অর্থ "যুক্তিসঙ্গত সময়ে যুক্তিসঙ্গতভাবে ভাল অনুমান উত্পাদন করা যায়" " কম্পিউটিং পাওয়ার ক্ষেত্রে, আমি এই মডেলগুলি একটি ম্যাকবুক প্রোতে চালাচ্ছি।

  2. স্বতঃসংশ্লিষ্টতার এই ডিগ্রিটি কতটা গুরুতর? এখানে এবং জন ক্রুশকের ব্লগে উভয় আলোচনার থেকেই বোঝা যায় যে, আমরা যদি যথেষ্ট পরিমাণে মডেলটি চালিয়ে থাকি তবে "ক্লাম্পি স্বতঃসংশ্লিষ্টতা সম্ভবত সকলেরই গড় বেরিয়েছে" (ক্রুশকে) এবং তাই এটি সত্যিই বড় বিষয় নয়।

উপরের প্লটটি তৈরি করে এমন মডেলটির জাগস কোডটি এখানে রয়েছে, কেবলমাত্র যদি কেউ বিশদটি সরবরাহ করতে যথেষ্ট আগ্রহী হয়:

model {
for (i in 1:n) {
    # Study finding = study effect + noise
    # tau = precision (1/variance)
    # nu = normality parameter (higher = more Gaussian)
    y[i] ~ dt(alpha[study[i]], tau[study[i]], nu)
}

nu <- nu_minus_one + 1
nu_minus_one ~ dexp(1/lambda)
lambda <- 30

# Hyperparameters above study effect
for (j in 1:n_study) {
    # Study effect = country-type effect + noise
    alpha_hat[j] <- gamma_countr[countr[j]] + 
                    gamma_studytype[studytype[j]] +
                    gamma_jour[jourtype[j]] +
                    gamma_industry[industrytype[j]]
    alpha[j] ~ dnorm(alpha_hat[j], tau_alpha)
    # Study-level variance
    tau[j] <- 1/sigmasq[j]
    sigmasq[j] ~ dunif(sigmasq_hat[j], sigmasq_hat[j] + pow(sigma_bound, 2))
    sigmasq_hat[j] <- eta_countr[countr[j]] + 
                        eta_studytype[studytype[j]] + 
                        eta_jour[jourtype[j]] +
                        eta_industry[industrytype[j]]
    sigma_hat[j] <- sqrt(sigmasq_hat[j])
}
tau_alpha <- 1/pow(sigma_alpha, 2)
sigma_alpha ~ dunif(0, sigma_alpha_bound)

# Priors for country-type effects
# Developing = 1, developed = 2
for (k in 1:2) {
    gamma_countr[k] ~ dnorm(gamma_prior_exp, tau_countr[k])
    tau_countr[k] <- 1/pow(sigma_countr[k], 2)
    sigma_countr[k] ~ dunif(0, gamma_sigma_bound)
    eta_countr[k] ~ dunif(0, eta_bound)
}

# Priors for study-type effects
# Farmer survey = 1, field trial = 2
for (k in 1:2) {
    gamma_studytype[k] ~ dnorm(gamma_prior_exp, tau_studytype[k])
    tau_studytype[k] <- 1/pow(sigma_studytype[k], 2)
    sigma_studytype[k] ~ dunif(0, gamma_sigma_bound)
    eta_studytype[k] ~ dunif(0, eta_bound)
}

# Priors for journal effects
# Note journal published = 1, journal published = 2
for (k in 1:2) {
    gamma_jour[k] ~ dnorm(gamma_prior_exp, tau_jourtype[k])
    tau_jourtype[k] <- 1/pow(sigma_jourtype[k], 2)
    sigma_jourtype[k] ~ dunif(0, gamma_sigma_bound)
    eta_jour[k] ~ dunif(0, eta_bound)
}

# Priors for industry funding effects
for (k in 1:2) {
    gamma_industry[k] ~ dnorm(gamma_prior_exp, tau_industrytype[k])
    tau_industrytype[k] <- 1/pow(sigma_industrytype[k], 2)
    sigma_industrytype[k] ~ dunif(0, gamma_sigma_bound)
    eta_industry[k] ~ dunif(0, eta_bound)
}
}

1
এটির মূল্যের জন্য, জটিল মাল্টিলেভেল মডেলগুলি স্ট্যানের উপস্থিতির কারণ হিসাবে আপনি সঠিক কারণগুলি সনাক্ত করেছেন for
সাইকোরাক্স বলছেন

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

1
এইচএমসি উত্তরোত্তরটি আবিষ্কার করে এমন দক্ষতার সাথে আমি এতটা গতির কথা ভাবছিলাম না। আমার বোধগম্যতা হ'ল এইচএমসি এত বেশি স্থলটি coverাকতে পারে, তাই প্রতিটি পুনরাবৃত্তির স্বতঃসংশোধন কম হয়।
সাইকোরাক্স বলছেন

ওহ, হ্যাঁ, এটি একটি আকর্ষণীয় বিষয়। আমি চেষ্টা করতে আমার জিনিস তালিকায় রাখব।
ড্যান হিক্স

উত্তর:


6

ব্যবহারকারীর from777 এর পরামর্শ অনুসরণ করে, দেখে মনে হচ্ছে আমার প্রথম প্রশ্নের উত্তর "ব্যবহারের স্ট্যান"। স্ট্যানে মডেলটি পুনরায় লেখার পরে, ট্রাজেক্টোরিগুলি এখানে রয়েছে (বার্ন-ইন করার পরে 4 চেইন x 5000 পুনরাবৃত্তি):
এখানে চিত্র বর্ণনা লিখুন এবং স্বতঃসংশ্লিষ্ট প্লটগুলি:
এখানে চিত্র বর্ণনা লিখুন

অনেক ভাল! সম্পূর্ণতার জন্য, এখানে স্ট্যান কোডটি রয়েছে:

data {                          // Data: Exogenously given information
// Data on totals
int n;                      // Number of distinct finding i
int n_study;                // Number of distinct studies j

// Finding-level data
vector[n] y;                // Endpoint for finding i
int study_n[n_study];       // # findings for study j

// Study-level data
int countr[n_study];        // Country type for study j
int studytype[n_study];     // Study type for study j
int jourtype[n_study];      // Was study j published in a journal?
int industrytype[n_study];  // Was study j funded by industry?

// Top-level constants set in R call
real sigma_alpha_bound;     // Upper bound for noise in alphas
real gamma_prior_exp;       // Prior expected value of gamma
real gamma_sigma_bound;     // Upper bound for noise in gammas
real eta_bound;             // Upper bound for etas
}

transformed data {
// Constants set here
int countr_levels;          // # levels for countr
int study_levels;           // # levels for studytype
int jour_levels;            // # levels for jourtype
int industry_levels;        // # levels for industrytype
countr_levels <- 2;
study_levels <- 2;
jour_levels <- 2;
industry_levels <- 2;
}

parameters {                    // Parameters:  Unobserved variables to be estimated
vector[n_study] alpha;      // Study-level mean
real<lower = 0, upper = sigma_alpha_bound> sigma_alpha;     // Noise in alphas

vector<lower = 0, upper = 100>[n_study] sigma;          // Study-level standard deviation

// Gammas:  contextual effects on study-level means
// Country-type effect and noise in its estimate
vector[countr_levels] gamma_countr;     
vector<lower = 0, upper = gamma_sigma_bound>[countr_levels] sigma_countr;
// Study-type effect and noise in its estimate
vector[study_levels] gamma_study;
vector<lower = 0, upper = gamma_sigma_bound>[study_levels] sigma_study;
vector[jour_levels] gamma_jour;
vector<lower = 0, upper = gamma_sigma_bound>[jour_levels] sigma_jour;
vector[industry_levels] gamma_industry;
vector<lower = 0, upper = gamma_sigma_bound>[industry_levels] sigma_industry;


// Etas:  contextual effects on study-level standard deviation
vector<lower = 0, upper = eta_bound>[countr_levels] eta_countr;
vector<lower = 0, upper = eta_bound>[study_levels] eta_study;
vector<lower = 0, upper = eta_bound>[jour_levels] eta_jour;
vector<lower = 0, upper = eta_bound>[industry_levels] eta_industry;
}

transformed parameters {
vector[n_study] alpha_hat;                  // Fitted alpha, based only on gammas
vector<lower = 0>[n_study] sigma_hat;       // Fitted sd, based only on sigmasq_hat

for (j in 1:n_study) {
    alpha_hat[j] <- gamma_countr[countr[j]] + gamma_study[studytype[j]] + 
                    gamma_jour[jourtype[j]] + gamma_industry[industrytype[j]];
    sigma_hat[j] <- sqrt(eta_countr[countr[j]]^2 + eta_study[studytype[j]]^2 +
                        eta_jour[jourtype[j]] + eta_industry[industrytype[j]]);
}
}

model {
// Technique for working w/ ragged data from Stan manual, page 135
int pos;
pos <- 1;
for (j in 1:n_study) {
    segment(y, pos, study_n[j]) ~ normal(alpha[j], sigma[j]);
    pos <- pos + study_n[j];
}

// Study-level mean = fitted alpha + Gaussian noise
alpha ~ normal(alpha_hat, sigma_alpha);

// Study-level variance = gamma distribution w/ mean sigma_hat
sigma ~ gamma(.1 * sigma_hat, .1);

// Priors for gammas
gamma_countr ~ normal(gamma_prior_exp, sigma_countr);
gamma_study ~ normal(gamma_prior_exp, sigma_study);
gamma_jour ~ normal(gamma_prior_exp, sigma_study);
gamma_industry ~ normal(gamma_prior_exp, sigma_study);
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.