Подходящие способы сглаживания периодических временных рядов?

У меня есть периодический временной ряд температуры воздуха за несколько лет, и я хочу иметь возможность прогнозировать для него будущие значения.

Я рассчитал среднее значение за доступные годы для каждого часа года, что работает нормально, но явно довольно шумно, поскольку у меня есть данные только за 4 года.

  • Одним из способов продвижения вперед может быть сглаживание по Гауссу, но лучшим вариантом может быть подгонка к нему сплайна.
  • I searched and found lm.circular, which looks like a feasible solution candidate.
    • It doesn't have any way of specifying a formula, so no way of asking it to fit a spline.
    • Я попробовал lm.circular с помощью полинома 1-го порядка, но возникла практическая проблема: не хватило памяти. Обратите внимание, что стандартный lm выполняется почти мгновенно и не использует заметной памяти для тех же данных.
    • Я также пытался попросить его соответствовать фон Мизесу (type = 'c-l'), и он попросил меня указать параметр «инициализация», и я не мог действительно понять из описания, что я должен был поместить в «инициализацию». '?
  • Использование обычного lm на самом деле не вариант, так как он дает ужасные результаты в любом конце периода.
  • Я полагаю, что другая возможность - использовать ets/HoltWinters с частотой временных рядов, равной количеству часов в году?

Я не совсем уверен, какой путь лучше, но я подозреваю, что это довольно распространенная проблема, и, вероятно, есть очень стандартные способы ее решения?


person Hugh Perkins    schedule 28.10.2012    source источник


Ответы (2)


Хорошо, я нашел супер-простой способ в конце концов. Вам не нужны никакие причудливые пакеты, вы просто используете стандартные lm и применяете косинус и синус к временной шкале:

model <- lm( y ~ I(sin(x/periodlength*2*pi) * I(cos(x/periodlength*2*pi)), trainingdata )

... .тогда вы можете настроить эту формулу на свое усмотрение.

(Редактировать: о да, и это очень быстро и не использует много памяти).

person Hugh Perkins    schedule 28.10.2012
comment
Это один из способов, но он может привести к модели, которая не имеет никакого смысла (и дает довольно плохие результаты). - person Martin Thoma; 31.08.2016

Я использовал ARIMA для прогнозирования будущих значений

Это так

fit <- auto.arima(values)//for getting order of ARIMA
//here values-> time series data

future.values<-predict(fit,n.ahead=24)//used for predicting future values
//n.ahead-> u can give the maximum number of values you want to predict

Следующая ссылка поможет вам понять больше деталей

http://www.jstatsoft.org/v27/i03/paper

Примечание. «Значения» должны быть данными временного ряда. Если нет, мы можем преобразовать данные временного ряда, такие как values.ts‹-ts(values,frequency=)

person Nandu    schedule 29.10.2012
comment
Может ли arima обрабатывать нестационарные ряды? Как это соотносится с регрессией и ets/HoltWinters? - person Hugh Perkins; 29.10.2012
comment
Я попробовал auto.arima; Признаюсь, я не понимал, что должен нормализовать вещи. Полученная потеря была просто в порядке для меня. Глядя на график, он: игнорирует любую тенденцию и как бы цыплята из-за того, что предсказывает вещи, чем дальше в будущем он предсказывает, и просто производит затухающие колебания, асимптотические к прямой линии, насколько я могу видеть? - person Hugh Perkins; 29.10.2012