【问题标题】:How do I take an n-day average of data in Matlab to match another time series?如何在 Matlab 中取 n 天的数据平均值来匹配另一个时间序列?
【发布时间】:2017-01-03 13:22:02
【问题描述】:

我有每日时间序列数据,我想计算该数据的 5 天平均值,同时检索每个 5 天平均值的相应开始日期。例如:

x = [732099 732100 732101 732102 732103 732104 732105 732106 732107 732108];
y=  [1 5 3 4 6 2 3 5 6 8]; 

x 和 y 实际上的大小为 92x1。

首先,当这个时间序列数据不能被 5 整除时,我如何计算 5 天平均值?最终,我想计算“跳跃平均值”,其中平均值不是连续计算的(例如,6 月 1 日至 5 日、6 月 6 日至 10 日等)。

我尝试过以下操作:

Pentad_avg = mean(reshape(y(1:90),5,[]))'; %manually adjusted to be divisible by 5
Pentad_dt = x(1:5:90); %select every 5th day for time

但是,Pentad_dt 给了我日期 01-Jun-200406-Jun-2004 作为输出。而且,这让我想到了第二点。

我正在寻找与另一个时间序列的 5 天平均值相对应的 x 和 y 的 5 天平均值。第二个时间序列具有从 2004 年 6 月 15 日到 2004 年 8 月 29 日(而不是从 2004 年 6 月 1 日开始)的 5 天平均数据。最终,我如何调整这两个时间序列之间的日期和 5 天平均值?

【问题讨论】:

  • 不太清楚为什么被五整除很重要。不管怎样,看看这个:mathworks.com/help/finance/tsmovavg.html
  • 我有兴趣推导出一个 5 天的平均值来消除每日时间序列数据中发现的一些可变性。 @MadPhysicist
  • 我得到了那个部分。我的问题和建议仍然有效。
  • 我可以手动更改除法。更紧迫的问题是两个时间序列在时间上的同步。不确定财务功能是否适用于此处的地球物理数据。

标签: matlab datetime time-series match average


【解决方案1】:

两个时间序列之间的同步可以使用timeseries object 来完成。将您的数据放入一个对象允许 Matlab 智能地处理它。最有用的是为您的使用添加了synchronize 方法。

您需要确保在每个时间序列对象上正确设置时间向量。

如下所示:

ts1 = timeseries(y,datestr(x));
ts2 = timeseries(OtherData,OtherTimes);
[ts1 ts2] = synchronize(ts1,ts2,'Uniform','Interval',5);

这应该会返回给您每个与相同时间对齐的时间序列。您还可以使用resample 方法指定一个特定的时间向量来对齐时间序列。

【讨论】:

  • 这可以找到 5 天的间隔,但是我如何获取这些同步时间序列的 5 天平均值?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-02
  • 2021-07-08
  • 1970-01-01
  • 2021-08-24
相关资源
最近更新 更多