@@ -414,13 +414,19 @@ def test_static_factor_no_ar_no_exog_diagonal_error(self):
414
414
assert mod .shock_names == ["factor_shock_0" ]
415
415
416
416
def test_dynamic_factor_ar1_error_diagonal_error (self ):
417
+ k_factors = 2
418
+ factor_order = 2
419
+ k_endog = 3
420
+ error_order = 1
421
+ error_var = False
422
+
417
423
mod = BayesianDynamicFactor (
418
- k_factors = 2 ,
419
- factor_order = 2 ,
420
- k_endog = 3 ,
424
+ k_factors = k_factors ,
425
+ factor_order = factor_order ,
426
+ k_endog = k_endog ,
421
427
endog_names = ["y0" , "y1" , "y2" ],
422
- error_order = 1 ,
423
- error_var = False ,
428
+ error_order = error_order ,
429
+ error_var = error_var ,
424
430
error_cov_type = "diagonal" ,
425
431
measurement_error = True ,
426
432
verbose = False ,
@@ -464,26 +470,33 @@ def test_dynamic_factor_ar1_error_diagonal_error(self):
464
470
"L0.error_2" ,
465
471
],
466
472
FACTOR_DIM : ["factor_1" , "factor_2" ],
467
- AR_PARAM_DIM : list (range (1 , 2 * 2 + 1 )),
468
- ERROR_AR_PARAM_DIM : [1 ],
473
+ AR_PARAM_DIM : list (range (1 , k_factors * max (factor_order , 1 ) + 1 )),
474
+ ERROR_AR_PARAM_DIM : list (range (1 , (error_order * k_endog ) + 1 ))
475
+ if error_var
476
+ else list (range (1 , error_order + 1 )),
469
477
}
470
478
471
479
assert mod .param_names == expected_param_names
472
480
assert mod .param_dims == expected_param_dims
473
481
for k , v in expected_coords .items ():
474
482
assert mod .coords [k ] == v
475
- assert len (mod .state_names ) == 7
483
+ assert len (mod .state_names ) == k_factors * max ( factor_order , 1 ) + k_endog * error_order
476
484
assert mod .observed_states == ["y0" , "y1" , "y2" ]
477
- assert len (mod .shock_names ) == 5
485
+ assert len (mod .shock_names ) == k_factors + k_endog
478
486
479
487
def test_dynamic_factor_ar2_error_var_unstructured (self ):
488
+ k_factors = 1
489
+ factor_order = 1
490
+ k_endog = 3
491
+ error_order = 2
492
+ error_var = True
480
493
mod = BayesianDynamicFactor (
481
- k_factors = 1 ,
482
- factor_order = 1 ,
483
- k_endog = 3 ,
494
+ k_factors = k_factors ,
495
+ factor_order = factor_order ,
496
+ k_endog = k_endog ,
484
497
endog_names = ["y0" , "y1" , "y2" ],
485
- error_order = 2 ,
486
- error_var = True ,
498
+ error_order = error_order ,
499
+ error_var = error_var ,
487
500
error_cov_type = "unstructured" ,
488
501
measurement_error = True ,
489
502
verbose = False ,
@@ -527,29 +540,38 @@ def test_dynamic_factor_ar2_error_var_unstructured(self):
527
540
"L1.error_2" ,
528
541
],
529
542
FACTOR_DIM : ["factor_1" ],
530
- AR_PARAM_DIM : [1 ],
531
- ERROR_AR_PARAM_DIM : list (range (1 , 2 * 3 + 1 )),
543
+ AR_PARAM_DIM : list (range (1 , k_factors * max (factor_order , 1 ) + 1 )),
544
+ ERROR_AR_PARAM_DIM : list (range (1 , (error_order * k_endog ) + 1 ))
545
+ if error_var
546
+ else list (range (1 , error_order + 1 )),
532
547
}
533
548
534
549
assert mod .param_names == expected_param_names
535
550
assert mod .param_dims == expected_param_dims
536
551
for k , v in expected_coords .items ():
537
552
assert mod .coords [k ] == v
538
- assert len (mod .state_names ) == 7
553
+ assert len (mod .state_names ) == k_factors * max ( factor_order , 1 ) + k_endog * error_order
539
554
assert mod .observed_states == ["y0" , "y1" , "y2" ]
540
- assert len (mod .shock_names ) == 4
555
+ assert len (mod .shock_names ) == k_factors + k_endog
541
556
542
557
def test_exog_shared_exog_states_exog_innovations (self ):
558
+ k_factors = 2
559
+ factor_order = 1
560
+ k_endog = 3
561
+ error_order = 1
562
+ k_exog = 2
563
+ error_var = False
564
+ shared_exog_states = True
543
565
mod = BayesianDynamicFactor (
544
- k_factors = 2 ,
545
- factor_order = 1 ,
546
- k_endog = 3 ,
566
+ k_factors = k_factors ,
567
+ factor_order = factor_order ,
568
+ k_endog = k_endog ,
547
569
endog_names = ["y0" , "y1" , "y2" ],
548
- error_order = 1 ,
549
- error_var = False ,
570
+ error_order = error_order ,
571
+ error_var = error_var ,
550
572
k_exog = 2 ,
551
573
exog_names = ["x0" , "x1" ],
552
- shared_exog_states = True ,
574
+ shared_exog_states = shared_exog_states ,
553
575
exog_innovations = True ,
554
576
error_cov_type = "diagonal" ,
555
577
measurement_error = True ,
@@ -598,30 +620,45 @@ def test_exog_shared_exog_states_exog_innovations(self):
598
620
"beta_x1[shared]" ,
599
621
],
600
622
FACTOR_DIM : ["factor_1" , "factor_2" ],
601
- AR_PARAM_DIM : [1 , 2 ],
602
- ERROR_AR_PARAM_DIM : [1 ],
603
- EXOG_STATE_DIM : [1 , 2 ],
623
+ AR_PARAM_DIM : list (range (1 , k_factors * max (factor_order , 1 ) + 1 )),
624
+ ERROR_AR_PARAM_DIM : list (range (1 , (error_order * k_endog ) + 1 ))
625
+ if error_var
626
+ else list (range (1 , error_order + 1 )),
627
+ EXOG_STATE_DIM : list (range (1 , k_exog + 1 ))
628
+ if shared_exog_states
629
+ else list (range (1 , k_exog * k_endog + 1 )),
604
630
}
605
631
606
632
assert mod .param_names == expected_param_names
607
633
assert mod .param_dims == expected_param_dims
608
634
for k , v in expected_coords .items ():
609
635
assert mod .coords [k ] == v
610
- assert len (mod .state_names ) == 7
636
+ assert len (mod .state_names ) == k_factors * max (factor_order , 1 ) + k_endog * error_order + (
637
+ k_exog if shared_exog_states else k_exog * k_endog
638
+ )
611
639
assert mod .observed_states == ["y0" , "y1" , "y2" ]
612
- assert len (mod .shock_names ) == 7
640
+ assert len (mod .shock_names ) == k_factors + k_endog + (
641
+ k_exog if shared_exog_states else k_exog * k_endog
642
+ )
613
643
614
644
def test_exog_not_shared_no_exog_innovations (self ):
645
+ k_factors = 1
646
+ factor_order = 2
647
+ k_endog = 3
648
+ error_order = 1
649
+ k_exog = 1
650
+ error_var = False
651
+ shared_exog_states = False
615
652
mod = BayesianDynamicFactor (
616
- k_factors = 1 ,
617
- factor_order = 2 ,
618
- k_endog = 3 ,
653
+ k_factors = k_factors ,
654
+ factor_order = factor_order ,
655
+ k_endog = k_endog ,
619
656
endog_names = ["y0" , "y1" , "y2" ],
620
- error_order = 1 ,
621
- error_var = False ,
622
- k_exog = 1 ,
657
+ error_order = error_order ,
658
+ error_var = error_var ,
659
+ k_exog = k_exog ,
623
660
exog_names = ["x0" ],
624
- shared_exog_states = False ,
661
+ shared_exog_states = shared_exog_states ,
625
662
exog_innovations = False ,
626
663
error_cov_type = "scalar" ,
627
664
measurement_error = False ,
@@ -668,15 +705,23 @@ def test_exog_not_shared_no_exog_innovations(self):
668
705
"beta_x0[y2]" ,
669
706
],
670
707
FACTOR_DIM : ["factor_1" ],
671
- AR_PARAM_DIM : [1 , 2 ],
672
- ERROR_AR_PARAM_DIM : [1 ],
673
- EXOG_STATE_DIM : [1 , 2 , 3 ],
708
+ AR_PARAM_DIM : list (range (1 , k_factors * max (factor_order , 1 ) + 1 )),
709
+ ERROR_AR_PARAM_DIM : list (range (1 , (error_order * k_endog ) + 1 ))
710
+ if error_var
711
+ else list (range (1 , error_order + 1 )),
712
+ EXOG_STATE_DIM : list (range (1 , k_exog + 1 ))
713
+ if shared_exog_states
714
+ else list (range (1 , k_exog * k_endog + 1 )),
674
715
}
675
716
676
717
assert mod .param_names == expected_param_names
677
718
assert mod .param_dims == expected_param_dims
678
719
for k , v in expected_coords .items ():
679
720
assert mod .coords [k ] == v
680
- assert len (mod .state_names ) == 8
721
+ assert len (mod .state_names ) == k_factors * max (factor_order , 1 ) + k_endog * error_order + (
722
+ k_exog if shared_exog_states else k_exog * k_endog
723
+ )
681
724
assert mod .observed_states == ["y0" , "y1" , "y2" ]
682
- assert len (mod .shock_names ) == 7
725
+ assert len (mod .shock_names ) == k_factors + k_endog + (
726
+ k_exog if shared_exog_states else k_exog * k_endog
727
+ )
0 commit comments