предыдущий диапазон униформы (0,50) против униформы (0,500) - PullRequest
2 голосов
/ 29 марта 2019

Я только начал с байесовского анализа и рстана. Я запускаю следующий действительно простой пример (заимствованный из книги Ричарда Мак-Элиреса «Статистическое переосмысление» - там он использует свою функцию, но я хочу закодировать ее непосредственно в 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)
...