并提前感谢您的帮助。
我正在处理一个周末季节性时间序列,但是当我使用de decompose()
函数来获取趋势,季节性和随机数据时,我得到了som NA。这是代码:
myts <- c(5,40,43,65,95,111,104,124,133,263,388,1488,796,1209,707,52,0,76,306,1219,671,318,125,192,128,33,5,17,54,55,74,133,111,336,321,34,74,210,280,342,708,232,479,822,188,104,50,24,3,1,0,0,8,55,83,75,104,163,169,259,420,1570,243,378,1036,834,856,17,8,88,359,590,768,1461,443,128,89,192,37,21,51,62,78,125,123,259,600,60,59,180,253,379,766,375,828,502,165,114,76,10,2,1,0,0,46,71,95,102,132,212,268,330,428,1635,302,461,993,1497,1137,29,2,219,436,817,979,1226,317,134,121,211,35,47,87,83,97,177,153,345,635,48,84,234,258,358,780,470,700,701,331,67,0,0,0,0,0,0)
myts <- ts(myts, start=c(2015,17), frequency = 52)
modelo1 <- decompose(myts, "additive")
plot(modelo1)
正如您在此图片中所看到的,在我的趋势和随机数据的开头和结尾都有一些NA。我想知道为什么以及如何解决这个问题,以便从数据中提取趋势:
再次感谢您的帮助。
答案 0 :(得分:1)
从decompose()
函数本身的文档中,趋势分量使用移动平均值估算,对称窗口具有相等权重。
由于你的频率是52,它是一个偶数,所以前25.5和后25.5加上自己的值被平均,以便产生第一个&#34;平均值&#34; 。
当您应用过滤时,由于前26个点的值尚未存在,因此对于时间序列的趋势组件中的前26个值,您将获得恰好25 NA
。
随机分量的计算基本上是:
$Observed - $Trend - $Seasonal = Random
因为季节性组件中有NA
个值,因此对于需要算术运算的Random,在同一位置也会得到NA
个值。
附加证明:
这些是您指定frequency=52
后应在移动平均线中应用的权重。此移动平均线会产生您所知的趋势分量:
c(0.5, rep_len(1, 51), 0.5)/52
[1] 0.009615385 0.019230769 ... 0.019230769 0.009615385
因此,将这些权重应用于第一个非NA值,您可以执行以下操作:
sum(
as.vector(myts[1])*0.009615385,
as.vector(myts[2:52])*0.019230769,
as.vector(myts[53])*0.009615385
)
或者您也可以使用filter
函数,默认情况下应用双边移动平均线:
coef1 <- c(0.5, rep_len(1, 51), 0.5)/52
stats::filter(myts, coef1)
在任何情况下,您都会看到与分解的时间序列modelo1$trend
完全相同的结果。由于缺少前26个值,因此最终得到NA
s。
对于frequency=12
分解的时间序列,这就是我所看到的例子:
Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov
1946 NA NA NA NA NA NA 23.98433 23.66213 23.42333 23.16112 22.86425
1947 22.35350 22.30871 22.30258 22.29479 22.29354 22.30562 22.33483 22.31167 22.26279 22.25796 22.27767
1948 22.43038 22.43667 22.38721 22.35242 22.32458 22.27458 22.23754 22.21988 22.16983 22.07721 22.01396
1949 22.06375 22.08033 22.13317 22.16604 22.17542 22.21342 22.27625 22.35750 22.48862 22.70992 22.98563