Page 1 of 1

StatsAnalysis Calculation

Posted: Fri Sep 28, 2012 12:29 pm
by Guimauve
Hello everyone,

A tiny module to calculate statistical information about Raw values stored inside a linked list.
I have compare the calculated result with LibreOffice Calc and they are the same so it's safe to use it !

Best regards
Guimauve

Code: Select all

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; AUTOMATICALLY GENERATED CODE, DO NOT MODIFY
; UNLESS YOU REALLY, REALLY, REALLY MEAN IT !!
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Code generated by : Dev-Type V3.203.887
; Project name : StatsAnalysis
; File name : StatsAnalysis
; File Version : 1.0.0
; Programmation : StatsAnalysis
; Programmed by : Guimauve
; Creation Date : 28-09-2012
; Last update : 28-09-2012
; Coded for : PureBasic V5.00
; Platform : Windows, Linux, MacOS X
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Structure declaration <<<<<

Structure StatsAnalysis

  Minimum.d
  Maximum.d
  Range.d
  Mean.d
  Variance.d
  StandardDeviation.d
  Skewness.d
  Kurtosis.d
  VariationCoeff.d

EndStructure

; <<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< The observators <<<<<

Macro GetStatsAnalysisMinimum(StatsAnalysisA)
  
  StatsAnalysisA\Minimum
  
EndMacro

Macro GetStatsAnalysisMaximum(StatsAnalysisA)
  
  StatsAnalysisA\Maximum
  
EndMacro

Macro GetStatsAnalysisRange(StatsAnalysisA)
  
  StatsAnalysisA\Range
  
EndMacro

Macro GetStatsAnalysisMean(StatsAnalysisA)
  
  StatsAnalysisA\Mean
  
EndMacro

Macro GetStatsAnalysisVariance(StatsAnalysisA)
  
  StatsAnalysisA\Variance
  
EndMacro

Macro GetStatsAnalysisStandardDeviation(StatsAnalysisA)
  
  StatsAnalysisA\StandardDeviation
  
EndMacro

Macro GetStatsAnalysisSkewness(StatsAnalysisA)
  
  StatsAnalysisA\Skewness
  
EndMacro

Macro GetStatsAnalysisKurtosis(StatsAnalysisA)
  
  StatsAnalysisA\Kurtosis
  
EndMacro

Macro GetStatsAnalysisVariationCoeff(StatsAnalysisA)
  
  StatsAnalysisA\VariationCoeff
  
EndMacro

; <<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< The mutators <<<<<

Macro SetStatsAnalysisMinimum(StatsAnalysisA, P_Minimum)
  
  GetStatsAnalysisMinimum(StatsAnalysisA) = P_Minimum
  
EndMacro

Macro SetStatsAnalysisMaximum(StatsAnalysisA, P_Maximum)
  
  GetStatsAnalysisMaximum(StatsAnalysisA) = P_Maximum
  
EndMacro

Macro SetStatsAnalysisRange(StatsAnalysisA, P_Range)
  
  GetStatsAnalysisRange(StatsAnalysisA) = P_Range
  
EndMacro

Macro SetStatsAnalysisMean(StatsAnalysisA, P_Mean)
  
  GetStatsAnalysisMean(StatsAnalysisA) = P_Mean
  
EndMacro

Macro SetStatsAnalysisVariance(StatsAnalysisA, P_Variance)
  
  GetStatsAnalysisVariance(StatsAnalysisA) = P_Variance
  
EndMacro

Macro SetStatsAnalysisStandardDeviation(StatsAnalysisA, P_StandardDeviation)
  
  GetStatsAnalysisStandardDeviation(StatsAnalysisA) = P_StandardDeviation
  
EndMacro

Macro SetStatsAnalysisSkewness(StatsAnalysisA, P_Skewness)
  
  GetStatsAnalysisSkewness(StatsAnalysisA) = P_Skewness
  
