はじめに
統計解析でよく登場する「相関係数のt検定」。「相関が本当に有意なのか?」を確かめるためには、相関係数をもとにt検定を行い、“偶然”でないかどうかを確かめる必要があります。MATLABでは、この検定もシンプルに実装できます。今回はMATLABで相関係数のt検定を行う関数例を紹介します。
相関係数のt検定
相関係数のt検定とは?
サンプルデータ同士の関係(相関)が「偶然なのか?本当に意味があるのか?」を判定する方法です。
有意水準α=0.05(5%)なら、p値が0.05未満であれば“有意な相関あり”と判断します。
関数例:TTestForCorrelationCoefficient
相関係数のt検定を参考にMATLAB用の「相関係数のt検定」関数を作ってみました。
function[p] = TTestForCorrelationCoefficient(r, n, type) %Student's t-test of correlation coefficient %相関係数のt検定 %『入力』 %r 相関係数 %n 相関係数を調べた時のサンプル数 %type 1で片側検定, 2で両側検定(デフォルト) %『出力』 %p 相関がないといえる確率 %有意水準α=0.05としたとき、α>pであれば、危険率5%で優位な相関がある。 if nargin < 3 type = 2; end % 相関係数を正とする r = abs(r); % 0 から 1 とする r = min(r, 1); % 統計量 t = r * sqrt(n - 2) ./ sqrt(1 - r.*r); % 自由度 DF = n - 2; % スチューデントの t 分布 p = 1.0 - tcdf(t, DF); % 両側検定は2倍の面積 if type==2 p = p * 2; end % NaN(相関係数が1の時に起こる)だったら、必ず相関があるので 0 に。 p(isnan(p)) = 0; end
注意点
- この関数は tcdf(t分布の累積分布関数)を使っているため、Statistics Toolbox($1,000)が必要です。
- Toolboxがない場合は、C言語による最新アルゴリズム辞典(affiliate)のP429のtdist.cが多分それです
おわりに
データ解析で相関の有意性をチェックしたいとき、MATLABで簡単にt検定ができると便利です。自分で関数化しておけば、どんな場面でも再利用できます。統計解析に興味のある方は、ぜひMATLABで試してみてください。
関連記事
MATLABでExcelのTDISTとTINVを使う « なたで日記
コメント