*! version 1.0.1 21aug2026

Title

gvar dominant -- the dominant unit / global exogenous model

Syntax

gvar dominant [, options]

options

lags(#) lag order of the dominant block. Default 2.

flags(#) lag order on the feedback variables. Default 1.

case(#) deterministic case, as in gvar estimate. Default 4.

rank(#) cointegrating rank within the dominant block. Default 1.

diff estimate in differences rather than levels.

feedback(varlist) the feedback variables, as unit:variable or plain names.

weights(string) weights for building the feedback aggregates.

trend include a linear trend.

saving(name) save the estimated block under this name.

nosummary suppress the report.

The dominant variables must have been declared with
gvar setup ..., dominant(). Run gvar dominant after
gvar estimate and before
gvar solve.

Description

A global variable -- an oil price, a commodity index -- can be handled two
ways. Attach it to a country block with gendog(), which makes it that
country's endogenous variable and gives it that country's dynamics; or give it
its own block, which is what gvar dominant does. The second is what the
Toolbox calls the dominant unit, and it is the honest choice when the
variable is nobody's domestic variable.

The dominant block is not a unit. N stays the number of country
models, because every per-country table in the package expects a beta, an
alpha and a residual matrix per index. K does grow, so the dominant
variables appear as responses and as shocks in
gvar irf, gvar fevd,
gvar spillover and gvar hd -- which is
the point of modelling them at all.

The two stages

Estimation is in two stages, and the distinction matters because the printed
output of the first is not what feeds the model.

Stage I - the dominant block on its own: a univariate AR(p)
in levels or differences, or a multivariate VECM when there is more than one
dominant variable, giving the cointegrating vector and the loadings.

Stage II - a joint OLS regression per equation, on the block's own
lags and the lagged feedback variables. This is the stage whose
coefficients enter the GVAR.

Stage II always runs, even with no feedback variables. The recovered VARX
form pairs stage I's alpha with stage II's Gamma; the ECM
coefficients that stage I prints are not used in that recovery.

The feedback enters at lags only. That is the zero in the stacked
H0 = [G0, -J0 ; 0, I], and it is what makes the dominant block weakly
exogenous contemporaneously while still responding to the rest of the world
with a delay.

Options

lags(#) and flags(#) are the block's own lag order and the lag
order on the feedback variables. The GVAR's overall lag order becomes
max(maxlag, lags, flags), so raising either can raise the order of the
whole solved system -- gvar solve reports the result.

case(#) is the deterministic specification, numbered as in
gvar estimate.

rank(#) is the cointegrating rank within the dominant block.
gvar solve subtracts it when it works out how many unit
roots the stacked system ought to have, so an overstated rank here shows up
there as a mismatch rather than passing unnoticed.

diff estimates in differences instead of levels
(estimate_VECM_dumodel.m esttype 1 rather than 0).

feedback(varlist) names the variables the dominant block responds to,
given as unit:variable or as plain variable names. With plain names an
aggregate is built across units using weights().

weights(string) supplies the weights for those aggregates. Without it
the weights already attached to the model by
gvar weights are used.

saving(name) stores the estimated block so it can be inspected or
reused.

Remarks

Which to use, gendog() or dominant()? gendog() is right when the
variable genuinely belongs to one economy's block and should share its
dynamics -- US-denominated variables in the US model, for instance.
dominant() is right when the variable is global and belongs to nobody:
it then gets its own dynamics and its own shock, and it feeds back from the
world with a lag rather than being driven by one country contemporaneously.

Verification. The dominant-unit path is checked in the shipped test
suite: the stacked residuals reproduce the levels form to
max |zeta_dominant - levels form| = 1.998e-15, and the link identity
W_i x(t) = y_i holds exactly across all 26 units.

A refuted hypothesis, kept because it looked convincing. The stage-I and
stage-II residuals differ, and the gap was 10:1 constant-to-varying -- the
signature of a trend-origin offset. It is not one: mean gap / a1 comes out
111.6, then -187.9, then -97.4 across the blocks, which kills that
explanation. The residuals differ because the two stages fit different
regressions, and the source never claims the identity.

Examples

Declare the oil price as a dominant unit rather than a US variable, then
estimate the country models and the dominant block:

. use gvar_demo26, clear

. gvar setup y Dp eq ep r lr, unit(country) time(quarter) global(poil pmat pmetal) dominant(poil) spec(gvar_demospec)

. gvar weights using gvar_flows, flow(trade) source(partner) destination(home) year(year) years(2009 2011) type(1) map(gvar_demoagg)

. gvar foreign

. gvar estimate

. gvar dominant, lags(2) flags(1) case(4) rank(1)

. gvar solve

An oil price that responds to world output and world inflation with a
lag:

. gvar dominant, lags(2) flags(1) feedback(y Dp)

A single dominant variable in differences, with no cointegration to
estimate:

. gvar dominant, lags(2) diff rank(0)

Once solved, the dominant variable is available as a shock like any
other:

. gvar irf, shock(poil:poil) horizon(24) graph

Stored results

gvar dominant stores the following in r():

r(theta) the reduced-form lag coefficients

r(omega) the residual covariance of the block

r(a0) the intercept

r(a1) the trend coefficient

r(variables) the dominant variables

r(feedback) the feedback variables

r(nvars) number of dominant variables

r(nfeedback) number of feedback variables

r(lags) the block's lag order

r(flags) the feedback lag order

r(pmax) the lag order the GVAR will take

r(case) the deterministic case

r(rank) the cointegrating rank used

r(diff) 1 if estimated in differences

Source

Toolbox estimate_VECM_dumodel.m, vec2var_du.m,
augmentedregression.m, and the dominant-unit branch of
solve_GVAR.m.

Author

Dr Merwan Roudane

merwanroudane920@gmail.com

https://github.com/merwanroudane