EndMacro

Macro SetStatsAnalysisKurtosis(StatsAnalysisA, P_Kurtosis)
  
  GetStatsAnalysisKurtosis(StatsAnalysisA) = P_Kurtosis
  
EndMacro

Macro SetStatsAnalysisVariationCoeff(StatsAnalysisA, P_VariationCoeff)
  
  GetStatsAnalysisVariationCoeff(StatsAnalysisA) = P_VariationCoeff
  
EndMacro

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< The Reset operator <<<<<

Macro ResetStatsAnalysis(StatsAnalysisA)
 
  ClearStructure(StatsAnalysisA, StatsAnalysis)

EndMacro

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< The Copy operator : A = Source : B = Destination <<<<<

Macro CopyStatsAnalysis(StatsAnalysisA, StatsAnalysisB)
 
  CopyMemory(StatsAnalysisA, StatsAnalysisB, SizeOf(StatsAnalysis))

EndMacro

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< The Compare operator <<<<<

Macro CompareStatsAnalysis(StatsAnalysisA, StatsAnalysisB)
  
  CompareMemory(StatsAnalysisA, StatsAnalysisB, SizeOf(StatsAnalysis))
  
EndMacro

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< The Swap operator <<<<<

Macro SwapStatsAnalysis(StatsAnalysisA, StatsAnalysisB)

  Swap GetStatsAnalysisMinimum(StatsAnalysisA), GetStatsAnalysisMinimum(StatsAnalysisB)
  Swap GetStatsAnalysisMaximum(StatsAnalysisA), GetStatsAnalysisMaximum(StatsAnalysisB)
  Swap GetStatsAnalysisRange(StatsAnalysisA), GetStatsAnalysisRange(StatsAnalysisB)
  Swap GetStatsAnalysisMean(StatsAnalysisA), GetStatsAnalysisMean(StatsAnalysisB)
  Swap GetStatsAnalysisVariance(StatsAnalysisA), GetStatsAnalysisVariance(StatsAnalysisB)
  Swap GetStatsAnalysisStandardDeviation(StatsAnalysisA), GetStatsAnalysisStandardDeviation(StatsAnalysisB)
  Swap GetStatsAnalysisSkewness(StatsAnalysisA), GetStatsAnalysisSkewness(StatsAnalysisB)
  Swap GetStatsAnalysisKurtosis(StatsAnalysisA), GetStatsAnalysisKurtosis(StatsAnalysisB)
  Swap GetStatsAnalysisVariationCoeff(StatsAnalysisA), GetStatsAnalysisVariationCoeff(StatsAnalysisB)
  
EndMacro

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Read preferences group  <<<<<

Procedure ReadPreferenceStatsAnalysis(GroupName.s, *StatsAnalysisA.StatsAnalysis)

  PreferenceGroup(GroupName)
 
  SetStatsAnalysisMinimum(*StatsAnalysisA, ReadPreferenceDouble("Minimum", GetStatsAnalysisMinimum(*StatsAnalysisA)))
  SetStatsAnalysisMaximum(*StatsAnalysisA, ReadPreferenceDouble("Maximum", GetStatsAnalysisMaximum(*StatsAnalysisA)))
  SetStatsAnalysisRange(*StatsAnalysisA, ReadPreferenceDouble("Range", GetStatsAnalysisRange(*StatsAnalysisA)))
  SetStatsAnalysisMean(*StatsAnalysisA, ReadPreferenceDouble("Mean", GetStatsAnalysisMean(*StatsAnalysisA)))
  SetStatsAnalysisVariance(*StatsAnalysisA, ReadPreferenceDouble("Variance", GetStatsAnalysisVariance(*StatsAnalysisA)))
  SetStatsAnalysisStandardDeviation(*StatsAnalysisA, ReadPreferenceDouble("StandardDeviation", GetStatsAnalysisStandardDeviation(*StatsAnalysisA)))
  SetStatsAnalysisSkewness(*StatsAnalysisA, ReadPreferenceDouble("Skewness", GetStatsAnalysisSkewness(*StatsAnalysisA)))
  SetStatsAnalysisKurtosis(*StatsAnalysisA, ReadPreferenceDouble("Kurtosis", GetStatsAnalysisKurtosis(*StatsAnalysisA)))
  SetStatsAnalysisVariationCoeff(*StatsAnalysisA, ReadPreferenceDouble("VariationCoeff", GetStatsAnalysisVariationCoeff(*StatsAnalysisA)))
  
