我不明白时间序列对象是如何在R中创建的。我有数据:data = c(101,99,97,95,93,91,89,87,85,83,81)
(为简洁起见,数据集较小),该数据从2016-07-05
到2016-07-15
,连续11天每天采集一次,根据docs,每天采集数据的频率应为7,但我不了解start
和end
参数的值,对于start
,文档中说:the time of the first observation. Either a single number or a vector of two integers, which specify a natural time unit and a (1-based) number of samples into the time unit.
我不明白1-based number of samples
是什么意思。我试着谷歌它,但它没有帮助。
如果只使用2016,7
作为开始日期和结束日期,则会得到:
Time Series:
Start = c(2016, 7)
End = c(2016, 7)
Frequency = 7
[1] 101
如果使用2016,7,1
和2016,7,11
作为开始日期和结束日期,仍然会得到相同的输出。
我哪里做错了?
3条答案
按热度按时间2uluyalo1#
我认为最好的方法是切换到xts或zoo,因为根据另一个问题here,ts()很难进行每日观察,因为年与年之间的天数不同。
6qfn3psc2#
据我理解,
ts()
函数中的单位是年,所以这里frequency
应该设置为365因此,start
和end
也应该表示天。(我相信)要把握好时机,start
和end
应该是所需间隔与年初的天数差(在您的具体情况下,分别为186和196)。这些数字的适当性可通过以下方式检查:将这些信息嵌入到代码中,对
ts()
的调用应为:高温加热
but5z9lq3#
ts
对象中的Frequency
参数确定系列在单元中具有多少个样本。因此,当您选择频率时,它假定一个单元。此单元将用于设置start
和end
参数。例如,如果你设置
frequency = 365
,你假设单位是年,并且在单位之间有365个采样点,让我们在2016-07-05这个单位中确定你的序列的第一个点,年显然是2016年,在这一年内我取as.Date("2016-07-05") - as.Date("2016-01-01") + 1
,即187。注意,我假设第一个采样日的索引为1,而不是@Helloworld的解中使用的0。因此,start = c(2016, 187)
。另一方面,如果我们想使用
frequency = 7
,我们需要使用week作为单位,并使用它来指定start
。实际上,我们可以获得week(isoweek,但其他条件也可以)和一周中的哪一天,假设星期一是第一天(同样,您可以更改此条件)对于
frequency = 7
,我们将时间序列定义为如果您绘制上面的任何
ts
对象,您将得到一个基于所选单位的数值轴。创建于2023年3月5日,使用reprex v2.0.2
当您将某些函数应用于
ts
对象时,您选择的频率是相关的,因为频率可以作为查找季节性的周期(例如,decompose()
函数)