季节文件

季节估计与年度周期或时间序列相关的异常。

也可以看看:休眠气候学Sinefit.sineval,sinefit_bootstrap.

返回气候数据工具目录

内容

句法

(ts) =季节(A、t) [, ts] =季节(…,“日常”)[,ts] =季节(…,“每月”)[,ts] =季节(…,“去趋势”,DetrendOption) [, ts] =季节(…,“暗”,维)=季节(…,“全”)

描述

[AS,TS] =季节(A,T)给出了时间序列的典型季节性(AKA年度)周期一种对应时代T.在数据内或DateTime格式。如果T.每天,输出TS.是1到366和作为将包含366天内每天的平均值。如果按月输入,TS.是1:12作为将包含一年12个月中每个月的平均值。

赛季(ts) =(…,“日常”)直接指定输入是日常分辨率。季节函数通常会自动解决这个问题,但如果您在数据中缺少缺少差距,您可能希望通过每日指定来确保正确的结果。

赛季(ts) =(…,“每月”)如上所述,但迫使月度解决方案。

[as,ts] =季节(......,'defrend',detrendoption)指定相对于确定季节性异常的基线。选项是'线性'“二次”, 或者'没有任何'.默认情况下,在删除线性最小二乘趋势后计算异常,但如果例如,变暖是强烈的非线性的,您可能更喜欢“二次”选项。默认为'线性'

赛季(ts) =(…,“暗”,尺寸)指定评估季节的维度。默认情况下,如果一种为一维时,沿非单次维返回季节循环;如果一种是2D,季节是沿尺寸的1(时间游行行驶);如果一种是三维的,季节是沿着三维进行的。

=季节(…,“全”)回报作为对于整个时间序列一种.这是一个方便的选择,可以单独查看长时间序列的组件。

示例1:单时间序列

考虑这个时间序列。我们称它为温度:

