2015-08-06 4 views
3

Я просто изучаю стан и задаю несколько вопросов. Я пытаюсь сделать упорядоченную пробит-модель в stan. У меня есть несколько вопросов. Во-первых, приведенная ниже модель выдает сообщение об ошибке Stan model does not contain samples. Что это значит и как мне его исправить?Упорядоченный пробит в stan

Во-вторых, как я могу указать, какие ограничения я хочу определить для модели? На данный момент это неопознанное местоположение. Я хотел бы сообщить stan, чтобы установить одно из tau s как конкретное значение (например, 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); 
    } 
} 

EDIT

Вот 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) 
+2

Если вы не получили здесь ответа, вы можете попробовать [Stan Group Google] (https://groups.google.com/forum/#!forum/stan-users). Это метод, который разработчики предпочитают отвечать на вопросы. –

+0

@RichardErickson - спасибо. Не похоже, что у меня есть привилегии публикации. – Alex

+0

Вам нужно будет присоединиться к группе. https://support.google.com/groups/answer/1067205?hl=ru –

ответ

1

Если я позвоню, N <- 1000 J <- 3L K <- 2L y <- 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. Но это повышает вопрос о том, почему вы не видите это информационное сообщение? Какую платформу, графический интерфейс и номер версии RStan вы используете?

+0

ах, поэтому stan не любит неположительные категории. Это работает сейчас. Я запускаю rstan в Windows (через RStudio). rstan версии 2.7.0-1 (что я считаю последним на CRAN). – Alex

+0

Кроме того, как мне заняться второй частью моего вопроса? А именно, как установить одно из значений 'tau' для некоторого заданного значения (например, 0), чтобы идентифицировать модель? – Alex

+0

Он идентифицируется по вероятности того, что 'x' не содержит столбца из них. Это самый простой путь к идентификации в порядковой модели. –