分布の偏りを表す要約統計量として、モーメント、尖度、歪度などがある。
モーメント Moment
x1, x2, ..., xn に対して、原点の周りの k 次モーメント ak は次のように定義される。
\[ a_{k}=\frac{1}{n}\left( \sum_{i=1}^{n}x_{i}^{k}\right ) \]
また、平均の周りの k 次のモーメント mk は次のようになっている。
\[ m_{k}=\frac{1}{n}\left( \sum_{i=1}^{n}(x_{i}-\bar{X})^{k}\right ) \]
R でモーメントを求める関数を作る例。一つ目の引数はデータ、二つ目はモーメントの次数を代入すると、その時のモーメントを計算することができる。
mnt <- function(x, k) {
n <- length(x)
Ak <- 0
Mk <- 0
m <- mean(x)
for(i in 1:n){
Ak <- Ak + (x[i] - m) ^ k #原点の周り
Mk <- Mk + (x[i]) ^ k #平均の周り
}
Ak <- Ak / n
Mk <- Mk / n
print(Ak)
print(Mk)
}
x <- c(28, 39, 2, 93, 13, 4)
mnt(x, 2)
## [1] 967.1389
## [1] 1857.167
R の moments ライブラリーにモーメントを計算する関数が実装されている。例えば次のようにモーメントを計算できる。
library(moments)
moment(x, 2, TRUE)
## [1] 967.1389
moment(x, 2, FALSE)
## [1] 1857.167
尖度 Kurtosis
分布の尖り具合を表す要約統計量として尖度がある。
\[ \beta = \frac{\sum_{i=1}^{n}(x_{i}-\bar{X})^{4}}{n\sigma^{2}} \]
Rで尖度を計算する例です。
kur <- function(x){
n <- length(x)
kurX <- 0
for(i in 1:n){
uppX <- (x[i] - mean(x)) ^ 4
kurX <- kurX + uppX
}
kurX <- kurX / (n * var(x) ^ 2)
return(kurX)
}
x <- rnorm(100)
kur(x)
## [1] 3.005547
library(moments)
kurtosis(x)
## [1] 3.066572
歪度 Skewness
分布の尖り具合を表すもう一つの指標は、歪度というものがあります。
\[ \gamma = \frac{\sum_{i=1}^{n}(x_{i}-\bar{X})^{3}}{n\sigma^{\frac{3}{2}}} \]
skw <- function(x) {
n <- length(x)
skwX <- 0
for(i in 1:n){
uppX <- (x[i] - mean(x)) ^ 3
skwX <- skwX + uppX
}
skwX <- skwX / (n * var(x) ^ (3 / 2))
return(skwX)
}
x <- rnorm(100)
skw(x)
## [1] -0.1860884
library(moments)
skewness(x)
## [1] -0.188915