t = datenum ('1979年1月1日'):数据项('2016年12月31日');%正弦季节信号+变暖趋势+噪声+某些平均值:t = 4 * sin(doy(t,“decimalyear”)* 2 * pi)+(T-min(t))/ 5e3 + Randn(尺寸(t))+ 15;绘图(t,t)轴盒子datetick (“x”“keeplimits”

您可以看到温度有季节性循环,但随着时间的推移,还有逐渐变暖,还有一些随机噪音。要看到季节性周期的结构一点好,我们可以用一天的一天使用的时间序列机灵函数。我们还会用到CBDate.函数格式化颜色栏日期。

图分散(DOY(T),T,10,T,'填充')轴colorbar cbdate(“yyyy”)包含'一年中'ylabel.'温度'cmoceanamp

你可以看到温度随着时间的推移而上升,但通过绘图作为函数机灵我们可以更好地看到季节周期的结构。现在,如果我们想把长期变暖的影响从季节循环中分离出来呢?

TS =季节(T,T);图绘图(1:366,TS)盒子包含'一年中'ylabel.'季节性温度周期'

上面我们看到季节性循环,幅度为4度,就像我们定义它一样。一些噪音仍然存在,因为一年中的每一天代表38次噪声测量的平均值。尽管如此,这是我们对季节性循环的最佳近似,并且非常接近。

例2:一次多时间序列

假设您有几行数据,每个数据都包含不同的时间序列。数据可能看起来像这样(我们正在建造时间序列T.从上面)

t2 = [t +(t-min(t))/ 2e3;t  -  15 * cos(doy(t,“decimalyear”)* 2 * pi)+(t-min(t))/ 1e2;T +((t-min(t))/ 2.5e3)。^ 3.1];图绘图(t,t2)轴盒子datetick (“x”“keeplimits”) 传奇(' T2的第一行''第二行T2''第三行t2'“位置”“西北”) 传奇Boxoff.

每个时间序列的年度周期都是什么样的?用季节,但指定维度2,因为每一行T2.包含时间序列。如果T2.包含一个时间序列,默认维度1将是我们想要的。

让我们同时得到整个时间序列“全部”选项而不是默认的天1到366。

T2_full =季节(T2, t,“维度”,2,“全部”);图绘制(t, T2_full)轴([datenum (1995年1月1日的) datenum (2010年1月1日的) 16]datetick (“x”“keeplimits”) 传奇(' T2的第一行''第二行T2''第三行t2'“位置”“西北”

我们看到了季节提取了每次序列的季节性周期T2..甚至第3行T2.,使用默认的线性崩位充分分析了具有3.1的功率的长期趋势。但是,如果对应用程序的线性贬值不足,请使用'DEDREND','二次''选择逐步陷入困境的选项。

去除季节性循环

为方便起见,气候数据工具箱有一个休眠函数,但这里值得注意的是休眠函数通过从原始信号中减去季节分量来去除季节周期,如下所示:

t_deseasoned = t2  -  t2_full;图绘图(T,T2)保持情节(t, T_deseasoned)轴盒子datetick (“x”“keeplimits”) 传奇(' T2的第一行''第二行T2''第三行t2'“位置”“西北”) 传奇Boxoff.

例3:真实海冰数据

上面的示例使用了我们创建的一些人工数据。但是这个功能如何适用于真实数据?让我们比较北部和南部半球季节性周期。这是全时序列的样子:

加载seaice_extent图绘制(t extent_N'B')举行绘图(t,layer_s,'r')轴盒子传奇(“北”“南”“位置”“西北”

那么海冰的典型一年是什么样的?

图绘图(季节(layer_n,t),'B')举行情节(季节(extent_S t),'r')轴盒子包含'一年中'ylabel ('海冰范围异常(10 ^ 6公里^ 2)'ntitle('典型的季节性循环') 传奇(“北”“南”“位置”“西北”

示例4:网格重新分析数据

让我们来探索海平面温度的典型季节性循环。这是一个尺寸为60x55x802的月度数据集:

加载pacific_sstsst_season =季节(sst、t);

这给了我们sst_season.,这是60x55x12,为每年的每月代表一个60x55网格。取得典型的最大和最低温度之间的差异,以获得季节在太平洋不同地区的强烈程度:

t_range = max(sst_season,[],3)-min(sst_season,[],3);图ImageCN(LON,LAT,T_RANGE)CB =彩色键;Ylabel(CB,“季节周期的大小(\circ C)”) cmoceanamp

这并不令人惊讶 - 季节性最强烈靠近杆子和浅水区。

这个函数是如何工作的

默认情况下,季节函数从时间序列中去除线性趋势,然后通过对一年中每一天(或每个月)的所有非趋势数据进行平均,确定时间序列的气候学。

对于日常数据,闰年存在挑战。该函数通过平均与年度第59天的所有数据平均来计算2月28日的平均温度。但3月1日怎么办?大多数年3月1日是一年中的60日,但每年3月1日是一年的第61天。

该函数将所有日期转换为一年中的某一天,并以一年中的某一天为函数计算季节周期。因为有366天的年份要少得多,所以用同样的方法对366天的所有数据进行平均,会使366天对异常值非常敏感。因此,第366天季节函数对所有年份的365天、366天和第1天的所有数据进行平均。

季节和气候学

CDT称为一个职能季节另一个函数叫做气候学.唯一的区别是气候学包含变量的均值,而输出季节将始终具有0个平均值。因此,这是休眠函数去除季节变化的成分,同时保留整体平均值和趋势。

通常,CDT假定在子原分辨率下采样的变量的多年记录可以描述

Y = y_0 + y_tr + y_season + y_var + y_noise

在哪里

在这个模型中,

y_气候学= y_0 + y_season

其他定义季节性的方法

还有另一种定义季节性的方法,请看Sinefit.sineval,sinefit_bootstrap.

作者信息

这个函数是由乍得a。格林德克萨斯大学地球物理研究所(UTIG), 2017年7月。