moments.pp 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. { Statistical Moments }
  2. Program moments;
  3. uses SysUtils, Classes;
  4. function Power(Base : Real ; Exponent: Integer): Real;
  5. var i : integer;
  6. var pow : real;
  7. begin
  8. pow := Base;
  9. For i:= 2 To Exponent do pow := pow * Base;
  10. Power := pow;
  11. end;
  12. function Compare(A, B : Pointer) : longint;
  13. begin
  14. if A > B then
  15. Compare := 1
  16. else if A < B Then
  17. Compare := -1
  18. else
  19. Compare := 0;
  20. end;
  21. var
  22. i, N, sum, num, middle : longint;
  23. list : TList;
  24. median, mean, deviation,
  25. average_deviation, standard_deviation,
  26. variance, skew, kurtosis : real;
  27. begin
  28. list := TList.Create;
  29. While Not Eof(input) do
  30. begin
  31. Readln(input, num);
  32. list.Add( Pointer(num) );
  33. end;
  34. N := list.Count;
  35. For i := 0 To N-1 do Inc(sum, longint(list.Items[i]));
  36. mean := sum / N;
  37. average_deviation := 0;
  38. standard_deviation := 0;
  39. variance := 0;
  40. skew := 0;
  41. kurtosis := 0;
  42. For i := 0 To N-1 do
  43. begin
  44. deviation := longint(list.Items[i]) - mean;
  45. average_deviation := average_deviation + Abs(deviation);
  46. variance := variance + Power(deviation, 2);
  47. skew := skew + Power(deviation, 3);
  48. kurtosis := kurtosis + Power(deviation, 4);
  49. end;
  50. average_deviation := average_deviation / N;
  51. variance := variance / (N-1);
  52. standard_deviation := Sqrt(variance);
  53. If variance <> 0 Then
  54. begin
  55. skew := skew / (N * variance * standard_deviation);
  56. kurtosis := kurtosis / (N * variance * variance ) - 3.0;
  57. end;
  58. list.Sort(@Compare);
  59. middle := N Div 2;
  60. If (N Mod 2) <> 0 Then
  61. median := longint(list.Items[middle])
  62. Else
  63. median := (longint(list.Items[middle]) +
  64. longint(list.Items[middle-1])) / 2;
  65. WriteLn('n: ', N);
  66. WriteLn('median: ', median:6:6);
  67. WriteLn('mean: ', mean:6:6);
  68. WriteLn('average_deviation: ', average_deviation:6:6);
  69. WriteLn('standard_deviation: ', standard_deviation:6:6);
  70. WriteLn('variance: ', variance:6:6);
  71. WriteLn('skew: ', skew:6:6);
  72. WriteLn('kurtosis: ', kurtosis:6:6);
  73. end.