# Setup white noise model in brms

**URL:** <https://discourse.mc-stan.org/t/setup-white-noise-model-in-brms/8420>\
**Category:** brms\
**Created:** [April 10, 2019, 3:37pm UTC](https://discourse.mc-stan.org/t/setup-white-noise-model-in-brms/8420 "2019-04-10T15:37:43Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![shizhuoliu](https://avatars.discourse-cdn.com/v4/letter/s/9de053/32.png) [@shizhuoliu](https://discourse.mc-stan.org/u/shizhuoliu)\
**Post date:** [April 10, 2019, 3:37pm UTC](https://discourse.mc-stan.org/t/setup-white-noise-model-in-brms/8420/1 "2019-04-10T15:37:43Z")

</div>

Hi there, I would like to use brms to estimate mean and variance per group. I made it work in stan but would like to use brms to do the same thing. Here is the stan code:

data {  
int\<lower=1\> Ntotal ;  
int\<lower=1\> Ngroup ;  
int\<lower=1\> Nsample ; // for priors  
real y[Ntotal] ;  
int group[Ntotal] ;  
real meanY ;  
real sdY ;  
}  
transformed data {  
real normalSigma ;  
normalSigma = sdY\*10 ;  
}  
parameters {  
real mu[Ngroup] ;  
real\<lower=0\> sigma[Ngroup] ;  
real mean\_mu ;  
real\<lower=0\> sigma\_mu ;  
}  
model {  
// hyper  
mean\_mu ~ normal(meanY, 100);  
sigma\_mu ~ uniform(1, 100) ;  
// priors  
sigma ~ cauchy( sdY , 100 ) ;  
mu ~ normal( mean\_mu, sigma\_mu ) ;  
for (i in 1:Ntotal){  
y[i] ~ normal( mu[group[i]] , sigma[group[i]] ) ;  
}  
}  
generated quantities{  
vector[Ntotal] logLikelihood ; // for model comparison  
vector[Ntotal] y\_post ; // for posterior checking  
vector[Nsample] mean\_mu\_prior ; // for checking priors  
vector[Nsample] sigma\_mu\_prior ;  
vector[Nsample] sigma\_prior ;  
vector[Nsample] mu\_prior ;  
for (i in 1:Ntotal){  
logLikelihood[i] = normal\_lpdf(y[i] | mu[group[i]], sigma[group[i]]) ;  
y\_post[i] = normal\_rng(mu[group[i]], sigma[group[i]]) ;  
}  
for (i in 1:Nsample){  
mean\_mu\_prior[i] = normal\_rng(meanY, 100) ;  
sigma\_mu\_prior[i] = uniform\_rng(1, 100) ;  
sigma\_prior[i] = cauchy\_rng(sdY, 100) ;  
mu\_prior[i] = normal\_rng(mean\_mu\_prior[i], sigma\_mu\_prior[i]) ;  
}  
}

In brms: I have the code:  
fit1 \<- brm(bf(deltaZ ~ Overlap\_ID -1, sigma ~ Overlap\_ID-1 ) , data=residual\_df, family = gaussian(), warmup=1000, iter=5000, chains =4, inits=“random”, cores=4)

Basically, I would like brms to estimate mu[i] and sigma[i] per group (Overlap\_ID). But the estimates of the sigma’s are way too small than what I got from Stan.

Thanks.

---

<div class="post-metadata">

**Author:** ![matti](https://yyz2.discourse-cdn.com/flex030/user_avatar/discourse.mc-stan.org/matti/32/13631_2.png) [@matti](https://discourse.mc-stan.org/u/matti)\
**Post date:** [April 10, 2019, 7:10pm UTC](https://discourse.mc-stan.org/t/setup-white-noise-model-in-brms/8420/2 "2019-04-10T19:10:05Z")

</div>

By default, brms models residual SDs through a log link. So, you can just exp(sigma) for each posterior sample, then summarize.

---

<div class="post-metadata">

**Author:** ![shizhuoliu](https://avatars.discourse-cdn.com/v4/letter/s/9de053/32.png) [@shizhuoliu](https://discourse.mc-stan.org/u/shizhuoliu)\
**Post date:** [April 11, 2019, 12:40pm UTC](https://discourse.mc-stan.org/t/setup-white-noise-model-in-brms/8420/3 "2019-04-11T12:40:47Z")

</div>

Thanks Matti. I figured out also that the estimates of SDs are in log scale in brms.
