~Rプログラミング~【Statistics with “R”】
四分位数
~Rプログラミング~【Statistics with “R”】
定義(四分位数)
大きさ\(n\)の標本\(x_1,…,x_n\)に対し,これらを小さい順に並べたものを,\(x_\left(1\right),…,x_\left(n\right)\)と表す。さらに
\[q(r)=\left\{ \begin{array}{l} x_{(r)} ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~rが自然数のとき\\ (\lceil r \rceil-r )x_{(\lfloor r \rfloor )}+(r-\lfloor r \rfloor )x_{(\lceil r \rceil )}~~~rが自然数でないとき \end{array} \right. \] このとき
\[q((n+3)/4)\] を第一四分位数, \[q((3n+1)/4)\] を第三四分位数という。
\[q(r)=\left\{ \begin{array}{l} x_{(r)} ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~rが自然数のとき\\ (\lceil r \rceil-r )x_{(\lfloor r \rfloor )}+(r-\lfloor r \rfloor )x_{(\lceil r \rceil )}~~~rが自然数でないとき \end{array} \right. \] このとき
\[q((n+3)/4)\] を第一四分位数, \[q((3n+1)/4)\] を第三四分位数という。
Rでは、summary関数を実行することで、これらの四分位数を計算することが出来る。いっぽうで、定義に従って計算しても同様の計算結果を得ることが出来る。
q <- function(x,r){
order_stat <- sort(x) #xを小さい順に並べる
if(r%%1==0){ #1で割った余りが0か否かで自然数か否かを判別
qr <- order_stat[r] #rが自然数の場合
}else{
ceil_r <- ceiling(r) #rが自然数でない場合
floor_r <- floor(r)
qr <- (ceil_r-r)*order_stat[floor_r]+(r-floor_r)*order_stat[ceil_r]
}
qr
}
Q3 <- function(x){
n <- length(x)
q(x,(3*n+1)/4)
}
Q1 <- function(x){
n <- length(x)
q(x,(n+3)/4)
}
X <- rnorm(100) #検証用データ
Q3(X) #第三四分位数
Q1(X) #第一四分位数
summary(X) #Rの組み込みsummary関数との比較
計算結果はこちら。

計算結果が一致している。