1

観測データ y1 と y2 を考えます。y1 は連続スケールで測定され、y2 はバイナリ スケールで測定されます。連続潜在変数 z は、y2 = I(z > 0) として y2 を生成すると仮定されます。(z が正規の場合、y2 はわずかに 2 進プロビットです)。さらに、y1 と z の間の依存関係をモデル化するためにコピュラが使用されます。このモデルは、次のように階層的に記述できます (表記の乱用があります)。

y2 = I(z > 0)
(y1, z) ~ C(F_y1( |w), F_z( |w) | ファイ)
w, ファイ ~ 事前確率

ここで、w は y1 と z の周辺パラメーターのベクトル、F_y1 と F_z はそれぞれ y1 と z の周辺累積分布関数、phi はコピュラ パラメーターです。

これをスタンでどのようにモデル化できますか? コピュラによって生成された二変量尤度から y1 と z をサンプリングするカスタム確率関数を作成しました。どうすればよいかわからないのは、潜在変数 z を説明する (生成する) ことと、y2 と z の関係を指定する方法です。

stan でデータ拡張を使用したプロビット回帰を既に見ましたが、モデルにコピュラがあるため、これは役に立たないようです。

編集:上記のリンクが役に立たないことについて誤解している可能性があります。私は次のコードを書きました。(理論的に)正しいように見えるかどうかについてコメントをいただければ幸いです。

functions {
real copulapdf_log(real[] y1, real[] z, vector mu1, vector mu2, real sigma1, real phi, int n){
  real logl;
  real s;
  logl <- 0.0;
  for (i in 1:n){
    s <- log(dCphi_du1du2_s(normal_cdf(y1[i],mu1[i],sigma1), logistic_cdf(z[i],mu2[i],1), phi)) + normal_log(y1[i],mu1[i],sigma1) + logistic_log(z[i],mu2[i],1); 
    logl <- logl + s;
  }
  return logl;
}  
}

data {
  int<lower=0> n; // number of subjects
  int<lower=0> k1; // number of predictors for y1
  int<lower=0> k2; // number of predictors for y2
  real y1[n]; // continuous data
  real y2[n]; // 0/1 binary data
  matrix[n, k1] x1; // predictor variables for y1
  matrix[n, k2] x2; // predictor variables for y2
}

transformed data{
  int<lower=-1, upper=1> sign[n];
  for (i in 1:n) {
    if (y2[i]==1) 
      sign[i] <- 1;
    else
      sign[i] <- -1;
  }
}

parameters {
  real phi; // frank copula param
  vector[k1] b1; // beta coefficients for y1
  vector[k2] b2; // beta coefficients for y2
  real<lower=0> abs_z[n]; // abs value of latent variable
  real<lower=0> sigma1; // sd for y1's normal distribution
}

transformed parameters {
  real v[n];
  vector[n] mu1; // location for y1
  vector[n] mu2; // location for z
  for (i in 1:n) {
    v[i] <- sign[i] * abs_z[i];
  }
  mu1 <- x1 * b1;
  mu2 <- x2 * b2;
}

model {
  b1 ~ normal(0, 100);
  b2 ~ normal(0, 100);
  phi ~ normal(0, 10);
  increment_log_prob(copulapdf_log(y1, v, mu1, mu2, sigma1, phi, n));
}
4

1 に答える 1

3

潜在パラメーターの定式化が必要な場合は、プロビット回帰のアルバートとチブの特徴付けと同じです。あなたがする必要があるのは、パラメータで切り捨てを宣言することです。多変量プロビットを含む回帰に関するマニュアルの章には、それがどのように行われたかを示す例があります。基本的に、正の値は lower=0 制約を取得し、負の値は upper=0 制約を取得し、両方のパラメーターのセットを z ベクトルにまとめます (実際に元に戻す必要がある場合)。

于 2016-03-17T20:17:57.857 に答える