32 namespace ARIMAutils {
68 std::vector<double>
normalize(
const std::vector<double>& data);
69 std::vector<double>
denormalize(
const std::vector<double>& data);
80 std::vector<double>
slice(
const std::vector<double> &vec,
const size_t& start,
const size_t& N);
83 std::vector<double>
slice(
const std::vector<double> &vec,
const size_t& start);
86 std::vector<double>
arange(
const size_t& start,
const size_t& N);
88 template <
typename T> T
findMinMax(
const std::vector<T> &vec,
bool findMin) {
91 T extremeValue = vec[0];
92 for (
const auto &value : vec) {
93 if (findMin ? value < extremeValue : value > extremeValue) {
101 double calcVecMean(
const std::vector<double> &vec);
104 double stdDev(
const std::vector<double> &vec);
109 throw std::invalid_argument(
"Cannot reverse an empty vector");
112 int end = int(vec.size()) - 1;
114 while (start < end) {
115 std::swap(vec[start], vec[end]);
124 throw std::invalid_argument(
"Cannot reverse an empty vector");
126 std::vector<T> reversed_vec = vec;
128 int end = int(reversed_vec.size()) - 1;
130 while (start < end) {
131 std::swap(reversed_vec[start], reversed_vec[end]);
140 std::vector<double>
toVector(
const std::vector<MeteoData> &vecM,
const std::string ¶mname);
143 std::vector<double>
toVector(
const std::vector<MeteoData> &vecM,
const size_t ¶mindex);
146 std::vector<double>
decideDirection(
const std::vector<double> &data,
const std::string &direction,
bool forward,
size_t gap_loc,
152 void extend(
const size_t &idx,
const std::vector<MeteoData> &vecM) {
158 void setStart(
const size_t &idx,
const std::vector<MeteoData> &vecM) {
159 if (idx >= vecM.size())
164 void setEnd(
const size_t &idx,
const std::vector<MeteoData> &vecM) {
165 if (idx >= vecM.size())
183 std::ostringstream os;
184 os <<
"ARIMA_GAP: {\n"
194 size_t searchBackward(
ARIMA_GAP &last_gap,
const size_t &pos,
const size_t ¶mindex,
const std::vector<MeteoData> &vecM,
195 const Date &resampling_date,
const double &i_window_size);
198 size_t searchForward(
ARIMA_GAP &last_gap,
const size_t &pos,
const size_t ¶mindex,
const std::vector<MeteoData> &vecM,
199 const Date &resampling_date,
const double &i_window_size,
const size_t &indexP1);
201 void computeARIMAGap(
ARIMA_GAP &last_gap,
const size_t &pos,
const size_t ¶mindex,
const std::vector<MeteoData> &vecM,
202 const Date &resampling_date,
size_t &indexP1,
size_t &indexP2,
double &before_window,
double &after_window,
203 double &window_size,
Date &data_start_date,
Date &data_end_date);
215 Date &data_end_date);
217 const Date &data_end_date);
220 std::ostringstream oss;
222 for (
const auto &vec : vecs) {
223 maxSize = std::max(maxSize, vec.size());
227 for (
size_t i = 0; i < vecs.size(); i++) {
228 oss << std::left << std::setw(10) <<
"Vector" + std::to_string(i + 1);
231 oss << std::string(vecs.size() * 10,
'-') << std::endl;
233 for (
size_t i = 0; i < maxSize; i++) {
234 for (
const auto &vec : vecs) {
236 if (i < vec.size()) {
237 oss << std::left << std::setw(10) << vec[i];
239 oss << std::left << std::setw(10) <<
"NaN";
247 template <
typename T>
void printVectors(
const std::vector<std::vector<T>> &vecs) {
249 for (
const auto &vec : vecs) {
250 maxSize = std::max(maxSize, vec.size());
254 for (
size_t i = 0; i < vecs.size(); i++) {
255 std::cout << std::left << std::setw(10) <<
"Vector" + std::to_string(i + 1);
257 std::cout << std::endl;
258 std::cout << std::string(vecs.size() * 10,
'-') << std::endl;
260 for (
size_t i = 0; i < maxSize; i++) {
261 for (
const auto &vec : vecs) {
263 if (i < vec.size()) {
264 std::cout << std::left << std::setw(10) << vec[i];
266 std::cout << std::left << std::setw(10) <<
"NaN";
269 std::cout << std::endl;
273 template <
typename T>
void printVectors(
const std::vector<Date> &vec1,
const std::vector<T> &vec2) {
274 size_t maxSize = std::max(vec1.size(), vec2.size());
277 std::cout << std::left << std::setw(30) <<
"Date1"
278 <<
"| Date2" << std::endl;
279 std::cout <<
"--------------------------------------------------" << std::endl;
281 for (
size_t i = 0; i < maxSize; i++) {
283 if (i < vec1.size()) {
284 std::cout << std::left << std::setw(30) << vec1[i].toString(
Date::ISO) <<
"| ";
286 std::cout << std::left << std::setw(30) <<
"NaN"
291 if (i < vec2.size()) {
292 std::cout << vec2[i] << std::endl;
294 std::cout <<
"NaN" << std::endl;
static const int MAX_ARIMA_EXTRAPOLATION
Definition: ARIMAutils.h:28
static const int MIN_ARIMA_DATA_POINTS
Definition: ARIMAutils.h:27
static const double DATE_TOLERANCE
Definition: ARIMAutils.h:26
Definition: ARIMAutils.h:55
Mode getMode()
Definition: ARIMAutils.h:67
void setMode(const Mode &new_mode)
Definition: ARIMAutils.h:66
Normalization()
Definition: ARIMAutils.cc:47
std::vector< double > normalize(const std::vector< double > &data)
Definition: ARIMAutils.cc:53
std::vector< double > denormalize(const std::vector< double > &data)
Definition: ARIMAutils.cc:80
Mode
Definition: ARIMAutils.h:57
@ ZScore
Definition: ARIMAutils.h:59
@ MinMax
Definition: ARIMAutils.h:58
@ Nothing
Definition: ARIMAutils.h:60
A class to handle timestamps. This class handles conversion between different time display formats (I...
Definition: Date.h:87
const std::string toString(const FORMATS &type, const bool &gmt=false) const
Return a nicely formated string.
Definition: Date.cc:1128
@ ISO
ISO 8601 extended format combined date: YYYY-MM-DDTHH:mm:SS.sss (fields might be dropped,...
Definition: Date.h:91
size_t searchForward(ARIMA_GAP &last_gap, const size_t &pos, const size_t ¶mindex, const std::vector< MeteoData > &vecM, const Date &resampling_date, const double &i_window_size, const size_t &indexP1)
Definition: ARIMAutils.cc:243
double stdDev(const std::vector< double > &vec)
Definition: ARIMAutils.cc:144
const std::map< ObjectiveFunction, std::string > ObjectiveFunctionMap
Definition: ARIMAutils.cc:31
std::vector< double > arange(const size_t &start, const size_t &N)
Definition: ARIMAutils.cc:122
void computeARIMAGap(ARIMA_GAP &last_gap, const size_t &pos, const size_t ¶mindex, const std::vector< MeteoData > &vecM, const Date &resampling_date, size_t &indexP1, size_t &indexP2, double &before_window, double &after_window, double &window_size, Date &data_start_date, Date &data_end_date)
Definition: ARIMAutils.cc:329
std::vector< double > decideDirection(const std::vector< double > &data, const std::string &direction, bool forward, size_t gap_loc, size_t length)
Definition: ARIMAutils.cc:177
std::vector< double > slice(const std::vector< double > &vec, const size_t &start, const size_t &N)
Definition: ARIMAutils.cc:106
static Date findFirstDateWithSamplingRate(const std::vector< MeteoData > &vecM, const double sampling_rate, const Date &data_start_date, const Date &data_end_date)
Definition: ARIMAutils.cc:397
double calcVecMean(const std::vector< double > &vec)
Definition: ARIMAutils.cc:131
size_t searchBackward(ARIMA_GAP &last_gap, const size_t &pos, const size_t ¶mindex, const std::vector< MeteoData > &vecM, const Date &resampling_date, const double &i_window_size)
Definition: ARIMAutils.cc:195
std::vector< double > toVector(const std::vector< MeteoData > &vecM, const std::string ¶mname)
Definition: ARIMAutils.cc:158
std::string convertVectorsToString(const std::vector< std::vector< T > > &vecs)
Definition: ARIMAutils.h:219
Date adjustStartDate(const std::vector< MeteoData > &vecM, const ARIMA_GAP &last_gap, Date data_start_date, const Date &data_end_date)
Definition: ARIMAutils.cc:415
OptimizationMethod
Definition: ARIMAutils.h:41
@ Conjugate_Gradient
Definition: ARIMAutils.h:46
@ LBFGS
Definition: ARIMAutils.h:48
@ Newton_Trust_Region_Hook_Step
Definition: ARIMAutils.h:44
@ Newton_Trust_Region_Double_Dog_Leg
Definition: ARIMAutils.h:45
@ BFGS_MTM
Definition: ARIMAutils.h:49
@ Nelder_Mead
Definition: ARIMAutils.h:42
@ Newton_Line_Search
Definition: ARIMAutils.h:43
@ BFGS
Definition: ARIMAutils.h:47
ObjectiveFunction
Definition: ARIMAutils.h:34
@ MLE
Definition: ARIMAutils.h:36
@ CSS_MLE
Definition: ARIMAutils.h:35
@ CSS
Definition: ARIMAutils.h:37
const std::map< OptimizationMethod, std::string > OptimizationMethodMap
Definition: ARIMAutils.cc:36
std::vector< T > reverseVectorReturn(const std::vector< T > &vec)
Definition: ARIMAutils.h:122
void reverseVector(std::vector< T > &vec)
Definition: ARIMAutils.h:107
double computeSamplingRate(Date data_start_date, Date data_end_date, std::vector< MeteoData > vecM)
Definition: ARIMAutils.cc:381
T findMinMax(const std::vector< T > &vec, bool findMin)
Definition: ARIMAutils.h:88
void printVectors(const std::vector< std::vector< T > > &vecs)
Definition: ARIMAutils.h:247
double mostLikelyValue(const std::vector< double > &vec)
Definition: ARIMAutils.cc:366
bool requal(const Date &date1, const Date &date2)
Definition: ARIMAutils.cc:300
static const double e
Definition: Meteoconst.h:72
const size_t npos
npos is the out-of-range value
Definition: IOUtils.h:80
static double forward(double x, const std::vector< double > ¶ms, EditingRegFill::RegressionType regtype)
Definition: DataEditingAlgorithms.cc:1172
Definition: ARIMAutils.h:150
ARIMA_GAP()
Definition: ARIMAutils.h:151
void setEnd(const size_t &idx, const std::vector< MeteoData > &vecM)
Definition: ARIMAutils.h:164
Date endDate
Definition: ARIMAutils.h:177
bool isGap()
Definition: ARIMAutils.h:179
void extend(const size_t &idx, const std::vector< MeteoData > &vecM)
Definition: ARIMAutils.h:152
std::string toString() const
Definition: ARIMAutils.h:182
void setStart(const size_t &idx, const std::vector< MeteoData > &vecM)
Definition: ARIMAutils.h:158
size_t end
Definition: ARIMAutils.h:176
Date startDate
Definition: ARIMAutils.h:177
void reset()
Definition: ARIMAutils.h:170
double sampling_rate
Definition: ARIMAutils.h:178
size_t start
Definition: ARIMAutils.h:176