母数検定

Pythonで学ぶ推測の基礎

Paul Savala

Assistant Professor or Mathematics

ANOVA

  • ANOVA - 各因子の平均応答を比較
  • 応答 - 測定された数値
  • 因子 - グループを定義するカテゴリ変数

複数市場の複数企業におけるベンチャー資金を示す表。

Pythonで学ぶ推測の基礎

ANOVA

investments_df.groupby('market')['funding_total_usd'].mean()
Market        Average funding
===========   ===============
Advertising      13806610
Analytics        14762930
Biotechnology    20838670
...              ...
  • 応答: 資金額
  • 因子: 市場
  • ANOVA: 市場別の平均資金額を比較
Pythonで学ぶ推測の基礎

ANOVAの前提

  • 各因子内の応答は正規分布
    • 市場別の資金額は正規分布
  • 因子間で母分散が等しい
    • 市場別の資金のばらつきは等分散
Pythonで学ぶ推測の基礎

正規分布の応答

health_df = investments_df[investments_df['market'] == 'Health and Wellness']
health_df['funding_total_usd'].plot(kind='hist')

横軸が企業別総資金、縦軸が頻度のヒストグラム。ゼロ付近に非常に高い棒が1本、その先に小さい棒がいくつか。

Pythonで学ぶ推測の基礎

対数変換と正規性

health_log = np.log(health_df['funding_total_usd'])

health_log.plot(kind='hist')

横軸が企業別総資金、縦軸が頻度のヒストグラム。ゼロ付近に非常に高い棒が1本、その先に小さい棒がいくつか。

Pythonで学ぶ推測の基礎

等分散

investments_df['log_funding'] = np.log(investments_df['funding_total_usd'])

investments_df.groupby('market')['log_funding'].std()
Advertising            2.254390
Analytics              2.152852
Biotechnology          1.946059
...                    ...

等分散のLevene検定

$H_0:$ 母分散は等しい

$H_a:$ 母分散は異なる

Pythonで学ぶ推測の基礎

等分散

from scipy import stats

health_df = investments_df[investments_df['market'] == 'Health and Wellness']
analytics_df = investments_df[investments_df['market'] == 'Analytics']

s, p_value = stats.levene(health_df['log_funding'], analytics_df['log_funding'])
print(p_value < 0.05)
False

結論: 帰無仮説は棄却できない。市場間で資金の分散は等しい。

Pythonで学ぶ推測の基礎

SciPyでのANOVA

s, p_value = stats.f_oneway(health_df['log_funding'], 
                            analytics_df['log_funding'])

print(p_value < 0.05)
True

結論: 市場間で資金額に統計的に有意な差がある。

Pythonで学ぶ推測の基礎

ANOVAによる推論

  • $H_0:$ すべての平均は同じ
  • $H_a:$ 少なくとも1つの平均が異なる
  • どの平均が異なるかは追加解析が必要
Pythonで学ぶ推測の基礎

練習しよう!

Pythonで学ぶ推測の基礎

Preparing Video For Download...