2015-09-16 1 views
0

Я пытаюсь написать функцию, которая вычисляет корреляцию между моей зависимой переменной и независимыми переменными, чтобы я мог найти идеальное отставание для своих данных, прежде чем я включил ее в модель регрессии. Я хочу рассчитать оптимальное отставание для каждой четверти (я имею в виду каждую четверть года, которую я проверяю) своих данных обучения, а затем усреднить полученные корреляции для каждого из лагов. Задержка 1 означает, что моя зависимая переменная в t лучше всего описывается моими переменными в t-1. Можно подумать об этом как о перекрестке в основном. Мой код выглядит следующим образом:Ошибка несогласованных размеров в функции cor

Korrelations.Maximierer = function(Aktie, Kategorie){ 

    Ergebnis = matrix(nrow = 114,ncol = 18) 

    for(tmp in 1:18){ 
    Start.Test=1*tmp 
    Ende.Test=13*tmp 
    Untersuchungszeitraum = Aktie[Start.Test:Ende.Test] 

    for(i in 0:113){ 
     int.low=96-i+18*tmp 
     int.high=108-i+18*tmp 

     Ergebnis[i+1,tmp]=mean(abs(cor(Untersuchungszeitraum,Kategorie[int.low:int.high,-1], 
     method = "spearman"))) 
    } 
    } 
    return(Ergebnis) 
} 

Мои данные измеряются в течение нескольких недель, поэтому каждый квартал состоит из 13 точек данных. Кроме того, я проверяю 4,5 года данных, следовательно, 18 кварталов. У меня есть данные для моих независимых переменных до 113 недель до первой точки данных зависимой переменной. Когда я запускаю это я получаю следующее сообщение об ошибке:

Error in cor(Untersuchungszeitraum, Kategorie[int.low:int.high, -1], 
method = "spearman") : 
incompatible dimensions In addition: There were 50 or more warnings 
(use warnings() to see the first 50) 

Typing в "предупреждения() говорит мне, что отклонение стандарт равен нулю, то, что же меня раздражает.

Я запускаю код для первого образца вручную, и оба «Untersuchungszeitraum» и «Kategorie [int.low: int.high]» имеют одинаковое количество строк и, следовательно, корреляция должна быть вычислимой.

После того, как вы установили мои x и y вручную, просто скопируйте код с моего скрипа и установите tmp = 1 и i = 0 вручную, поэтому опускайте петли for. Я попытался вычислить корреляцию полученных результирующих кадров и получил результат, который я искал. Плюс стандартное отклонение - это нулевая ошибка.

Я не понимаю, почему это работает, когда я набираю его вручную, а не когда я использую skript. Кроме того, некоторое понимание стандартного отклонения - это нулевая ошибка. Спасибо за любую помощь!

+0

Что такое размерность 'Aktie' и' Kategorie'? –

+0

Извините, должен был добавить это. Размерность Aktie - это вектор с 286 элементами. Kategorie - это data.frame с 399 строками и между 2 и 48 столбцами, каждый из которых стоит для одной переменной. Вектор Aktie также формируется из кадра данных и генерируется путем выбора только одного столбца в этом файле данных. Aktie = Dataframe [, 2]. – Sket

ответ

1

Я думаю, что проблема может быть в том, что Start.Test и Ende.Test рассчитываются неправильно. Kategorie[int.low:int.high,-1] всегда будет вектором длины 12 (int.high - int.low = 12 для всех значений i и tmp), но длина Untersuchungszeitraum будет Ende.Test - Start.Test = 12 * tmp. Это означает, что векторы будут иметь одинаковую длину для первой итерации в for -loop, но не после этого.

Я не очень понимаю, что код должен делать, но одна возможность заключается в том, что вы имели в виду сделать

Start.test = 1 + tmp 
Ende.test = 13 + tmp 
+0

Спасибо, вы на 100% правы. Я как-то это наблюдал. Пришлось изменить его на Start.Test = 1 + (tmp-1) * 13 и Ende.Test = 13 + (tmp-1) * 13, чтобы он мог делать то, что я хотел. – Sket