Ошибка в автокорреляционной функции (ACF): отсутствуют значения в объекте - PullRequest
0 голосов
/ 11 декабря 2018

Я работаю с данными временных рядов, структура которых выглядит следующим образом:

str(tseries)
 Time-Series [1:479] from 1979 to 2019: 0.0258 0.0234 0.0055 0.0302 0.0305 0.0232 0.025 0.0234 0.0074 0.0089 ...

Я пытаюсь провести анализ временных рядов и поэтому использую функцию автокорреляции (ACF).Сначала он смог вернуть график при запуске:

acf(tseries)

И все же он выдал ошибку при попытке выполнить дифференцированную и зарегистрированную функцию acf ():

> acf(diff(log(tseries)))
Error in na.fail.default(as.ts(x)) : missing values in object
In addition: Warning message:
In log(tseries) : NaNs produced

Что делаетпропущенные значения это относится?Потому что я позаботился о том, чтобы в наборе данных, над которым я работаю, вообще не было пропущенных значений, если это то, что он означает.

Ответы [ 2 ]

0 голосов
/ 11 декабря 2018

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

Добавление константы может решить вашу проблему, но это зависит от того, чточисла на самом деле означают, имеет ли это смысл / является ли это правильным подходом.
Как правило, ARIMA и автокорреляция означают, что любые измеряемые вами значения зависят от предыдущих значений.Например, если я хочу предсказать температуру завтрашнего дня, я смотрю на сегодняшнюю дату: 2 связаны между собой.
Вот что означает проверка на автокорреляцию: поиск корреляции значений в ряду с другими значениями, близкими в этом же ряду..

В некоторых случаях эффект является более мультипликативным, и увеличение от 1000 до 1100 более вероятно, чем увеличение с 1 до 101. Если оно полностью мультипликативное, увеличение от 1000 до 1100 также вероятнокак увеличение от 1 до 1,1
В этих случаях логарифм имеет смысл, различия в журнале указывают на процентное увеличение или уменьшение.Это означает, что журнал не может обработать переключение в знаке: вы не можете перейти от 1 к -1, умножив или разделив на любое положительное число.

Это также может зависеть от того, что означают ваши фактические значения,Любой поймет, что повышение температуры с 1º C до 2º C столь же значимо, как и увеличение с 33,8º F до 35,6º F, даже если первое выглядит как увеличение на 100%, а второе - только на 5%,Это означает, что логарифм температуры в градусах Цельсия или Фаренгейта не имеет смысла, хотя иногда логарифм температуры в градусах Кельвина или Ранкина имеет смысл.

На самом деле большинство проблем будет представлять собой сочетание линейных и мультипликативных эффектов,где увеличение с 1000 до 1100 будет таким же вероятным, как увеличение с 1 до 2 или что-то подобное.Так что это зависит от того, что представляют ваши данные, и вам нужно найти какой-то расчет, для которого автокорреляция является самой сильной.И на самом деле, предложение добавить некоторую константу к вашему a и взять журнал хорошо работает для этого!

На вопрос о том, какую константу выбрать, вы должны ответить для себя: «это увеличение простотак же вероятно, как и другие? "
В моих примерах сказать, что увеличение с 1000 до 1100 так же вероятно, как увеличение с 1 до 2, означает решение уравнения (1000+c)/(1100+c)==(1+c)/(2+c), где c - это постояннаянаходясь в поиске.Здесь получается 9.09, хотя функция автокорреляции не чувствительна к небольшим различиям.

И вы можете немного поиграть с ней, или, возможно, попробовать другие виды функций.Чем сильнее автокорреляция, тем лучше ваша подгонка.

0 голосов
/ 11 декабря 2018

Если ваш временной ряд имеет какие-либо отрицательные значения, в результате журнала будет NaN, что приведет к вашей ошибке пропущенных значений.

> a <- c(-1,2,3,4,5,6)
> acf(diff(log(a)))
Error in na.fail.default(as.ts(x)) : missing values in object
In addition: Warning message:
In log(a) : NaNs produced
...