I have a parameter which is a matrix[3,3] m. Is there a mechanism for forcing m[0,0] = 0.0, and let the rest be solved?

I have a parameter

Donâ€™t treat m as a parameter.

- Declare and initialise the matrix
`m`

in the`transformed data {}`

block or - In your model section, just declare and initialise a matrix
`m`

.

I want to make sure I explained my requirement properly. I want to fix only the diagonal elements of the 3 x 3 matrix. The other 6 elements need to be derived by the solver. If I declare in the transformed data block, will the solver fill in the values? Same question if I declare in the model block.

I tried declaring and initializing in the model block.

```
real<lower=0,upper=6> m[S, S];
for (s in 1:S)
m[S, S] = 0.0;
```

I get

variable â€śrealâ€ť does not exist.

declare in parameter block and initialize in model block fails as well.

Yes. The mechanism is reading section 11.2 of the Stan Userâ€™s Manual.

Sorry, I did not see that you only wanted to fix part of a matrix, but that is also easy enough.

Do be a bit careful, â€¦

I get

variable â€śrealâ€ť does not exist.

That is a syntax error. You have some lines above the â€śrealâ€ť, so the parser decides that you are out of the variable declaration part of the model block.

If you move that â€śrealâ€ť a bit higher, you will get rid of the syntax error. It is a different issue to your question about fixing values in a matrix.

So whatâ€™s the answer to fixing part of the matrix? You just said itâ€™s easy enough. Thatâ€™s the only thing I care about.

Section 11.2 covers truncated data. There are only examples for real. How would you truncate selected elements of a matrix?

I was referring to section 11.2 of the current Stan Userâ€™s Manual.

ok, I was one version behind. I think its clear. I will test out.

I tested this out

transformed parameters {

real nondiag_xi[N, S, S];

nondiag_xi = xi;

for (s in 1:S)

for (n in 1:N)

nondiag_xi[n, S, S] = 0.0;

}

but only the nondiag_xi[n, 3,3] ended up as 0.0. The other two positions [1,1] and [2,2] still copied over from xi.

That would result in a parser error unless `xi`

is declared as

```
parameters {
real xi[N, S, S];
}
```

and, if so, that is not going to accomplish what you want to do. As to why it only put a zero into the 3, 3 element of `nondiag_xi`

, that is because Stan is a case-sensitive language.

yes, declaration of xi was correct, and no compilation error. good point about s vs. S.