logo  VB.Net - Statistic Functions
This Chapter
Mathematics
Area
Statistics
Factorial
Trignometry
Hyperbolic Trig.
Number Range
Quad&Cubic
Chapters
Home Page
Colours, RGB
Computer Specifications
Dates&Times
Disk Drives
Files
Folders
GPS and OS Ref
VB.Net Forms
Image Files
If & Select
List/Array
Mathematics
NuGet
Sound
String Functions
Sun and Moon
User Controls
Validation
DigitalDan Sites
My Other Sites
Contact Site

Note
Some pages
may contain
inaccuracies
Hits=5
This code assumes that you have a list of data values (as List of Double) and each stand-alone function resolves a specific statistical formula. The initial code snippet converts arrays and lists.

Private Function Array_To_List(array1() As Double) As List(Of Double)
 Return array1.ToList()
End Function
'
Private Function List_To_Array(list1 As List(Of Double)) As Double()
 Return list1.ToArray()
End Function
  
The next section provides VB.Net code to process standardf statistical formulae.
Note - there ate two versuins of some formula because they have two equations. One equation will relate to data samples whilst the other is used for populations. The two versions will normally produce slightly different answers.


Private Function Average(ListNum As List(Of Double)) As Double
 Return ListNum.Average
End Function
'
Private Function Count(ListNum As List(Of Double)) As Double
 Return ListNum.Count
End Function
'
Private Function DevSquare(listNum As List(Of Double)) As Double
 Dim ret As Double = 0
 For Each v As Double In listNum
  ret += (listNum.Average - v) * (listNum.Average - v)
 Next
 Return ret
End Function
'
Private Function GeometricMean(listNum As List(Of Double)) As Double
 Dim ret As Double = 1
 For Each v As Double In listNum
  ret *= v
 Next
 Return Math.Pow(ret, 1 / listNum.Count)
End Function
'
Private Function HarmonicMean(listNum As List(Of Double)) As Double
 Dim ret As Double = 0
 For Each v As Double In listNum
  ret += 1 / v
 Next
 Return listNum.Count / ret
End Function
'
Private Function Kurtosis_Population(Listnum As List(Of Double)) As Double
 Dim u As Double = Listnum.Average
 Dim n As Integer = Listnum.Count
 Dim s As Double = 0
 Dim Z As Double
 Dim sumZ As Double = 0
 For Each v As Double In Listnum
  s += (v - u) * (v - u) / n
 Next
 s = Math.Sqrt(s)
 For Each v As Double In Listnum
  Z = (v - u) / s
  Z *= Z * Z * Z
  sumZ += Z
 Next
 sumZ *= (1 / n)
 Return sumZ - 3
End Function
'
Private Function Kurtosis_Sample(listNum As List(Of Double)) As Double
 Dim u As Double = listNum.Average
 Dim n As Integer = listNum.Count
 Dim s As Double = 0
 Dim sumZ As Double = 0
 For Each v As Double In listNum
  s += (v - u) * (v - u) / (n - 1)
 Next
 s = Math.Sqrt(s)
 Dim Z As Double
 For Each v As Double In listNum
  Z = (v - u) / s
  Z *= Z * Z * Z
  sumZ += Z
 Next
 sumZ *= n * (n + 1)
 sumZ /= (n - 1) * (n - 2) * (n - 3)
 sumZ -= (3 * (n - 1) * (n - 1)) / ((n - 2) * (n - 3))
 Return sumZ
End Function
'
Private Function Max(ListNum As List(Of Double)) As Double
 Return ListNum.Max
End Function
'
Private Function MeanDeviation(listNum As List(Of Double)) As Double
 If listNum.Count < 2 Then Return 0
 Dim ret As Double = 0
 For Each v As Double In listNum
  ret += Math.Abs(v - listNum.Average)
 Next
 Return ret / listNum.Count
End Function
'
Private Function Median(listnum As List(Of Double)) As Double
 Dim l As Integer = listnum.Count
 If l = 0 Then Return 0
 If l = 1 Then Return listnum.Item(0)
 listnum.Sort()
 If listnum.Count Mod 2 = 0 Then
  Return listnum.Item(l \ 2 - 1) + ((listnum.Item(l \ 2) - listnum.Item(l \ 2 - 1)) / 2)
 End If
 Return listnum.Item(l \ 2)
End Function
'
Private Function MidRange(listNum As List(Of Double)) As Double
 Return (listNum.Max - listNum.Min) / 2 + listNum.Min
