分布の偏り

分布の偏りを表す要約統計量として、モーメント、尖度、歪度などがある。

モーメント 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