# Checking my setup on multivariate nonlinear model using brms

**URL:** <https://discourse.mc-stan.org/t/checking-my-setup-on-multivariate-nonlinear-model-using-brms/14193>\
**Category:** brms\
**Created:** [April 8, 2020, 2:54pm UTC](https://discourse.mc-stan.org/t/checking-my-setup-on-multivariate-nonlinear-model-using-brms/14193 "2020-04-08T14:54:37Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![oluwaseun](https://yyz2.discourse-cdn.com/flex030/user_avatar/discourse.mc-stan.org/oluwaseun/32/7056_2.png) [@oluwaseun](https://discourse.mc-stan.org/u/oluwaseun)\
**Post date:** [April 8, 2020, 2:54pm UTC](https://discourse.mc-stan.org/t/checking-my-setup-on-multivariate-nonlinear-model-using-brms/14193/1 "2020-04-08T14:54:37Z")

</div>

Hi all,

I have this multivariate nonlinear model that I want to set up on brms. Can you please check my setup on brms and correct me? I think I am not getting the setup.

**Here is my data structure:**

Let n = 48 test units, i = 1,…,n, J = 3 wavelenghts(DAMAGE\_NUM1250, DAMAGE\_NUM1510, DAMAGE\_NUM2925), j = 1,…,J,  
p=3 covariates(Uv, Rh,Temp), x\_i is covariate for units i, **x** \_i = (x\_i1,…x\_ip), k = 1,…, m\_i, where m\_i is the total number of measured time points for units i. We also have time t\_ik (at unit i and k).

My model is this:

```
y_ijk = g_ij(t_ik, x_i, w_ij) + e_ijk

e_ijk ~ N(0, r_ j)

w_i ~ MVN(0,R), where R is J by J (3 by 3) dimensional variance-covariance matrix for the random effects on J.

w_i = (w_i1,....w_ij)', w_i is a vector of the random effecs associated with unit i for J degradation.

g_ij(t_ik, x_i, w_ij) = (k_ j*exp⁡(w_ij))/(1+exp⁡(-(log⁡(t_ik - u_ij ( **x** _i))/γ_ j )	
	
 u_ij ( **x** _i) = u_ j + β'_ j * **x** _i

```

This is my setup on brms:

```
f1 = y ~ (k*exp(w)) / (1 + exp(-(log(t)-(u +(β1*x1+β2*x2+β3*x3)))/ γ))

```

```
prior_11 = c(set_prior("normal(0, 1)",nlpar = "β1", coef = "DAMAGE_NUM1250"),
set_prior("normal(0, 1)",nlpar = "β1", coef = "DAMAGE_NUM1510"),
set_prior("normal(0, 1)",nlpar = "β1", coef = "DAMAGE_NUM2925"),
set_prior("normal(0, 1)", nlpar = "β2", coef = "DAMAGE_NUM1250"),
set_prior("normal(0, 1)", nlpar = "β2", coef = "DAMAGE_NUM1510"),
set_prior("normal(0, 1)", nlpar = "β2", coef = "DAMAGE_NUM2925"),
set_prior("normal(0, 1)", nlpar = "β3",coef = "DAMAGE_NUM1250"),
set_prior("normal(0, 1)", nlpar = "β3",coef = "DAMAGE_NUM1510"),
set_prior("normal(0, 1)", nlpar = "β3",coef = "DAMAGE_NUM2925"),
set_prior("normal(0, 1)", nlpar = "k", coef = "DAMAGE_NUM1250"),
set_prior("normal(0, 1)", nlpar = "k", coef = "DAMAGE_NUM1510"),
set_prior("normal(0, 1)", nlpar = "k", coef = "DAMAGE_NUM2925"),
set_prior("normal(0, 1)", nlpar = "u", coef = "DAMAGE_NUM2925"),
set_prior("normal(0, 1)", nlpar = "u", coef = "DAMAGE_NUM1250"),
set_prior("normal(0, 1)", nlpar = "u", coef = "DAMAGE_NUM1510"),
set_prior("normal(0, 1)", nlpar = "γ",coef = "DAMAGE_NUM1250"),
set_prior("normal(0, 1)", nlpar = "γ",coef = "DAMAGE_NUM1510"),
set_prior("normal(0, 1)", nlpar = "γ",coef = "DAMAGE_NUM2925"),
set_prior("normal(0, 0.002)" , class = "sd",group="SPEC_NUM", nlpar = "w",coef = "DAMAGE_NUM1250"),
set_prior("normal(0, 0.001)" , class = "sd",group="SPEC_NUM", nlpar = "w",coef = "DAMAGE_NUM1510"),
set_prior("normal(0, 0.006)" , class = "sd",group="SPEC_NUM", nlpar = "w",coef = "DAMAGE_NUM2925"),
set_prior("lkj(1)", class ="cor"))

```

```
form = bf(f1,nl = TRUE)+list(k~0+DAMAGE_NUM, γ~0+DAMAGE_NUM, u~0+DAMAGE_NUM, w~0+DAMAGE_NUM|SPEC_NUM, β1~0+DAMAGE_NUM,β2~0+DAMAGE_NUM,β3~0+DAMAGE_NUM,sigma~0+DAMAGE_NUM)
n2_b <- brm(form,data = rdat,prior = prior_11,chains=1,iter=5000, warmup=2000, control = list(adapt_delta = 0.999999999))

```

I used SPEC\_NUM (48 levels) to serve as my “n”.

**Note** : k must be negative, u\_j and γ\_j must be positive.

Thank you all.

Please also provide the following information in addition to your question:

- Operating System:
- brms Version:

---

<div class="post-metadata">

**Author:** ![Ara\_Winter](https://yyz2.discourse-cdn.com/flex030/user_avatar/discourse.mc-stan.org/ara_winter/32/4284_2.png) [@Ara\_Winter](https://discourse.mc-stan.org/u/Ara_Winter)\
**Post date:** [April 8, 2020, 6:06pm UTC](https://discourse.mc-stan.org/t/checking-my-setup-on-multivariate-nonlinear-model-using-brms/14193/2 "2020-04-08T18:06:26Z")

</div>

I made some edits so your code is easier to read. It’s best if you can use the ``` to enclose chunks of code.

---

<div class="post-metadata">

**Author:** ![oluwaseun](https://yyz2.discourse-cdn.com/flex030/user_avatar/discourse.mc-stan.org/oluwaseun/32/7056_2.png) [@oluwaseun](https://discourse.mc-stan.org/u/oluwaseun)\
**Post date:** [April 10, 2020, 4:11am UTC](https://discourse.mc-stan.org/t/checking-my-setup-on-multivariate-nonlinear-model-using-brms/14193/3 "2020-04-10T04:11:24Z")

</div>

Thank you.

Can anyone help please?

---

<div class="post-metadata">

**Author:** ![paul.buerkner](https://yyz2.discourse-cdn.com/flex030/user_avatar/discourse.mc-stan.org/paul.buerkner/32/3303_2.png) [@paul.buerkner](https://discourse.mc-stan.org/u/paul.buerkner)\
**Post date:** [April 18, 2020, 10:30am UTC](https://discourse.mc-stan.org/t/checking-my-setup-on-multivariate-nonlinear-model-using-brms/14193/4 "2020-04-18T10:30:16Z")

</div>

The question might be a little too specific for a confident answer of mine but your model looks ok to me. You could simplify it by using a linear formula for ` **x** _i` as explaind in the brms doc and brms\_nonlinear vignette instead of manually writing out \beta\_1\*x\_i … manually.

---

<div class="post-metadata">

**Author:** ![oluwaseun](https://yyz2.discourse-cdn.com/flex030/user_avatar/discourse.mc-stan.org/oluwaseun/32/7056_2.png) [@oluwaseun](https://discourse.mc-stan.org/u/oluwaseun)\
**Post date:** [April 18, 2020, 6:08pm UTC](https://discourse.mc-stan.org/t/checking-my-setup-on-multivariate-nonlinear-model-using-brms/14193/5 "2020-04-18T18:08:00Z")

</div>

Okay. I will try that.

Thank you.
