当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


R stl Loess 时间序列的季节分解


R语言 stl 位于 stats 包(package)。

说明

使用 loess(缩写 STL)将时间序列分解为季节性、趋势和不规则分量。

用法

stl(x, s.window, s.degree = 0,
    t.window = NULL, t.degree = 1,
    l.window = nextodd(period), l.degree = t.degree,
    s.jump = ceiling(s.window/10),
    t.jump = ceiling(t.window/10),
    l.jump = ceiling(l.window/10),
    robust = FALSE,
    inner = if(robust)  1 else 2,
    outer = if(robust) 15 else 0,
    na.action = na.fail)

参数

x

要分解的单变量时间序列。这应该是类 "ts" 的对象,其频率大于 1。

s.window

根据 Cleveland 等人的说法,字符串 "periodic" 或用于季节提取的黄土窗口的跨度(以滞后为单位),它应该是奇数且至少为 7。这没有默认值。

s.degree

季节提取中 locally-fitted 多项式的次数。应该是零或一。

t.window

用于趋势提取的黄土窗口的跨度(以滞后为单位),应该是奇数。如果 NULL ,则采用默认值 nextodd(ceiling((1.5*period) / (1-(1.5/s.window))))

t.degree

趋势提取中 locally-fitted 多项式的次数。应该是零或一。

l.window

用于每个子系列的 low-pass 过滤器的 loess 窗口的跨度(以滞后为单位)。默认为大于或等于 frequency(x) 的最小奇整数,建议使用该值,因为它可以防止趋势和季节性分量之间的竞争。如果不是奇数,则其给定值将增加到下一个奇数。

l.degree

子系列 low-pass 滤波器的 locally-fitted 多项式的次数。必须是 0 或 1。

s.jump, t.jump, l.jump

整数至少为一以提高相应平滑器的速度。线性插值发生在每个 *.jump 值之间。

robust

逻辑指示是否在 loess 过程中使用稳健拟合。

inner

整数; ‘inner’(反向拟合)迭代的次数;通常很少 (2) 次迭代就足够了。

outer

整数; ‘outer’鲁棒性迭代的次数。

na.action

对缺失值采取行动。

细节

季节性分量是通过 loess 平滑季节性 sub-series 找到的(所有 1 月值的序列,...);如果s.window = "periodic" 平滑被有效地替换为取均值。季节性值被删除,其余部分被平滑以找到趋势。总体水平从季节性成分中去除并添加到趋势成分中。这个过程要重复几次。 remainder 分量是季节性加趋势拟合的残差。

生成的类 "stl" 对象的几种方法,请参阅 plot.stl

stl 返回带有组件的类 "stl" 的对象

time.series

包含 seasonaltrendremainder 列的多个时间序列。

weights

最终的稳健权重(如果拟合不稳健,则均为 1)。

call

匹配的调用。

win

整数(长度为 3 的向量),其跨度用于 "s""t""l" 平滑器。

deg

具有这些平滑器多项式次数的整数(长度为 3)向量。

jump

整数(长度 3)向量,其中 ‘jumps’(跳过)用于这些平滑器。

ni

内部迭代次数

no

外部鲁棒性迭代次数

注意

这与 S-PLUS 中的 stl 函数类似但不完全相同。 S-PLUS 给出的 remainder 分量是来自该函数的 trendremainder 系列的总和。

例子

require(graphics)

plot(stl(nottem, "per"))
plot(stl(nottem, s.window = 7, t.window = 50, t.jump = 1))

plot(stllc <- stl(log(co2), s.window = 21))
summary(stllc)
## linear trend, strict period.
plot(stl(log(co2), s.window = "per", t.window = 1000))

## Two STL plotted side by side :
        stmd <- stl(mdeaths, s.window = "per") # non-robust
summary(stmR <- stl(mdeaths, s.window = "per", robust = TRUE))
op <- par(mar = c(0, 4, 0, 3), oma = c(5, 0, 4, 0), mfcol = c(4, 2))
plot(stmd, set.pars = NULL, labels  =  NULL,
     main = "stl(mdeaths, s.w = \"per\",  robust = FALSE / TRUE )")
plot(stmR, set.pars = NULL)
# mark the 'outliers' :
(iO <- which(stmR $ weights  < 1e-8)) # 10 were considered outliers
sts <- stmR$time.series
points(time(sts)[iO], 0.8* sts[,"remainder"][iO], pch = 4, col = "red")
par(op)   # reset

作者

B.D. Ripley; Fortran code by Cleveland et al (1990) from ‘netlib’.

参考

R. B. Cleveland, W. S. Cleveland, J.E. McRae, and I. Terpenning (1990) STL: A Seasonal-Trend Decomposition Procedure Based on Loess. Journal of Official Statistics, 6, 3-73.

也可以看看

plot.stl 用于 stl 方法; loess 包中的 stats (实际上并未在 stl 中使用)。

StructTS 用于不同类型的分解。

相关用法


注:本文由纯净天空筛选整理自R-devel大神的英文原创作品 Seasonal Decomposition of Time Series by Loess。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。