HOWTO · R

R で Levene 検定を実行する方法

car パッケージを使って R で Levene 検定を実行します。グループ化したデータを準備し、等分散を検定し、p 値を解釈して、箱ひげ図を作成します。

このページの内容

R で Levene 検定を実行するには、car パッケージの leveneTest() 関数を、数値の応答とグループ化因子とともに使用します。式 value ~ group は、group のカテゴリ間で value のばらつきを比較します。

Levene 検定を理解する

帰無仮説は、すべてのグループの分散が等しいというもので、対立仮説は、少なくとも 1 つが異なるというものです。観測は独立している必要があります。

デフォルトでは、leveneTest() はグループの中央値からの絶対偏差を使用します。これは Brown–Forsythe の変法と呼ばれることがよくあります。元の平均中心の検定には center = mean を使用します。

car パッケージのインストールと読み込み

car は R 環境ごとに一度だけ install.packages("car") でインストールします。これにはリポジトリへのアクセスが必要で、依存パッケージがインストールされる場合があります。各セッションで library(car) を使って読み込みます。

car::leveneTest() を使うと、パッケージをアタッチせずに関数にアクセスできますが、インストールは依然として必要です。R に ‘car’ というパッケージが存在しないと表示される場合は、スクリプトを実行している R 環境にインストールするか、後述の base R による計算を使用してください。以下の 2 つの base R の例はどちらも実行済みです。パッケージのインストールと、別途示す car::leveneTest() の例は未検証のままであり、生成された PDF は視覚的には確認していません。

グループ化したデータを準備する

1 行に 1 つの観測を用い、数値の測定値とカテゴリのグループラベルを用意します。この例では、グループごとに 30 個の測定値を生成します。平均はどれも 5 ですが、標準偏差は 1、1.5、2 です。set.seed(123) によりシミュレーションは再現可能になり、factor() によってグループ化列が明示的に準備されます。

独自のデータでは、分析の前に測定値とラベルの欠損を確認してください。除外後も、データを有するグループを少なくとも 2 つ残し、グループ内変動を推定するのに十分な観測数を確保してください。

R で Levene 検定を実行する

中央値中心の検定は、base R でも計算できます。各グループの中央値からの絶対偏差を計算し、それらの偏差に対して一元配置分散分析を適合させます。この自己完結した例は、追加パッケージを必要としません。ここでは、コンソール出力を取得していない、未実行の例として示します。実行すると ANOVA 表が出力されます。

set.seed(123)
group1 <- rnorm(30, mean = 5, sd = 1)
group2 <- rnorm(30, mean = 5, sd = 1.5)
group3 <- rnorm(30, mean = 5, sd = 2)
data <- data.frame(
  value = c(group1, group2, group3),
  group = factor(rep(c("Group 1", "Group 2", "Group 3"), each = 30))
)
data$deviation <- abs(data$value - ave(data$value, data$group, FUN = median))
levene_result <- anova(lm(deviation ~ group, data = data))
print(levene_result)

得られた表の F value、group と Residuals の自由度、Pr(>F) を確認します。p 値を、事前に設定した有意水準と比較します。詳しくは次のセクションで説明します。

ave() は各観測にそのグループの中央値を割り当てます。式 deviation ~ group はグループ間で平均絶対偏差を比較し、data = data は列の場所を指定します。car がインストールされている場合、同等の呼び出しは car::leveneTest(value ~ group, data = data, center = median) です。このパッケージに依存する呼び出しは、未実行の例です。

結果を解釈する

表の F value である 3.2694 は、平均絶対偏差のグループ間差異を、グループ内変動と比較したものです。Df の下の group 行と Residuals 行は、分子と分母の自由度を与えます。3 グループ、90 個の観測では 2 と 87 です。group 行の Pr(>F) が p 値で、0.04275 です。

有意水準(例:0.05)は事前に決めておきます。事前に設定した有意水準 0.05 では、この例の p 値 0.04275 は、グループの分散が等しいことに対する反証となるため、帰無仮説を棄却します。そうでない場合、選んだ水準以上の p 値は、帰無仮説を棄却しないことを意味します。これは等しいことの証明にはならず、特にサンプルが小さい場合はそうです。この検定は、どのグループが異なるかを特定するものではなく、ANOVA のすべての前提を確立するものでもありません。

等分散が疑わしい場合の後続のグループ平均の比較については、研究デザインやその他の前提とあわせて、Welch の ANOVA を検討してください。

グループの分布を可視化する

この独立した例では、データを再作成し、箱ひげ図を一時 PDF に書き出します。R セッションで plot_path が示すファイルを開いてください。

set.seed(123)
data <- data.frame(
  value = c(
    rnorm(30, mean = 5, sd = 1),
    rnorm(30, mean = 5, sd = 1.5),
    rnorm(30, mean = 5, sd = 2)
  ),
  group = factor(rep(c("Group 1", "Group 2", "Group 3"), each = 30))
)
plot_path <- tempfile(fileext = ".pdf")
pdf(plot_path)
boxplot(value ~ group, data = data,
        xlab = "Group", ylab = "Value", main = "Group distributions")
invisible(dev.off())

3つのグループの分布を比較する箱ひげ図

箱の高さ、ひげ、外れ値を比較し、ばらつきの違いを確認します。この図は検定を補完するものであり、検定の代わりになるものではなく、分散を直接表すものでもありません。