public void AverageCalculationTest() { int[] input = new int[] { 1, 2, 3, 4, 5 }; var result = StatFunctions.CalculateAverage(input); Assert.IsTrue(result == 3); }
public void ModeCalculationTest() { int[] input = new int[] { 1, 2, 11, 11, 88, 99 }; var result = StatFunctions.CalculateModeValue(input); Assert.IsTrue(result[0] == 11); }
public void MedianEvenCalculationTest() { int[] input = new int[] { 1, 2, 11, 24, 88, 99 }; var result = StatFunctions.CalculateMedian(input); Assert.IsTrue(result == 17.5); }
public void MedianOddCalculationTest() { int[] input = new int[] { 1, 2, 11, 25, 88 }; var result = StatFunctions.CalculateMedian(input); Assert.IsTrue(result == 11); }
public void WeightedAverageCalculationTest() { int[] input = new int[] { 1, 2, 11, 25, 88 }; int[] weights = new int[] { 10, 20, 15, 18, 22 }; var result = StatFunctions.CalculateWeightedAverage(input, weights); Assert.IsTrue(result == 30.6); }
/** Method: Constructor * maxClasses - maximum of classes allowed for histogram * maxCombTerms - maximum of convolution terms for combinatory calculation * maxFftTerms - maximum of convolution terms for fast fourier calculation * nThreads - number of threads */ internal Convolution(int maxClasses, int maxCombTerms, int maxFftTerms, int nThreads) { this.comb = new Combinatory(); stat = new StatFunctions(); normal = new NormalDistrib(); fft = new FFT(); this.maxClasses = maxClasses; this.maxCombTerms = maxCombTerms; this.maxFftTerms = maxFftTerms; this.nThreads = nThreads; }
/// <summary> /// return calculated weighted average for student /// </summary> /// <param name="student"></param> private double CalculateStudentWeightedAverage(Student student) { int[] weights = new int[_SubjectWeights.Count]; int[] values = new int[_SubjectWeights.Count]; for (int i = 0; i < _SubjectWeights.Count; i++) { weights[i] = _SubjectWeights[i].WeightPercentage; var subject = student.Subjects.FirstOrDefault(p => p.Name == _SubjectWeights[i].Name); int SubjectPercentage = 0; if (subject != null) { SubjectPercentage = subject.SucessRate; } values[i] = SubjectPercentage; } return(StatFunctions.CalculateWeightedAverage(values, weights)); }
/** Method: Constructor */ internal NormalConv() { data = new List <double>(); stat = new StatFunctions(); nd = new NormalDistrib(); }
public bool Process(string outputFolder = null, string outputType = null) { foreach (var group in _Groups) { List <string> subjects = new List <string>(); foreach (var std in group.Students) { //calculate weighted average for each student in each group std.WeightedAverage = CalculateStudentWeightedAverage(std); //need to fill in list of subjects I assume that each group can have different subjects, //if at least one person have subject in group then subject is relevant for group foreach (var subject in std.Subjects) { if (!subjects.Contains(subject.Name)) { subjects.Add(subject.Name); } } } //now when I know all the subjects relevant for group, can start calculation foreach (var subj in subjects) { //get all values for this subject in group var values = group.Students.Select(p => p.Subjects.Where(x => x.Name == subj).DefaultIfEmpty(new Subject() { Name = subj, SucessRate = 0 }).First().SucessRate).ToArray(); SubjectResult result = new SubjectResult(); result.Name = subj; result.Average = StatFunctions.CalculateAverage(values); result.Median = StatFunctions.CalculateMedian(values); result.Modus = StatFunctions.CalculateModeValue(values); group.SubjectResults.Add(result); } } //now calculate overall results //first build of list of relevant subjects List <string> subjectsOverall = new List <string>(); foreach (var grp in _Groups) { foreach (var item in grp.SubjectResults) { if (!subjectsOverall.Contains(item.Name)) { subjectsOverall.Add(item.Name); } } } //now start calculation foreach (var subj in subjectsOverall) { List <int> totalvalues = new List <int>(); var valuesInGroups = _Groups.Select(u => u.Students.Select(p => p.Subjects.Where(x => x.Name == subj).DefaultIfEmpty(new Subject() { Name = subj, SucessRate = 0 }).First().SucessRate).ToList()); foreach (var item in valuesInGroups) { totalvalues.AddRange(item); } int[] totalValuesArray = totalvalues.ToArray(); SubjectResult newResult = new SubjectResult(); newResult.Name = subj; newResult.Average = StatFunctions.CalculateAverage(totalValuesArray); newResult.Median = StatFunctions.CalculateMedian(totalValuesArray); newResult.Modus = StatFunctions.CalculateModeValue(totalValuesArray); _TotalResults.Add(newResult); } //everything calculated at this point return(true); }