背景
単回帰による機械学習のモデルを作成する際に、説明変数が正規分布に従っているか調べるのに便利なので、歪度と尖度を算出する関数を作ってみました。どちらも0に近づくほど、正規分布に近い分布となります。
正規分布でない場合、例えばべき分布だった場合はlogを取るなど、加工を加えます。
環境
Google Colaboratory
Python3
pandas, numpy
コード
# numpyなどのインポート
import numpy as np
import pandas as pd
# 歪度の計算関数
def waido(data):
n = len(data) # サンプルサイズ
s = np.std(data) # 標準偏差
mu = data.mean() # 平均
return (n / ((n-1) * (n-2))) * (((data - mu) / s) ** 3).sum()
# 尖度の計算関数
def sendo(data):
n = len(data) # サンプルサイズ
s = np.std(data) # 標準偏差
mu = data.mean() # 平均
return ( ((n * (n+1)) / ((n-1) * (n-2) * (n-3))) * (((data - mu) ** 4) / (s ** 4)).sum() ) - ((3 * (n-1) ** 2) / ((n-2) * (n-3)))
np.random.randn(100)で作成した標準正規分布のデータで調べたらほぼ0になったので、多分あってるはずです(笑)
参考
歪度、尖度の計算式