GSL и корреляция - PullRequest
       23

GSL и корреляция

2 голосов
/ 02 мая 2011

Я использую библиотеку GSL 1.14 и оболочку ruby ​​( gsl ) для некоторых математических вычислений. Одна вещь, которая мне нужна, это корреляция Пирсона. Но у меня проблема, когда 0 в моем массиве.

Например, у меня есть этот фрагмент кода:

x = [1,2,2,2,12]
y = [1,2,1,3,33]

puts GSL::Stats::correlation(
  GSL::Vector.alloc(x),GSL::Vector.alloc(y)
)
=> 0.9967291641974002

Но когда я пытаюсь вычислить его со следующими значениями массива, я получаю NaN:

x = [1,1,1]
y = [1,1,1]
or
x = [0,1,1]
y = [1,1,1]

puts GSL::Stats::correlation(
  GSL::Vector.alloc(x),GSL::Vector.alloc(y)
)
=> NaN

И когда я пытаюсь с этими значениями, это работает:

x = [0,1,1]
y = [1,0,1]

puts GSL::Stats::correlation(
  GSL::Vector.alloc(x),GSL::Vector.alloc(y)
)
=> -0.5

Кто-нибудь знает почему? это очень странно, не правда ли?

Ответы [ 2 ]

2 голосов
/ 02 мая 2011

Я не знаю реализацию GSL, но в общем случае вычисление коэффициента корреляции Пирсона включает деление на оба стандартных отклонения, поэтому, если любое из них равно 0, вычисление не выполняется. Стандартное отклонение равно 0, если все векторные элементы равны. Все ваши неудачные примеры имеют один вектор с равными элементами. Я надеюсь, что это отвечает на ваш вопрос.

0 голосов
/ 24 мая 2012

Теоретически корреляция означает нахождение связи между двумя наборами данных. Это может быть положительным или отрицательным в зависимости от структуры наборов данных. Но я хотел бы передать, когда у вас есть 0 в качестве одного из элементов ваших наборов данных, вы не может соотнести величину 0 с другим ненулевым элементом другого набора данных. Вот почему он дает NaN.

...