グループの比較に分散分析 | 統計アラカルト [実践] | 逆ポーランド電卓の実践ウェブ rpn hacks!

逆ポーランド電卓の実践ウェブ rpn hacks!

逆ポーランド電卓rpnの実践ウェブ   
rpn hacks! アールピーエヌ・ハックスサイトマップ

rpn | 実践 | 統計アラカルト | 統計に関する話題をrpnで探求!統計的に検証してみよう。

HOME > 実践 > 統計アラカルト > グループの比較に分散分析

hatena twitter facebook rss ソーシャルブックマーク

グループの比較に分散分析

 平均はグループの違いを端的に知る強力な方法です。数学の平均点が高いクラスの子は低いクラスの子よりも良い点を取る可能性が高いでしょうし、平均得点の高いAチームと低いBチームでは対戦を重ねるほどに確実にAチームの勝ち数が増えていくでしょう。

ビジネスの世界でも売上高・在庫高・必要経費など、似たような環境にある店舗を比較するときや、新規獲得件数・ノルマ達成率といった個人成績を比較するとき、過去四半期や年間の平均値を利用することがよくあります。

これらは平均値が概ね公平であることを期待しているわけです。何(誰)が優れていて何(誰)が劣っているのかを平均値に信頼をおいて判断する。平均値を比較すれば優劣が分かる。そう考えます。

例えば、貴方がオーナーの店舗が3つあったとします。それら店舗の平均売上に違いがあると言えるのかどうか確かめたいとします。その場合、単に数ヶ月分の売上を平均して比較すれば問題ないのでしょうか。

     A店舗                                                    C店舗
       :    ------      ______________________     ------       :
       :   |  880 |      交通の利便性、店舗や     | 6090 |・・・・・・・
       ・・・・|  600 |      駐車場の広さ、周辺の     | 1500 |
           |  500 |      人口に大差はない。       | 2900 |
           | 1200 |                                ------
           |  380 |        B店舗
            ------           :       ------
                             ・・・・・・・| 1500 |
                                    | 1400 |
                                    | 1400 |
                                    | 1900 |
                                     ------


どのようなものにも必ずばらつきがあります。希な大口注文があるかもしれないし、突発的な費用が発生するかもしれません。いくらかの数値を集めて平均すれば多少の誤差は吸収できるかもしれませんが、グループ(店舗)固有の変動まで鑑みることはできません。

たまたまの売上の変動で能力の優劣を決めたのでは問題です。ばらつきも考慮しながらも、各グループの平均値に本当に違いがあるのかどうかを判定する方法が望まれます。

情報2つのグループの平均値の違いを統計的に検定するには、t分布を使った母平均の差の検定を使えばよいのですが、3つ以上のグループとなるとt分布は利用できません。

グループ平均の違いを知るには

 実はそのような便利な方法が存在します。名前を分散分析と言います。

分散分析はANOVA(analysis of variance)とも呼ばれ、20世紀統計学の偉人の一人であるフィッシャー(1890~1962)が確立した統計的手法です。彼は農業試験場で山済みになっていた膨大な実験データから大量の計算をこなし、分散分析に代表される革新的な仕事を成し遂げました。

フィッシャーは改良を行なうための指針として統計的数値を捉えていて、仮説検定で5%等の定数を用いて、仮説の是非を決めることに否定的でした。興味深いことにタバコと癌の発病関係もフィッシャーは認めていません。

分散分析を使った平均値の比較

 3つ以上のグループの平均値に違いがあるかどうかは、以下の数式を計算すれば分かります。最終的にF値(FisherのF)が計算されますが、その値をある値と比較することで統計的に違いがあると判断できます。

まず、F値は級間変動と級内変動の比で表されます。

       Sb  (級間変動)
  F = ----
       Sw  (級内変動)


それぞれ級間変動と級内変動の数式は以下のとおりです。Sbが級間変動、Swが級内変動です。


             2        2             2        2
       (∑x1)   (∑x2)        (∑xn)   (∑xm)
       ------ + ------ + … + ------ - ------
         N1       N2            Nn      Nm
  Sb = --------------------------------------
                        K - 1
                                         2        2             2
           2      2           2    (∑x1)   (∑x2)        (∑xn)
       ∑x1 + ∑x2 + … + ∑xn - [ ------ + ------ + … + ------ ]
                                     N1       N2            Nn
  Sw = -----------------------------------------------------------
                                Nm - K


なお、Kは級数(グループ数)、xiはグループ内のデータ、xmは全データ、Nmは全データ数、Niはグループ内のデータ数です。

数式は一元配置分散分析のものです。なお、級間変動のKが2の場合はχ2乗検定が使われます(グループ数が2つの場合)。また、分散分析を使うには母集団がガウス分布に従っているという前提が必要です。

分散分析を使った検定の実際

 具体的に冒頭の店舗売上データを使って、計算していきましょう。上記の数式は全てrpn式に置き換えてありますので、そのまま実行すれば結果を得ることができます。

まず、『3店舗の平均売上には差がない』という仮説を立てます。統計的検定で、この仮説を棄却か保留することになります。

正確には帰無仮説と言います。

売上データですが、それぞれ"g1.txt"、"g2.txt"、"g3.txt"の3つのファイルに格納されているとします。内容は以下のとおりです。

  >paste g1.txt g2.txt g3.txt
  880     1500    6090
  600     1400    1500
  500     1400    2900
  1200    1900
  380


そして、それぞれの売上データをまとめたファイルを"gm.txt"としておきます。これでデータファイルの準備は終了です。


  >copy g1.txt+g2.txt+g3.txt gm.txt


