1
- #ifndef MINNFORECASTER_H
2
- #define MINNFORECASTER_H
1
+ #ifndef BVHAR_BAYES_MNIW_FORECASTER_H
2
+ #define BVHAR_BAYES_MNIW_FORECASTER_H
3
3
4
- #include " minnesota.h"
5
- #include " bvharsim .h"
4
+ #include " ./ minnesota.h"
5
+ #include " ../../math/random .h"
6
6
7
7
namespace bvhar {
8
8
@@ -12,8 +12,8 @@ class BvharForecaster;
12
12
13
13
class MinnForecaster {
14
14
public:
15
- MinnForecaster (const MinnFit& fit, int step, const Eigen::MatrixXd& response_mat, int ord, int num_sim, bool include_mean)
16
- : response(response_mat),
15
+ MinnForecaster (const MinnFit& fit, int step, const Eigen::MatrixXd& response_mat, int ord, int num_sim, bool include_mean, unsigned int seed )
16
+ : rng(seed), response(response_mat),
17
17
posterior_mean (fit._coef), posterior_sig(fit._prec.inverse()),
18
18
posterior_iw_scale(fit._iw_scale), posterior_iw_shape(fit._iw_shape),
19
19
// MinnForecaster(const MinnRecords& records, int step, const Eigen::MatrixXd& response_mat, int ord, bool include_mean)
@@ -61,7 +61,7 @@ class MinnForecaster {
61
61
void forecastDensity () {
62
62
// Eigen::MatrixXd forecastDensity() {
63
63
for (int i = 0 ; i < num_sim; ++i) {
64
- coef_and_sig[i] = sim_mn_iw (posterior_mean, posterior_sig, posterior_iw_scale, posterior_iw_shape, false );
64
+ coef_and_sig[i] = sim_mn_iw (posterior_mean, posterior_sig, posterior_iw_scale, posterior_iw_shape, false , rng );
65
65
}
66
66
// std::lock_guard<std::mutex> lock(mtx);
67
67
for (int h = 0 ; h < step; ++h) {
@@ -81,10 +81,10 @@ class MinnForecaster {
81
81
}
82
82
// return predictive_distn;
83
83
}
84
- Rcpp::List returnForecast () const {
85
- return Rcpp::List::create (
86
- Rcpp::Named (" posterior_mean" ) = pred_save,
87
- Rcpp::Named (" predictive" ) = predictive_distn
84
+ LIST returnForecast () const {
85
+ return CREATE_LIST (
86
+ NAMED (" posterior_mean" ) = pred_save,
87
+ NAMED (" predictive" ) = predictive_distn
88
88
);
89
89
}
90
90
Eigen::MatrixXd returnPoint () {
@@ -94,6 +94,7 @@ class MinnForecaster {
94
94
protected:
95
95
// MinnRecords mn_record;
96
96
// std::mutex mtx;
97
+ boost::random::mt19937 rng;
97
98
Eigen::MatrixXd response;
98
99
Eigen::MatrixXd posterior_mean;
99
100
Eigen::MatrixXd posterior_sig;
@@ -120,8 +121,8 @@ class MinnForecaster {
120
121
121
122
class BvarForecaster : public MinnForecaster {
122
123
public:
123
- BvarForecaster (const MinnFit& fit, int step, const Eigen::MatrixXd& response_mat, int lag, int num_sim, bool include_mean)
124
- : MinnForecaster(fit, step, response_mat, lag, num_sim, include_mean) {}
124
+ BvarForecaster (const MinnFit& fit, int step, const Eigen::MatrixXd& response_mat, int lag, int num_sim, bool include_mean, unsigned int seed )
125
+ : MinnForecaster(fit, step, response_mat, lag, num_sim, include_mean, seed ) {}
125
126
// BvarForecaster(const MinnRecords& records, int step, const Eigen::MatrixXd& response_mat, int lag, bool include_mean)
126
127
// : MinnForecaster(records, step, response_mat, lag, include_mean) {}
127
128
virtual ~BvarForecaster () = default ;
@@ -142,16 +143,17 @@ class BvarForecaster : public MinnForecaster {
142
143
// Eigen::Map<Eigen::MatrixXd>(sig_update.block(h, 0, 1, 1).data(), 1, 1), // -> Matrix but too complex
143
144
mn_scl,
144
145
coef_and_sig[i][1 ],
145
- false
146
+ false ,
147
+ rng
146
148
);
147
149
}
148
150
}
149
151
};
150
152
151
153
class BvharForecaster : public MinnForecaster {
152
154
public:
153
- BvharForecaster (const MinnFit& fit, int step, const Eigen::MatrixXd& response_mat, const Eigen::MatrixXd& har_trans, int month, int num_sim, bool include_mean)
154
- : MinnForecaster(fit, step, response_mat, month, num_sim, include_mean), har_trans(har_trans),
155
+ BvharForecaster (const MinnFit& fit, int step, const Eigen::MatrixXd& response_mat, const Eigen::MatrixXd& har_trans, int month, int num_sim, bool include_mean, unsigned int seed )
156
+ : MinnForecaster(fit, step, response_mat, month, num_sim, include_mean, seed ), har_trans(har_trans),
155
157
transformed_sig (har_trans.transpose() * posterior_sig * har_trans) {}
156
158
// BvharForecaster(const MinnRecords& records, int step, const Eigen::MatrixXd& response_mat, const Eigen::MatrixXd& har_trans, int month, bool include_mean)
157
159
// : MinnForecaster(records, step, response_mat, month, include_mean), har_trans(har_trans) {}
@@ -174,7 +176,8 @@ class BvharForecaster : public MinnForecaster {
174
176
// Eigen::MatrixXd::Constant(1, 1, sig_update[h]),
175
177
mn_scl,
176
178
coef_and_sig[i][1 ],
177
- false
179
+ false ,
180
+ rng
178
181
);
179
182
}
180
183
}
@@ -185,4 +188,4 @@ class BvharForecaster : public MinnForecaster {
185
188
186
189
} // namespace bvhar
187
190
188
- #endif // MINNFORECASTER_H
191
+ #endif // BVHAR_BAYES_MNIW_FORECASTER_H
0 commit comments