用R语言软件估计光谱密度

任何时间序列都可以表示为在基波(谐波)频率上振荡的余弦和正弦波之和= j / n,其中j = 1,2,...,n / 2。周期图给出了关于各种频率的相对强度的信息,用于解释时间序列的变化。

周期图是称为谱密度的群体函数的样本估计,其是群体平稳时间序列的频域表征。谱密度是与自协方差时域表示直接相关的时间序列的频域表示。本质上,谱密度和自协方差函数包含相同的信息,但以不同的方式表达。

回顾注释:自协方差是自相关的分子。自相关是自协方差除以方差。]

假设γ(h)是静止过程的自协方差函数,f(ω)是同一过程的谱密度。在前一句的符号中,h =时滞和ω=频率。

在高级微积分的语言中,自协方差和谱密度是傅立叶变换对。我们不会担心这种情况的微积分。我们将重点关注谱密度的估计 - 一系列的频域特征。这里仅给出傅里叶变换方程以确定在时域表示和序列的频域表示之间存在直接链接。

在数学上,频谱密度是针对负频率和正频率定义的。然而,由于函数的对称性及其对于-1/2到+1/2范围之外的频率的重复模式,我们只需关注0和+1/2之间的频率。

“总”积分谱密度等于系列的方差。因此,特定频率区间内的谱密度可以被视为由那些频率解释的方差的量。

估计光谱密度的方法

原始周期图是人口谱密度的粗略样本估计。估计是“粗略的”,部分是因为我们只使用离散的基波谐波频率用于周期图,而频谱密度是在连续的频率上定义的。

对谱密度的周期图估计的一种可能的改进是使用居中移动平均值来平滑它。可以使用逐渐减小的方法创建另外的“平滑”,该方法对系列的末端(时间)加权小于数据的中心。我们不会在本课中介绍逐渐减少的内容。有兴趣的人可以参阅本书第4.4节和各种互联网资源。

平滑周期图的另一种方法是基于以下事实的参数估计方法:任何静止时间序列可以通过某种顺序的AR模型来近似(尽管它可能是高阶)。在该方法中,找到合适的AR模型,然后将谱密度估计为该估计的AR模型的谱密度。

平滑方法(光谱密度的非参数估计)

平滑周期图的常用方法具有如此精美的名称,听起来很难。实际上,它只是一个集中的移动平均程序,只有一些可能的修改。对于时间序列,具有参数m的Daniell核是居中移动平均值,其通过平均时间t-mt + m(包括)之间的所有值在时间t创建平滑值。例如,m = 2 的Daniell内核的平滑公式为

^ x t= x t - 2 + x t - 1 + x t + x t + 1 + x t + 2 5x^t=xt−2+xt−1+xt+xt+1+xt+25

在R中,可以使用命令kernel(“daniell”,2)生成m = 2 的Daniell内核的加权系数。  结果是

coef [-2] = 0.2 
coef [-1] = 0.2 
coef [0] = 0.2 
coef [1] = 0.2 
coef [2] = 0.2

coef []的下标是指与时间t的平均值中心的时差。因此,在这种情况下的平滑公式是

^ x t=0.2xt-2+0.2xt-1+0.2xt+0.2xt+1+0.2xt+2,x^t=0.2xt−2+0.2xt−1+0.2xt+0.2xt+1+0.2xt+2,

这与上面给出的公式相同。

修改后的Daniell内核使得平均值中的两个端点接收内部点的重量的一半。对于m = 2 的修改后的Daniell内核,平滑是

^ x t= x t - 2 +2 x t - 1 +2 x t +2 x t + 1 + x t + 2 8= 0.125 x t - 2 + 0.25 x t - 1 + 0.25 x t + 0.25 x t + 1 + 0.125 x t + 2x^t=xt−2+2xt−1+2xt+2xt+1+xt+28=0.125xt−2+0.25xt−1+0.25xt+0.25xt+1+0.125xt+2

在R中,命令内核(“modified.daniell”,2)将列出刚刚使用的加权系数。

可以对Daniell内核或修改后的Daniell内核进行卷积(重复),以便将平滑再次应用于平滑值。通过在更宽的时间间隔内取平均值,可以产生更广泛的平滑效果。例如,为了重复丹尼尔内核上起因于一个丹尼尔内核与平滑值= 2  = 2时,公式将是

