我正在学习stan,有几个问题。我正在尝试制作一个有序的Probit模型。我有一些问题。首先,下面的模型引发错误消息Stan model does not contain samples.这是什么意思,我该如何解决?

其次,如何告诉我要识别模型的约束?截至目前,它在位置方面是未知的。我想告诉stan将tau之一设置为特定值(例如0),但不确定如何做到这一点。

data{
  int<lower=1> N; // number of obs
  int<lower=3> J; // number of categories
  int<lower=2> K; // num of predictors
  int y[N]; // outcome var
  matrix[N, K] x; // predictor vars
}
parameters{
  ordered[J-1] tau; // thresholds
  vector[K] beta; // beta coefficients
}
model{
  vector[J] theta;
  vector[N] xB;
  beta ~ normal(0, 100);
  xB <- x*beta;
  for(n in 1:N){
    theta[1] <- 1 - Phi(xB[n] - tau[1]);
    for(j in 2:J-1)
      theta[j] <- Phi(xB[n]-tau[j-1]) - Phi(xB[n]-tau[j]);
    theta[J] <- Phi(xB[n] - tau[J-1]);
    y[n] ~ categorical(theta);
  }
}


编辑

这是我调用的R代码:

stan_data <- list(N = dim(insurance)[1], # 1000
                  K = dim(insurance)[2], #5
                  J = length(table(insurance$spend)), #3
                  y = insurance$spend, # vector of length N where each element is 0, 1, or 2
                  x = my_xmatrix) # matrix of dim 1000, 5

mcmc_oprobit <- stan(file="stan/oprobit.stan",
                     data = stan_data)

最佳答案

如果我打电话
N <- 1000J <- 3LK <- 2Ly <- sample(0:2, N, replace = TRUE)x <- matrix(rnorm(2 * N), N , 2)mcmc_oprobit <- stan(file="oprobit.stan")
然后我最终得到
Informational Message: The current Metropolis proposal is about to be rejected because of the following issue:Exception thrown at line 22:stan::math::categorical_log: Number of categories is 0, but must be between (1, 3)If this warning occurs sporadically, such as for highly constrained variable types like covariance matrices, then the sampler is fine,but if this warning occurs often then your model may be either severely ill-conditioned or misspecified.
在这种情况下,可以通过将结果变量重新编码为1、2或3而不是0、1或2来解决问题。但这提出了一个问题,为什么您看不到该信息性消息?您正在使用什么平台,GUI和RStan版本号?

关于r - 斯坦的有序概率,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31857988/

10-12 04:08