【发布时间】:2019-09-13 17:32:42
【问题描述】:
考虑以下创建两个ts 时间序列foo & bar 的代码:
x = 1:22
foo = ts(x, start = 1.5, end = 106.5, frequency = 0.2)
bar = ts(x, start = 2.5, end = 107.5, frequency = 0.2)
foo 和 bar 对象是相同的,除了 start 和 end 值:对于 bar,它们都大 1。两者都不是 start /end 值恰好是频率的倍数,但这不应该造成问题。 确实,对于 foo 和 bar 都可以成功提取任意大小的窗口:
stats::window(foo, start = 20, end = 30) # works fine
stats::window(bar, start = 20, end = 30) # works fine too
但如果我尝试为这些窗口分配值,则只有 foo 有效:
window(foo, start = 20, end = 30) <- NA # works fine
window(bar, start = 20, end = 30) <- NA # ERROR!!!
attr(y, "tsp")
window<-.ts 的内部工作基本上调用了 stats::window 函数,所以它应该和显式调用 window() 函数一样工作。
我的理解是,在 ts 的定义中,“开始”和“结束”只是任意单位,例如:秒。所以ts(x, start = 1.5, end = 106.5, frequency = 0.2) 可能意味着:从 1.5 秒开始到 106.5 秒结束的系列,其中每个数字代表 5 秒(1/频率)。
然后,stat::window 函数只选择其起始边界内的值,例如:从 20 到 30 秒。事实上,两个窗口的time() 是相同的,并且似乎证实了这一点:
time(window(foo, start = 20, end = 30))
[1] 21.5 26.5
time(window(bar, start = 20, end = 30))
[1] 22.5 27.5
一个系列从 1.5s 开始,另一个系列从 2.5s 开始这一事实对窗口过程绝对没有影响。然而,当给它赋值时,我的逻辑就崩溃了。
从bar中删除一个循环,事情变得更加疯狂:
qux = ts(1:21, start = 2.5, end = 102.5, frequency = 0.2)
window(qux, start = 20, end = 30) <- NA #ERROR!!
`window
另一个错误!我想我无法理解一些基本概念。 那么我在这里错过了什么?
【问题讨论】:
标签: r time-series