#kdb
Вопрос:
У меня есть таблица возвратов, в которой я хочу рассчитать корреляцию для каждых n строк, но я не уверен, как это сделать. Чтобы быть более наглядным, моя таблица t является
sym1 | sym2 | sym3 | sym4 |
---|---|---|---|
3 | 4 | 5 | 1 |
0 | -1 | 6 | 4 |
-3 | 10 | 8 | 9 |
-4 | 19 | -1 | 6 |
Как я могу рассчитать корреляцию между sym1 и sym2/sym3/sym4 для строки 1-3, затем строки 2-4 и т.д.?
В настоящее время я могу только указать столбец, а затем вычислить, но я пытаюсь найти способ исправить sym1 и выполнить итерацию через sym2-4. Вот мой текущий код
(cor).'flip flip each {(til x)xprev:y}[3;]each (sym1;sym2) from t
Комментарии:
1. Работает ли этот код для вас? По-моему, это не для меня.
2. Это работает только тогда, когда я вычисляю корреляцию между столбцами sym1 и sym2, и мне нужно удалить первые 2 строки.
3. можете ли вы привести пример того, к каким значениям вы хотите применить
cor
? например, если вы хотите найти корреляцию между sym1 и sym2 , эквивалентно ли(t`sym1)cor t`sym2
это, т. Е.3 0 -3 -4 cor 4 -1 10 19
?4. для sym1 и sym2 первая корреляция составляет (3 0-3) cor (4 -1 10), затем (0 -3 -4) cor (-1 10 19), в основном каждый раз, когда я вычисляю корреляцию из 3 строк. То же самое относится к sym1 и sym3, sym1 и sym4. Заранее благодарю вас!!
Ответ №1:
Вот решение, которое может сработать для вас.
q)update s1s2:(cor).'flip{-3#'reverse{-1_x}[x;y]}[-1 count i]each(sym1;sym2)from t
sym1 sym2 sym3 sym4 s1s2
------------------------------
3 4 5 1
0 -1 6 4 1
-3 10 8 9 -0.5447048
-4 19 -1 6 -0.9751578
Это только одна корреляция, найденная между столбцами, а именно sym1
amp; sym2
. Первые два результата можно отбросить, так как они не имеют 3 значений, необходимых для корреляции.