Я только начал с байесовского анализа и рстана. Я запускаю следующий действительно простой пример (заимствованный из книги Ричарда Мак-Элиреса «Статистическое переосмысление» - там он использует свою функцию, но я хочу закодировать ее непосредственно в rstan)
Для сигмы я хочу использовать неинформативный априор (как предложено в книге) sigma ~ uniform(0,50)
Однако симуляция сталкивается с проблемами и возвращает сигму (среднее), близкое к 50. Если я использую uniform(0,70)
, то сигма близка к 70.
Но при использовании более широкого априорного sigma ~ uniform(0,500)
все работает отлично.
У меня вопрос, поскольку дисперсия данных составляет около 5, почему предыдущий uniform(0,50)
не работает?
Спасибо
library(rstan)
library(rethinking)
library(dplyr)
data(Howell1)
dat1 <- Howell1
d2 <- dat1[ dat1$age >= 18 , ]
plot( d2$height ~ d2$weight )
lm(d2$height ~ d2$weight) %>% summary
model.stan2 <- '
data{
int <lower=1> N;
real weight_bar;
vector[N] height;
vector[N] weight;
}
parameters{
real alpha;
real beta;
real<lower=0> sigma;
}
model{
vector[N] mu;
// Priors
alpha ~ normal(178, 20);
beta ~ lognormal(0,1);
sigma ~ uniform(0,50);
mu = alpha + beta*(weight - weight_bar);
// Likelihood
height ~ normal( mu, sigma);
}
'
stan_samples2 <- stan(model_code = model.stan2,
data = list(
N= nrow(d2),
height=d2$height,
weight=d2$weight,
weight_bar= mean(d2$weight)
)
)
precis(stan_samples2)