箱ヒゲ図にt検定の結果を表示する方法

箱ヒゲ図はデータのばらつきを視覚化するチャートですが、「2グループの差が統計的に有意かどうか」まで判断することができません。

カスタム (R) チャート」を使うと、箱ヒゲ図とt検定の結果を1つのチャートにまとめて表現できます。

箱ヒゲ図とt検定の組み合わせについて

箱ヒゲ図は、中央値・四分位範囲などの代表値を使ってデータのばらつきを表現するチャートです。グループ間でばらつきの違いを比較するのに適していますが、その差が統計的に有意かどうかは読み取ることができません。

たとえば上の図を見ると、女性の方が給料の中央値が高く分布しているように見えます。しかし、これだけでは「偶然の差なのか、それとも本当に差があるのか」は判断できません。

一方で、t検定を使うと、2グループの平均の差が統計的に有意かどうかをp値をもとに判断できます。

このp値を箱ヒゲ図の上に表示することで、分布の見た目と統計的な判断を1つのチャートで同時に伝えることができます。

必要なデータ

箱ヒゲ図にt検定の結果を表示するには、グループを表す列と、比較したい数値を表す列(数値型)の2列を持ったデータが必要です。

今回は、1行が1人の従業員を表すデータを使って、性別ごとの給料の分布とt検定の結果を表示していきます。

サンプルデータはこちらからダウンロードいただけます。

チャートを作成する

カスタム (R) チャートで箱ヒゲ図にt検定の結果を表示する

チャート・ビューからカスタム (R) チャートを使うと、Rのコードを貼り付けるだけで箱ヒゲ図にt検定の結果を重ねたチャートを作成できます。

チャート・ビューに移動し、チャートタイプの一覧から「カスタム (R) チャート」を選択します。

すると、Rスクリプトを入力するテキストエディタが表示されます。

Rスクリプトを貼り付けて実行する

今回はRで可視化を行う際に一般的によく利用されるパッケージであるggplot2を使います。

Exploratoryにはデフォルトでggplot2がインストールされているため、別途インストールする必要はありません。

続いて、以下のスクリプトをテキストエディタに貼り付けてください。${DATA} はExploratoryが現在アクティブなデータフレームを自動的に参照する専用の記法です。

library(ggplot2)

df <- ${DATA}

# t検定を実行してp値を取得
test_result <- t.test(給料 ~ 性別, data = df)  # 「給料」→ 数値列名、「性別」→ グループ列名
p_value     <- test_result$p.value
p_label     <- paste0("p = ", format.pval(p_value, digits = 2))  # p値の表示形式(digits で有効桁数を変更)

# 括弧線・p値ラベルのY座標を自動計算
y_max     <- max(df$給料, na.rm = TRUE)  # 「給料」→ 数値列名
y_bracket <- y_max * 1.05  # 括弧線の高さ。数値を調整すると上下に移動
y_label   <- y_max * 1.10  # p値ラベルの高さ。数値を調整すると上下に移動

ggplot(df, aes(x = 性別, y = 給料)) +  # 「性別」→ グループ列名、「給料」→ 数値列名
  geom_boxplot(aes(fill = 性別)) +      # 「性別」→ グループ列名
  # 括弧線(不要な場合は以下3行をコメントアウト)
  annotate("segment", x = 1, xend = 2, y = y_bracket, yend = y_bracket) +
  annotate("segment", x = 1, xend = 1, y = y_bracket, yend = y_bracket * 0.98) +
  annotate("segment", x = 2, xend = 2, y = y_bracket, yend = y_bracket * 0.98) +
  # p値ラベル(不要な場合はこの行をコメントアウト)
  annotate("text", x = 1.5, y = y_label, label = p_label, size = 5) +  # size でフォントサイズを変更
  theme_minimal(base_family = "HiraginoSans-W3") +
  labs(x = "性別", y = "給料")  # 軸ラベルのテキスト

スクリプトを貼り付けたら「ビュー」ボタンをクリックすると、箱ヒゲ図にp値が重ねて表示されます。

ノートやダッシュボードにチャートを挿入する

チャート・ビューで作成したチャートは、チャートのタイプを問わずダッシュボードやノートに配置することが可能です。

配置したチャートは他のチャートと同じようにダッシュボードを実行すると表示されます。

ノートやダッシュボードで直接作成する

カスタム (R) チャートと同じRスクリプトを使って、Exploratoryのノートやダッシュボード上でも直接、今回のようなチャートを作成することができます。

  • ノートやダッシュボードのコンテンツの追加メニューの紹介 - リンク

ノートの編集画面や、ダッシュボードのテキストパネルのコンテンツの追加ボタンから「R スクリプト」を選択すると、Rのコードを入力するためのコードブロックが表示されます。

続いて、以下のスクリプトを貼り付けます。

カスタム (R) チャートとの違いは、${DATA} の代わりにデータフレーム名(ここでは 従業員データ)を直接指定する点のみです。

library(ggplot2)

df <- 従業員データ  # データフレーム名

test_result <- t.test(給料 ~ 性別, data = df)  # 「給料」→ 数値列名、「性別」→ グループ列名
p_value     <- test_result$p.value
p_label     <- paste0("p = ", format.pval(p_value, digits = 2))  # p値の表示形式(digits で有効桁数を変更)

y_max     <- max(df$給料, na.rm = TRUE)  # 「給料」→ 数値列名
y_bracket <- y_max * 1.05  # 括弧線の高さ。数値を調整すると上下に移動
y_label   <- y_max * 1.10  # p値ラベルの高さ。数値を調整すると上下に移動

ggplot(df, aes(x = 性別, y = 給料)) +  # 「性別」→ グループ列名、「給料」→ 数値列名
  geom_boxplot(aes(fill = 性別)) +      # 「性別」→ グループ列名
  # 括弧線(不要な場合は以下3行をコメントアウト)
  annotate("segment", x = 1, xend = 2, y = y_bracket, yend = y_bracket) +
  annotate("segment", x = 1, xend = 1, y = y_bracket, yend = y_bracket * 0.98) +
  annotate("segment", x = 2, xend = 2, y = y_bracket, yend = y_bracket * 0.98) +
  # p値ラベル(不要な場合はこの行をコメントアウト)
  annotate("text", x = 1.5, y = y_label, label = p_label, size = 5) +  # size でフォントサイズを変更
  theme_minimal(base_family = "HiraginoSans-W3") +
  labs(x = "性別", y = "給料")  # 軸ラベルのテキスト

プレビュー・ボタンをクリックすることで、コードの実行結果を確認できます。

参考情報

  • カスタム (R) チャートの使い方 - リンク
Export Chart Image
Output Format
PNG SVG
Background
Set background transparent
Size
Width (Pixel)
Height (Pixel)
Pixel Ratio