R 时间序列范围未达到我的数据的结束日期

R Time Series horizon doesn't reach the the end date of my data

我有从 2015-12-01 到 2016-07 的连续每日数据-01.Since它已经被汇总了,这些是具有相应数量的唯一日期。 但是,每当我使用 ts() 和 plot.ts() 将数据转换为时间序列时。灌封显示我的 tseries 从未达到 2016-07-01,但仅在 2016-0 左右停止。而 df 数据的 ggplot 显示了理想的图形。

df

       tseries = ts(df$F, start = c(2015,12,01), end = c(2016,07,01), frequency = 208)
       plot.ts(tseries)

t系列

dfplotting

tldr; 您在 ts 中错误指定了 frequency(和 start)参数;要么提供正确的 frequency/start 参数,要么改用 zoo 包。


frequencyts中的作用存在误解。频率参数取决于数据的格式。例如,如果您有一年的每日数据,那么 frequency 将为 365,因为一年有 365 天(忽略闰年)。 start 然后必须匹配您的数据的 frequency。对于每日数据,start 需要提供开始日期的那一天(共 365 天)。

让我们以 1 天为步长生成从 01/12/2015 到 01/07/2016 的日期序列。

dates <- seq(as.Date("2015/12/01"), as.Date("2016/07/01"), by = "1 day")

接下来我们每天生成一些样本数据。

set.seed(2017);
x <- 100 - cumprod(1 + rnorm(length(dates), 0.01, 0.05))

我们创建一个 ts 对象并绘图。

tseries <- ts(
    x,
    start = c(2015, as.numeric(format(dates[1], "%j"))),
    frequency = 365)
plot.ts(tseries);

请注意 as.numeric(format(dates[1], "%j")) 是一年中的哪一天对应于 01/12/2015;我们可以检查 tseries 来确认

tseries;
#Time Series:
#Start = c(2015, 335)
#End = c(2016, 183)
#Frequency = 365
#  [1] 98.91829 98.91165 98.86055 98.94935 98.94251 98.90804 99.00404 98.99416
#  [9] 98.99744 98.90906 98.87945 98.78015 98.81349 98.78344 98.85828 98.77868
# [17] 98.79591 98.70452 98.76475 98.80961 98.78934 98.82882 98.70564 98.79937
# [25] 98.74176 98.72526 98.73731 98.68448 98.72841 98.70941 98.74059 98.71282
# [33] 98.66201 98.71089 98.67883 98.45837 98.52216 98.36389 98.37027 98.37203
# [41] 98.44200 98.42452 98.46624 98.52957 98.53985 98.44419 98.42480 98.33157
# [49] 98.23825 98.11436 97.96746 98.10811 98.07050 98.05331 98.18894 98.26369
# [57] 98.10984 97.95076 97.95309 97.96750 97.86906 97.82784 97.95063 97.92361
# [65] 97.80495 97.75671 97.78848 97.70829 97.60183 97.67609 97.51230 97.57353
# [73] 97.62052 97.79321 97.57016 97.18006 97.25852 97.25187 97.13964 97.10216
# [81] 97.44889 97.22116 97.20823 97.16990 97.13855 97.10450 96.93565 96.79920
# [89] 96.82153 96.84342 96.86261 96.78734 97.08032 97.19380 97.30147 97.21610
# [97] 97.23463 97.39229 97.47829 97.56498 97.53851 97.34443 97.32700 97.18775
#[105] 97.29549 97.53480 97.44546 97.38659 97.23025 97.29599 97.36905 97.38267
#[113] 97.30787 97.36199 97.41452 97.31361 96.98821 96.92238 96.78418 96.87618
#[121] 96.78397 96.79244 96.80496 96.87619 97.00473 96.77162 96.61101 96.91671
#[129] 96.70001 96.75187 96.85348 96.77186 96.59937 96.72491 96.81188 96.80928
#[137] 96.71012 96.39952 96.49581 96.50415 96.56627 96.51843 96.72303 96.59825
#[145] 96.71873 96.65840 96.69296 96.86833 96.79887 96.71224 96.75685 96.76380
#[153] 96.63228 96.74893 96.51374 96.66589 96.61319 96.75718 96.62919 96.39169
#[161] 96.47066 96.59940 96.52173 96.50408 96.22667 96.03279 96.01529 95.80778
#[169] 95.77858 95.90350 96.15438 95.86239 95.99304 95.89340 95.70911 95.74620
#[177] 95.66125 95.81266 95.56044 95.36743 95.35368 95.54013 95.17587 95.07042
#[185] 94.67955 94.57888 94.57412 94.37998 94.36650 93.92591 93.82484 93.71398
#[193] 93.66040 93.60182 93.51263 93.54927 92.93701 92.72238 92.63081 92.85764
#[201] 92.61470 92.28663 92.28687 92.17086 92.31845 92.11827 91.72824 91.78567
#[209] 91.68942 91.34734 90.89702 91.32072 91.11538 90.83474

请注意,2015 年第 335 天对应于 2015 年 12 月 1 日,2016 年第 183 天对应于 2016 年 7 月 1 日。


作为替代方案,我们也可以使用 zoo 包,它的好处是我们不必计算出正确的 frequency(和 start)参数。

library(zoo);
tseries <- zoo(x, dates);
plot.zoo(tseries);