當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。