using System.Collections.Concurrent;
using System.Collections.Generic;
public bool NeedToFlag(double val, List<Tuple<double, double>> distanceAndValue, double thresholdForFlag, out double differenceSd, out double variance, out double standardDeviation)
foreach (Tuple<double, double> item in distanceAndValue)
sumOfWeights += (1.0 / item.Item1) * (1.0 / item.Item1);
mean = mean / (double)distanceAndValue.Count;
Console.WriteLine("Mean {0}", mean);
foreach (Tuple<double, double> item in distanceAndValue)
double diff = (item.Item2 - mean) * (item.Item2 - mean);
variance = variance * (1.0 / (double)distanceAndValue.Count);
standardDeviation = Math.Sqrt(variance);
foreach (Tuple<double, double> item in distanceAndValue)
double weight = (1.0 / item.Item1) * (1.0 / item.Item1);
double weighted = weight * item.Item2 / sumOfWeights;
estimate = estimate + weighted;
double difference = estimate - val;
Console.WriteLine("difference {0}", difference);
Console.WriteLine("standardDeviation {0}", standardDeviation.ToString());
differenceSd = Math.Abs(difference / standardDeviation);
if (differenceSd > thresholdForFlag)
Console.WriteLine("differenceSd {0}", differenceSd.ToString());
Console.WriteLine("variance {0}", variance.ToString());
public static void Main()
double standardDeviation;
test newtest = new test();
double flagThreshold = 5.0;
double minVariance = 0.2;
List<Tuple<double, double>> compare = new List<Tuple<double, double>>();
Tuple<double, double> t = new Tuple<double, double>(14766.9, 100);
Tuple<double, double> t2 = new Tuple<double, double>(11966.9, 98);
Tuple<double, double> t3 = new Tuple<double, double>(14900.9, 95);
Tuple<double, double> t4 = new Tuple<double, double>(10966.9, 92);
Tuple<double, double> t5 = new Tuple<double, double>(14966.9, 90);
bool b = newtest.NeedToFlag(val, compare, flagThreshold, out differenceSd, out variance, out standardDeviation);
Console.WriteLine("Need To Flag {0}", b);
Console.WriteLine("Flagged {0}", b && variance > minVariance);