^ ^ x t= ^ x t - 2 + ^ x t - 1 + ^ x t + ^ x t + 1 + ^ x t + 2 5x^^t=x^t−2+x^t−1+x^t+x^t+1+x^t+25

这是在任一方向上的两个时间段t内的平滑值的平均值。

在R中,命令内核(“daniell”,c(2,2))将提供系数,这些系数将作为权重应用于对两个平滑中m = 2 的回旋Daniell内核的原始数据值求平均值。结果是

 coef [-4] = 0.04 
coef [-3] = 0.08 
coef [-2] = 0.12 
coef [-1] = 0.16 
coef [0] = 0.20 
coef [ 1] = 0.16 
coef [2] = 0.12 
coef [3] = 0.08 
coef [4] = 0.04

这会生成平滑公式

^ x t=0.04xt-4+0.08xt-3+0.12xt-2+0.16xt-1+0.20xt+0.16xt+1+0.12xt+2+0.08xt+3+0.04xt+4。x^t=0.04xt−4+0.08xt−3+0.12xt−2+0.16xt−1+0.20xt+0.16xt+1+0.12xt+2+0.08xt+3+0.04xt+4.

其中端点具有较小重量的修改方法的卷积也是可能的。命令内核(“modified.daniell”,c(2,2)) 给出了这些系数:

coef [-4] = 0.01563 
coef [-3] = 0.06250 
coef [-2] = 0.12500 
coef [-1] = 0.18750 
coef [0] = 0.21875 
coef [1] = 0.18750 
coef [2] = 0.12500 
coef [3] = 0.06250 
coef [4] = 0.01563

因此,中心值的加权比未修改的Daniell内核略重。

