private double CalculatePearsonCorrelationForQuestions(int question1, int question2)
{
List<PitanjaOcjene> sharedQuestions = new List<PitanjaOcjene>();
//Pronaći ocjene korisnika koji su ocijenili i jedno i drugo pitanje
foreach (var item in questionRecommendation[question1])
{
if (questionRecommendation[question2].Where(x => x.KorisnikID == item.KorisnikID).Count() != 0)
sharedQuestions.Add(item);
}
if (sharedQuestions.Count == 0)
return 0;
//Sumirati sve ocjene za pitanja
double question1RatingSum = 0.00f;
double question2RatingSum = 0.00f;
foreach (PitanjaOcjene item in sharedQuestions)
{
question1RatingSum += questionRecommendation[question1].Where(x => x.KorisnikID == item.KorisnikID).FirstOrDefault().Ocjena;
question2RatingSum += questionRecommendation[question2].Where(x => x.KorisnikID == item.KorisnikID).FirstOrDefault().Ocjena;
}
double question1SQ = 0f;
double question2SQ = 0f;
foreach (PitanjaOcjene item in sharedQuestions)
{
question1SQ += Math.Pow(questionRecommendation[question1].Where(x => x.KorisnikID == item.KorisnikID).FirstOrDefault().Ocjena, 2);
question2SQ += Math.Pow(questionRecommendation[question2].Where(x => x.KorisnikID == item.KorisnikID).FirstOrDefault().Ocjena, 2);
}
double sum = 0f;
foreach (PitanjaOcjene item in sharedQuestions)
{
sum += questionRecommendation[question1].Where(x => x.KorisnikID == item.KorisnikID).FirstOrDefault().Ocjena *
questionRecommendation[question2].Where(x => x.KorisnikID == item.KorisnikID).FirstOrDefault().Ocjena;
}
double num = sum - (question1RatingSum * question2RatingSum / sharedQuestions.Count);
double density = (double)Math.Sqrt((question1SQ - Math.Pow(question1RatingSum, 2) / sharedQuestions.Count) *
((question2SQ - Math.Pow(question2RatingSum, 2) / sharedQuestions.Count)));
if (density == 0)
return 0;
return num / density;
}