次に上記の式を次のように置き換えます。b1、b2、b3、bm、w1、w2が計算できればF値を求めることができるわけです。

       b1 + b2 + b3 - bm
  Sb = -----------------
             K - 1

       w1 - w2
  Sw = -------
       Nm - K


まず、級間変動(Sb)の数式をそれぞれの項目ごとにrpnで計算します。

  >rpn @s + #s @n 1 + #n -e @s . * @n / <g1.txt >b1
  >rpn @s + #s @n 1 + #n -e @s . * @n / <g2.txt >b2
  >rpn @s + #s @n 1 + #n -e @s . * @n / <g3.txt >b3
  >rpn @s + #s @n 1 + #n -e @s . * @n / <gm.txt >bm


これで級間変動の分子が計算できます。なお、3店舗なのでKは3です。

  >paste b1 b2 b3 bm | rpn - + + | rpn 3 1 - / >sb


ファイルの"sb"に級間変動の値が格納されました。次に級内変動の数式を項目ごとに計算します。まず、分子の分です。

  >rpn . * @s + #s -e @s <gm.txt >w1
  >paste b1 b2 b3 | rpn + + >w2


次に全データ数が12個、店舗数が3であることに注意して、級内変動を計算してみましょう。

  >paste w1 w2 | rpn - 12 3 - / >sw


ファイルの"sw"に級内変動の計算結果が入りました。

F分布表による検定

 それでは、F値を求めてみることにします。F値は級間変動と級内変動の比ですから、以下のrpn式で簡単に計算できます。

  >paste sb sw | rpn /
  5.64912


これが求めていたF値です。このF値と分子(級間分散)と分母(級内分散)の自由度が交差した点のF値をF分布表から読み取り、比較します。

つまり、分子(K-1)と分母(Km-K)が交差する値を読み取ります。ビジネス統計講座(推定編)を受講している人はこちらを。その他の人はインターネットで検索するといいでしょう。

実際には分子の自由度は3-1=2、分母の自由度は12-3=9です。2と9の交差点にある数値をF分布表から読み取ると4.26です。比較すると…。

  5.65 > 4.26


従って、先ほど立てた仮説は棄却されて、店舗の平均売上には有意な差があると言えます(少なくとも1つの組み合わせで)。

使用したのは信頼度95%(5%有意水準)のF分布表です。つまり、20回に1回は間違っている可能性があります。ちなみに信頼度99%(1%有意水準)のF分布表を使うと8.02になるので、平均売上に違いがあるとは認められません。

注釈ちなみに、C店舗の売上の6090を2400に変えた場合、F値はどうなるでしょうか。見た目には店舗間の差が縮まるように思えますが、計算すると13.15となって平均売上の違いがより明確になります。ばらつきが減少するからですね。

次は…

 グループの平均値が統計的に有意な差と認められるかどうかを分散分析による検定で調べてみました。しかし、冒頭に示したように2つのグループの平均であれば母平均の差の検定を使うことができます。何も分散分析を使用する必要はありません。

例えば3つのグループABCがあるとして、それぞれAグループとBグループについて母平均の差の検定を行い、続いてBグループとCグループ、最後にCグループとAグループの検定を行なえば問題はないように思います。

ただし、この方法は禁じ手です。2つのグループ同士で検定を繰り返すと、間違って有意差判定する確率が上がってしまうのです。次は3つのグループの平均について、母平均の差の検定を繰り返した場合と分散分析を行なった場合の違いを検討してみます。結果に違いは見られるのでしょうか。

続き(part2)はこちらLinkIcon

警告rpnプログラムを実行するには、rpn試用版かrpn標準版が必要です(バージョンの違いはこちら)。

情報pasteは講座サポートで公開されています。

統計アラカルト

統計的に検証してみよう

※実践コーナーのTOP

紹介 rpnの利用シーンはこちら…

講座初めての人のrpn基礎もどうぞ
講座しっかり学べるrpn入門もどうぞ
講座すぐに使えるdos入門もどうぞ
物語データを見抜くojt物語もどうぞ

実践他の分野への挑戦は実践TOP

応用rpnアプリケーションは応用TOP

part2

統計的に検証してみよう

※実践コーナーのTOP

講座初めての人のrpn基礎もどうぞ
講座しっかり学べるrpn入門もどうぞ
講座すぐに使えるdos入門もどうぞ
物語データを見抜くojt物語もどうぞ

実践他の分野への挑戦は実践TOP

応用rpnアプリケーションは応用TOP

書籍紹介

記事に関連した書籍

本ウェブサイトで扱った話題に関連した書物で、スタッフが実際に読了したものを紹介。

書籍数学の書籍
数の世界は思ったよりもエキサイティング

書籍投資の書籍
失敗しない投資には広範囲で実践的な知識が必要

警告バックスラッシュはエンマークに読み替えて下さい(IE)。
バックスラッシュとエンマーク

警告文字で作られた図表や式が崩れることがあります。ブラウザによっては固定幅フォントをMSゴシックにするときれいに表示されます。それでも崩れる場合は図表や式をメモ帳にコピー後、閲覧下さい。

警告rpn試用版と標準版(2kリビジョン)はダブルクォートで囲って下さい。

rpn 1 2 + ⇒ rpn "1 2 +"
rpn 1 -c foo ⇒ rpn "1" -c "foo"

ダブルクォートは省略できることが多いのですが、慣れない間は囲んだほうが無難です。なお、本ウェブサイトの記事ではrpn標準版(98リビジョン)を使用しているため囲っていません。詳しくは技術サポートの「rpn TIPS参照ください。

注意rpnの障害情報はこちら

警告rpn試用版の場合、複雑なプログラムや処理時間のかかるプログラムの一部には動作しないものがあるかもしれません。あくまで無料提供であることを勘案・了承ください。rpn標準版は、すべてのプログラムが動作します。