【问题标题】:creating time series for data sampled daily in R为 R 中每天采样的数据创建时间序列
【发布时间】:2016-08-01 16:42:43
【问题描述】:

我不明白如何在 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 作为开始和结束日期,我仍然会得到相同的输出。

我做错了什么?

【问题讨论】:

    标签: r time-series


    【解决方案1】:

    我认为最好的方法是切换到 xts 或 zoo,因为根据另一个问题 here,ts() 难以进行日常观察,因为天数因年而异。

    【讨论】:

    • 我正在使用时间序列进行预测。我尝试使用xts,它以我期望的格式保存数据(如时间戳和该时间戳的值)。但是,我使用 xts 对象调用forecast 得到的输出是一个不再包含这些时间戳的ts 对象。我只看到价值观。
    • 解决此问题的唯一方法是手动将日期添加回 ts 对象,如此处所述stackoverflow.com/a/10347205/5795592 不知道仅使用带有日期的 data.frame 是否更容易列。
    【解决方案2】:

    据我了解,ts() 函数中的单位是年。因此,此处frequency 应设置为 365(每年的天数)。因此,start 和end 也应该代表天数。但是,(我相信)要获得正确的时机,start 和 end 应该是从年初到所需间隔的天数的差异(在您的具体情况下,分别为 186 和 196)。可以通过以下方式检查这些数字的适当性:

    as.numeric(as.Date("2016-07-05") - as.Date("2016-01-01"))
    [1] 186
    as.numeric(as.Date("2016-07-15") - as.Date("2016-01-01"))
    [1] 196
    

    将这些信息嵌入到您的代码中,对ts() 的调用应该是:

    data = c(101,99,97,95,93,91,89,87,85,83,81)
    ts(data, start = c(2016, 186), end = c(2016, 196), frequency = 365)
    # which yielded
    Time Series:
    Start = c(2016, 186) 
    End = c(2016, 196) 
    Frequency = 365 
     [1] 101  99  97  95  93  91  89  87  85  83  81
    

    HTH

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-06-13
      • 2020-12-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-15
      • 2018-12-04
      • 1970-01-01
      相关资源
      最近更新 更多