EndProcedure

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Write preferences group <<<<<

Procedure WritePreferenceStatsAnalysis(GroupName.s, *StatsAnalysisA.StatsAnalysis)

  PreferenceGroup(GroupName)
 
  WritePreferenceDouble("Minimum", GetStatsAnalysisMinimum(*StatsAnalysisA))
  WritePreferenceDouble("Maximum", GetStatsAnalysisMaximum(*StatsAnalysisA))
  WritePreferenceDouble("Range", GetStatsAnalysisRange(*StatsAnalysisA))
  WritePreferenceDouble("Mean", GetStatsAnalysisMean(*StatsAnalysisA))
  WritePreferenceDouble("Variance", GetStatsAnalysisVariance(*StatsAnalysisA))
  WritePreferenceDouble("StandardDeviation", GetStatsAnalysisStandardDeviation(*StatsAnalysisA))
  WritePreferenceDouble("Skewness", GetStatsAnalysisSkewness(*StatsAnalysisA))
  WritePreferenceDouble("Kurtosis", GetStatsAnalysisKurtosis(*StatsAnalysisA))
  WritePreferenceDouble("VariationCoeff", GetStatsAnalysisVariationCoeff(*StatsAnalysisA))
  
EndProcedure

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Read in Binary file <<<<<

Procedure ReadStatsAnalysis(FileID.l, *StatsAnalysisA.StatsAnalysis)
 
  SetStatsAnalysisMinimum(*StatsAnalysisA, ReadDouble(FileID))
  SetStatsAnalysisMaximum(*StatsAnalysisA, ReadDouble(FileID))
  SetStatsAnalysisRange(*StatsAnalysisA, ReadDouble(FileID))
  SetStatsAnalysisMean(*StatsAnalysisA, ReadDouble(FileID))
  SetStatsAnalysisVariance(*StatsAnalysisA, ReadDouble(FileID))
  SetStatsAnalysisStandardDeviation(*StatsAnalysisA, ReadDouble(FileID))
  SetStatsAnalysisSkewness(*StatsAnalysisA, ReadDouble(FileID))
  SetStatsAnalysisKurtosis(*StatsAnalysisA, ReadDouble(FileID))
  SetStatsAnalysisVariationCoeff(*StatsAnalysisA, ReadDouble(FileID))
  
EndProcedure

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Write in Binary file <<<<<

Procedure WriteStatsAnalysis(FileID.l, *StatsAnalysisA.StatsAnalysis)
 
  WriteDouble(FileID, GetStatsAnalysisMinimum(*StatsAnalysisA))
  WriteDouble(FileID, GetStatsAnalysisMaximum(*StatsAnalysisA))
  WriteDouble(FileID, GetStatsAnalysisRange(*StatsAnalysisA))
  WriteDouble(FileID, GetStatsAnalysisMean(*StatsAnalysisA))
  WriteDouble(FileID, GetStatsAnalysisVariance(*StatsAnalysisA))
  WriteDouble(FileID, GetStatsAnalysisStandardDeviation(*StatsAnalysisA))
  WriteDouble(FileID, GetStatsAnalysisSkewness(*StatsAnalysisA))
  WriteDouble(FileID, GetStatsAnalysisKurtosis(*StatsAnalysisA))
  WriteDouble(FileID, GetStatsAnalysisVariationCoeff(*StatsAnalysisA))
  
