Added integration tests (trend component models).

time-shift
Stéphane Adjemian (Charybdis) 2019-03-29 17:56:06 +01:00
parent 5a519b812f
commit bb0660d506
Signed by untrusted user who does not match committer: stepan
GPG Key ID: A6D44CB9C64CE77B
3 changed files with 192 additions and 0 deletions

View File

@ -387,6 +387,8 @@ ECB_MODFILES = \
trend-component-and-var-models/tcm8.mod \
trend-component-and-var-models/tcm9.mod \
trend-component-and-var-models/tcm10.mod \
trend-component-and-var-models/tcm11.mod \
trend-component-and-var-models/tcm12.mod \
trend-component-and-var-models/legacy/vm1.mod \
trend-component-and-var-models/legacy/vm2.mod \
trend-component-and-var-models/legacy/vm3.mod \

View File

@ -0,0 +1,95 @@
var y1 y2 y3 y4 y5;
varexo e1 e2 e3 e4 e5;
parameters A111 A112
A121 A122
A211 A212
A221 A222
A311 A312
A321 A322
B11 B12 B21 B22 lr;
A1 = randn(2);
A2 = randn(2);
A3 = randn(2);
A111 = A1(1,1);
A112 = A1(1,2);
A121 = A1(2,1);
A122 = A1(2,2);
A211 = A2(1,1);
A212 = A2(1,2);
A221 = A2(2,1);
A222 = A2(2,2);
A311 = A3(1,1);
A312 = A3(1,2);
A321 = A3(2,1);
A322 = A3(2,2);
B = rand(2);
B(1,1) = -B(1,1);
B(2,2) = -B(2,2);
B11 = B(1,1);
B12 = B(1,2);
B21 = B(2,1);
B22 = B(2,2);
lr = .1;
Bstar = [B11, B12, -lr*B11; B21, B22, -lr*B21];
trend_component_model(model_name=toto, eqtags=['eq:y1', 'eq:y2', 'eq:y3', 'eq:y4', 'eq:y5'], targets=['eq:y3', 'eq:y4', 'eq:y5']);
model;
[name='eq:y1']
diff(y1) = B11*(y1(-1)-y3(-1)+lr*y5(-1)) + B12*(y2(-1)-y4(-1)) +
A111*diff(y1(-1)) + A112*diff(y2(-1)) +
A211*diff(y1(-2)) + A212*diff(y2(-2)) +
A311*diff(y1(-3)) + A312*diff(y2(-3)) + e1;
[name='eq:y2']
diff(y2) = B21*(y1(-1)-y3(-1)+lr*y5(-1)) + B22*(y2(-1)-y4(-1)) +
A121*diff(y1(-1)) + A122*diff(y2(-1)) +
A221*diff(y1(-2)) + A222*diff(y2(-2)) +
A321*diff(y1(-3)) + A322*diff(y2(-3)) + e2;
[name='eq:y3']
y3 = y3(-1) + e3;
[name='eq:y4']
y4 = y4(-1) + e4;
[name='eq:y5']
y5 = y5(-1) + e5;
end;
[A0, A0star, AR, T] = get_companion_matrix('toto');
if max(max(abs(A0-B)))>1e-12
error('Error component matrix (A0) is wrong.')
end
if max(max(abs(A0star-Bstar)))>1e-12
error('Error component matrix (A0star) is wrong.')
end
A1fake = AR(:,:,1);
if max(max(abs(A1fake-A1)))>1e-12
error('First order autoregressive matrix is wrong.')
end
if max(max(abs(AR(:,:,2)-A2)))>1e-12
error('Second order autoregressive matrix is wrong.')
end
if max(max(abs(AR(:,:,3)-A3)))>1e-12
error('Third order autoregressive matrix is wrong.')
end

View File

@ -0,0 +1,95 @@
var y1 y2 y3 y4 y5;
varexo e1 e2 e3 e4 e5;
parameters A111 A112
A121 A122
A211 A212
A221 A222
A311 A312
A321 A322
B11 B12 B21 B22 lr;
A1 = randn(2);
A2 = randn(2);
A3 = randn(2);
A111 = A1(1,1);
A112 = A1(1,2);
A121 = A1(2,1);
A122 = A1(2,2);
A211 = A2(1,1);
A212 = A2(1,2);
A221 = A2(2,1);
A222 = A2(2,2);
A311 = A3(1,1);
A312 = A3(1,2);
A321 = A3(2,1);
A322 = A3(2,2);
B = rand(2);
B(1,1) = -B(1,1);
B(2,2) = -B(2,2);
B11 = B(1,1);
B12 = B(1,2);
B21 = B(2,1);
B22 = B(2,2);
lr = .1;
Bstar = [B11, B12, -lr*.2*B11; B21, B22, -lr*.2*B21];
trend_component_model(model_name=toto, eqtags=['eq:y1', 'eq:y2', 'eq:y3', 'eq:y4', 'eq:y5'], targets=['eq:y3', 'eq:y4', 'eq:y5']);
model;
[name='eq:y1']
diff(y1) = B11*(y1(-1)-y3(-1)+lr*.2*y5(-1)) + B12*(y2(-1)-y4(-1)) +
A111*diff(y1(-1)) + A112*diff(y2(-1)) +
A211*diff(y1(-2)) + A212*diff(y2(-2)) +
A311*diff(y1(-3)) + A312*diff(y2(-3)) + e1;
[name='eq:y2']
diff(y2) = B21*(y1(-1)-y3(-1)+lr*.2*y5(-1)) + B22*(y2(-1)-y4(-1)) +
A121*diff(y1(-1)) + A122*diff(y2(-1)) +
A221*diff(y1(-2)) + A222*diff(y2(-2)) +
A321*diff(y1(-3)) + A322*diff(y2(-3)) + e2;
[name='eq:y3']
y3 = y3(-1) + e3;
[name='eq:y4']
y4 = y4(-1) + e4;
[name='eq:y5']
y5 = y5(-1) + e5;
end;
[A0, A0star, AR, T] = get_companion_matrix('toto');
if max(max(abs(A0-B)))>1e-12
error('Error component matrix (A0) is wrong.')
end
if max(max(abs(A0star-Bstar)))>1e-12
error('Error component matrix (A0star) is wrong.')
end
A1fake = AR(:,:,1);
if max(max(abs(A1fake-A1)))>1e-12
error('First order autoregressive matrix is wrong.')
end
if max(max(abs(AR(:,:,2)-A2)))>1e-12
error('Second order autoregressive matrix is wrong.')
end
if max(max(abs(AR(:,:,3)-A3)))>1e-12
error('Third order autoregressive matrix is wrong.')
end