0

Для расчета коэффициента Pearsons между двумя массивами я использую следующее:Как рассчитать корреляцию, если значение равно 0

double[] arr1 = new double[4]; 
    arr1[0] = 1; 
    arr1[1] = 1; 
    arr1[2] = 1; 
    arr1[3] = 1; 

    double[] arr2 = new double[4]; 
    arr2[0] = 1; 
    arr2[1] = 1; 
    arr2[2] = 1; 
    arr2[3] = 1; 
PearsonsCorrelation pc = new PearsonsCorrelation(); 
println("Correlation is "+pc.correlation(arr1, arr2)); 

Для вывода я получаю: Корреляция NaN

PearsonsCorrelation класс содержится в apache commons API: http://commons.apache.org/proper/commons-math/userguide/stat.html

Значения в каждом массиве основаны на том, является ли пользователь содержит слово в своем наборе данных. Вышеуказанные массивы должны быть полностью коррелированы?

Этот вопрос связан с How to set a value's for calculating Eucludeian distance and correlation

ответ

1

Кто-то был подобный вопрос здесь [link]. По-видимому, проблема связана с наличием стандартного отклонения 0 в ваших массивах.

0

Вы пытаетесь вычислить корреляцию между двумя векторами длины четыре. Поскольку все значения в каждом векторе одинаковы (0 в одном векторе, 1 в другом), это эквивалентно попытке вычислить коэффициент корреляции между двумя числами (0 и 1 в этом случае).

Возможно, очевидно, что такого нет; вам нужно как минимум две разные пары. Так же, как вы не можете нарисовать значимую линию регрессии, если у вас есть только одна пара значений.

Если только один из векторов имел некоторые вариации, результат все равно был бы NA, но в этом случае было бы разумным установить его на ноль.