End Function
'
Private Function Min(ListNum As List(Of Double)) As Double
 Return ListNum.Min
End Function
'
Private Function Mode(listNum As List(Of Double)) As Double
 Dim counter As Integer = 0
 Dim maxCounter As Double = 0
 Dim ret As Double = 0
 Dim lastV As Double = Double.MaxValue
 listNum.Sort()
 For Each v As Double In listNum
  If v = lastV Then
   counter += 1
   If counter > maxCounter Then
    maxCounter = counter
    ret = v
   End If
  Else
   counter = 0
  End If
  lastV = v
 Next
 Return ret
End Function
'
Private Function Percentile(listNum As List(Of Double), percent As Double) As Double
 If listNum.Count < 1 Then Return 0
 If listNum.Count = 1 Then Return listNum.Item(0)
 listNum.Sort()
 Dim n As Integer = listNum.Count
 Dim R As Double = ((percent / 100) * (n - 1)) + 1
 If R > n - 1 Then
  Return listNum.Item(n - 1)
 End If
 Dim Ri As Integer = CInt(Math.Floor(R))
 Dim Rf As Double = R - Ri
 Dim p As Double = listNum.Item(Ri - 1)
 p += Rf * (listNum.Item(Ri) - listNum.Item(Ri - 1))
 Return p
End Function
'
Private Function Range(listNum As List(Of Double)) As Double
 Return listNum.Max - listNum.Min
End Function
'
Private Function RelativeStandardDeviation(listNum As List(Of Double)) As Double
 Dim ret As Double = 0
 Dim av As Double = listNum.Average
 For Each v As Double In listNum
  ret += (v - av) * (v - av)
 Next
 Return 100 * Math.Sqrt(ret / listNum.Count) / listNum.Average
End Function
'
Private Function RootMeanSquared(listNum As List(Of Double)) As Double
 Dim ret As Double = 0
 If listNum.Count < 1 Then Return 0
  For Each v As Double In listNum
   ret += v * v
  Next
 Return Math.Sqrt(ret / listNum.Count)
End Function
'
Private Function StandardDeviation_Population(listnum As List(Of Double)) As Double
 Dim ret As Double = 0
 Dim av As Double = listnum.Average
 For Each v As Double In listnum
  ret += (v - av) * (v - av)
 Next
 Return Math.Sqrt(ret / listnum.Count)
End Function
'
Private Function StandardDeviation_Sample(listnum As List(Of Double)) As Double
 Dim ret As Double = 0
 Dim av As Double = listnum.Average
 For Each v As Double In listnum
  ret += (v - av) * (v - av)
 Next
 ret /= (listnum.Count - 1)
 Return Math.Sqrt(ret)
End Function
'
Private Function StandardError_Population(listNum As List(Of Double)) As Double
 Dim sd_p As Double = 0
 Dim n As Integer = listNum.Count
 Dim av As Double = listNum.Average
 For Each v As Double In listNum
  sd_p += (v - av) * (v - av)
 Next
 sd_p = Math.Sqrt(sd_p / n)
 Return sd_p / Math.Sqrt(n)
End Function
'
Private Function StandardError_Sample(listNum As List(Of Double)) As Double
 Dim sd_s As Double = 0
 Dim n As Integer = listNum.Count
 Dim av As Double = listNum.Average
 For Each v As Double In listNum
  sd_s += (v - av) * (v - av)
 Next
 sd_s /= (listNum.Count - 1)
 sd_s = Math.Sqrt(sd_s)
 Return sd_s / Math.Sqrt(n)
End Function
'
Private Function Sum(ListNum As List(Of Double)) As Double
 Return ListNum.Sum
End Function
'
Private Function SumOfSquares(ListNum As List(Of Double)) As Double
 If ListNum.Count = 0 Then Return 0
 Dim ret As Double = 0
 For Each v As Double In ListNum
  ret += (v - ListNum.Average) * (v - ListNum.Average)
 Next
 Return ret
End Function
'
Private Function Variance_Population(listNum As List(Of Double)) As Double
 Dim ret As Double = 0
 Dim av As Double = listNum.Average
 For Each v As Double In listNum
  ret += (v - av) * (v - av)
 Next
 Return ret / listNum.Count
End Function
'
Private Function Variance_Sample(listNum As List(Of Double)) As Double
 Dim ret As Double = 0
 Dim av As Double = listNum.Average
 For Each v As Double In listNum
  ret += (v - av) * (v - av)
 Next
 ret /= (listNum.Count - 1)
 Return ret
End Function
  

DigitalDan.co.uk