R言語で中央値や四分位数、最大値、最小値を求める関数やその実行例を解説します。
データの中央値や四分位数、最大値、最小値の計算の例や、これらの要約統計量と箱ひげ図の関係も紹介します。データの要約の流れについて見ていきます。
この記事で扱うプログラミングコードは以下からダウンロードできます。
中央値や四分位数、最大値、最小値について詳しく見たい方は次の記事を参照してください。
関数
分位数(quantile)に関する様々な関数を紹介します。
データを小さい方から順に並べたときの分位点を求める関数について見ていきます。
標本\(x_1, x_2, \ldots, x_n\)が得られたとき、この標本を順に並べたものを\(x_{(1)}, x_{(2)}, \ldots, x_{(n)}\)とする。\(x_{(1)}, x_{(2)}, \ldots, x_{(n)}\)に対する要約統計量の定義と統計量を計算してくれる関数についてみていきます。
中央値
次で定義される平均値を計算する関数を紹介します。
\begin{align} \mathrm{median} = \left\{ \begin{array}{cl} x_{((n+1) / 2)} &, \mathrm{if}\ n\ \mathrm{is\ odd}\\ \cfrac{x_{(n / 2)} + x_{(n / 2 + 1)}}{2} &, \mathrm{if}\ n\ \mathrm{is\ even}. \end{array} \right. \end{align}
次に関数medianを用いることで、平均値を計算することができます
関数medianの引数は以下の通りです。
x | sortなどの数値計算が適用できるクラスのオブジェクト。numeric型のベクトルなど。 |
na.rm | logical型。中央値の計算の過程で欠測値NAを除外するかどうか。 |
四分位数
次で定義される四分位数を計算する紹介します。
\begin{align} Q_1 &= x\bigl(1+ (n - 1) / 4\bigr), \\ Q_3 &=x\bigl(1 +3 (n - 1)/ 4\bigr) ,\end{align}ここに\begin{align}x(t) = \left\{ \begin{array}{cl} x_{(t)} &, \mathrm{if}\ t \in \mathbb{N},\\ (\lceil t \rceil - t)x_{(\lfloor t \rfloor)} + (t - \lfloor t \rfloor) x_{(\lceil t \rceil)}&, \mathrm{otherwise}.\end{array}\right. \end{align}
四分位数を計算するには、次の関数quantileを使います。
# S3 method for default
quantile(x, probs = seq(0, 1, 0.25), na.rm = FALSE, names = TRUE, type = 7, …)
関数quantileの引数は以下の通りです。
x | 分位点を計算したいnumeric型のベクトル。またはソートなどの数値計算が適用できるクラスのオブジェクト。NAとNaNはna.rmがTRUEでないときに限り適用される。 |
probs | [0, 1]の確率を表すnumeric型のベクトル。 |
na.rm | logical型。TRUEのとき、分位点の計算の前にNAとNaNはxから除去される。 |
names | logical型。TRUEのときnamesが結果に含まれる。 |
type | から9までの整数でそれぞれの数字に対応する分位数のアルゴリズムを設定できる。 |
最大値
次で与えられる最大値を計算する関数を紹介します。
\begin{align} \mathrm{max}= x_{(n)}. \end{align}
最大値を計算するには、次の関数maxを使います。
関数maxの引数は以下の通りです。
. . . | 関数univarに渡す引数。 |
最小値
次で与えられる最小値を計算する関数を紹介します。
\begin{align} \mathrm{min}= x_{(1)}. \end{align}
最小値を計算するには、次の関数minを使います。
関数minの引数は以下の通りです。
. . . | 関数univarに渡す引数。 |
実行例
上で紹介した関数の実行例を紹介します。準備として、箱ひげ図のプロットに次のパッケージggplot2を使います。まだインストールしていない方は、install.packagesでインストールしてください。
1 2 3 4 | install.packages("ggplot2") install.packages("plotrix") library(ggplot2) library(plotrix) |
次のデータxの中央値、四分位数、最大値、最小値を求めたいと思います。
1 2 | #標本中央値、四分位数、最大値、最小値 x <- c(5, 8, 2, 9, 9, 6, 9, 14, 11, 12, 6, 4, 6, 23, 5, 9, 7, 5, 17, 4) |
次に示すように、関数の引数にデータをあてはめるだけで簡単に中央値、四分位数、最大値、最小値を計算することができます。
1 2 3 4 | median_x <- median(x) quantile_x <- quantile(x) max_x <- max(x) min_x <- min(x) |
中央値、四分位数、最大値、最小値は以下の通りです。データは2から23の値をとり、7.5が真ん中の値であることが分かります。
1 2 3 4 5 6 7 8 9 | > median_x [1] 7.5 > quantile_x 0% 25% 50% 75% 100% 2.0 5.0 7.5 9.5 23.0 > max_x [1] 23 > min_x [1] 2 |
上で紹介した関数を使わなくても、次のように関数summaryを使うことで、これらの分位数に関する要約統計量を全て計算することが可能です。
summaryによって得られたオブジェクトは、後ろに$を付けることで各統計量の参照及び取得が可能です。
1 2 3 4 5 6 7 8 9 10 | > summary_x <- summary(x) > summary_x Min. 1st Qu. Median Mean 3rd Qu. Max. 2.00 5.00 7.50 8.55 9.50 23.00 > summary_x["Min."] Min. 2 > summary_x["1st Qu."] 1st Qu. 5 |
また、これらの統計量のデータフレームへの保存と、csvファイルの出力例を以下に示します。
1 2 3 | statsTable <- data.frame(min = min_x, Qu.1 = quantile_x["25%"], median = median_x, Qu.3 = quantile_x["75%"], max = max_x, row.names = NULL) write.csv(statsTable, "中央値・四分位数・最大値・最小値.csv", row.names = FALSE) |
最後に、箱ひげ図とこれらの分位数の関係について見ていきます。次を実行すると、下の画像の箱ひげ図を描くことができます。
1 2 3 4 5 6 7 8 9 | ggplot(data.frame(x, temp = 1), aes(x = temp, y = x)) + geom_boxplot(fill = "gray", width = 0.25) + geom_dotplot(binaxis = "y", stackdir = "center") + annotate("text", x = 0.7, y = median_x, label = paste0("Median: ", round(median_x, 2))) + annotate("text", x = 0.7, y = quantile_x["25%"], label = paste0("1st Quantile: ", round(quantile_x["25%"], 2))) + annotate("text", x = 0.7, y = quantile_x["75%"], label = paste0("3rd Quantile: ", round(quantile_x["75%"], 2))) + annotate("text", x = 0.7, y = max_x, label = paste0("Max: ", round(max_x, 2))) + annotate("text", x = 0.7, y = min_x, label = paste0("Min: ", round(min_x, 2))) + scale_x_continuous("", limits = c(0.6, 1.4)) |
各分位数の値を箱ひげ図にあてはめることで、箱ひげ図の意味が分かりやすくなります。
箱ひげ図の端点は最大値と最小値に、箱の両端は第一四分位数と第三四分位数に、箱の中央の線は中央値に対応しているのが確認できます。
平均値や分散のときの実行例で描いたエラーバー付きのプロットの場合、データの標本分散を用いているため、今回のように外れ値を含むデータには適していません。
箱ひげ図を用いることで、外れ値がある場合でも0%, 25%, 50%, 75%, 100%の各分位点を把握することができます。
まとめ
R言語で中央値、四分位数、最大値、最小値を計算する関数やその実行例を紹介しました。
関数medianで中央値、quantileで各四分位数、maxとminでそれぞれ最大値と最小値を計算することが可能です。
また、関数summaryを用いることでこれらの分位数を全て計算することもできます。