EndProcedure

; <<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Debugging macro <<<<<

Macro DebugStatsAnalysis(StatsAnalysisA)

  Debug "Minimum : " + StrD(GetStatsAnalysisMinimum(StatsAnalysisA), 6)
  Debug "Maximum : " + StrD(GetStatsAnalysisMaximum(StatsAnalysisA), 6)
  Debug "Range : " + StrD(GetStatsAnalysisRange(StatsAnalysisA), 6)
  Debug "Mean : " + StrD(GetStatsAnalysisMean(StatsAnalysisA), 6)
  Debug "Variance : " + StrD(GetStatsAnalysisVariance(StatsAnalysisA), 6)
  Debug "StandardDeviation : " + StrD(GetStatsAnalysisStandardDeviation(StatsAnalysisA), 6)
  Debug "Skewness : " + StrD(GetStatsAnalysisSkewness(StatsAnalysisA), 6)
  Debug "Kurtosis : " + StrD(GetStatsAnalysisKurtosis(StatsAnalysisA), 6)
  Debug "VariationCoeff (%) : " + StrD(GetStatsAnalysisVariationCoeff(StatsAnalysisA), 6)
  
EndMacro

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Code generated in : 00.008 seconds (43625.00 lines/second) <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

Procedure RunStatsAnalysis(*StatsAnalysisA.StatsAnalysis, List RawValues.d())
  
  Protected RawValuesCount.l, MeanSum.d, OneShot.b, Delta.d, Delta_2.d
  Protected VarianceSum.d, SkewnessSum.d, KurtosisSum.d, Sigma_3.d, Num_2_Num_3.d
  
  RawValuesCount = ListSize(RawValues())
  
  ForEach RawValues()
    
    MeanSum = MeanSum + RawValues()
    
    If OneShot = #False
      SetStatsAnalysisMinimum(*StatsAnalysisA, RawValues())
      SetStatsAnalysisMaximum(*StatsAnalysisA, RawValues())
      OneShot = #True
    Else
      
      If RawValues() < GetStatsAnalysisMinimum(*StatsAnalysisA)
        SetStatsAnalysisMinimum(*StatsAnalysisA, RawValues())
      EndIf
      
      If RawValues() > GetStatsAnalysisMaximum(*StatsAnalysisA)
        SetStatsAnalysisMaximum(*StatsAnalysisA, RawValues())
      EndIf 
      
    EndIf
    
  Next
  
  SetStatsAnalysisMean(*StatsAnalysisA, MeanSum / RawValuesCount)
  SetStatsAnalysisRange(*StatsAnalysisA, GetStatsAnalysisMaximum(*StatsAnalysisA) - GetStatsAnalysisMinimum(*StatsAnalysisA))

  ForEach RawValues()
    Delta = (RawValues() - GetStatsAnalysisMean(*StatsAnalysisA))
    Delta_2 = Delta * Delta
    VarianceSum = VarianceSum + Delta_2
    SkewnessSum = SkewnessSum + Delta_2 * Delta
    KurtosisSum = KurtosisSum + Delta_2 * Delta_2
  Next

  SetStatsAnalysisVariance(*StatsAnalysisA, VarianceSum / (RawValuesCount - 1))
  SetStatsAnalysisStandardDeviation(*StatsAnalysisA, Sqr(GetStatsAnalysisVariance(*StatsAnalysisA)))
  
  Sigma_3 = Pow(GetStatsAnalysisStandardDeviation(*StatsAnalysisA), 3)
  Num_2_Num_3 = (RawValuesCount - 2) * (RawValuesCount - 3)  
  
  SetStatsAnalysisSkewness(*StatsAnalysisA, RawValuesCount * SkewnessSum / ((RawValuesCount - 1) * (RawValuesCount - 2) * Sigma_3))
  SetStatsAnalysisKurtosis(*StatsAnalysisA, RawValuesCount * (RawValuesCount + 1) * KurtosisSum / ( (RawValuesCount - 1) * Num_2_Num_3 * Sigma_3 * GetStatsAnalysisStandardDeviation(*StatsAnalysisA)) - (3 * (RawValuesCount - 1) * (RawValuesCount - 1)) / Num_2_Num_3)
  SetStatsAnalysisVariationCoeff(*StatsAnalysisA, Abs(GetStatsAnalysisStandardDeviation(*StatsAnalysisA) / GetStatsAnalysisMean(*StatsAnalysisA)) * 100.0)
  
