RANOVA チュートリアル: 一方向と双方向 (例付き)

AとはNOVA?

分散分析 (ANOVA) は統計手法であり、2 つ以上のグループ平均間の差異を調査するために一般的に使用されます。あNOVA テストは、典型的な変数のさまざまな変動要因に焦点を当てています。あNOVA Rプリでmarily は、グループ間の平均が等しいという証拠を提供します。この統計手法は t 検定の拡張です。これは、因子変数に複数のグループがある状況で使用されます。

一方通行ANOVA

複数のグループ間の平均を比較する必要がある状況は数多くあります。 たとえば、マーケティング部門は、XNUMX つのチームの販売実績が同じかどうかを知りたいと考えています。

  • チーム: 3 つのレベル要素: A、B、C
  • セール: パフォーマンスの尺度

ANOVA テストでは、3 つのグループのパフォーマンスが同様であるかどうかを確認できます。

データが同じ母集団からのものであるかどうかを明確にするには、次の操作を実行できます。 一元配置分散分析 (片道ANOVA 以下)。この検定は、他の統計検定と同様に、H0 仮説が受け入れられるか拒否されるかの証拠を与えます。

一方向Aの仮説NOVA test

  • H0: グループ間の平均は同一です
  • H3: 少なくとも、XNUMX つのグループの平均値は異なります。

言い換えれば、H0 仮説は、グループ (因子) の平均が他のものと異なることを証明する十分な証拠がないことを意味します。

この検定は t 検定に似ていますが、ANOVA 2 グループ以上の場合はテストをお勧めします。それを除いて、t 検定と ANOVA 同様の結果が得られます。

仮定

各因子はランダムにサンプリングされ、独立しており、未知だが分散が等しい正規分布母集団に由来すると仮定します。

Aを解釈するNOVA test

F 統計は、データが著しく異なる母集団、つまり異なるサンプル平均からのものであるかどうかを検定するために使用されます。

F 統計を計算するには、 グループ間の変動 以上 グループ内変動.

  グループ間 変動性は、すべての母集団内のグループ間の差異を反映します。 グループ間分散の概念を理解するには、以下の XNUMX つのグラフを見てください。

左側のグラフは XNUMX つのグループ間の差異がほとんどないことを示しており、XNUMX つの平均値は次の傾向にある可能性が非常に高いです。 全体 平均値(つまり、XNUMX つのグループの平均値)。

右のグラフは XNUMX つの分布を遠く離れてプロットしており、どれも重なりません。 合計平均とグループ平均の差が大きくなる可能性が高くなります。

Aを解釈するNOVA test

  グループ内で 変動性はグループ間の差異を考慮します。 変動は個々の観察から生じます。 いくつかの点はグループの平均値とまったく異なる場合があります。 の グループ内で 変動性はこの効果をピックアップし、サンプリング誤差を参照します。

グループ内変動の概念を視覚的に理解するには、以下のグラフを見てください。

左側の部分は、XNUMX つの異なるグループの分布をプロットしています。 各サンプルの広がりを大きくしましたが、個々の分散が大きいことが明らかです。 F 検定が減少する、つまり帰無仮説を受け入れる傾向があることを意味します

右側の部分は、まったく同じサンプル (同じ平均) を示していますが、ばらつきは小さくなっています。 これは F 検定の増加につながり、対立仮説が支持される傾向があります。

Aを解釈するNOVA test

両方のメジャーを使用して F 統計を構築できます。 F 統計を理解するのは非常に直感的です。 分子が増加する場合、グループ間の変動が大きいことを意味し、サンプル内のグループが完全に異なる分布から抽出されている可能性があります。

言い換えれば、F 統計量が低いということは、グループの平均との間に有意差がほとんど、またはまったくないことを示します。

例 片道ANOVA ホイール試乗

ポイズン データセットを使用して、一方向 A を実装します。NOVA テスト。データセットには 48 行と 3 つの変数が含まれています。

  • 時間: 動物の生存時間
  • 毒: 使用される毒の種類: 因子レベル: 1,2、3、XNUMX
  • 治療: 使用される治療の種類: 因子レベル: 1,2、3、および XNUMX

A の計算を始める前にNOVA テストするには、次のようにデータを準備する必要があります。

  • ステップ 1: データをインポートする
  • ステップ 2: 不要な変数を削除する
  • ステップ 3: 変数毒を順序付けされたレベルとして変換する
library(dplyr)
PATH <- "https://raw.githubusercontent.com/guru99-edu/R-Programming/master/poisons.csv"
df <- read.csv(PATH) %>%
select(-X) %>% 
mutate(poison = factor(poison, ordered = TRUE))
glimpse(df)

出力:

## Observations: 48
## Variables: 3
## $ time   <dbl> 0.31, 0.45, 0.46, 0.43, 0.36, 0.29, 0.40, 0.23, 0.22, 0...
## $ poison <ord> 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 1, 1, 1, 1, 2, 2, 2...
## $ treat  <fctr> A, A, A, A, A, A, A, A, A, A, A, A, B, B, B, B, B, B, ...		

