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 <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<