Извлечение данных в преобразованном блоке данных в файле Stan

Я хочу извлечь z в преобразованном блоке данных из объекта stanfit f. Является ли это возможным?

    library(rstan)


 m <- stan_model(model_code = '
                            data{real x;}
                            transformed data{real z; z = chi_square_rng(x); }
                            parameters {real y;} 
                            model {y ~ normal(z,1);}')
 f <- sampling(m, data=list(x=1), iter = 100)

person Camford Oxbridge    schedule 13.09.2019    source источник
comment
Нет, в настоящее время это невозможно (кроме сохранения в виде сгенерированного количества, как предлагает @MDEWITT ниже). Кроме того, мы настоятельно рекомендуем писать программы Stan в их собственных файлах, чтобы вы могли использовать в них транспонирование и кавычки и чтобы вы могли интерпретировать номера строк в ошибках.   -  person Bob Carpenter    schedule 16.09.2019


Ответы (1)


Я бы добавил новое значение в generated quantities следующим образом:

library(rstan)
m <- stan_model(model_code = '
                            data{real x;}
                            transformed data{real z; z = chi_square_rng(x); }
                            parameters {real y;} 
                            model {y ~ normal(z,1);}
                            generated quantities {real zhat = z;}')
f <- sampling(m, data=list(x=1), iter = 100)

Это возвращает допустимые значения

print(f, pars = "zhat")

     mean se_mean sd 2.5%  25%  50%  75% 97.5% n_eff Rhat
zhat 0.16       0  0 0.16 0.16 0.16 0.16  0.16     2 0.98

И вы можете извлечь значения, просто чтобы показать некоторые результаты:

> extract(f)[["zhat"]]
  [1] 0.16445 0.16445 0.16445 0.16445 0.16445 0.16445
  [7] 0.16445 0.16445 0.16445 0.16445 0.16445 0.16445
 [13] 0.16445 0.16445 0.16445 0.16445 0.16445 0.16445
person MDEWITT    schedule 13.09.2019