当我们平滑周期图时,我们在频率间隔而不是时间间隔上进行平滑。请记住,周期图是在基本频率ω确定Ĵ Ĵ/ NĴ = 1,2,...,ñ / 2。让(ω Ĵ )表示在频率ω的周期图值Ĵ = Ĵ/ N。当我们使用带参数m的Daniell内核来平滑周期图时,平滑值\(\ hat {I}(\ omega_j)\)是范围(jm/ n到(j)中频率的周期图值的加权平均值+ m/ n。^ 我(ωĴ)I^(ωj)

带宽

带宽应该足以平滑我们的估计,但是如果我们使用太大的带宽,我们将过多地平滑周期图并且错过看到重要的峰值。在实践中,通常需要一些实验来找到提供合适平滑的带宽。

带宽主要由平滑中平均值的数量控制。换句话说,Daniell内核的m参数以及内核是否被卷积(重复)会影响带宽。

注意:   带有图表的带宽R报告与使用上述公式计算的值不匹配。请参阅第12页的脚注。190您的文字作为解释。

R代码

使用Daniell内核对周期图进行平均/平滑可以使用两个命令的序列在R中完成。第一个定义了Daniell内核,第二个定义了平滑周期图。

例如,假设观察到的序列被命名为x,我们希望使用具有m = 4的Daniell内核来平滑周期图。命令是

 mvspec(x,k,log =“no”)

第一个命令创建平滑所需的加权系数,并将它们存储在名为k的向量中。(将它称为k是任意的。它可以被称为任何东西。)第二个命令要求基于系列x的周期图的谱密度估计,使用存储在k中的加权系数,该图将是普通的比例,不是对数刻度。

如果需要卷积,则可以将内核命令修改为类似k = kernel(“daniell”,c(4,4))的内容。

有两种方法可以实现修改后的Daniell内核。您可以更改内核命令以引用“modified.daniell”而不是“daniell”,也可以跳过使用内核命令并在mvspec命令中使用spans参数。

spans参数给出了所需修改的Daniell内核的长度(= 2 m +1)。例如,m = 4 的修改后的Daniell内核长度L = 2 m +1 = 9,因此我们可以使用该命令

mvspec(x,spans = 9,log =“no”)

可以使用每次通过m = 4 的修改的Daniell内核的两次通过

mvspec(x,spans = c(9,9),log =“no”)

示例:此示例将使用文本中多个位置使用的鱼类招募系列,包括第4章中的几个位置。该系列包含n = 453个月度值,用于衡量南半球位置的鱼群数量。数据位于文件recruit.dat中。

可以使用命令创建原始周期图(或者可以使用第6课中给出的方法创建原始周期图)。

mvspec(x,log =“no”)

请注意,在刚刚给出的命令中,我们省略了为平滑提供权重的参数。

原始周期图如下:

图形

下一个图是使用具有m = 4 的Daniell核的平滑周期图。注意,平滑的一个效果是未平滑版本中的主峰现在是第二高峰。之所以发生这种情况是因为峰值在未平滑的版本中如此清晰地定义,当我们用几个周围值对其进行平均时,高度会降低。

图形

下一个图是一个平滑的周期图,使用Daniell内核的两次传递,每次传递m = 4。请注意它是如何比以前更平滑。

图形

要了解两个主要峰的位置,请为mvspec输出指定一个名称,然后列出它。例如,

specvalues = mvspec(x,k,log =“no”)
specvalues $ spec

您可以筛选输出以查找峰值出现的频率。频率和频谱密度估计单独列出,但顺序相同。确定最大光谱密度,然后找到相应的频率。

这里,第一个峰值的频率≈0208。与此周期相关的周期(月数)= 1 / .0208 = 48个月。第二个峰值出现在频率≈0.083333。相关时期= 1 / .08333 = 12个月。第一个峰值与厄尔尼诺天气效应有关。第二个是通常12个月的季节性影响。

这两个命令将垂直虚线放在峰值密度的近似位置处的(估计的)谱密度图上。

abline(v = 1/44,lty =“dotted”)
abline(v = 1/12,lty =“dotted”)

这是结果图:

图形

我们已经足够平滑,但出于演示目的,下一个情节是结果

mvspec(x,spans = c(13,13),log =“no”)

这使用两次修改的Daniell内核,每次长度L = 13(所以m = 6)。情节有点平滑,但不是很多。顺便说一句,峰值与上面的图中完全相同。

图形

绝对有可能过度平滑。假设我们使用总长度= 73(m = 36)的修改过的Daniell内核。命令是

mvspec(x,spans = 73,log =“no”)

结果如下。高峰消失了!

图形

光谱密度的参数估计

谱密度估计的平滑方法称为非参数方法,因为它不使用任何参数模型用于基础时间序列过程。另一种方法是参数方法,该方法需要找到该系列的最佳拟合AR模型,然后绘制该模型的谱密度。该方法由一个定理支持,该定理表明任何时间序列过程的谱密度可以通过AR模型的谱密度(某种顺序,可能是高顺序)来近似。

在R中,使用命令/功能spec.ar可以轻松完成谱密度的参数估计。像spec.ar(x,log =“no”)这样的命令将导致R完成所有工作。同样,为了识别峰值,我们可以通过执行specvalues = spec.ar(x,log =“no”)之类的操作为spec.ar结果指定名称。

对于鱼类补充实例,结果如下。注意,绘制的密度是AR(13)模型的密度。我们当然可以为这些数据找到更简约的ARIMA模型。我们只是使用该模型的谱密度来近似观察到的序列的谱密度。

图形

估计的谱密度的出现与以前相同。估计的厄尔尼诺峰位于略微不同的位置 - 频率约为0.024,周期约为1 / 0.024 =约42个月。

德趋势

在进行光谱分析之前,应该对一系列进行去趋势分析。趋势将导致在低频率下的这种主要谱密度,从而不会看到其他峰值。默认情况下,R命令mvspec使用线性趋势模型执行去趋势。也就是说,使用来自回归的残差来估计谱密度,其中y变量=观测数据和x变量= t。如果存在不同类型的趋势,例如二次方,则可以使用多项式回归来在探索估计的谱密度之前使数据去趋势化。需要注意的是R命令spec.ar,但默认情况下不进行解趋势。

平滑器在原始数据中的应用

请注意,此处描述的平滑器也可以应用于原始数据。Daniell内核及其修改只是移动平均(或加权移动平均)平滑器。

还有问题吗?联系我们!

 

大数据部落 -中国专业的第三方数据服务提供商,提供定制化的一站式数据挖掘和统计分析咨询服务

统计分析和数据挖掘咨询服务:y0.cn/teradat(咨询服务请联系官网客服

点击这里给我发消息QQ:3025393450

【服务场景】  

科研项目; 公司项目外包;线上线下一对一培训;数据采集;学术研究;报告撰写;市场调查。

【大数据部落】提供定制化的一站式数据挖掘和统计分析咨询服务

【大数据部落】大数据部落提供定制化的一站式数据挖掘和统计分析咨询服务

猜你喜欢

转载自www.cnblogs.com/tecdat/p/10524347.html