Skip to content

Instantly share code, notes, and snippets.

@PetarIvancevic
Created October 27, 2017 18:54
Show Gist options
  • Save PetarIvancevic/37c31708df227c71e12d1d529be3aa3e to your computer and use it in GitHub Desktop.
Save PetarIvancevic/37c31708df227c71e12d1d529be3aa3e to your computer and use it in GitHub Desktop.
Pearson correlation coefficient
function squaredNum (review) {
return Math.pow(review.rating, 2)
}
function pcc (user1, user2) {
const n = _.size(user1.reviews)
if (n === 0) {
return n
}
const user1MovieScoreSum = _.sumBy(user1.reviews, 'rating')
const user2MovieScoreSum = _.sumBy(user2.reviews, 'rating')
const user1MovieScoreSqSum = _.sumBy(user1.reviews, squaredNum)
const user2MovieScoreSqSum = _.sumBy(user2.reviews, squaredNum)
let pSum = 0
for (let i = 0; i < n; i++) {
pSum += (user1.reviews[i].rating * user2.reviews[i].rating)
}
const num = pSum - ((user1MovieScoreSum * user2MovieScoreSum) / n)
const den = Math.sqrt(
(user1MovieScoreSqSum - (Math.pow(user1MovieScoreSum, 2) / n)) *
(user2MovieScoreSqSum - (Math.pow(user2MovieScoreSum, 2) / n))
)
if (den === 0) {
return 0
}
return num / den
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment