Я пытаюсь выучить Стэна и решаю несколько заведомо простых задач, чтобы быстро освоиться. Я очень сильно застрял на уровне 1, пытаясь запустить простую двумерную регрессию.
У меня есть данные следующего формата
stan_data <- list("y"=y,
"year"=year,
"N_obs" = N_obs)
Полные данные вставлены в конец этого поста.
Во всяком случае, мой стандартный код для двумерной регрессии выглядит так.
lm <- "data {
int<lower=1> N_obs;
real year[N_obs];
real y[N_obs];
}
parameters {
real alpha;
real beta;
real<lower=0> sigma;
}
transformed parameters{
}
model {
vector[N_obs] mu_hat;
alpha ~ normal(0, 100);
beta ~ normal(0, 100);
sigma ~ uniform(0, 100);
for(i in 1:N_obs){
mu_hat[i] <- alpha + beta * year[i];
y[i] ~ normal(mu_hat[i], sigma);
}
}"
write(lm, file="lm.stan")
lm.fit0 <- stan(file="lm.stan",
data=stan_data,
chains=1,
iter=5000)
Во-первых, у меня вопрос. Почему у нас есть инструкция в блоке модели vector[N_obs] mu_hat;
(вместо real mu_hat[N_obs];
в блоке преобразованных параметров)? Немного погуглив, кажется, что это то, что вам нужно сделать.
Во-вторых (что более серьезно), когда я пытаюсь запустить код, я получаю следующую ошибку:
TRANSLATING MODEL 'lm' FROM Stan CODE TO C++ CODE NOW.
COMPILING THE C++ CODE FOR MODEL 'lm' NOW.
SAMPLING FOR MODEL 'lm' NOW (CHAIN 1).
Error : Error in function stan::prob::normal_log(d): Random variable is nan, but must not be nan!
In addition: Warning message:
In storage.mode(x) <- "integer" : NAs introduced by coercion
error occurred during calling the sampler; sampling not done
Как обычно, любая помощь приветствуется.
Фактически данные выглядят так:
См. https://groups.google.com/d/msg/stan-users/fsM8GPG4cpM/YVedcWYcmW8J
$year
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4
4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4
4 4 4 4 4 4 4 4 4 4 4 4
$N_obs
284