EndProcedure

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 
; <<<<< !!! WARNING - YOU ARE NOW IN A TESTING ZONE - WARNING !!! <<<<< 
; <<<<< !!! WARNING - THIS CODE SHOULD BE COMMENTED - WARNING !!! <<<<< 
; <<<<< !!! WARNING - BEFORE THE FINAL COMPILATION. - WARNING !!! <<<<< 
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 

Macro AddElementEx(ListName, Element)
  
  AddElement(ListName)
  ListName = Element
  
EndMacro

NewList Values.d()

AddElementEx(Values(), 158.0)
AddElementEx(Values(), 152.0)
AddElementEx(Values(), 164.0)
AddElementEx(Values(), 168.0)
AddElementEx(Values(), 168.0)
AddElementEx(Values(), 176.0)
AddElementEx(Values(), 169.0)

RunStatsAnalysis(StatsAnalysis.StatsAnalysis, Values())
DebugStatsAnalysis(StatsAnalysis)

; <<<<<<<<<<<<<<<<<<<<<<<
; <<<<< END OF FILE <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<

Re: StatsAnalysis Calculation

Posted: Wed Feb 18, 2015 3:48 am
by StarBootics
Hello everyone,

Since I have falled in love with Module, this is the Modularized version of StatsAnalysis library.

Best regards
StarBootics

Code: Select all

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Project name : Statistical Analysis
; File Name : StatsAnalysis - Module.pb
; File version: 1.0.0
; Programming : OK
; Programmed by : StarBootics
; Date : 16-02-2015
; Last Update : 17-02-2015
; PureBasic code : V5.31
; Platform : Windows, Linux, MacOS X
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Based on StatsAnalysis structure based library 
; created by Guimauve.
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

DeclareModule StatsAnalysis
  
  Declare.l SampleSize()
  Declare.d Minimum()
  Declare.d Maximum()
  Declare.d Range()
  Declare.d Average()
  Declare.d Variance()
  Declare.d StandardDeviation()
  Declare.d Skewness()
  Declare.d Kurtosis()
  Declare.d VariationCoeff()
  Declare.l FrequenciesTableSize()
  Declare FrequenciesTable(Index.l, *Value_Double, *Count_Long)
  Declare Analyze(List RawValues.d())
  Declare Reset()
  
EndDeclareModule

