Я не эксперт, но так как никто не отвечает, я собираюсь попробовать сделать это ... РЕДАКТИРОВАТЬ: Я заметил, что я только что ответил на 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.
Вероятно, лучший способ продолжить - это сначала проверить комбинации, которые содержат меньшее количество переменных. Затем у вас есть возможность не добавлять дополнительные переменные в эти коинтегрирующие подмножества, если вы этого не хотите. Но, как уже упоминалось, добавление других переменных может потенциально улучшить свойства / стационарность ваших остатков. От ваших требований будет зависеть, хотите ли вы этого поведения.