Statistics stan中单纯形列的矩阵

Statistics stan中单纯形列的矩阵,statistics,mcmc,stan,Statistics,Mcmc,Stan,有没有办法用Stan中的单纯形列构造矩阵?我想要构建的模型类似于下面的模型,其中我的模型计算为dirichlet多项式: data { int g; int c; int<lower=0> counts[g, c]; } parameters { simplex [g] p; } model { for (j in 1:c) { p ~ dirichlet(rep_vector(1.0, g)); counts[, j] ~ multinomi

有没有办法用Stan中的单纯形列构造矩阵?我想要构建的模型类似于下面的模型,其中我的模型计算为dirichlet多项式:

data {
  int g;
  int c;
  int<lower=0> counts[g, c];
}

parameters {
  simplex [g] p;
}

model {
  for (j in 1:c) {
    p ~ dirichlet(rep_vector(1.0, g));
    counts[, j] ~ multinomial(p);
  }
}

如果有另一种方法来构造这个潜在变量,那当然也很棒!我不太熟悉stan,因为它只实现了几个层次模型。

要回答您提出的问题,您可以在stan程序的参数块中声明一个simplex数组,并使用它们填充矩阵。比如说,

parameters {
  simplex[g] p[c];
}
model {
  matrix[g, c] col_stochastic_matrix;
  for (i in 1:c) col_stochastic_matrix[,c] = p[c];
}
但是,在您给出的示例中,实际上不需要形成列随机矩阵,因为您可以通过索引一组单纯形(如

data {
  int g;
  int c;
  int<lower=0> counts[g, c];
}
parameters {
  simplex [g] p[c];
}
model {
  for (j in 1:c) {
    p[j] ~ dirichlet(rep_vector(1.0, g));
    counts[, j] ~ multinomial(p[j]);
  }
}

这是一个绝对令人惊讶的答案,非常感谢。我认为集成Simplex将是最终的答案,但鉴于我正处于原型阶段,我可能会暂时坚持使用Simplex。回到这里,我意识到我误解了你的最后一点。模型是相同的,大约快6倍。再次感谢!
data {
  int g;
  int c;
  int<lower=0> counts[g, c];
}
parameters {
  simplex [g] p[c];
}
model {
  for (j in 1:c) {
    p[j] ~ dirichlet(rep_vector(1.0, g));
    counts[, j] ~ multinomial(p[j]);
  }
}
functions {
  real DM_lpmf(int [] n, vector alpha) {
    int N = sum(n);
    real A = sum(alpha);
    return lgamma(A) - lgamma(N + A) 
           + sum(lgamma(to_vector(n) + alpha)
           - sum(lgamma(alpha));
  }
}