0

の観測値rhoからクラス内相関 (以下のパラメーター)を推定するモデルがあります。アイテムごとに固定効果(平均ベクトル)がありますが、人ごとにランダム効果もつけたいです。これを行う方法は100%わかりませんが、推測はできます。誰かが確認または修正していただければ幸いです。最後の行を次のように変更するだけでよいでしょうか。N_itemsN_subjectsmu

y[i]' ~ multi_normal(mu + gamma[i],Sigma)

gamma[i]person のランダム効果はどこにありiますか? parameters(さらに、ブロック内で実数の列ベクトルを宣言し、それから で優先順位を与えmodel blockます。) それとも、これについて間違った方法で行っていますか?

ところで、このモデルをより効率的にするための提案があれば、私は永遠に感謝します.

data {
  int N_subjects;
  int N_items;
  matrix[N_subjects,N_items] y;
}

parameters {
  vector[N_items] mu;
  real<lower=0> sigma;
  real<lower=0,upper=1> rho;
}

transformed parameters {
  cov_matrix[N_items] Sigma;
  for (j in 1:N_items)
    for (k in 1:N_items)
      Sigma[j,k] <- pow(sigma,2)*pow(rho,step(abs(j-k)-0.5));
}

model {
  sigma ~ uniform(0,100);
  rho ~ uniform(0,1);
  for (i in 1:N_items)
    mu[i] ~ normal(0,100);
  for (i in 1:N_subjects)
    y[i]' ~ multi_normal(mu,Sigma);
}
4

2 に答える 2

2

モデル仕様の質問では、多変量正規尤度の期待値を自由に指定できます。あなたの場合、like yの配列として宣言し、 次にブロック で、次にブロックで、可能性のために使用するため に構築するのが最善 です。row_vector row_vector[N_items] y[N_subjects]; parameters vector[N_subjects] unit; row_vector[N_items] item; modelmu row_vector[N_items] mu[N_subjects]; for (i in 1:N_subjects) mu[i] <- unit[i] + item; y ~ multi_normal(mu, Sigma); unititem

于 2015-05-23T16:37:46.900 に答える
2

計算効率の問題については、に変更 し for (i in 1:N_items) mu[i] ~ normal(0,100); ます 。 これにより、mu のメモリ割り当ての数 が mu ~ normal(0,100); N_items から 1 に減少する ため です 。0 から 100 の間で一様に分布している場合、ブロック内でそれらの境界を宣言し、ブロック 内のその前にコメント アウトする方が計算効率が高くなります 。そうすることで、自動的に拒否される 100 を超える 提案の生成を回避できるため、より効率的です。また、ハミルトニアン モンテカルロに必要な明確に定義された偏導関数がありません。 for (i in 1:N_subjects) y[i]' ~ multi_normal(mu,Sigma); y ~ multi_normal(mu,Sigma); # or mu + gamma yrow_vectordata row_vector[N_items] y[N_subjects]; sigmaparameters real<lower=0,upper=100> sigma; model // sigma ~ uniform(0,100); sigma

于 2015-05-22T15:10:37.220 に答える