Как использовать библиотеку nloptr для максимизации корреляции Спирмена между двумя массивами - PullRequest
0 голосов
/ 01 февраля 2019

У меня есть два массива.Например, первым является A, а вторым B:

A <-c (2,5,6,10,11) B <-c (13,2,6,8,12) </p>

Также у меня есть постоянная тета = 1.Я сделал массив:

D = B-тета

и коэффициент корреляции между A и D

koeff <-cor (A, D) </p>

Задача состоит в том, чтобы сделать koeff максимальным значением путем изменения константы тета.Как я понял я могу использовать библиотеку nloptr.Как мне использовать его?

С наилучшими пожеланиями!

PS Я сделал эту работу в Excel с решающим общим уменьшенным градиентом. Я не нашел эту функцию в R.

1 Ответ

0 голосов
/ 05 февраля 2019

Иллюстрация, что log(B+ϑ) не меняет порядок.

> # ranks for different theta
> theta <- -1; rank(log(B+theta))
[1] 5 1 2 3 4
> theta <- 3; rank(log(B+theta))
[1] 5 1 2 3 4
> theta <- 10; rank(log(B+theta))
[1] 5 1 2 3 4
> # theta=-2 is a border case: we get -infinity
> theta=-2; log(B+theta)
[1] 2.397895     -Inf 1.386294 1.791759 2.302585
> rank(log(B+theta))
[1] 5 1 2 3 4
>

В результате все корреляции Спирмена должны быть одинаковыми:

> A <- c(2,5,6,10,11)
> cor(A,B,method="spearman")
[1] 0
> theta <- -1; cor(A,log(B+theta),method="spearman")
[1] 0
> theta <- 3; cor(A,log(B+theta),method="spearman")
[1] 0
> theta <- 10; cor(A,log(B+theta),method="spearman")
[1] 0
> theta <- -2; cor(A,log(B+theta),method="spearman")
[1] 0
> 
...