今日のRuby

今日もまた記述統計の基本的な関数群をナイーブに実装。

    def normalize(*args)
      sd = standard_deviasion(args)
      m = mean(args)
      return args.flatten.map{|i|
        (i - m) / sd
      }
    end

    def skewness(*args)
      return normalize(args).reduce{|i,j| i + j ** 3} / (args.size - 1)
    end

    def kurtos(*args)
      return normalize(args).reduce{|i, j| i + j ** 4} / (args.size - 1)
    end

正規化、歪度、尖度を求めます。

で、テストケース。これは正規化に関するもの。

    normalized = Statistics.normalize(@data)
    assert(Statistics.mean(normalized) == 0)
    assert(Statistics.variant(normalized) == 1.0)

正規化した標本は平均0、分散1のはずなんだけど…なぜかそうならない。
誤差にやられているような気がするんだけど。