генерировать множественную матрицу взаимной корреляции, используя для цикла [duplicate]

В Java все находится в форме класса.

Если вы хотите использовать любой объект, тогда у вас есть две фазы:

  1. Объявить
  2. Инициализация

Пример:

  • Объявление: Object a;
  • Инициализация: a=new Object();

То же самое для концепции массива

  • Объявление: Item i[]=new Item[5];
  • Инициализация: i[0]=new Item();

Если вы не дают секцию инициализации, тогда возникает NullpointerException.

10
задан Joshua Ulrich 19 December 2013 в 22:33
поделиться

3 ответа

6 month running correlation

`library(tidyquant)`

`x<-rnorm(100)
y<-rnorm(100)`

`zoo(cbind(x,y),Sys.Date()-1:100)`

`tq_transmute_xy(x          = x, 
                    y          = y,
                    mutate_fun = runCor,
                    n          = 6,
                    col_rename = "rolling.corr.6")`
0
ответ дан Gucci148 19 August 2018 в 07:46
поделиться
  • 1
    Вам нужно добавить объяснения к своему коду для лучшего понимания – Ibo 3 October 2017 в 02:32

Для вашего простого случая вы можете использовать TTR::runCor.

set.seed(21)
x <- rnorm(30)
y <- rnorm(30)
z <- zoo(cbind(x,y),Sys.Date()-1:30)
tail(rollapplyr(z, 21, function(x) cor(x[,1],x[,2]), by.column=FALSE))
tail(runCor(z[,1],z[,2],21))
12
ответ дан Joshua Ulrich 19 August 2018 в 07:46
поделиться

Попробуйте что-то вроде этого:

x<-rnorm(100)
y<-rnorm(100)
rollapply(data.frame(x,y), 21 ,function(x) cor(x[,1],x[,2]), by.column=FALSE)

Другими словами, я думаю, вам может понадобиться аргумент by.column=FALSE. Также работает с объектом zoo

rollapply(zoo(cbind(x,y),Sys.Date()-1:100), 21 ,function(x) cor(x[,1],x[,2]), by.column=FALSE)

Редактировать, чтобы задать вопрос из комментария о добавлении другого столбца.

Вы можете указать столбцы, которые вы хотите использовать в cor Функция

z<-rnorm(100)
rollapply(zoo(cbind(x,y,z),Sys.Date()-1:100), 21 ,function(x) cor(x[,1],x[,3]), by.column=FALSE)
rollapply(zoo(cbind(x,y,z),Sys.Date()-1:100), 21 ,function(x) cor(x[,2],x[,3]), by.column=FALSE)

by.column=FALSE указывает, что функция не должна применяться к каждому столбцу отдельно. Если by.column=TRUE, то функция будет применяться к каждому столбцу отдельно, и это поведение по умолчанию.

7
ответ дан Jota 19 August 2018 в 07:46
поделиться
  • 1
    оно работает! что именно делает опция by.column? если бы у меня была матрица 3x3 cor, как бы подойти к правильной корреляции? – simon 20 December 2013 в 02:57
  • 2
    @simon Я отредактировал свой ответ, чтобы ответить на ваши комментарии. – Jota 20 December 2013 в 03:29
  • 3
    @Jota, спасибо за комментарии, я задал тот же вопрос о большем количестве столбцов Джошуа Ульриху, а затем увидел ваши поправки, поэтому я просто удалил его, apoloiges. Если у меня было 100 столбцов данных, есть более эффективный способ запуска функции cor, а не указание каждой пары? Может ли это быть достигнуто с использованием одной из применяемых семейных функций? – TheGoat 8 March 2017 в 22:33
  • 4
    Вы можете использовать эту функцию в rollapply для обработки любого количества столбцов: function(x) cor(x)[lower.tri(cor(x))] – G. Grothendieck 3 October 2017 в 13:43
Другие вопросы по тегам:

Похожие вопросы: