The suite's files: .inp, .out, .pre¶
What each file asserts, which program reads which, and the one trap that will catch you first.
The trap, first¶
There are TWO different .inp formats in this suite. They share an
extension and nothing else — different structure, different readers, not
interchangeable.
| dialect | read by | contains |
|---|---|---|
| univariate | fue, art, drtran/mtram |
a MODEL SPECIFICATION: Box-Cox, differencing, AR/MA operators, fixed-frequency factors, deterministics, the mean — and the data at the end |
| multivariate | drvarma/sima |
a DATA SET: frequency, number of series, names, λ d D, and the observations |
The univariate one describes a model of one series. The multivariate one describes several series and almost nothing about a model. Feeding one to the other's reader fails; it does not silently misread, which is the one mercy.
The multivariate dialect is specified token by token in
drvarma/docs/INP_FORMAT.md and is not repeated here — one source of truth
per format. The rest of this page is the univariate family, because that is the
one with a contract on top of a syntax.
The univariate family: three extensions, three claims¶
This is the suite's central convention, and it is what makes the ladder
climbable. drtran/docs/LADDER_AS_OPTIMISATION.md argues it; this states it.
| file | written by | asserts |
|---|---|---|
.inp |
art, an analyst, drtran -W |
a SPECIFICATION. Parameter values are SEEDS — a starting point, nothing more |
.out |
fue |
the full record of one estimation and its diagnosis — everything the next decision needs |
.pre |
fue |
that same .inp with the estimates as new initial values: an optimum, in re-runnable form |
The cycle is a fixed-point iteration with a structural search around it:
.inp --(fue estimates)--> .pre --(the analyst reformulates)--> .inp --> ...
The three rules that follow¶
1. A .pre that is edited becomes an .inp again. Editing the
specification unmakes the claim that these values are its optimum. This is not
bookkeeping etiquette: it is what stops the outer level mistaking a proposal for
a result.
2. Only the program that performed an estimation may write a .pre. The
file carries no mark of its author, so a fabricated one is indistinguishable
downstream from a certified one — and the ladder climbs by trusting exactly
that. art identifies and writes .inp with every parameter at 0.000000; it
does not estimate and does not claim to.
3. The claim is testable, and this is the load-bearing fact.
Run
fueon a.preand the numbers do not move.
Measured:
| file | max change after re-running fue |
|---|---|
a .pre written by fue |
0.000000 |
the univariate block drtran writes back after a JOINT fit |
13.109261 |
The second is not an arithmetic defect. Those blocks are optimal with the
transfer in the model, and the univariate optimum is by definition fue's
separate estimate, so they cannot be a fixed point of the univariate operator.
That is why drtran writes .inp and not .pre — and why it was a real defect
when it did otherwise.
What a univariate .inp holds¶
In file order. The ** lines are labels for humans; what matters is the order.
frequency 1 (annual), 4 (quarterly), 12 (monthly)
nobs, start date, series name
number of deterministic variables and, per variable, its ω(B)/δ(B) and
which coefficients are free
regular AR operators count, orders, coefficients, free/fixed flags
annual AR operators idem
regular MA operators idem
annual MA operators idem
fixed-frequency AR(2) factors count and frequencies
fixed-frequency MA(2) factors idem ← the MEG / HSM witnesses live here
mean (μ) value and whether it is free
Box-Cox λ, d, D
ifadf freq/2+1 flags: the individual factors of the
annual difference, frequency by frequency
ACF/PACF bands, rescaling factor
the series
Three fields deserve a note because they are where mistakes concentrate:
ifadfis what makes hybrid seasonality expressible: one flag per frequency, so∇∇₄can be written asd=2plus factors at π/2 and π rather than asD=1. Those are the SAME operator —∇∇₄ = (1−B)²(1+B)(1+B²), because the(1−B)inside∇₄adds to the regular difference — and any program comparing two models must compare the polynomial, not the(d, D)pair. That is not pedantry:mtramdecides whether a transfer needs correcting on exactly this comparison.- The rescaling factor multiplies the transformed series. It exists so the variances land in O(10), which is the range the optimiser's finite-difference step can work in. Two series compared across models must share it.
- λ, d, D describe how to make the data stationary — the data itself goes in
raw. Do not pre-difference. Every program in the suite applies the operator
itself, and a pre-differenced series with
d=1declared is differenced twice.
Which program reads which¶
art reads data (CSV/XLSX) writes .inp (specification, seeds at 0)
fue reads .inp writes .out + .pre
mtram reads .pre (or .inp) writes .inp (after a joint fit)
sima reads its own .inp writes reports
mtram accepting an .inp is not a tolerated edge case: by rule 1, an .inp
is what a reformulated .pre has become, so a specification is the normal input
after any revision. It re-estimates on the way in, so the seeds are only seeds —
and it reports whether what it was handed was an optimum or a specification,
which is a question the suite could not answer before and neither answer is a
problem. Being unable to tell them apart was.