# Warning: The parameter ... has 2 priors

**URL:** <https://discourse.mc-stan.org/t/warning-the-parameter-has-2-priors/26574>\
**Category:** Developers\
**Created:** [February 27, 2022, 12:47am UTC](https://discourse.mc-stan.org/t/warning-the-parameter-has-2-priors/26574 "2022-02-27T00:47:15Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![cpbl](https://yyz2.discourse-cdn.com/flex030/user_avatar/discourse.mc-stan.org/cpbl/32/7177_2.png) [@cpbl](https://discourse.mc-stan.org/u/cpbl)\
**Post date:** [February 27, 2022, 12:47am UTC](https://discourse.mc-stan.org/t/warning-the-parameter-has-2-priors/26574/1 "2022-02-27T00:47:15Z")

</div>

I get the error “Warning: The parameter betaN has 2 priors” when using cmdstan or pystan3, from:

```nohighlight

 parameters {   
   vector[NxN] betaN;
...
}

...

model {
...

betaN[1] ~ normal(0, 2);
for (i in 2:NxN) 
     betaN[i] ~ normal(0,1);
}

```

The message goes away if I loop over 1:NxN and remove the first prior line.  
Should I ignore the warning? Is it a mistake?

Thanks!

---

<div class="post-metadata">

**Author:** ![jtimonen](https://yyz2.discourse-cdn.com/flex030/user_avatar/discourse.mc-stan.org/jtimonen/32/9034_2.png) [@jtimonen](https://discourse.mc-stan.org/u/jtimonen)\
**Post date:** [February 27, 2022, 2:58pm UTC](https://discourse.mc-stan.org/t/warning-the-parameter-has-2-priors/26574/2 "2022-02-27T14:58:59Z")

</div>

Looks like a bug. What if you change to target+= normal\_lpdf(betaN[i], 0, 1)?

---

<div class="post-metadata">

**Author:** ![Bob\_Carpenter](https://yyz2.discourse-cdn.com/flex030/user_avatar/discourse.mc-stan.org/bob_carpenter/32/9230_2.png) [@Bob\_Carpenter](https://discourse.mc-stan.org/u/Bob_Carpenter)\
**Post date:** [March 9, 2022, 9:33pm UTC](https://discourse.mc-stan.org/t/warning-the-parameter-has-2-priors/26574/3 "2022-03-09T21:33:14Z")

</div>

> [@jtimonen](#):
>
> Looks like a bug.

It’s more that we know our crude warnings can produce false positives. Here it’s confused that betaN shows up on both sides of a sampling statement. But we don’t have enough power statically to tell that the loop is over different variables because that’s a technically undecidable problem because the range for `i` here can be anything.

---

<div class="post-metadata">

**Author:** ![jsocolar](https://yyz2.discourse-cdn.com/flex030/user_avatar/discourse.mc-stan.org/jsocolar/32/2486_2.png) [@jsocolar](https://discourse.mc-stan.org/u/jsocolar)\
**Post date:** [March 10, 2022, 2:32am UTC](https://discourse.mc-stan.org/t/warning-the-parameter-has-2-priors/26574/4 "2022-03-10T02:32:51Z")

</div>

If you don’t want to see the warning (even in pedantic mode), you can do

```stan
data {
   int<lower=2> N;
}

parameters {   
   real betaN_1;
   vector[N-1] betaN_trailing;
}

transformed parameters {
  vector[N] betaN = append_row(betaN_1, betaN_trailing);
}

model {
   betaN_1 ~ normal(0, 2);
   betaN_trailing ~ std_normal();
}

```

---

<div class="post-metadata">

**Author:** ![Bob\_Carpenter](https://yyz2.discourse-cdn.com/flex030/user_avatar/discourse.mc-stan.org/bob_carpenter/32/9230_2.png) [@Bob\_Carpenter](https://discourse.mc-stan.org/u/Bob_Carpenter)\
**Post date:** [March 28, 2022, 11:07pm UTC](https://discourse.mc-stan.org/t/warning-the-parameter-has-2-priors/26574/5 "2022-03-28T23:07:31Z")

</div>

Nice refactoring, @jsocolar.

You could also define `betaN` as a local variable in the model block to save on I/O.
