我想写一个函数,得到一个时间序列和一个标准差作为参数,并返回一个调整后的时间序列,它看起来像一个预测。
使用这个函数,我想测试一个系统的稳定性,它得到一个天气预报时间序列列表作为输入参数。
我对这一职能的处理方法如下:
vector<tuple<datetime, double>> get_adjusted_timeseries(vector<tuple<datetime, double>>& timeseries_original, const double stddev, const double dist_mid)
{
auto timeseries_copy(timeseries_original);
int sign = randInRange(0, 1) == 0 ? 1 : -1;
auto left_limit = normal_cdf_inverse(0.5 - dist_mid, 0, stddev);
auto right_limit = normal_cdf_inverse(0.5 + dist_mid, 0, stddev);
for (auto& pair : timeseries_copy)
{
double number;
do
{
nd_value = normal_distribution_r(0, stddev);
}
while (sign == -1 && nd_value > 0.0 || sign == 1 && nd_value < 0.0);
pair = make_tuple(get<0>(pair), get<1>(pair) + (nd_value / 100) * get<1>(pair));
if (nd_value > 0.0 && nd_value < right_limit || nd_value < 0.0 && nd_value > left_limit)
{
sign = sign == -1 ? 1 : -1;
}
}
return timeseries_copy;
}vector<tuple<datetime, double>>类型
sign == -1时它应该是零,当sign == 1时这个值应该更大。sign。
例如,低标准差的结果在这里可以用黄色看到:

如果计算这两个时间序列的平均绝对百分比误差(MAPE),则得到以下关系:
你觉得这种方法怎么样?
这个函数能用来测试一个必须处理预测时间序列的系统吗?
发布于 2019-06-01 00:27:06
您希望生成时间序列数据,这些数据的行为就像从真实现象(天气和股票交易所)获得的现有时间序列数据一样。生成的时间序列数据将被输入到某个系统中,以测试其稳定性。
您可以做的是:将一些模型安装到现有的数据中,然后使用该模型生成遵循模型的数据,从而生成现有的数据。将数据拟合到模型会产生一组模型参数和一组偏差(模型没有解释的差异)。偏差可能遵循一些已知的密度函数,但不一定。给定模型参数和偏差,您可以生成与原始数据类似的数据。请注意,如果模型不能很好地解释数据,那么偏差将很大,使用模型生成的数据将不像原始数据。
例如,如果您知道您的数据是线性的,您可以在它们之间拟合一条线,您的模型是:
y = M x + B + E其中,E是一个随机变量,它遵循符合您的数据的行周围的错误分布,而M和B是模型参数。现在,您可以使用该模型生成线性的(x, y)坐标。当随机变量E抽样时,您可以假设它遵循一些已知的分布,如正态分布,或者使用直方图来生成跟随任意密度函数的偏差。
有几个时间序列模型,您可以用来拟合您的天气和股票交易数据。你可以看看指数平滑。它有几种不同的型号。我相信你可以在维基百科上找到很多其他的模型。
如果模型不适合您的数据,您也可以将其参数视为随机变量。在上面的例子中,假设我们观察到的数据似乎是斜率在变化。我们将拟合几条线,并为M获得一个分布。然后,在生成数据时,我们将与E一起对该变量进行示例。
https://stackoverflow.com/questions/56239172
复制相似问题