Вам не обязательно создавать новые типы объектов с нуля; вы всегда можете привести к другим классам, в том числе ts
, как вам нужно. zoo
или xts
, возможно, наиболее полезны и интуитивно понятны, но есть и другие. Вот ваш пример, приведенный в качестве объекта зоопарка, который мы затем приводим к классу ts
для использования в acf()
.
## create the data
x <- as.Date("2008-01-01") + c(30,60,90,120,150)
df = data.frame(datefield=x,test=1:length(x))
## load zoo
require(zoo)
## convert to a zoo object, with order given by the `datefield`
df.zoo <- with(df, zoo(test, order.by = x))
## or to a regular zoo object
df.zoo2 <- with(df, zooreg(test, order.by = x))
Теперь мы можем легко перейти к объекту ts
, используя метод as.ts()
:
> as.ts(df.zoo)
Time Series:
Start = 13920
End = 14040
Frequency = 0.0333333333333333
[1] 1 2 3 4 5
> ## zooreg object:
> as.ts(df.zoo2)
Time Series:
Start = 13909
End = 14029
Frequency = 1
[1] 1 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
[21] NA NA NA NA NA NA NA NA NA NA 2 NA NA NA NA NA NA NA NA NA
[41] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
[61] 3 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
[81] NA NA NA NA NA NA NA NA NA NA 4 NA NA NA NA NA NA NA NA NA
[101] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
[121] 5
Обратите внимание на два способа представления объектов (хотя мы могли бы сделать версию zooreg такой же, как стандартный объект zoo, установив для аргумента frequency
значение 0.03333333
):
> as.ts(with(df, zooreg(test, order.by = datefield,
+ frequency = 0.033333333333333)))
Time Series:
Start = 13920.0000000001
End = 14040.0000000001
Frequency = 0.033333333333333
[1] 1 2 3 4 5
Мы можем использовать объект zoo / zooreg в acf()
, и он получит правильные лаги (ежедневные наблюдения, но каждые 30 дней):
acf(df.zoo)
Является ли это для вас интуитивным или нет, зависит от того, как вы просматриваете временные ряды. Мы можем сделать то же самое с 30-дневным интервалом:
acf(coredata(df.zoo))
где мы используем coredata()
для извлечения самого временного ряда, игнорируя информацию о дате.