আমি কীভাবে BUGS / JAGS / STAN এর সাথে একটি অনুপাত মডেল করতে পারি?


10

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

যাইহোক, আমি কীভাবে এটি BUGS / JAGS / STAN এ লিখতে জানি না (জাগগুলি আমার সেরা পছন্দ হবে, তবে এটি আসলে কোনও ব্যাপার নয়)। আমার সমস্যাটি হ'ল আমি ভবিষ্যদ্বাণীকারীদের দ্বারা পরামিতিগুলির যোগফল তৈরি করি তবে এর সাথে আমি কী করতে পারি?

কোডটি এই জাতীয় কিছু হবে (জেএজিএস সিনট্যাক্সে) তবে আমি কীভাবে y_hatএবং yপরামিতিগুলিকে "লিঙ্ক" করতে জানি না ।

for (i in 1:n) {
 y[i] ~ dbeta(alpha, beta)

 y_hat[i] <- a + b * x[i]
}

( y_hatপরামিতি এবং ভবিষ্যতবক্তা মাত্র ক্রস পণ্য, অত: পর নির্ণায়ক সম্পর্ক। aএবং bকোফিসিয়েন্টস যা আমি অনুমান করার চেষ্টা করুন, হয় xএকটি predictor হচ্ছে)।

আপনার পরামর্শের জন্য ধন্যবাদ!


A, b, y_ কি? আপনার পরিষ্কারভাবে আপনার মডেলটি সংজ্ঞায়িত করা উচিত। উপায় দ্বারা BUGS সিনট্যাক্স গাণিতিক সিনট্যাক্সের কাছাকাছি। এভাবে আপনি যদি নিজের মডেলটি গাণিতিক ভাষায় লিখতে জানেন তবে প্রায় সমস্ত কাজ শেষ হয়ে যায়।
স্টাফেন লরেন্ট

স্টাফেন, ধন্যবাদ আমি প্রশ্নটি সম্পাদনা করে, ক, খ, y_ কি সংজ্ঞায়িত করতে পারি? উত্তরটি আমি গাণিতিকভাবে জানি না, অন্যথায় উত্তরটি সত্যই অনেক সহজ হতে পারে ;-)
জোল

আমি সন্দেহ করি যে আমি E (y) = alpha / (alpha + beta) এর উপর ভিত্তি করে গড়ে তুলতে পারি, তবে ঠিক কীভাবে ঠিক তা বুঝতে পারি না।
জোল

উত্তর:


19

μϕμα=μ×ϕβ=(1μ)×ϕμϕ

সম্ভবত এর মতো কিছু:

for(i in 1:n) {
  y[i] ~ dbeta(alpha[i], beta[i])
  alpha[i] <- mu[i] * phi
  beta[i]  <- (1-mu[i]) * phi
  logit(mu[i]) <- a + b*x[i]
}
phi ~ dgamma(.1,.1)
a ~ dnorm(0,.001)
b ~ dnorm(0,.001)

আপনাকে ধন্যবাদ, এটি খুব সহায়ক! আমি আপনার পরামর্শ দিয়ে একটি মডেল ফিট করার চেষ্টা করছি।
জোউল

যাইহোক, আমি যখন মডেলটি চালনা করি, তখন আমি ত্রুটিগুলি পেয়েছি যেমন: "নোড y এ ত্রুটি [6283] অবৈধ অভিভাবক মান"। এখানে কি ঘটছে কোন ধারণা?
জোল

@ জোউল, y [6283] এর মান কত? আপনি কি নিশ্চিত করেছেন যে আলফা এবং বেতার মান আইনী মূল্যবোধের মধ্যে সীমাবদ্ধ? আমি আশা করি কিছু 0 বা তার নিচে চলে গেছে এবং এটি ত্রুটি দেয়।
গ্রেগ স্নো

না, আমি পরীক্ষা করে দেখেছি, আমার সমস্ত y মান 0 (এবং 1 এর চেয়ে নিকৃষ্ট) এর চেয়ে কঠোরতর superior হতে পারে আমার প্রবীণরা কোনও মুহুর্তে অনুভূত y এর মানগুলির সাথে সংঘর্ষে লিপ্ত? তবে আমি কীভাবে এটি চেক করব জানি না, এবং আমার প্রবীণরা বুদ্ধিমান বলে মনে হচ্ছে - কমপক্ষে আমার কাছে!
জোল

1
@ কলিন, আমি জেএজিএসকে খুব ভাল জানি না, তাই জাগসের জন্য বিশেষত কোনও ফোরামে আরও ভালভাবে জিজ্ঞাসা করা যেতে পারে। বা অন্য কোনও সরঞ্জাম দিয়ে চেষ্টা করে দেখুন, আমি দেখতে পাচ্ছি যে আজকাল আমি বাইসের হয়ে স্ট্যান পছন্দ করি।
গ্রেগ স্নো

18

গ্রেগ স্নো দুর্দান্ত উত্তর দিল। সম্পূর্ণতার জন্য, এখানে স্ট্যান সিনট্যাক্সের সমতুল্য। যদিও স্ট্যান একটি বিটা বিতরণ যা আপনি ব্যবহার করতে পারে আছে, এটা বিটা ঘনত্ব লগারিদম নিজেকে কারণ ধ্রুবক কাজ দ্রুততর log(y)এবং log(1-y)গোড়াতেই (বদলে প্রত্যেক সময় যে একবারে গণনা করা যায় y ~ beta(alpha,beta)বলা যেতে হবে)। সংরক্ষিত lp__ভেরিয়েবলকে বাড়িয়ে (নীচে দেখুন), আপনি আপনার নমুনায় থাকা পর্যবেক্ষণগুলির তুলনায় বিটা ঘনত্বের লগারিদম যোগ করতে পারেন। আমি লিনিয়ার প্রেডিক্টরে প্যারামিটার ভেক্টরের জন্য "গামা" লেবেলটি ব্যবহার করি।

data {
  int<lower=1> N;
  int<lower=1> K;
  real<lower=0,upper=1> y[N];
  matrix[N,K] X;
}
transformed data {
  real log_y[N];
  real log_1my[N];
  for (i in 1:N) {
    log_y[i] <- log(y[i]);
    log_1my[i] <- log1m(y[i]);
  }
}
parameters {
  vector[K] gamma;
  real<lower=0> phi;
}
model {
  vector[N] Xgamma;
  real mu;
  real alpha_m1;
  real beta_m1;
  Xgamma <- X * gamma;
  for (i in 1:N) {
    mu <- inv_logit(Xgamma[i]);
    alpha_m1 <- mu * phi - 1.0;
    beta_m1 <- (1.0 - mu) * phi - 1.0;
    lp__ <- lp__ - lbeta(alpha,beta) + alpha_m1 * log_y[i] + 
                                        beta_m1 * log_1my[i];
  }
  // optional priors on gamma and phi here
}

ধন্যবাদ বেন! স্ট্যান সিনট্যাক্সটিও খুব দরকারী।
জোল

স্ট্যান v2 একটি "beta_proportion", বিবৃতি স্যাম্পলিং আমি বিশ্বাস করি যে obviates সরাসরি করার প্রয়োজনীয়তা নিপূণভাবে "lp__" আছে
THK
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.