10a. 統計的推定と仮説検定(10.1, 10.2)
10.1 仮説にかんする用語
本ウェブページは『超入門 はじめてのAI・データサイエンス』第10章の 10.1, 10.2 に対応したコードを埋め込んでいます。ここでは 2つの変数の関係 ,x,y の両方または片方が 質的データ である場合について,統計の基礎的な部分を抜粋してお伝えします。
変数の関係は一般に変数 xとy の関係として表されます。 xは仮説において原因となる方の変数で,独立変数 または 説明変数 と呼ばれます。一方 y は仮説において結果となる方の変数で,独立変数が与えられたときにその値に従属して値が動くので 従属変数,または説明変数が説明しようとする目的であるので 目的変数 と呼ばれます。
変数 | 意味 | 呼び方 |
---|---|---|
x | 仮説において原因となる変数 | 独立変数,説明変数 |
y | 仮説において結果となる変数 | 従属変数,目的変数 |
x と yがともに質的変数の場合はクロス集計表,x が質的変数で y が量的変数の場合は平均の比較になります。これについては,下の短い動画を参考にしてください。
日本語
English subtitles in YouTube: Click on the gear button for "Settings" > Subtitles > Auto-translate > Choose "English" -> Click on CC Button for Subtitles/closed captions
10.2 質的変数を含む変数の関係
10.2.1 Excel で考えるカイ二乗検定
χ2 検定を実施するときには,Excelよりも統計に便利なツールを使うことが多いため,操作を覚えることは重要ではありません。デモンストレーション用の動画を視聴して,χ2 検定の意味を理解してください。
データは第2章と第3章(3.1.1)で作成したもの(具体的には,ダウンロードした CopyFromHere01.xlsx
に CopyFromHere03.xlsx
を合体させたもの)を用います。Excelのクロス集計表の作り方は,ピボットテーブル(第3章)も参考にしてください。
レンタカーとしてレンタルされる車種は都市によって異なるか? という問いがあったとします。各都市におけるレンタカーが数ある中で(母集団),自社で把握しているレンタカーのデータをサンプル(標本)だと考えると,これは統計的推測の問題です。
たとえ都市によってレンタル車種が異ならないとしても,取得したデータ上ではレンタル車種の割合がぴったり一致するなどということは珍しく,大抵割合の異なるデータになります。データに見られる差はサンプルの抽出上たまたまという範囲内なのか,それとも母集団で都市によって割合が異なるために生じる差なのかについて 統計的推定 を行い,理論的 標本分布 を用いて,「レンタルされる車種は都市によって異ならない」という 帰無仮説 が棄却されるかどうかを検定します。
この場合,支店も車種も質的変数なので,クロス集計表を作ります。動画はクロス集計表を作るところからはじまります。後にお話しする理由によって,今回は車種は A~C だけに絞ったクロス集計表を作成します。
つぎに,xy に関連がなかった場合に期待される表,つまり帰無仮説が正しい場合の表を作ります。それを 期待度数表 と言います。
各セルの期待度数は,次のような式で計算されます:
i行目j列目のセルの期待度数=n×行iの計n×列jの計n
ただし,n は全体の個数です。
^
)の記号は期待値を表します。このとき,期待度数 ^fij,つまり i 行目 j 列目のセルの期待度数は,以下のように表されます:
^fij=(fi.)(f.j)n
それでは観測度数表の観測値は,期待度数表からどの程度離れているでしょうか?各セルの差を出して足してしまうと,プラス・マイナスが相殺されてゼロになってしまうので,差を二乗します。それを期待値で割って大きさの調整をしたものを,表のすべてのセルについて合計します。この値を カイ二乗値(χ2)と呼び,この値が大きいほど期待度数から観測度数がずれていることを示します。
χ2=R∑i=1C∑j=1(ˆfij−fij)2ˆfij
Mac × 日本語
Windows × English
10.2.2 仮説検証の考え方
しかし,χ2 がどんなに大きい値でも,帰無仮説が正しい場合にその値が絶対にありえないとは言えません。そこで,ある程度あり得ないと言える場合には帰無仮説を棄却して,xy に関係があるとする対立仮説を採択してよいと考えるのです。これが統計的検定の考え方です。
帰無仮説を棄却する水準は分析者が設定し,それを 有意水準 と言います。有意水準 α は 0.05 や 0.01 などキリの良い値に定めます。帰無仮説が正しい場合に,自分の標本から得た検定統計量の値よりも起こりにくい値が生起する確率である p 値(有意確率) を比べて,p<α の場合に帰無仮説を棄却します。この p 値偏重型の考え方 にはさまざまな議論もありますが,まずはこの伝統的な考え方を理解することが肝要です。
χ2 の確率分布は 自由度(df, degrees of freedom)によって形が決まっており,以下で求められます。
クロス集計表の自由度: df=(R−1)×(C−1)
動画では,表計算で χ2 値を計算し,そこからCHISQ.DIST.RT関数 を使って,カイ二乗分布でその χ2 値より大きな値をとる確率,つまり右片側面積(right tail)を求めるとともに, CHISQ.TEST関数 を使って χ2 検定を行って求めた p 値と一致することを見せています。
p>=α のときには,帰無仮説は棄却できません。報告書にはたとえば次のように書きます。
このように,検定というのは操作自体は簡単で,統計ソフト等を使えばもっと簡単です。だから分析者が知っておかなければならないのは,むしろ 分析の意味 と,どういうときに使うか,そして 使ってはいけないか です。
χ2 検定にも 使わない方がよい状況 があり,期待度数が 5 未満のセルが 20% 以上ある場合や,最小期待度数が 1 未満のセルがあるときには,χ2 検定は行わないことになっています。車種 D 以降を分析に入れてしまうとこの条件に引っかかってしまうため,今回車種 A~C のみを選んだのでした。
10.2.3 分散,標準偏差,Z得点(標準化)
ここから量的変数の統計的推定の話になるので,量的データの分布に関して 3つの分布 に分けて考えます。
第1の分布は,分析者が知りたい分布です。分析によって知りたい母集団の特徴を示す母数は パラメータ と呼ばれます。母集団の全数を調べる 全数調査 は難しいため,標本調査 により標本データからパラメータを推定します。これが 統計的推定 です。
分析者が観察できるのは抽出された1つの標本の値であり,その分布が第2の分布です。
第3の分布は,母集団からさまざまな組み合わせで大きさ n の標本を抽出し,それぞれの標本から統計量を算出したと仮定したときの 統計量の理論的分布,すなわち 標本分布 です。統計的検定はこの標本分布を用いて行われることが多く,上記の χ2 検定で用いた χ2 分布も第3の分布の一例です。第3の分布としてよく使われる正規分布や t分布などの左右対称な釣り鐘型の 分布の特徴 は,平均値 と 標準偏差 の2つで把握されます。
それではまず(第2の分布のうち推定も何もしない)全数調査のデータで,みなさんが高校で学んだ,量的変数の値の変動(ちらばり)の大きさを表す2つの記述統計量,分散(variance) と 標準偏差(standard deviation) のおさらいから始めましょう。
上司からこんな質問を受けたとします。「今年は若い人から高齢者までうちのサービスを利用してくれて,去年より年齢のばらつきが大きくなった気がするんだけど,どうかな?」このタスクを言い換えると,第2の分布の値の変動の大きさを統計量で把握して,昨年度の値と比較するタスクです。考え方をExcelで体感しましょう。
年齢の高い人は平均値から上に離れていて,年齢の低い人は平均から下に離れており,そうした平均との差を 偏差 といいます。ばらつきが大きいということは,偏差の絶対値が全体的に大きいということです。
標本分散 s2 とは,偏差平方和を n で割ったものです。(注:第1の分布の分散を推定したい場合の 不偏分散 は n ではなく n−1 で割ります。)標準偏差 s とは 分散の平方根 です。
標本分散: s2=∑(yi−ˆy)2n,標本偏差: s=√s2
今年の年齢の全般的なばらつき度合い,つまり 偏差 の 平均的な値 を求めようとすると上記の式になることを,実習で体感してみましょう。下の動画を観ながら「Input Data」のワークシートでの実習で手を動かして,高校時代に学んだ変動の統計量を思い出してください。
Mac × 日本語
Windows × English
まずは,Age(動画では「年齢」)の列を用いて,隣の列を「AVERAGE」と名付け,複合(もしくは絶対)参照の AVERAGE関数 で平均年齢をオートフィルします。
さらに,となりの列を D(偏差)として,個々のデータの平均との差を求めます。この平均との差が 偏差 です。列の一番上のセルに偏差が入るように入力したら,下までオートフィルまたはフィルハンドルをドラッグしてコピーすれば,自然に相対参照になるので,偏差の列の完成です。この偏差で全体の変動の大きさを見たいのですが,偏差を単に合計するとプラスとマイナスで相殺されてしまいます。
そこで二乗して正の値にします。隣の列を「D2」(偏差平方)とし,偏差を二乗した 偏差平方 を入力します。Excelではべき乗は 演算子 ^
(キャレット)を使ってください。一番上のセルに偏差平方が入ったら,同列を同様にフィルします。この偏差平方の平均を出したいので,総和して n で割りましょう。偏差平方を合計した 偏差平方和 を任意のセルにオートSUMで入力しましょう。平均を出すときみたいに偏差平方和を n=200 で割った値を算出すれば,分散(variance) を計算したことになります。
別のセルには VAR.P 関数を使って,標本分散を計算してみましょう。図のように,関数の戻り値と自分で計算した分散の値は一致するはずです。VAR.P の P は母集団(population)の P で,全数データ(データ自体が母集団)のときの分散はこれを選びます。
分散はばらつきが大きいほど大きな値になりますが,計算過程で二乗しているため, 「平均からの標準的な偏差」というには大きすぎる値になっています。そこで平均からの標準的な偏差となるような数値を求めるため,分散にルートをかけて元の大きさに戻します。この値が 標準偏差(standard deviation) で,平均からの標準的な偏差を示す統計量です。
自分で計算した標準偏差と関数の標準偏差の値を比べてみましょう。任意のセルに STDEV.P という標準偏差の関数を使って標準偏差を表示させて,自分で計算した標準偏差と一致するのを確認してください。
関数名 | 意味 | 解説 |
---|---|---|
VAR.P |
母集団の分散 | 全データが母集団に該当する場合に使用。分散の定義式通り n で割る。 |
VAR.S |
標本の不偏分散 | 母集団からの標本とみなして n−1 で割る。不偏分散として使用。 |
STDEV.P |
母集団の標準偏差 | VAR.P の平方根。データ全体が母集団であるときに使用。 |
STDEV.S |
標本の標準偏差 | VAR.S の平方根。不偏標準偏差として一般的に使用。 |
STDEV |
旧形式の標準偏差 | 旧バージョンの互換関数。STDEV.S と同様に動作。 |
関数についている S は 標本(sample) の S です。データが母集団(第1の分布)から抽出した標本で,知りたいのが標本(第2の分布)自体の分散・標準偏差ではなく,抽出元の母集団の分散・標準偏差の推定値(第1の分布のパラメータ)であるときには,こちらを選びます。
統計の主目的のひとつはパラメータを推定することと言っても過言ではありません。サンプルから知りたいのは第1の分布を特徴づける値である,母平均 μ,母分散 σ2,および母標準偏差 σ というパラメータです。その場合は VAR.S関数の 不偏分散,その平方根である STDEV.S関数を使います。ふつう使われるのはこちらなので,STDEV は STDEV.S と同じです。実習では,D2(偏差平方)の隣の列を STDEV とし,複合参照(もしくは絶対参照)で STDEV.S をオートフィルしておきましょう。
次のタスクです。引き続き上司と雑談しています。上司の甥っ子は25歳の高橋蓮くん。このあいだ,この会社のサービスを利用したそうです。「甥っ子の蓮は,うちのサービス利用者の中でどれぐらい若い方なのかなぁ。」と上司は首をひねっています。みなさんなら何と答えますか?
ある顧客が分布の中でどの位置にいるのか,異なる分布の中での位置を比べるには,どんな統計量を使いますか?異なる分布でも,平均が 0,標準偏差が 1 になるように調整すれば,各データの全体の中での位置を比べることができますね。これを 標準(化)得点(z)といいます。「値を標準化してください」といわれたら,標準得点 z に変換することを意味します。
z とは,平均が 0,標準偏差が 1 になるように標準化したもので,その平均を 50,標準偏差を 10 に変換したものが偏差値です。逆にいうと,偏差値の 50 点を 0 に,10 点の間隔を 1 にしたものが z だと考えれば,イメージが容易ですね。
みなさんも,動画を参考にして年齢の z 得点を平均と標準偏差から計算してみてください。その自分で計算した z 得点を,関数 STANDARDIZE
で標準化した値と比較します。両者は一致しましたか?
10.2.4 中心極限定理 (CLT)
中心極点定理 と 信頼区間 について読んで理解しましょう。中心極点定理によると,ありとあらゆる ¯y の分布である第3の分布は,一定の特徴を持った正規分布になります。信頼区間は,t 分布等を使って,μy(変数 y の母平均)などの母集団のパラメータを区間推定することができるものです。
標準正規分布
まず,第2の分布である標本の平均 ¯y と分散 s2y から,第1の分布である母集団のパラメータである母平均 μy と母分散 σ2y を推定しようとしているとき,分析者が見ているのは大抵,母集団からたまたま得たサイズ n の標本ひとつに過ぎません。
同じ母集団からサイズ n の標本をあらゆる組み合わせで抽出したとして,そのそれぞれから平均 ¯y を算出してその分布を見たとします。それが ¯y の分布で,第3の分布です。この第3の分布の標準偏差 σ¯y は,¯y の μy からの標準的な誤差であることから,標準誤差 と呼ばれます。
中心極限定理によれば,平均値 μy,標準偏差 σy の母集団から,大きさ n の無作為標本を抽出すると,n が大きくなるにつれ,第1の分布の形がどうであろうと標本平均の標本分布はほぼ正規化し,次のようになります。
ここで,改めて3つの分布のz得点を以下の通り整理しておきます。
分布の種類 | 説明 | z得点の式 |
---|---|---|
第1の分布 | 母集団における個々の値と母平均の差 | z=yi−μσ |
第2の分布 | 標本内の個々の値と標本平均の差 | z=yi−¯ys |
第3の分布 | 標本平均と母平均の差 | z=¯y−μσ/√n |
μ の95%信頼区間を,第3の分布の正規分布に基づく95%の面積(確率)の z得点から推定したいのですが,実際には母分散 σ2 が不明であることが多いため, σ の代わりに標本標準偏差 s を用いることになります。
このときに登場するのが t値=¯y−μs/√n であり,その確率分布が t分布 です。t分布は自由度(n−1)によって形が変わり,自由度が大きくなるほど標準正規分布に近づきます。
t分布
動画で簡単に説明していますが,母平均 μ の信頼区間は次のように表されます。
母平均 μ の信頼区間: ¯y−t×s/√n≦μ≦¯y+t×s/√n
Windows × 日本語
English subtitles in YouTube: Click on the gear button for "Settings" > Subtitles > Auto-translate > Choose "English" -> Click on CC Button for Subtitles/closed captions
10.2.5 平均の差と信頼区間
上司と雑談が続いていて,上司にはまた新しい疑問が浮かんだようです。「カードの利用回数って支店ごとに違うのかな?」と上司に問われました。このとき,x が支店,y がカード利用回数と考えれば,これは 平均の比較であることがわかります。それでは,信頼区間付き棒グラフで比べてみましょう。
Mac × 日本語
Windows × English
まずは,Age(動画では「年齢」)の列を用いて,隣の列を「AVERAGE」と名付け,複合(もしくは絶対)参照の AVERAGE関数 で平均年齢をオートフィルします。
動画のように,ピボットテーブルを作ったら,平均と標準偏差の値だけをコピーして,次に n,√n,s√n×tα/2 の列を作っておきます。グラフには使いませんが,確認のために LCI(信頼区間下限値) と UCI(信頼区間上限値) の列も作成します。
棒グラフを作ったら,棒グラフ全体の幅や色を好きにカスタマイズします。そして誤差範囲には s√n×tα/2 の範囲を指定します。これで 95%信頼区間付き棒グラフ が完成です。
95%信頼区間付き棒グラフ
10.2.6 Python による記述統計
本セクションでは Pythonによる記述統計として,describe()
による基本統計量を扱い,次セクションでは Pythonによる統計的検定 の例として t 検定 を紹介します。それでは,コード1 で kingaku.csv
の基本統計量を表示しましょう。
コード 1
import pandas as pd
df5 = pd.read_csv("/content/drive/My Drive/Colab Notebooks/data/kingaku.csv")
df5.describe()
コード2 は,payment
変数の分散を表示します。
コード 2
df5["payment"].var()
10.2.7 Python による母平均の差の検定
札幌と仙台で payment
の母平均に差があると言えるかどうかを t 検定で確かめます。t 検定の前には,等分散の検定を行います。コード3 では,Levene検定を実施します。
コード 3
import scipy.stats as stats
import pandas as pd
spr_pay = df5[df5["branch"] == "SPR"]["payment"]
snd_pay = df5[df5["branch"] == "SND"]["payment"]
var_result = stats.levene(spr_pay, snd_pay)
print(var_result)
Levene検定の結果を受けて,コード4 で スチューデントの t 検定 を実施します。
コード 4
t_result = stats.ttest_ind(spr_pay, snd_pay)
print(t_result)
© Chikako Takeishi. Designed by Chikafumi Nakamura. All Rights Reserved.