Module StatsAnalysis
  
  Structure Freq
    
    Value.d
    Count.l
    
  EndStructure
  
  Procedure.l LinearSearchLinkedListOfFreqByValue(List FreqA.Freq(), SearchValue.d)
    
    Protected IsFoundAtIndex.l = -1
    
    ForEach FreqA()
      
      If FreqA()\Value = SearchValue
        IsFoundAtIndex = ListIndex(FreqA())
        Break
      EndIf
      
    Next
    
    ProcedureReturn IsFoundAtIndex
  EndProcedure
  
  Structure StatsAnalysis
    
    SampleSize.l
    Minimum.d
    Maximum.d
    Range.d
    Average.d
    Variance.d
    StandardDeviation.d
    Skewness.d
    Kurtosis.d
    VariationCoeff.d
    List Frequencies.Freq()
    
  EndStructure
  
  Global StatsAnalysis.StatsAnalysis

  Procedure.l SampleSize()
    
    ProcedureReturn StatsAnalysis\SampleSize
  EndProcedure
  
  Procedure.d Minimum()
    
    ProcedureReturn StatsAnalysis\Minimum
  EndProcedure
  
  Procedure.d Maximum()
    
    ProcedureReturn StatsAnalysis\Maximum
  EndProcedure
  
  Procedure.d Range()
    
    ProcedureReturn StatsAnalysis\Range
  EndProcedure
  
  Procedure.d Average()
    
    ProcedureReturn StatsAnalysis\Average
  EndProcedure
  
  Procedure.d Variance()
    
    ProcedureReturn StatsAnalysis\Variance
  EndProcedure
  
  Procedure.d StandardDeviation()
    
    ProcedureReturn StatsAnalysis\StandardDeviation
  EndProcedure
  
  Procedure.d Skewness()
    
    ProcedureReturn StatsAnalysis\Skewness
  EndProcedure
  
  Procedure.d Kurtosis()
    
    ProcedureReturn StatsAnalysis\Kurtosis
  EndProcedure
  
  Procedure.d VariationCoeff()
    
    ProcedureReturn StatsAnalysis\VariationCoeff
  EndProcedure
  
  Procedure.l FrequenciesTableSize()
  
     ProcedureReturn ListSize(StatsAnalysis\Frequencies())
  EndProcedure
  
  Procedure FrequenciesTable(Index.l, *Value_Double, *Count_Long)
    
    If SelectElement(StatsAnalysis\Frequencies(), Index)
      
      PokeD(*Value_Double, StatsAnalysis\Frequencies()\Value)
      PokeL(*Count_Long, StatsAnalysis\Frequencies()\Count)
      
    EndIf
    
  EndProcedure
  
  Procedure Analyze(List RawValues.d())
    
    Protected RawValuesCount.l, AverageSum.d, OneShot.b, Delta.d, Delta_2.d
    Protected VarianceSum.d, SkewnessSum.d, KurtosisSum.d, Sigma_3.d, Num_2_Num_3.d
    
    StatsAnalysis\SampleSize = ListSize(RawValues())
    
    ForEach RawValues()
      
      If LinearSearchLinkedListOfFreqByValue(StatsAnalysis\Frequencies(), RawValues()) = -1
        AddElement(StatsAnalysis\Frequencies())
        StatsAnalysis\Frequencies()\Value = RawValues()
        StatsAnalysis\Frequencies()\Count = 1
      Else
        StatsAnalysis\Frequencies()\Count = StatsAnalysis\Frequencies()\Count + 1
      EndIf
      
      AverageSum = AverageSum + RawValues()
      
      If OneShot = #False
        StatsAnalysis\Minimum = RawValues()
        StatsAnalysis\Maximum = RawValues()
        OneShot = #True
      Else
        
        If RawValues() < StatsAnalysis\Minimum
          StatsAnalysis\Minimum = RawValues()
        EndIf
        
        If RawValues() > StatsAnalysis\Maximum
          StatsAnalysis\Maximum = RawValues()
        EndIf 
        
      EndIf
      
    Next
    
    StatsAnalysis\Average =  AverageSum / StatsAnalysis\SampleSize
    StatsAnalysis\Range = StatsAnalysis\Maximum - StatsAnalysis\Minimum
    
    ForEach RawValues()
      Delta = (RawValues() - StatsAnalysis\Average)
      Delta_2 = Delta * Delta
      VarianceSum = VarianceSum + Delta_2
      SkewnessSum = SkewnessSum + Delta_2 * Delta
      KurtosisSum = KurtosisSum + Delta_2 * Delta_2
    Next
    
    StatsAnalysis\Variance = VarianceSum / (StatsAnalysis\SampleSize - 1)
    StatsAnalysis\StandardDeviation = Sqr(StatsAnalysis\Variance)
    
    Sigma_3 = StatsAnalysis\StandardDeviation * StatsAnalysis\StandardDeviation * StatsAnalysis\StandardDeviation
    Num_2_Num_3 = (StatsAnalysis\SampleSize - 2) * (StatsAnalysis\SampleSize - 3)  
    
    StatsAnalysis\Skewness = StatsAnalysis\SampleSize * SkewnessSum / ((StatsAnalysis\SampleSize - 1) * (StatsAnalysis\SampleSize - 2) * Sigma_3)
    StatsAnalysis\Kurtosis = StatsAnalysis\SampleSize * (StatsAnalysis\SampleSize + 1) * KurtosisSum / ((StatsAnalysis\SampleSize - 1) * Num_2_Num_3 * Sigma_3 * StatsAnalysis\StandardDeviation) - (3 * (StatsAnalysis\SampleSize - 1) * (StatsAnalysis\SampleSize - 1)) / Num_2_Num_3
    StatsAnalysis\VariationCoeff = Abs(StatsAnalysis\StandardDeviation / StatsAnalysis\Average) * 100.0
    
    SortStructuredList(StatsAnalysis\Frequencies(), #PB_Sort_Ascending, OffsetOf(Freq\Value), #PB_Double)
    
  EndProcedure
  
  Procedure Reset()
    
    StatsAnalysis\SampleSize = 0
    StatsAnalysis\Minimum = 0.0
    StatsAnalysis\Maximum = 0.0
    StatsAnalysis\Range = 0.0
    StatsAnalysis\Average = 0.0
    StatsAnalysis\Variance = 0.0
    StatsAnalysis\StandardDeviation = 0.0
    StatsAnalysis\Skewness = 0.0
    StatsAnalysis\Kurtosis = 0.0
    StatsAnalysis\VariationCoeff = 0.0
    
    ForEach StatsAnalysis\Frequencies()
      StatsAnalysis\Frequencies()\Value = 0.0
      StatsAnalysis\Frequencies()\Count = 0
    Next
    
    ClearList(StatsAnalysis\Frequencies())
    
  EndProcedure
  
EndModule

CompilerIf #PB_Compiler_IsMainFile
  
  Macro AddElementEx(ListName, Element)
    
    AddElement(ListName)
    ListName = Element
    
  EndMacro
  
  NewList Values.d()
  
  AddElementEx(Values(), 158.0)
  AddElementEx(Values(), 152.0)
  AddElementEx(Values(), 164.0)
  AddElementEx(Values(), 168.0)
  AddElementEx(Values(), 176.0)
  AddElementEx(Values(), 169.0)
  AddElementEx(Values(), 168.0)
  
  StatsAnalysis::Analyze(Values())
  
  Debug StatsAnalysis::SampleSize()
  Debug StatsAnalysis::Minimum()
  Debug StatsAnalysis::Maximum()
  Debug StatsAnalysis::Range()
  Debug StatsAnalysis::Average()
  Debug StatsAnalysis::Variance()
  Debug StatsAnalysis::StandardDeviation()
  Debug StatsAnalysis::Skewness()
  Debug StatsAnalysis::Kurtosis()
  Debug StatsAnalysis::VariationCoeff()
  
  Debug ""
  
  Max = StatsAnalysis::FrequenciesTableSize() - 1
  
  For Index = 0 To Max
    StatsAnalysis::FrequenciesTable(Index, @Value.d, @Count.l)
    Debug StrD(Value, 3) + " : " + Str(Count)
  Next
  
  StatsAnalysis::Reset()
  
CompilerEndIf

; <<<<<<<<<<<<<<<<<<<<<<<
; <<<<< END OF FILE <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<

Re: StatsAnalysis Calculation

Posted: Wed Feb 18, 2015 9:17 pm
by davido
@Guimauve,
Very useful. Thank you for sharing. :D

@StarBootics,
Thanks for the Module version.