R, коинтеграция, многомерный, co.ja (), Йохансен - PullRequest
3 голосов
/ 23 апреля 2011

Я новичок в R и коинтеграции, поэтому, пожалуйста, наберитесь терпения, пока я пытаюсь объяснить, что именно я пытаюсь сделать. Я пытаюсь найти коинтегрированные переменные среди 1500-2000 переменных напряжения в западной энергосистеме в Канаде / США. Частота почасовая (обычная по мощности), а коинтегрированные комбинации могут составлять всего N переменных и максимум M переменных.

Я пытался использовать ca.jo, но вот проблемы, с которыми я столкнулся:

1) ca.jo (Johansen) имеет ограничение на количество переменных, с которыми он может работать

2) Кажется, ca.jo заставляет первую переменную в векторе y (t) быть зависимой (см. Ниже).

Собственные векторы, нормализованные к первому столбцу: (Это отношения коинтеграции)

          V1.l2        V2.l2        V3.l2 
V1.l2    1.0000000    1.0000000    1.0000000   
V2.l2   -0.2597057   -2.3888060   -0.4181294   
V3.l2   -0.6443270   -0.6901678    0.5429844   

Как вы можете видеть, ca.jo пытается найти линейные комбинации из 3 переменных, но путем принудительного задания коэффициента для первой переменной (в данном случае V1) равным 1 (то есть зависимой переменной). Насколько я понимаю, ca.jo попытается найти все комбинации, чтобы каждая переменная была выбрана в качестве зависимой. Вы можете увидеть ту же обработку в примерах, приведенных в документации для ca.jo.

3) По-видимому, ca.jo не находит линейных комбинаций, меньших, чем число переменных в векторе y (t). Таким образом, если было 5 переменных и 3 из них коинтегрированы (то есть V1 ~ V2 + V3), то ca.jo не может найти эту комбинацию. Возможно, я не правильно использую ca.jo, но я ожидал, что коинтегрированная комбинация, в которой V1 ~ V2 + V3 - это то же самое, что V1 ~ V2 + V3 + 0 x V4 + 0 x V5. Другими словами, коэффициент НЕ коинтегрированной переменной должен быть равен нулю, и ca.jo должен найти этот тип комбинации.

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

Спасибо.

Я также написал на Набл:

http://r.789695.n4.nabble.com/ca-jo-cointegration-multivariate-case-tc3469210.html

1 Ответ

4 голосов
/ 20 апреля 2015

Я не эксперт, но так как никто не отвечает, я собираюсь попробовать сделать это ... РЕДАКТИРОВАТЬ: Я заметил, что я только что ответил на 4-летний вопрос. Надеюсь, в будущем это все еще будет полезно для других.

Ваше общее понимание верно. Я не буду вдаваться в подробности всей процедуры, но постараюсь дать общее представление. Первое, что делает процедура Йохансена, - это создание VECM из модели VAR, которая наилучшим образом соответствует данным (поэтому вам также нужна длина лага для VAR в качестве входных данных для процедуры). Затем процедура будет исследовать матрицу компонент VECM без задержек, посмотрев на ее ранг: если переменные не коинтегрированы, то ранг матрицы не будет существенно отличаться от 0. Более интуитивный способ понимания уравнений VECM Йохансена это заметить сопоставимость с процедурой ADF для каждой отдельной строки модели.

Кроме того, ранг матрицы равен числу ее собственных значений (характеристических корней), отличных от нуля. Каждое собственное значение связано с другим коинтегрирующим вектором, который равен соответствующему ему собственному вектору. Следовательно, Собственное значение значительно отличается от нуля указывает значительный коинтегрирующий вектор. Значимость векторов можно проверить с помощью двух различных статистических данных: максимальная статистика или статистика трассировки. Тест трассировки проверяет нулевую гипотезу о меньших или равных r коинтегрирующих векторов против альтернативы более чем r коинтегрирующих векторов. Напротив, тест максимального собственного значения проверяет нулевую гипотезу r коинтегрирующих векторов против альтернативы r + 1 коинтегрирующих векторов.

Теперь для примера,

# We fit data to a VAR to obtain the optimal VAR length. Use SC information criterion to find optimal model.
varest <- VAR(yourData,p=1,type="const",lag.max=24, ic="SC")
# obtain lag length of VAR that best fits the data
lagLength <- max(2,varest$p)

# Perform Johansen procedure for cointegration
# Allow intercepts in the cointegrating vector: data without zero mean
# Use trace statistic (null hypothesis: number of cointegrating vectors <= r)
res <- ca.jo(yourData,type="trace",ecdet="const",K=lagLength,spec="longrun")

testStatistics <- res@teststat
criticalValues <- res@criticalValues

# chi^2. If testStatic for r<= 0 is greater than the corresponding criticalValue, then r<=0 is rejected and we have at least one cointegrating vector
# We use 90% confidence level to make our decision
if(testStatistics[length(testStatistics)] >= criticalValues[dim(criticalValues)[1],1])
{
  # Return eigenvector that has maximum eigenvalue. Note: we throw away the constant!!
  return(res@V[1:ncol(yourData),which.max(res@lambda)])
}

Этот фрагмент кода проверяет наличие хотя бы одного вектора коинтеграции (r <= 0) и затем возвращает вектор с наивысшими свойствами коинтеграции или, другими словами, вектор с наибольшим собственным значением (лямда). </p>

По поводу вашего вопроса: процедура ничего не «форсирует». Он проверяет все комбинации, поэтому у вас есть 3 разных вектора. Насколько я понимаю, метод просто масштабирует / нормализует вектор до первой переменной.

Относительно вашего другого вопроса: процедура вычислит векторы, для которых остаток имеет самые сильные средние свойства возврата / стационарности. Если одна или несколько ваших переменных не вносят дополнительного вклада в эти свойства, тогда компонент для этой переменной в векторе действительно будет равен 0. Однако если значение компонента не равно 0, это означает, что «более сильная» коинтеграция была найдена путем включения дополнительная переменная в модели.

Кроме того, вы можете проверить значимость ваших компонентов. Йохансен позволяет исследователю проверить гипотезу об одном или нескольких коэффициенты в коинтегрирующих отношениях, рассматривая гипотезу как ограничение на матрицу компонент без задержек в VECM. Если существуют r коинтегрирующих векторов, то только эти линейные комбинации или их линейные преобразования или комбинации коинтегрирующих векторов будут стационарными. Однако я не знаю, как выполнить эти дополнительные проверки в R.

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

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