?? difonzo.m
字號:
function res = difonzo(Y,x,z,ta,s,type,f);
% PURPOSE: Multivariate temporal disaggregation with transversal constraint
% ----------------------------------------------------------------------------------
% SYNTAX: res = difonzo(Y,x,z,ta,s,type,f);
% ----------------------------------------------------------------------------------
% OUTPUT: res: a structure
% res.meth = 'Multivariate di Fonzo';
% res.N = Number of low frequency data
% res.n = Number of high frequency data
% res.pred = Number of extrapolations
% res.ta = Type of disaggregation
% res.s = Frequency conversion
% res.type = Model for high frequency innovations
% res.beta = Model parameters
% res.y = High frequency estimate
% res.d_y = High frequency estimate: std. deviation
% res.et = Elapsed time
% ----------------------------------------------------------------------------------
% INPUT: Y: NxM ---> M series of low frequency data with N observations
% x: nxm ---> m series of high frequency data with n observations, m>=M see (*)
% z: nzx1 ---> high frequency transversal constraint with nz obs.
% ta: type of disaggregation
% ta=1 ---> sum (flow)
% ta=2 ---> average (index)
% ta=3 ---> last element (stock) ---> interpolation
% ta=4 ---> first element (stock) ---> interpolation
% s: number of high frequency data points for each low frequency data points
% s= 4 ---> annual to quarterly
% s=12 ---> annual to monthly
% s= 3 ---> quarterly to monthly
% type: model for the high frequency innvations
% type=0 ---> multivariate white noise
% type=1 ---> multivariate random walk
% (*) Optional:
% f: 1xM ---> Set the number of high frequency indicators linked to
% each low frequency variable. If f is explicitly included,
% the high frequency indicators should be placed in
% consecutive columns
% ----------------------------------------------------------------------------------
% NOTE: Extrapolation is automatically performed when n>sN.
% If n=nz>sN restricted extrapolation is applied.
% Finally, if n>nz>sN extrapolation is perfomed in constrained
% form in the first nz-sN observatons and in free form in
% the last n-nz observations.
% ----------------------------------------------------------------------------------
% LIBRARY: aggreg, dif, vec, desvec
% ----------------------------------------------------------------------------------
% SEE ALSO: denton, mtd_print, mtd_plot
% ----------------------------------------------------------------------------------
% REFERENCE: Di Fonzo, T.(1990)"The estimation of M disaggregate time
% series when contemporaneous and temporal aggregates are known", Review
% of Economics and Statistics, vol. 72, n. 1, p. 178-182.
% written by:
% Enrique M. Quilis
% Instituto Nacional de Estadistica
% Paseo de la Castellana, 183
% 28046 - Madrid (SPAIN)
% ----------------------------------------------------------------------------------
t0 = clock;
%--------------------------------------------------------
% Preliminary checking
[N,M] = size(Y);
[n,m] = size(x);
[nz,mz] = size(z);
if ((M > m) | (n < s*N) | (mz ~= 1) | (nz > n) | (nz < s*N))
error (' *** INCORRECT DIMENSIONS *** ');
else
% Number of extrapolations
h1 = n - nz;
h2 = n - s*N;
clear nz mz;
end
%--------------------------------------------------------
% Checking of "ta"
if (ta < 1) | (ta > 4)
error (' *** INCORRECT TA OPTION *** ');
end
%--------------------------------------------------------
% Checking of "s"
if (s ~= 3) & (s ~= 4) & (s ~= 12)
error (' *** INCORRECT FREQUENCY CONVERSION (s) *** ');
end
%--------------------------------------------------------
% Checking of "type"
if (type < 0) | (type > 1)
error (' *** INCORRECT TYPE OPTION *** ');
end
%--------------------------------------------------------
% Checking (and definition) of vector f
if (nargin == 6)
f = ones(1,M);
end
if ( (f < 1) | (sum(f) ~= m) | (length(f) ~= M))
error (' *** IMPROPER ASSIGNMENT OF INDICATORS IN f VECTOR *** ');
end
%--------------------------------------------------------
% **** CONSTRAINT MATRICES ***
%--------------------------------------------------------
% Required:
% H1 ---> transversal
% H2 ---> longitudinal
%
%---------------------------------------------------------------
% Generate H1: (n-h1) x nM
H1 = kron(ones(1,M),[eye(n-h1) zeros(n-h1,h1)]);
%---------------------------------------------------------------
% Generate H2: NM x nM.
%
% Generation of aggregation matrix C
C = aggreg(ta,N,s);
C = [C zeros(N,h2)];
H2 = kron(eye(M),C);
%---------------------------------------------------------------
% Generate H: (n-h1+NM) x nM.
%
% H = [ H1
% H2 ]
H = [H1
H2];
%--------------------------------------------------------
% **** PREPARING DATA MATRICES ***
%--------------------------------------------------------
% Required:
% x_diag
% Y_big, Y_e
% X_diag, X_e
%--------------------------------------------------------
% Generate x_diag: nM x M+m
%
% It is a diagonal matrix formed by the high frequency
% indicators, including a vector of ones for the intercept
%
% x_diag = [ x1 0 0 ... 0
% 0 x2 0 ... 0
% 0 0 x3 ... 0
% ..............
% 0 0 0 ... xM ]
%
% It is made by means of a recursion.
ac(1)=f(1); % Initialization of the recursion
x_diag = [ones(n,1) x(:,1:ac(1))];
j=2;
while (j <= M)
xaux = [ones(n,1) x(:,ac(j-1)+1:ac(j-1)+f(j))];
[a2,b2] = size(xaux);
[a1,b1] = size(x_diag);
x_diag = [ x_diag zeros(a1,b2)
zeros(a2,b1) xaux ];
ac(j) = ac(j-1) + f(j);
j = j + 1;
end
clear xaux;
%--------------------------------------------------------
% Generate X_diag: NM x M+m
%
% Low frequency analog of x_diag. It is the result of
% applying the temporal aggregator H2 to x_diag.
X_diag = H2 * x_diag;
%--------------------------------------------------------
% Generate X_e: (n-h1+NM) x M+m
%
%
% It is the result of applying the complete aggregator H
% (temporal as well as transversal).
% Lower part of X_e is X_diag.
X_e = H * x_diag;
%--------------------------------------------------------
% Generate Y_big: NM x 1
%
% It is column vector containing all the observations on the
% low frequency series according to: Y_big = [Y1 Y2 ... YM]'
% Formally: Y_big = vec(Y)
Y_big = vec(Y);
%--------------------------------------------------------
% Generate Y_e: (n-h1+NM) x 1
%
% It is column vector containing the transversal constraint
% and all the observations on the low frequency series
% according to: Y_e = [ z Y1 Y2 ... YM]' = [z Y_big]'
Y_e = [ z
Y_big];
%--------------------------------------------------------
% **** PRELIMINARY ESTIMATION OF SIGMA ***
%--------------------------------------------------------
% The method of di Fonzo requires the previous estimation of VCV
% matrix SIGMA for the (implied) low frequency model. This
% preliminary estimation is performed by means of estimating, equation
% by equation, the model. Formally, this is equivalent to estimate an
% unrelated SURE model. Computationally, this is also the applied procedure.
BETA = (X_diag' * X_diag) \ (X_diag' * Y_big); % OLS estimator
U_big = Y_big - X_diag * BETA; % Residuals in vec format
% Residuals (columnwise) U: NxM
U = desvec(U_big,M);
% Preliminary estimation of SIGMA
SIGMA = cov(U,1);
%--------------------------------------------------------
% **** APPLYING DI FONZO PROCEDURE ***
%--------------------------------------------------------
%--------------------------------------------------------
% High frequency VCV matrix v: nM x nM
switch type
case 0 % White noise
v = kron(SIGMA,eye(n));
case 1 % Random walk, with U(0)=0
D = dif(1,n);
DDi = inv(D'*D);
v = kron(SIGMA,DDi);
end;
%--------------------------------------------------------
% Low frequency VCV matrix V: (n-h1+NM) x (n-h1+NM)
% and its generalized inverse
V = H * v * H';
Vi = pinv(V); % Moore-Penrose generalized inverse
%--------------------------------------------------------
% Generation of distribution filter L: nM x (n-h1+NM)
L = v * H' * Vi;
%--------------------------------------------------------
% GLS estimation of beta in a SURE context
beta = (X_e' * Vi * X_e) \ (X_e' * Vi * Y_e);
U_e = Y_e - X_e * beta;
%--------------------------------------------------------
% Estimation of high frequency series
y_big = x_diag * beta + L * U_e;
% Series y columnwise y: nxM
y = desvec(y_big,M);
%--------------------------------------------------------
% VCV matrix of estimations y: nM x nM
sigma_y = (eye(n*M) - L*H)*v + ...
(x_diag - L*X_e)*inv(X_e'*Vi*X_e)*(x_diag - L*X_e)';
% Vector format of std. dev.
d_y_big = sqrt(diag(sigma_y));
% Std. dev. series in column format dt_y: n x M
d_y = desvec(d_y_big,M);
% -----------------------------------------------------------------------
% Loading the structure
% -----------------------------------------------------------------------
% Basic parameters
res.meth = 'Multivariate di Fonzo';
res.N = N;
res.n = n;
res.pred = h2;
res.ta= ta;
res.s = s;
res.type = type;
% -----------------------------------------------------------------------
% Parameters
res.beta=beta;
% -----------------------------------------------------------------------
% Series
res.y = y;
res.d_y = d_y;
% -----------------------------------------------------------------------
% Elapsed time
res.et = etime(clock,t0);
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -