Evaluating tensor effect at specific predictor values in brms, ignoring all other effects

• Operating System: Windows 10
• brms Version: 2.13.0

I’ve fit a distributional model of the following form:

``````fit = brm(
bf(response ~ A + t2(X, Y) + (1|G/F),
response ~ A + t2(X, Y) + (1|G/F)),
data = model_data,
family = gaussian())
``````

`A` is a factor with two levels, while `X` and `Y` are Cartesian coordinates that describe location within a circle.

I would like to evaluate the tensor term `t2()` only (i.e., with all other effects set to zero) at the `X` and `Y` values used to fit the model, but have not been successful in using either `conditional_smooths()` or `conditional_effects()`, even when trying to pass the `X` and `Y` data into int_conditions. Using `conditional_smooths()` results in a finely evaluated mesh across the entire marginal domains of the predictors (so I get a rectangular surface rather than circular), whereas the latter seems to only evaluate the predictor `X` and `Y` coordinates conditioning on a specific value of `Y` or `X`, respectively.

Using `fitted()` with the newdata argument set to the X, Y values gives the desired result for the expected predicted response, but in this case I’m interested in purely the effect of the tensor. Is there a way of using `fitted()` such that all other model terms are set to zero / ignored?

Thank you!

Sorry for taking so long respond.

I don’t think you can do this easily in the current version. You can ignore the varying intercept `(1|G/F)` via the `re_formula` argument, but you can’t similarly get rid of the `A` fixed effect and the intercept.

You can however use `posterior_samples` to extract the tensor parameters and then compute the tensor yourself.

Alternatively, what should work would be to use `fitted` or `posterior_linpred` to get the predictor without the varying intercept, then use `posterior_samples` to obtain the samples for the fixed effect and intercept and then subtract `intercept_samples + b_A_samples * A` from the predictor, leaving you with just the `t2` term… This is a bit hacky, but if evaluating the tensor yourself is out of the question, it could help.

Does that make sense?

Best of luck with your model!

Thanks, @martinmodrak, we had the same thought - that’s exactly what I ended up doing :).

At some point i will replace the re_formula argument with a more general one that allows to select terms much more flexibly.