Stata による相関や連関の検討 | 鍵山琢実のきまぐれウェブサイト“kagitaku.com”

はじめに

ここでは、Stata を使った相関や連関の検討方法をご紹介します。具体的には、Pearson の積率相関係数、Kendall や Spearman の順位相関係数、カイ二乗検定を扱います。最後に散布図についても触れます。

Pearson の積率相関係数

2つの変数がどのような関係にあるのかを検討したいということはよくあります。例えば、勉強時間とテストの成績、年齢とステレオタイプ強度、収入と主観的幸福感など、挙げようとすると枚挙に暇がありません。こうした2変数の関係性を検討するときの基本は、「X が大きくなると Y も大きくなる」「X が大きくなると Y は小さくなる」「X が大きくなっても Y は変わらない」といったような、「片方が大きくなったり小さくなったりしたときにもう片方がどうなるか」といったものだと思います。

このような関係は相関関係と呼ばれます。相関関係の指標として最も一般的なのは、Pearson の積率相関係数(Pearson's product-moment correlation coefficient)というものです。一般に「相関係数」と言うときはこの Pearson のものを指します。

相関係数は「r」と表記され、その値は以下の式で与えられます(sxyxy の共分散、sxsyx の標準偏差と y の標準偏差の積)。

r=rac{s_{xy}}{s_xs_y}

定義から、相関係数の値は「-1\leq r\leq 1」の範囲をとりえます。

Stata による相関係数の算出

Stata で相関係数を算出するときは、「pwcorr」コマンドを用います。

  1. pwcorr varList, options
  2.   * options: sig, star(#), obs, listwise

「pwcorr」コマンドは、「varList」で指定した変数すべての各相関係数を算出します。「sig」オプションを指定すると各相関係数の有意確率も算出され、「star(#)」オプションの「#」部分で有意水準を指定すると有意な相関係数に「*」が付けられます。有意確率を知りたいときは「sig」オプションを使い、有意確率を知りたいわけではなかったり煩雑さを避けたかったりするときには「star(#)」オプションを使うといいでしょう。「obs」オプションは、各相関係数算出に利用したケース数を算出します。「listwise」オプションは、リストワイズで相関係数を算出します(1つでも欠損があるケース(回答者)はすべての相関係数算出から除外)。

ちなみに、相関係数算出のコマンドとして「correlate」というコマンドもあります。しかし、こちらのほうはペアワイズかリストワイズかが選択できず(強制的にリストワイズ)、有意確率も算出されません。したがって、普通は「pwcorr」コマンドを使うことになると思います。

試しに、僕の卒論で測定した「検索結果満足度」の6項目について相関係数を算出してみます。この6項目は「非常によくあてはまる」〜「まったくあてはまらない」を5段階で測定したもので、具体的には以下の6つでした(q3s1-q3s6)。

  1. 期待していたようなウェブページが検索結果の上位に表示された。
  2. 検索結果の中から目的のウェブページを見つけるのに時間がかかった。(逆転)
  3. 検索結果が見やすかった。
  4. 検索結果の中に、信頼できるウェブページが存在しなかった。(逆転)
  5. 検索結果と検索ワードが一致していなかった。(逆転)
  6. 全体として、検索結果は満足のいくものだった。

この6項目の相関係数算出は、以下のコマンドです。

  1. pwcorr q3s1-q3s6, sig

[画像] Stata「pwcorr q3s1-q3s6, sig」の実行結果:相関係数

個々のセルの1行目が相関係数、2行目が有意確率です。

絶対値を見てみると、小さいものでは0.176から大きいものでは0.544までばらばらです。相関係数の値自体はそれほど高くありませんが、尺度としてはまぁ普通といったところでしょうか。正負の方向を揃えて足し合わせたり、2つのグループ(q3s1とq3s3とq3s6、q3s2とq3s4とq3s5)にわけたりといったことが考えられそうです。

ついでに「star(#)」オプションを使った例も載せておきましょう。こちらのほうが見た目にはずいぶんすっきりします。

  1. pwcorr q3s1-q3s6, star(.05)

[画像] Stata「pwcorr q3s1-q3s6, star(.05)」の実行結果:相関係数

順位相関係数:Kendall の τ と Spearman の ρ

Pearson の積率相関係数は非常に有用なので広く用いられていますが、以下の欠点も持っています。

  • 厳密には順序尺度には使えない(尺度水準については「データ処理」の「変数のブレークダウン」のショートコラム参照)
  • 2つの変数が直線的な関係でなければならない。つまり yaxb の形でなければ使うことができない(分布に2変量正規分布が仮定されている=パラメトリックな指標)

この問題を解決するのが順位相関係数で、有名なものは Kendall の τ(タウ)と Spearman の ρ(ロー)です。順位相関係数は、大雑把に言えば、値を順序に変換してその順序が一致するかどうかを見ています。分布の仮定もないノンパラメトリックな指標です。

Stata による τ の算出

Stata で τ を算出するときは、「ktau」コマンドを用います。

  1. ktau varList, options
  2.   * options: stats(ktau_list), star(#), pw
  3.   * ktau_list: taub, obs, p

「ktau」コマンドは「varList」で指定した変数の組に関して Kendall の τ を算出します。基本的には Pearson の「pwcorr」と同様の使い方ですが、オプションが少々多いです。「star(#)」オプションは「pwcorr」同様に有意な係数に「*」を付けます。「pw」オプションはペアワイズでの係数算出です。「stats」オプションでもいくつかの細かいオプションを指定できます。まずは「taub」ですが、「Kendall の τ には A と B があるけれど B を算出する」というものです。基本的には B のほうを使うことになると思います。続いて「obs」はケース数、そして「p」は有意確率を算出するというものです。

例として、「pwcorr」コマンドで Pearson の r を算出した6項目について Kendall の τ を算出してみましょう。

  1. ktau q3s1-q3s6, stats(taub p) pw

[画像] Stata「ktau q3s1-q3s6, stats(taub p) pw」の実行結果:順位相関係数

「pwcorr」コマンドのときの同様、個々のセルの1行目に順位相関係数が、2行目に有意確率が表示されています。もっとコンパクトに見たいときは「star(#)」オプションです。

  1. ktau q3s1-q3s6, stats(taub) pw star(.05)

[画像] Stata「ktau q3s1-q3s6, stats(taub) pw star(.05)」の実行結果:順位相関係数

Stata による ρ の算出

Stata で ρ を算出するときは、「spearman」コマンドを用います。

  1. spearman varList, options
  2.   * options: stats(spearman_list), star(#), pw
  3.   * spearman_list: rho, obs, p

「spearman」コマンドは「varList」で指定した変数の組に関して Spearman の ρ を算出します。ほぼ Kendall の τ 「ktau」と同じです。「star(#)」オプションは「pwcorr」同様に有意な係数に「*」を付けます。「pw」オプションはペアワイズでの係数算出です。「stats」オプションのうち、1つ目の「taub」は「ρ を算出する」という指定で、2つ目の「obs」はケース数、最後の「p」は有意確率を算出するというものです。

Pearson の r、Kendall の τ 同様に例を載せておきます。

  1. spearman q3s1-q3s6, stats(rho p) pw

[画像] Stata「spearman q3s1-q3s6, stats(rho p) pw」の実行結果:順位相関係数

  1. spearman q3s1-q3s6, stats(rho) pw star(.05)

[画像] Stata「spearman q3s1-q3s6, stats(rho) pw star(.05)」の実行結果:順位相関係数

上述したとおり、Kendall の τ や Spearman の ρ に比べ、Pearson の r にはいくつかの前提条件(制約)があります。同じ変数であっても順位相関係数と Pearson の r で結果が異なることがあるため1、可能ならば制約のない順位相関係数を使うようにすると間違いないでしょう。

蛇足ですが、似たような指標を似たような使い方で算出する「pwcorr」と「ktau」「spearman」のオプションに統一感がないのは個人的にいただけません。バージョンアップのときに下方互換で統一してくれると嬉しいのですが……。

カイ二乗検定

カイ二乗検定とは

名義尺度や順序尺度といった質的な変数間の関係性(連関)を検討する手法として、クロス表を描いてカイ二乗検定を行うことがしばしばあります。カイ二乗検定は

\chi ^2=\sum rac{\left (f_{ij}-e_{ij} 
ight )^2}{e_{ij}}

が自由度

(m − 1) × (n − 1)

のカイ二乗分布に従うことを利用した分析で(fij:観測度数、eij:期待度数、m:独立変数のカテゴリ数、n:従属変数のカテゴリ数)、調査を行ったらまずは2変数間の連関を見てみるというくらい社会調査においては基本中の基本です。

Stata でカイ二乗検定を行うには、「tabulate」コマンドを使います。

  1. tabulate indepVar depVar, options
  2. tab2 varList, options
  3.   * options: chi2, exact, row, column, cell, all, nolabel

「tabulate」コマンドは、「indepVar」を独立変数(説明変数)、「depVar」を従属変数(被説明変数)としたカイ二乗検定を行います。オプションとして「chi2」を指定すると、χ2 とその有意確率を算出します。「exact」オプションは Fisher の正確検定を実行します。「row」オプションは行における相対度数(%)、「column」オプションは列における相対度数(%)、「cell」オプションは全体での相対度数(%)を算出します。「all」オプションを指定すると、χ2 に加えて Cramer の V などいくつかの統計指標・検定結果を算出します。最後の「nolabel」オプションは値からラベルを取り除くものです。

「tab2」コマンドは、「varList」で指定した変数のすべての組み合わせに対してクロス表を描画、カイ二乗検定を行います。

例として、僕の卒論で測定した、「Google などで検索する際のだいたいのワード数」が性別で異なるかどうかを検討してみます。

  1. tab q6s6 q6s3, chi2 exact row

[画像] Stata「tab q6s6 q6s3, chi2 exact row」の実行結果:カイ二乗検定

クロス表の下の「Pearson chi2(2)」を見ると、「χ2(df = 2) = 1.548, p = .461」となっています。つまり、「性別によって検索時に入力するワード数に違いがある」とは言えないということですね。まぁ当たり前と言えば当たり前ですが。

カイ二乗検定を行う際の注意

カイ二乗検定は、度数(正確には期待度数)が非常に小さい(だいたい「5」以下の)セルがあると分析が不安定になります。上の性別と検索ワード数の例でも、ワード数が「3」のセルは度数が「1」や「0」と非常に小さいです。このような場合の対応策として、以下の2つがよく使われます。

  1. カテゴリを統合して度数の小さいセルをなくす
  2. Fisher の正確検定を行う

第1の方法は、例えば上の分析例だと、検索ワード数の「2」に「3」を統合してしまうというものです。この方法は簡便ですが、情報を切り捨ててしまっていますし、実際には分析の都合上カテゴリを統合したくないということも考えられます。したがって、可能なら2つ目の Fisher の正確検定を使うといいでしょう。『Stata による社会調査データの分析:入門から応用まで』によれば、Fisher の正確検定は度数の小さいセルがあっても安定した分析が可能のようです。

3変数のクロス表

Ado ファイルをインストールすれば、「tab3way」というコマンドで3変数のクロス表を描くことができます(検定はできません)。

「tab3way」コマンドを使うには、まずは Ado ファイルを「findit tab3way」で検索します。検索結果に表示された <tab3way from http://fmwww.bc.edu/RePEc/bocode/t> というリンクをクリックしてインストールします。

  1. tab3way rowVar colVar superColVar, options
  2.   * options: rowpct, colpct, cellpct, allpct, rowtot, coltot, scoltot, alltot, usemiss

「tab3way」コマンドは、「rowVar」を行の変数に、「colVar」を下段の列の変数に、「superColVar」を上段の列の変数にした3変数のクロス表を描きます。オプションのうち、「rowpct」は列の相対度数、「colpct」は下段の行の相対度数、「cellpct」は全体での相対度数を算出し、「allpct」はこれら3つの相対度数をすべて算出します。「rowtot」は行の合計度数、「coltot」は下段の列の合計度数、「scoltot」は上段の列の合計度数を算出し、「alltot」はこれら3つの合計度数をすべて算出します。最後の「usemiss」オプションは、欠損値も1つの値として扱います(「tabulate」コマンドの「missing」オプションと同じです)。

試しに、性別、検索ワード数、文理の3変数でクロス表を描いてみます。3変数のクロス表、たまには使う機会があるかもしれませんね。

  1. tab3way q6s6 q6s3 q6s9, alltot

[画像] Stata「tab3way q6s6 q6s3 q6s9, alltot」の実行結果:3変数のクロス表

Stata で散布図を描く

直感的に2変数の関係を見たいときや、Pearson の相関係数算出時に2変数が直線的な関係にあるかを確認したいときなどには、散布図を描くと効果的です。Stata では「scatter」というコマンドで散布図を描きます。

  1. scatter depVar indepVar, options
  2.   * options: title("titleInfo"),
                 ytitle("yTitleInfo"), xtitle("xTitleInfo"),
                 l1title("l1TitleInfo"), b1title("b1TitleInfo"),
                 yline(#), xline(#),
                 mlabel(varList),
                 jitter(#)

「scatter」コマンドは「depVar」を縦軸に、「indepVar」を横軸にとった散布図を描きます。オプションがかなり豊富で、全部は紹介しきれないので、ここでは個人的によく使うと思うものをご紹介します(回帰分析編で回帰直線を描くときに他のオプションについてもご紹介します)。

まずは「title」オプションですが、見た目どおり、散布図に「titleInfo」という名前を付けます。

次に「ytitle」および「xtitle」オプションは、縦軸のタイトルと横軸のタイトルです。この2つのオプションは表示が個人的に好きじゃないので、いつも「ytitle("")」のように空白にしています。

「l1title」は散布図の左に付けるタイトル、「b1title」は下に付けるタイトルです。僕はいつも上の「ytitle」「xtitle」を使わずにこの2つを使っています。好みでいいと思います。

「yline(#)」「xline(#)」オプションは、図中の「y = #」「x = #」のところに線を引きます。

「mlabel」オプションは、図中のマーカーの傍に「varList」で指定した変数の値を描き込みます。例えば「mlabel(id)」などとすればマーカー横に ID 番号が振られるというような感じです。

最後の「jitter(#)」は、指定した割合分だけマーカーをずらします。社会調査などでは同じ回答がたくさん存在するので、散布図をそのまま描いてもどこにどのくらいの回答が集中しているのかわかりづらいことが多いです。この問題を解決するために値をランダムに揺らすのが「jitter(#)」オプションというわけです。

さて、ここでは、僕の卒論で尋ねた「インターネット利用歴」と「1日あたりのインターネット利用時間」の散布図を描いてみましょう。散布図のタイトルを「散布図:ネット歴 vs. ネット利用時間」とし、縦軸に「インターネット利用時間」、横軸に「インターネット利用歴」というタイトルを付けます。そして回答の重なりを5%だけずらしてみます。

ちなみにですが、各行末の3つスラッシュ「///」は「コマンドが次の行に続くよ」というサイン(Do ファイル限定機能)なのでお気になさらないでください。

  1. scatter q6s1 q6s2, ///
      title("散布図:ネット歴 vs. ネット利用時間") ///
      ytitle("") xtitle("") ///
      l1title("インターネット利用時間") ///
      b1title("インターネット利用歴") ///
      jitter(5)

[画像] Stata「scatter q6s1 q6s2」の実行結果:散布図

5段階で尋ねていますし、サンプルサイズが小さいので、2変数の関係が見えにくいですね。僕にはぼんやりと相関してそうな感じに見えます。ちなみに両者の相関は「r = .391, p < .001」で、中程度の相関があったようです。

  • 1 例えば上の例でも q3s3 と q3s5 の相関は「r = -.247, p = .029」「τ = -.010, p = .326」「ρ = -.110, p = .336」とけっこう違います。

Copyright © 2008-2012 鍵山琢実 (KAGIYAMA, Takumi). All rights reserved.

This page was last updated at 02:19:22 on December 24, 2010.

This site's design was checked by IE 6.0+, Firefox 3.5+, GChrome 2.0+, Safari 4.0+, Opera 10.0+, and Sleipnir 2.8+ (all for Windows).
And JavaScript is used for some details. I am so sorry if your browser is not supported.

正当なCSSです! 私はチーム・マイナス6%です

↓ Today's My Favorite Phrase ↓

「きさま──いったい何人の命をその傷のために吸い取った!?」
「おまえは今まで食ったパンの枚数をおぼえているのか?」

From: 荒木飛呂彦 『ジョジョの奇妙な冒険』第3巻 p. 149