Грейнджер-тестирование в цикле - PullRequest
1 голос
/ 27 февраля 2012

Я делаю исследование в R проекте. Данные хранятся в 3 объектах зоопарка по 9 столбцов в каждом. Я хочу сделать тест Грейнджера для каждого столбца и сохранить результаты (значения Pr (> F)) в 3 матрицах 9x9.

Я пытаюсь использовать цикл for (), и у меня возникает следующая проблема

for(i in 1:ncol(dfvola.pre)) {
   grangertest(order=4, 
       dfvola.pre[,2], 
       dfvola.pre[,i])$'Pr(>F)'[2]
 }

выдает ошибку Error in solve(vc[ovar, ovar]) : subscript out of bounds

В то же время

grangertest(order=4, dfvola.pre[,2], 
            dfvola.pre[,3])$'Pr(>F)'[2] 

работает нормально, то есть я могу хранить Pr (> F) в ячейке переменной или матрицы. Но чтобы сделать 3 матрицы 9x9, мне пришлось написать 81 * 3 строки кода, и я хотел знать, есть ли более элегантное решение в R. Я новичок в R и чувствую, что, возможно, должен быть один, еще более элегантный, чем вложенные циклы:)

На всякий случай, это мои данные (объект зоопарка):

head(dfvola.pre)
                    CH           HK          SI          RU         EN
2002-02-08 -0.04105356 -0.021797675 -0.03411227 -0.06821175 -0.1728407
2002-02-11 -0.07383230 -0.034095749 -0.05364423 -0.12425684 -0.1656535
2002-02-12 -0.09345455  0.011086639 -0.06846780 -0.14499508 -0.0169436
2002-02-13 -0.09492381  0.009393133 -0.08113240 -0.13592678  2.4487733
2002-02-14 -0.08875820  0.026173698 -0.08273877 -0.07034832  0.4948738
2002-02-15 -0.07895699 -0.041345747 -0.07501171 -0.01333353  0.2248262
                     US          GR          FR          JP
2002-02-08  0.015261541 -0.02886118 -0.01236761 -0.03934752
2002-02-11 -0.102323758 -0.11697662 -0.12982389 -0.08438561
2002-02-12  0.001706797 -0.11818056 -0.14477277 -0.09312417
2002-02-13 -0.085467795 -0.10278221 -0.07810301 -0.11467290
2002-02-14 -0.082738612 -0.13175354 -0.12782784 -0.12296171
2002-02-15 -0.098760674 -0.08439060 -0.08903754 -0.11871091

1 Ответ

4 голосов
/ 27 февраля 2012

Проблема возникает, когда i становится равным 2. Затем вы проверяете разницу между двумя одинаковыми наборами данных, что приводит к ошибке:

x = runif(100)
grangertest(order=4, x, x)
Error in solve(vc[ovar, ovar]) : subscript out of bounds

Я не знаком с grangertest, но может быть так, что ковариационная матрица становится сингулярной.Решение состоит в том, чтобы пропустить i = 2:

for(i in 1:ncol(dfvola.pre)) {
 if(!i == 2) {
   grangertest(order=4, 
       dfvola.pre[,2], 
       dfvola.pre[,i])$'Pr(>F)'[2]
  }
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...