私たちの目的は以下をテストすることですwing 予測:

  • H0: グループ間で生存時間の平均に差はない
  • H3: 生存時間の平均は、少なくとも XNUMX つのグループで異なります。

言い換えれば、モルモットに与えられた毒の種類に応じた生存時間の平均値の間に統計的な違いがあるかどうかを知りたいのです。

次のように進めます。

  • ステップ 1: 変数 Poison の形式を確認する
  • ステップ 2: 要約統計量を出力します: カウント、平均、標準偏差
  • ステップ 3: プロット box プロット
  • ステップ 4: 一方向 A を計算するNOVA test
  • ステップ 5: ペアを実行するwise t検定

ステップ1) 次のようにして毒のレベルを確認できますwing コード。 mutate 動詞を使用して係数に変換するため、XNUMX つの文字値が表示されるはずです。

levels(df$poison)

出力:

## [1] "1" "2" "3"

ステップ2) 平均と標準偏差を計算します。

df % > %
	group_by(poison) % > %
	summarise(
		count_poison = n(),
		mean_time = mean(time, na.rm = TRUE),
		sd_time = sd(time, na.rm = TRUE)
	)

出力:

## 
# A tibble: 3 x 4
##   poison count_poison mean_time    sd_time
##    <ord>        <int>     <dbl>      <dbl>
## 1      1           16  0.617500 0.20942779
## 2      2           16  0.544375 0.28936641
## 3      3           16  0.276250 0.06227627

ステップ3) ステップ XNUMX では、分布間に違いがあるかどうかをグラフィカルに確認できます。 ジッターのあるドットが含まれていることに注意してください。

ggplot(df, aes(x = poison, y = time, fill = poison)) +
    geom_boxplot() +
    geom_jitter(shape = 15,
        color = "steelblue",
        position = position_jitter(0.21)) +
    theme_classic()

出力:

一方通行ANOVA テスト例

ステップ4) 一方通行のAを走れますNOVA コマンド aov でテストします。 A の基本構文NOVA テストは次のとおりです:

aov(formula, data)
Arguments:			
- formula: The equation you want to estimate
- data: The dataset used	

数式の構文は次のとおりです。

y ~ X1+ X2+...+Xn # X1 +  X2 +... refers to the independent variables
y ~ . # use all the remaining variables as independent variables

あなたは私たちの質問に答えることができます: モルモット間の生存時間に違いはありますか?wing 与えられた毒の種類。

結果をより正確に出力するには、モデルを保存し、関数 summary() を使用することをお勧めします。

anova_one_way <- aov(time~poison, data = df)
summary(anova_one_way)

コードの説明

  • aov(time ~ 毒、データ = df): A を実行します。NOVA 以下でテストしますwing 式
  • 概要(nova_one_way): テストの概要を出力します。

出力:

##             Df Sum Sq Mean Sq F value   Pr(>F)
## poison       2  1.033  0.5165   11.79 7.66e-05 ***
## Residuals   45  1.972  0.0438                     
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

p 値は、通常のしきい値 0.05 よりも低くなります。 「*」で示されるように、グループ間には統計的な差異があると自信を持って言えます。

ペアwise 比較

一方通行ANOVA テストでは、どのグループの平均値が異なるかはわかりません。代わりに、関数 TukeyHSD() を使用して Tukey テストを実行できます。

TukeyHSD(anova_one_way)

出力:

ペアwise 比較

双方向ANOVA

双方向ANOVA test は別のグループ変数を数式に追加します。一方通行Aと同じですNOVA 式は少し変わりますが、テストしてみます。

y=x1+x2

with は量的変数、and はカテゴリ変数です。

双方向Aの仮説NOVA test

  • H0: 両方の変数 (つまり因子変数) の平均が等しい
  • H3: 両方の変数の平均値が異なります

モデルに治療変数を追加します。 この変数は、モルモットに与えられた治療を示します。 あなたは、モルモットに与えられた毒と治療の間に統計的な依存性があるかどうかを知りたいと考えています。

他の独立変数を使用した処理を追加してコードを調整します。

anova_two_way <- aov(time~poison + treat, data = df)
summary(anova_two_way)

出力:

##             Df Sum Sq Mean Sq F value  Pr(>F)    
## poison       2 1.0330  0.5165   20.64 5.7e-07 ***
## treat        3 0.9212  0.3071   12.27 6.7e-06 ***
## Residuals   42 1.0509  0.0250                    
## ---

毒と治療の両方が統計的に 0 とは異なると結論付けることができます。帰無仮説を棄却して、治療または毒の変更が生存時間に影響を与えることを確認できます。

まとめ

合計できますmari以下の表のテストを行ってください。

ホイール試乗 Code 仮説 P値
一方通行ANOVA
aov(y ~ X, data = df)
H3: 平均は少なくとも XNUMX つのグループで異なります 0.05
ペアwise
TukeyHSD(ANOVA summary)
0.05
双方向ANOVA
aov(y ~ X1 + X2, data = df)
H3: 平均は両方のグループで異なります 0.05