Ошибка в автокорреляционной функции (ACF): отсутствуют значения в объекте

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

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 ответа

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

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

В некоторых случаях эффект является более мультипликативным, и увеличение от 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, хотя функция автокорреляции не чувствительна к небольшим различиям.

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

Если ваш временной ряд имеет какие-либо отрицательные значения, журнал приведет к 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
Другие вопросы по тегам