# AddObs - Details

####

In this document we show how to apply functions to the left-hand side of an observation equation.

    # Create model object
    obj = ctsmTMB$new()

    # Add system equations
    obj$addSystem(
      dx ~ theta * (mu-x) * dt + sigma_x*dw
    )

## Adding observation equations

Let’s assume that our observations \(y_{t}\) are log-normally distributed conditioned on \(x_{t}\) i.e. \[ \log y_{t_{i}} \sim N(x_{t_{i}},\sigma_{y}^{2}) \] It is sufficient for the user to provide the data column `y` in the provided `data.frame` to e.g. `estimate` or `predict` by adding the following observation equation

    obj$addObs(
      log(y) ~ x, obsnames = "log_y"
    )

Note that these kind of observation equations, where the left-hand side is a function of one (or more) observed variables must be explicitly named using the `obsnames` argument.

## Adding observation variances

The names given with `obsnames` are important because they are needed to specify the observation variance. As an example the code below does not work, because the observation was named `log_y`

    obj$setVariance(
      y ~ sigma_y^2
    )

    ## Error in check_observation_variance_eqs(form, self, private): Please add an observation equation for y before specifying its variance

So the correct way to add the observation variance is this:

    obj$setVariance(
      log_y ~ sigma_y^2
    )

## Multiple observation equations

You must supply multiple `obsnames` if you are supplying multiple observation equations, although the name will only be used if the left-hand side is not just a single variable i.e.

    obj$addObs(
      log(y) ~ x,
      y ~ x,
      y^2+z^3 ~ x,
      obsnames = c("log_y", NA, "y2_plus_z3")
    )