Rの関数:box.heresy {plotrix}

Rの関数から box.heresy {plotrix} を確認します。

関数 box.heresy とは

box.heresy は、「箱(ボックス)」と「ヒゲ(エラーバー)」の範囲をユーザーが任意に指定して描画するプロット関数です。

標準的なボックスプロット(箱ひげ図)が四分位点や外れ値の基準に従って自動的に計算されるのに対し、本関数は統計的な定義に縛られません。

例えば、箱の部分を「平均値 ± 標準偏差」とし、ヒゲの部分を「最大値・最小値」や「信頼区間」に設定するなど、目的に応じた独自の可視化が可能です。

内部的な処理としては、まず dispersion 関数を呼び出して外側のヒゲを描画し、その上に rect 関数で箱を描き、最後に points 関数で中心点を打点するという多層的な構造を持っています。

各要素の範囲を絶対座標として指定するか、中心点からのオフセット(相対値)として指定するかを柔軟に選択できる点が、本関数の特徴です。

関数 box.heresy の活用シーン

  • 独自の統計指標の可視化

    • 標準的な四分位間隔ではなく、平均値を中心とした標準偏差(1SD)や標準誤差(SE)の範囲を箱として明示したい場合。
  • 複数の信頼区間の同時提示

    • 内側の箱で 90% 信頼区間を示し、外側のヒゲで 95% 信頼区間や全範囲を示すなど、異なる信頼水準を重ねて表現したい場合。
  • 要約データの直接描画

    • 生データが手元になく、すでに計算済みの統計量(平均、最小、最大など)のみを用いてボックスプロット風の図を作成する必要がある場合。

関数 box.heresy の引数

library(plotrix)
args(box.heresy)
function (x, y, uinner, linner, ulim, llim = ulim, boxwidth = NULL, 
    intervals = FALSE, arrow.cap = NULL, pch = 22, main = "", 
    xlab = "", ylab = "", xaxlab = NULL, col = "white", do.first = NULL, 
    ...) 
NULL
  • x, y

    • プロットの中心となる座標を指定します。x が省略された場合はインデックス番号が割り当てられます。
  • uinner, linner

    • 「箱(ボックス)」の上端および下端の値を指定します。
  • ulim, llim

    • 「ヒゲ(エラーバー)」の上限および下限の値を指定します。llim を省略した場合は ulim と同値が適用されます。
  • boxwidth

    • 箱の水平方向の幅を指定します。未指定の場合は、データの間隔に応じて自動的に算出されます。
  • intervals

    • 論理値を指定します。TRUE の場合、上述の uinnerulim 等は中心点 y からの距離(相対値)として扱われます。FALSE(初期値)の場合は、絶対的な座標値として扱われます。
  • arrow.cap

    • ヒゲの先端にある横線の長さを指定します。
  • pch

    • 中心点 (x, y) に描画される記号の種類を指定します。
  • col

    • 箱の内部の塗りつぶし色を指定します。
  • do.first

    • 描画処理が開始される前に実行したい R コードを文字列として指定できます。背景にグリッドを引く際などに利用されます。

サンプルコード

以下に、3つの実験条件における要約統計量を、独自の基準で可視化するサンプルコードを提示します。

# 1. 架空の統計データの作成
# カテゴリ名、中心値、箱の範囲(標準偏差相当)、ヒゲの範囲(最大最小相当)を定義
conditions <- c("条件 A", "条件 B", "条件 C")
center_means <- c(55, 72, 48)
sd_values <- c(8, 12, 6) # 箱の広がり(片側分)
range_values <- c(20, 25, 18) # ヒゲの広がり(片側分)

# 2. box.heresy を用いたプロットの描画
# intervals = TRUE を設定し、相対的な広がりとして描画を行います
box.heresy(
  x = 1:3,
  y = center_means,
  uinner = sd_values, # 箱の上側:1SD分
  linner = sd_values, # 箱の下側:1SD分
  ulim = range_values, # ヒゲの上側:全範囲相当
  llim = range_values, # ヒゲの下側:全範囲相当
  intervals = TRUE, # 相対値としての解釈を有効化
  main = "独自定義によるボックスプロット(Heresy Plot)",
  xlab = "実験条件",
  ylab = "測定スコア",
  xaxlab = conditions, # X軸ラベルの指定
  col = c("#ff9999", "#99ff99", "#9999ff"), # 各箱への着色
  arrow.cap = 0.05, # ヒゲの先端の幅を調整
  pch = 4 # 中心点の記号を×印に設定
)
Figure 1

中央の×印(中心値の提示)

Figure 1 の各列の中央に配置された「×」の記号(pch = 4)は、引数 center_means で指定された数値を指し示しています。

具体的には、条件Aは55、条件Bは72、条件Cは48の位置に打点されており、各グループの代表値(例:平均値)を視覚的な起点として提示しています。

着色された矩形(内側の範囲:SD相当)

各中心点を囲む色付きの箱は、引数 uinner および linner によって定義された範囲です。

今回の設定では sd_values(8, 12, 6)が適用されており、intervals = TRUE の設定に基づき、中心値から上下に当該の数値分だけ広がった領域が箱として描画されています。

例えば、条件A(赤色)では、中心の55から上下に8ずつ広がった「47から63」の範囲が箱を形成しています。

本表現により、データの主要な集中範囲(標準偏差など)を直感的に把握することが可能となります。

上下に伸びる垂直線(外側の範囲:全範囲相当)

箱を突き抜けて上下に伸びる「ヒゲ」の部分は、引数 ulim および llimrange_values)に基づいています。

条件Aであれば、中心の55から上下に20ずつ離れた「35から75」の範囲をカバーしています。

ヒゲの先端に描画された水平な線(arrow.cap = 0.05)は、データの境界を示す終端記号として機能しています。

こちらも同様に、外れ値を含む全範囲や、より広い信頼区間を明示する際に有効な視覚的補助となります。

intervals = TRUE による相対指定

box.heresy では中心値と広がり(オフセット)を別々に渡すだけで、内部的に適切な座標計算が行われます。

それゆえ、統計データの構造をそのままコードに反映させることができます。

以上です。