65.9K
CodeProject is changing. Read more.
Home

This class has some nice statistical functions

starIconstarIconstarIconemptyStarIconemptyStarIcon

3.00/5 (3 votes)

Mar 20, 2007

CPOL
viewsIcon

37244

downloadIcon

555

It has some Statistical function such as mean , variance,...

Introduction

The class which is attached helps you to use statistical functions in your projects

It include these functinos :

1-Max

2-Min

3-Median

4-Mode

5-Mean

6-Variance

7-Covariance

8-VarCovarMatrix

9-Correlation

Using the code

Using the class is too easy.
Just try it. then enjoy it.

Something Nice

Have you ever tried to write a function that could calculate the Mode ?

It was really good experince i had writting this class

if you look at the function ( Mode ) you will find out, that it could count how many times an elemnt in an matrix of any type! with any dimension ( just less than 3) was repeated!

and finally it find the most repeated elements and return them as the Mode.

this is the code :

Public Shared Function Mode(ByVal InArray As Array) As Object()


        Dim Dimentions() As Integer = size(InArray)
        Dim i As Integer
        Dim j As Integer
        Dim k As Integer
        Dim NewInArray(InArray.Length - 1) As Object

        Select Case Dimentions.Length
            Case 1
                Array.Copy(InArray, NewInArray, InArray.Length)

            Case 2
                For i = 0 To Dimentions(0) - 1
                    For j = 0 To Dimentions(1) - 1
                        NewInArray(i * Dimentions(1) + j) = InArray(i, j)
                    Next
                Next

            Case 3
                For i = 0 To Dimentions(0) - 1
                    For j = 0 To Dimentions(1) - 1
                        For k = 0 To Dimentions(2) - 1
                            NewInArray(i * Dimentions(1) * Dimentions(2) + j * Dimentions(2) + k) = InArray(i, j, k)
                        Next
                    Next
                Next

            Case Else
                MsgBox("Matrix dimention must be less than 3", MsgBoxStyle.Critical, "Statistic")
                Return Nothing
        End Select

        Array.Sort(NewInArray)
        Dim Temp As Integer
        Dim Counter As Integer = 0
        Dim ModeArray(0) As ArrayValueRepetation

        i = 0

        While i < NewInArray.Length
            Temp = 0
            ReDim Preserve ModeArray(Counter)
            For j = i To NewInArray.Length - 1
                If NewInArray(i) = NewInArray(j) Then
                    Temp += 1
                    ModeArray(Counter).RepeatTimes = Temp
                    ModeArray(Counter).Value = NewInArray(i)
                ElseIf Temp = 1 Then
                    ModeArray(Counter).RepeatTimes = Temp
                    ModeArray(Counter).Value = NewInArray(i)
                    Exit For
                Else
                    Exit For
                End If
            Next
            Counter += 1
            i = j
        End While

        Dim RepeatTimes(Counter - 1) As Integer
        For i = 0 To Counter - 1
            RepeatTimes(i) = ModeArray(i).RepeatTimes
        Next

        Dim MaxRepeat As UInteger = Max(RepeatTimes)
        Dim OutVector(0) As Object
        Dim NumberOfModes As Integer = 0
        For i = 0 To Counter - 1
            If ModeArray(i).RepeatTimes = MaxRepeat Then
                ReDim Preserve OutVector(NumberOfModes)
                'OutVector.SetValue(ModeArray(i).Value, NumberOfModes)
                OutVector(NumberOfModes) = ModeArray(i).Value
                NumberOfModes += 1
            End If
        Next

        Return OutVector
    End Function