---
title: "Equation Syntax Reference"
output: rmarkdown::html_vignette
vignette: >
  %\VignetteIndexEntry{equations}
  %\VignetteEngine{knitr::rmarkdown}
  %\VignetteEncoding{UTF-8}
---

# Overview

This vignette describes the syntax for specifying stochastic and identity equations, priors, and lags in the `koma` package.

## 1. Stochastic Equations

Stochastic (regression) equations model a dependent variable
with an error term. An intercept is included by default.

```r
# With default intercept:
consumption ~ gdp + consumption.L(1)

# Without intercept:
consumption ~ gdp + consumption.L(1) - 1

# Explicit intercept:
consumption ~ 1 + gdp + consumption.L(1)
```
## 2. Identity Equations
Identity equations enforce exact relationships.

```r
# Identity equations with explicitly defined weights:
# To aggregate the component growth rates into a growth rate for GDP we need to define weights.
# This is done by specifying the weights in the equation. 
# You can, e.g. use the nominal level weights of the last observed period.
gdp == 0.7*consumption + 0.2*investment + 0.2*government - 0.1*net_exports 
```

## 3. Injected Parameters

```r
# Ratios computed from data:
gdp == (nom_cons/nom_gdp) * cons
```

## 4. Lag Notation
Lags are specified with `L()` or `lag()` notation. Ranges and combinations are supported.

```r
# Single lag:
x.L(1)
lag(x, 1)

# Range of lags:
x.L(1:4)
lag(x, 1:4)

# Mix range and specific lags:
x.L(1:3, 5)
```
## 5. Priors
There are two kinds of priors in `koma` equations:

- coefficient priors, written in front of a term
- the error-term prior, written at the end of the equation

Coefficient priors are written in front of the term they belong to:

```r
{mean, variance} variable
```

For example:

```r
consumption ~ {0.4, 0.1} gdp + consumption.L(1)
```

This sets a prior with mean `0.4` and variance `0.1` on the coefficient of
`gdp`.

You can use priors on:

- the intercept, written as `1` or `constant`
- exogenous variables
- lagged variables
- contemporaneous endogenous variables

```r
consumption ~
  {0, 1000} 1 +
  {0.4, 0.1} gdp +
  {0.9, 10} consumption.L(1) +
  {0.2, 0.5} service
```

The error-term prior is different. It is written as a final prior with no
variable name:

```r
consumption ~ gdp + consumption.L(1) + {3, 0.001}
```

In the error-term prior, the two values specify:

- degrees of freedom
- scale

Some valid examples for priors are:

```r
# Prior on the intercept
consumption ~ {0, 1000} 1 + gdp

# Prior on a lagged term
consumption ~ gdp + {0.9, 10} consumption.L(1)

# Prior on an endogenous regressor
consumption ~ {0.2, 0.5} service + gdp

# Error-term prior: {df, scale}
consumption ~ gdp + consumption.L(1) + {3, 0.001}
```

Rules:

- Priors are only supported in stochastic equations.
- Coefficient priors have the form `{mean, variance} variable`.
- The error-term prior has the form `{df, scale}` and appears without a variable name.
- The dependent variable cannot have a prior.
- The error-term prior must be the last prior in the equation.

## 6. Equation-specific Tau

You can override the default tau in your `gibbs_settings` for a single equation by appending `[tau = value]` after its equation. 
If the acceptance rate falls outside 30%-60 %, a warning is emitted.

```r
"consumption ~ constant + gdp + consumption.L(1) + consumption.L(2) [tau = 1.2]"
```
