Отличаются ли результаты от базовой функции R cor () от функции Similarity () в программе Recommenderlab? - PullRequest
1 голос
/ 19 июня 2019

Может кто-нибудь объяснить, почему эти две корреляционные матрицы дают разные результаты?

library(recommenderlab)
data(MovieLense)
cor_mat <- as( similarity(MovieLense, method = "pearson", which = "items"), "matrix" )
cor_mat_base <- suppressWarnings( cor(as(MovieLense, "matrix"), use = "pairwise.complete.obs") )
print( cor_mat[1:5, 1:5] )
print( cor_mat_base[1:5, 1:5] )

1 Ответ

2 голосов
/ 19 июня 2019

Базовая функция dissimilarity() = 1 - pmax(cor(), 0) R.Кроме того, важно указать method, чтобы они оба использовали один и тот же:

library("recommenderlab")
data(MovieLense)
cor_mat <- as( dissimilarity(MovieLense, method = "pearson", 
                          which = "items"), "matrix" )
cor_mat_base <- suppressWarnings( cor(as(MovieLense, "matrix"), method = "pearson"
                                      , use = "pairwise.complete.obs") )
print( cor_mat[1:5, 1:5] )
print(1- cor_mat_base[1:5, 1:5] )

> print( cor_mat[1:5, 1:5] )
                  Toy Story (1995) GoldenEye (1995) Four Rooms (1995) Get Shorty (1995) Copycat (1995)
Toy Story (1995)         0.0000000        0.7782159         0.8242057         0.8968647      0.6135248
GoldenEye (1995)         0.7782159        0.0000000         0.7694644         0.7554443      0.7824406
Four Rooms (1995)        0.8242057        0.7694644         0.0000000         1.0000000      0.8153877
Get Shorty (1995)        0.8968647        0.7554443         1.0000000         0.0000000      1.0000000
Copycat (1995)           0.6135248        0.7824406         0.8153877         1.0000000      0.0000000
> print(1- cor_mat_base[1:5, 1:5] )
                  Toy Story (1995) GoldenEye (1995) Four Rooms (1995) Get Shorty (1995) Copycat (1995)
Toy Story (1995)         0.0000000        0.7782159         0.8242057         0.8968647      0.6135248
GoldenEye (1995)         0.7782159        0.0000000         0.7694644         0.7554443      0.7824406
Four Rooms (1995)        0.8242057        0.7694644         0.0000000         1.2019687      0.8153877
Get Shorty (1995)        0.8968647        0.7554443         1.2019687         0.0000000      1.2373503
Copycat (1995)           0.6135248        0.7824406         0.8153877         1.2373503      0.0000000

Чтобы хорошо это понять, проверьте детали обоих пакетов:).

OP / EDIT: Важно отметить, что есть некоторые значения, которые немного отличаются между четными 1-dissimilarity и cor, имеющих cor больше 1. Это потому, что dissimilarity()устанавливает этаж на 0 (т. е. не возвращает отрицательные числа), а также выполнение cor() может вернуть значения больше 1. https://www.rdocumentation.org/packages/stats/versions/3.6.0/topics/cor они только указывают, что

For r <- cor(*, use = "all.obs"), it is now guaranteed that all(abs(r) <= 1).

Это следует оценить.

...