У меня есть 2396x34 double matrix
с именем y
, где каждая строка (2396) представляет отдельную ситуацию, состоящую из 34 последовательных временных сегментов.
У меня также есть numeric[34]
с именем x
, который представляет собой единую ситуацию из 34 последовательных временных сегментов.
В настоящее время я вычисляю корреляцию между каждой строкой в y
и x
следующим образом:
crs[,2] <- cor(t(y),x)
Теперь мне нужно заменить функцию cor
в приведенном выше выражении на взвешенную корреляцию. Весовой вектор xy.wt
составляет 34 элемента, поэтому для каждого из 34 последовательных временных сегментов может быть назначен другой вес.
Я нашел функцию Weighted Covariance Matrix
cov.wt
и подумал, что если я сначала scale
данные должны работать так же, как cor
. Фактически вы можете указать, чтобы функция возвращала корреляционную матрицу. К сожалению, похоже, что я не могу использовать его таким же образом, потому что я не могу предоставить две переменные (x
и y
) отдельно.
Кто-нибудь знает, как я могу получить взвешенную корреляцию в том, как я описал, не жертвуя большой скоростью?
Изменить: возможно, какая-то математическая функция может быть применена к y
до функции cor
, чтобы получить те же результаты, что и я. Может быть, если я умножу каждый элемент на xy.wt/sum(xy.wt)
?
Изменить # 2 Я нашел еще одну функцию corr
в пакете boot
.
corr(d, w = rep(1, nrow(d))/nrow(d))
d
A matrix with two columns corresponding to the two variables whose correlation we wish to calculate.
w
A vector of weights to be applied to each pair of observations. The default is equal weights for each pair. Normalization takes place within the function so sum(w) need not equal 1.
Это тоже не то, что мне нужно, но оно ближе.
Изменить # 3 Вот несколько кодов для создания типа данных, с которыми я работаю:
x<-cumsum(rnorm(34))
y<- t(sapply(1:2396,function(u) cumsum(rnorm(34))))
xy.wt<-1/(34:1)
crs<-cor(t(y),x) #this works but I want to use xy.wt as weight