[R]歪度の計算
標準で組み込まれている関数に歪度を計算できるものはない。そのため、自作をする必要がある。
以下は歪度を計算する関数。引数に数値ベクトルを与える。
skewness <- function(val) {
n <- length(val)
var1 <- var(val) * (n - 1) / n # 不偏分散から標本分散を求める
sd1 <- sqrt(var1) # 標本分散の平方根
r <- sum((val - mean(val)) ^ 3) / (n * sd1 ^ 3)
return(r)
}
「統計解析のはなし」(石村貞夫著、東京図書)の39~40ページに載っている計算例を試してみる。上記の関数を定義した上で、以下のスクリプトを実行する。
スクリプト
d <- c(rep(125, 7), rep(175, 22), rep(225, 15), rep(275, 14), rep(375, 8), rep(425, 2), rep(475, 1), rep(575, 2))
cat(sprintf("標本数 %d\n", length(d)))
cat(sprintf("平均 %f\n", mean(d)))
val <- var(d) * (length(d) - 1) / length(d)
cat(sprintf("標本分散 %f\n", val))
cat(sprintf("標本分散の標準偏差 %f\n", sqrt(val)))
cat(sprintf("歪度 %f\n", skewness(d)))
出力
71
平均 245.422535
標本分散 9829.398929
標本分散の標準偏差 99.143325
歪度 1.344286
歪度a3とは、分布の形が左右対称になっているかどうかを示す量であり、その数値が指す内容は以下のとおりである。
a3>0 - 右にすそが長い
a3≒0 - 左右対称
a3<0 - 左にすそが長い
