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