В чем разница между классом ts и классом timeSeries в R?

В чем разница между классом ts и классом timeSeries в R? Думаю, из-за этого у меня проблемы с HoltWinters. Я собираюсь:

data(LakeHuron)
x <- LakeHuron
before <- window(x, end=1935)
after <- window(x, start=1935)
a <- .2
b <- 0
g <- 0
model <- HoltWinters(before, alpha=a, beta=b, gamma=g)

«Ошибка в разложении (ts (x [1L: ветер], начало = начало (x), частота = f), сезонный): временной ряд не имеет или меньше 2 периодов»

хотя gamma=0.

Запуск R 2.11.1 (win32 x86) на компьютере с Windows 7 x64.


person GailH    schedule 02.10.2010    source источник
comment
не могли бы вы добавить код, который вы используете? Просто сообщение об ошибке не так информативно...   -  person Joris Meys    schedule 02.10.2010
comment
Джорис: вот код: › data(LakeHuron) › x ‹- LakeHuron › перед ‹- окном (x, end=1935) › после ‹- окном (x, start=1935) › a ‹- .2 › b ‹- 0 › g ‹- 0 › модель ‹- HoltWinters( + before, + alpha=a, beta=b, gamma=g) Ошибка в decompose(ts(x[1L:wind], start = start(x), Frequency = f), сезонный): временной ряд не имеет или меньше 2 периодов, но я нашел, в чем проблема. Когда gamma=0 и нет сезонной составляющей, функция HoltWinters ожидает, что это будет логично!! (смотри мой ответ)   -  person GailH    schedule 03.10.2010


Ответы (3)


ts происходит из пакета stats, включенного в базу R. Он полезен для обычных временных рядов, таких как месячные, квартальные, годовые, ... ряды, распространенные в государственной статистике. ts используется arima() и другими методами временных рядов, предоставляемыми базой R и ее stats пакетами. HoltWinters, который вы использовали здесь, является одним из таких примеров.

timeSeries — один из многих дополнительных классов временных рядов; этот взят из Rmetrics. Несколько представлений задач CRAN обсуждают это более подробно: TimeSeries, Эконометрика, а также Финансы.

Попробуйте документацию по ts и/или HoltWinters, чтобы разобраться с требуемым форматом. ts использует либо фиксированную дельту (например, 1/12 для месячных данных), либо частоту.

person Dirk Eddelbuettel    schedule 02.10.2010

Я нашел проблему, изучая исходный код HoltWinters. Оказывается, функция Хольта-Винтерса (для гаммы = 0 и при отсутствии сезонной составляющей) ожидает, что гамма будет логичной!! (ноль = ЛОЖЬ)

Таким образом, ввод гаммы как.logical(0) устраняет ошибку.

Йорис: спасибо за ответ, он был поучительным.

person GailH    schedule 02.10.2010
comment
Вместо этого я предлагаю вам изучить документацию. Что касается gamma, ?HoltWinters говорит: гамма: параметр гаммы, используемый для сезонного компонента. Если установлено значение «FALSE», устанавливается несезонная модель. Это не ошибка, это задокументированное поведение! Почему вы удивлены тем, что он ожидает, что gamma будет логичным, когда так написано в документации? - person Joshua Ulrich; 03.10.2010

Это два отдельных класса. ts содержится в базовой установке R, а функция HoltWinters() требует ts временных рядов.

timeSeries имеет совершенно другую структуру. Это также специально направлено на финансы. Большая разница с ts заключается в том, что он допускает нерегулярные временные ряды. Класс ts может содержать только ряды с равными интервалами.

Внутри ts есть слот «tsp», который содержит начало, конец и частоту временного ряда.

> test <- ts(1:10, frequency = 4, start = c(1959, 2))
> slotNames(test)
[1] ".Data"    "tsp"      ".S3Class"
> slot(test,"tsp")
[1] 1959.25 1961.50    4.00

Именно этот слот нужен HoltWinters(), но отсутствует в timeSeries. Там информация о времени содержится в двух слотах, слоте позиции и слоте формата. Вместе они определяют время как объект timeDate.

> data = as.matrix(MSFT[, 4])
>    charvec = rownames(MSFT)
>    Close = timeSeries(data, charvec, units = "Close")
> slotNames(Close)
[1] ".Data"         "units"         "positions"     "format"        "FinCenter"     "recordIDs"     "title"         "documentation"
> head(slot(Close,"positions"))
[1] 970012800 970099200 970185600 970444800 970531200 970617600
> slot(Close,"format")
[1] "%Y-%m-%d"
person Joris Meys    schedule 02.10.2010