## 8.3 Observation-error only model

We can estimate the effect of the covariates using a process-error only model, an observation-error only model, or a model with both types of error. An observation-error only model is a multivariate regression, and we will start here so you see the relationship of MARSS model to more familiar linear regression models.

In a standard multivariate linear regression, we only have an observation model with independent errors (the state process does not appear in the model): $$$\mathbf{y}_t = \mathbf{a} + \mathbf{D}\mathbf{d}_t + \mathbf{v}_t, \text{ where } \mathbf{v}_t \sim \text{MVN}(0,\mathbf{R}) \tag{8.2}$$$ The elements in $$\mathbf{a}$$ are the intercepts and those in $$\mathbf{D}$$ are the slopes (effects). We have dropped the $$t$$ subscript on $$\mathbf{a}$$ and $$\mathbf{D}$$ because these will be modeled as time-constant. Writing this out for the two plankton and the two covariates we get: $$$\begin{split} \begin{bmatrix} y_{g} \\ y_{bg} \end{bmatrix}_t &= \begin{bmatrix} a_1 \\ a_2 \end{bmatrix} + \begin{bmatrix} \beta_{\mathrm{g,temp}}&\beta_{\mathrm{g,tp}} \\ \beta_{\mathrm{bg,temp}}&\beta_{\mathrm{bg,tp}} \end{bmatrix} \begin{bmatrix} \mathrm{temp} \\ \mathrm{tp} \end{bmatrix}_{t} + \begin{bmatrix} v_{1} \\ v_{2} \end{bmatrix}_t \end{split} \tag{8.3}$$$

Let’s fit this model with MARSS. The $$\mathbf{x}$$ part of the model is irrelevant so we want to fix the parameters in that part of the model. We won’t set $$\mathbf{B}=0$$ or $$\mathbf{Z}=0$$ since that might cause numerical issues for the Kalman filter. Instead we fix them as identity matrices and fix $$\mathbf{x}_0=0$$ so that $$\mathbf{x}_t=0$$ for all $$t$$.

Q <- U <- x0 <- "zero"
B <- Z <- "identity"
d <- covariates
A <- "zero"
D <- "unconstrained"
y <- dat  # to show relationship between dat & the equation
model.list <- list(B = B, U = U, Q = Q, Z = Z, A = A, D = D,
d = d, x0 = x0)
kem <- MARSS(y, model = model.list)
Success! algorithm run for 15 iterations. abstol and log-log tests passed.
Alert: conv.test.slope.tol is 0.5.
Test with smaller values (<0.1) to ensure convergence.

MARSS fit is
Estimation method: kem
Convergence test: conv.test.slope.tol = 0.5, abstol = 0.001
Algorithm ran 15 (=minit) iterations and convergence was reached.
Log-likelihood: -276.4287
AIC: 562.8573   AICc: 563.1351

Estimate
R.diag                 0.706
D.(Greens,Temp)        0.367
D.(Bluegreens,Temp)    0.392
D.(Greens,TP)          0.058
D.(Bluegreens,TP)      0.535
Initial states (x0) defined at t=0

Standard errors have not been calculated.
Use MARSSparamCIs to compute CIs and bias estimates.

We set A="zero" because the data and covariates have been demeaned. Of course, one can do multiple regression in R using, say, lm(), and that would be much, much faster. The EM algorithm is over-kill here, but it is shown so that you see how a standard multivariate linear regression model is written as a MARSS model in matrix form.