2017-02-01 10 views
0

Я хотел бы использовать функцию ordered_logistic() в RStan.RStan: Использовать матрицу в ordered_logistic()

Во-первых, здесь есть данные (sample):

gender age partyID treatment_rand treatment_bias y_randT y_biasT 
    <dbl> <dbl> <dbl>   <dbl>   <dbl> <dbl> <dbl> 
1  0 21  1    0    0  1  4 
2  1 21  7    1    1  3  2 
3  0 67  7    0    0  4  4 
4  0 78  1    0    0  2  4 
5  0 35  8    0    1  4  2 

Я использую подмножество данных:

X <- cbind(1, sample[, c("age", "partyID", "gender")]) 
choice_num <- 5 
data_randT <- list(N=nrow(sample), D=ncol(X), t=sample$treatment_rand, X=X, y=sample$y_randT, K=choice_num) 

Мой Стан код:

data{ 
    int<lower=2> K; 
    int<lower=0> N; 
    int<lower=1> D; 
    int<lower=1, upper=K> y[N]; 
    real<lower=0, upper=1> t[N]; 
    matrix[N,D] X; 
} 

parameters{ 
    vector[D] betaX; 
    real betaT; 
    ordered[K-1] c; 
} 

model{ 
    for(n in 1:N) 
     y[n] ~ ordered_logistic(betaT*t[n] + X[n]*betaX, c); 
} 

Если я бегу этот код, я получил следующую ошибку:

> fit_rand <- stan(model_code=stan_OrderedLogit, data=data_randT, seed=seed) 
Error in new_CppObject_xp(fields$.module, fields$.pointer, ...) : 
    variable does not exist; processing stage=data initialization; variable name=X; base type=matrix_d 
In addition: Warning messages: 
1: In is.na(x) : is.na() applied to non-(list or vector) of type 'NULL' 
2: In FUN(X[[i]], ...) : data with name X is not numeric and not used 
failed to create the sampler; sampling not done 

Что не так с кодом?

ответ

0

Я считаю, что это будет работать, если вы сделаете X матрицы в R, а не data.frame, как в X <- as.matrix(cbind(1, sample[, c("age", "partyID", "gender")])) Тем не менее, я думаю, вам бы вы первый хотите расширить partyID в набор фиктивных переменных (за исключением эталонная категория).