「相関係数」について学ぶ(統計学)

2023年5月13日

この記事では、統計学を初めて学ぶ筆者が、「相関係数」について学んだ内容について記載しています。

学習には、Wikipediaの「相関係数」の記事を参考にし、Pythonのプログラミングにも触れ、理解を深めました。

プログラミングには、機械学習ライブラリのscikit-learnを使用しました。

この記事は、他の人が参考にできるよう、わかりやすく書くことを心がけました。

相関係数

相関係数は、2つのデータセットがどれだけ線形関係にあるかを表す指標です。線形関係とは、グラフ上で直線になる関係のことです。相関係数が正の場合は、1つのデータが増加するともう1つのデータも増加する正の相関があることを示します。逆に相関係数が負の場合は、1つのデータが増加するともう1つのデータが減少する負の相関があることを示します。相関係数が±1の場合は、完全に線形関係にあることを示し、相関係数が0の場合は、2つのデータが無相関であることを示します。たとえば、身長と体重の関係性を考えてみると、身長が高くなると体重も増加する傾向があるため、正の相関があると言えます。

相関係数とは、2つのデータまたは確率変数の間にある線形な関係の強弱を測る指標である。相関係数は無次元量で、−1以上1以下の実数に値をとる。相関係数が正のとき確率変数には正の相関が、負のとき確率変数には負の相関があるという。また相関係数が0のとき確率変数は無相関であるという。 たとえば、先進諸国の失業率と実質経済成長率は強い負の相関関係にあり、相関係数を求めれば−1に近い数字になる。 相関係数が ±1 に値をとることは、2つのデータ(確率変数)が線形の関係にあるときに限る。また2つの確率変数が互いに独立ならば相関係数は 0 となるが、逆は成り立たない。

相関係数

通常、相関係数というと、ピアソンの積率相関係数を指します。ピアソンの積率相関係数は、相関係数を算出する2つのデータセットが2次元の正規分布に従うことを前提としたパラメトリックな手法です。しかし、このような仮定が成立しない場合には、スピアマンの順位相関係数やケンドールの順位相関係数などのノンパラメトリックな手法を使います。これらは、データの値そのものではなく、データの順位を用いて相関を測る方法です。

パラメトリックとは、統計学的な検定が母集団の分布の影響を受けることを意味します。一般的に、母集団の分布が正規分布に従っていることなどが求められます。たとえば、ある医薬品の効果を調べる際に、効果が正規分布に従うと仮定して検定を行うことがあります。一方、ノンパラメトリックな手法では、母集団の分布についての仮定を必要とせず、より柔軟にデータを扱うことができます。たとえば、ある商品の人気度合いを調べる場合には、人気の順位を比較することができます。

普通、単に相関係数といえばピアソンの積率相関係数を指す。ピアソン積率相関係数の検定は偏差の正規分布を仮定する(パラメトリック)方法であるが、他にこのような仮定を置かないノンパラメトリックな方法として、スピアマンの順位相関係数、ケンドールの順位相関係数なども一般に用いられる。

相関係数

ピアソン(Pearson)の積率相関係数

ピアソンの積率相関係数は、相関を測るための手法の1つで、2つのデータセットが直線的に関係しているかどうかを示す指標です。しかし、この手法は2つのデータセットが2次元の正規分布に従うことを前提としているため、実際にはこの仮定を満たす場合が限られています。具体例としては、身長と体重の関係を調べる場合、身長が正規分布に従うとは限りません。

Pythonプログラミング

「ピアソン(Pearson)の積率相関係数」をイメージしやすいよう、pythonでのプログラミングについても学びます。

scikit-learn トイデータセット

機械学習ライブラリscikit-learnに用意されている「トイデータセット」を使います。トイデータセットは、機械学習の問題を解くためのサンプルデータセットのことで、いくつかの種類が用意されています。例えば、Iris(アヤメ)の花の特徴から、その種類を分類する問題を解くための「irisデータセット」や、ボストン市の住宅価格に関するデータを用いて、住宅価格を予測する問題を解くための「bostonデータセット」などがあります。

Irisデータセットは、Setosa、Versicolour、Virginicaの3種類のアヤメの花のデータが含まれており、各種類について50個のサンプルがあります。このデータセットには、がく片の長さや幅、花びらの長さや幅、そしてアヤメの種類という4つの特徴量が含まれています。

このデータセットを用いて、特徴量同士の相関関係を調べることができます。


scikit-learnにはいくつかの小さな標準データセットが付属しており、外部のウェブサイトからファイルをダウンロードする必要はありません。

これらは以下の関数を使って読み込むことができます。

load_boston() : load_boston は 1.0 で非推奨となり、1.2 で削除される予定である。

load_iris() : アヤメのデータセット(分類)をロードして返す。

load_diabetes() : 糖尿病のデータセット(回帰)をロードして返す。

load_digits() : 数字のデータセット(分類)をロードして返す。

load_linnerud() : 身体運動のデータセットをロードして返す。

load_wine() : ワインのデータセット(分類)をロードして返す。

load_breast_cancer() : ウィスコンシン州の乳がんのデータセット(分類)をロードして返す。7.1. Toy datasetsts

アヤメのデータセット

アヤメのデータセットは、機械学習における代表的なデータセットの1つであり、サンプルデータの中でも特に有名なものの1つです。

アヤメのデータセットには、ヒオウギアヤメ(Iris-Setosa)、アイリス・バージカラー(Iris Versicolour)、アイリス・ヴァージニカ(Iris Virginica)の3種類のアヤメが含まれており、各々50件のデータがあります。データには、「がく片の長さ」、「がく片の幅」、「花びらの長さ」、「花びらの幅」といった4つの属性があり、また3種のアヤメの分類に関するデータも含まれています。

Iris Setosa (ヒオウギアヤメ)

アラスカ、メイン、カナダ(ブリティッシュコロンビア、ニューファンドランド、ケベック、ユーコンなど)、ロシア(シベリアなど)、アジア北東部、中国、韓国、日本など北極海を越えて広く分布する根生葉の多年草です。

茎は高く伸び、葉は中緑色、花は紫、紫紺、青、ラベンダー色です。また、ピンクや白の花を咲かせる植物もあります。

Irissetosa1.jpg
Iris Setosa (ヒオウギアヤメ)

Iris Versicolour (アイリス・バージカラー)

北アメリカ、アメリカ東部とカナダ東部に自生するアヤメの一種です。スゲ草地や湿地、川岸や海岸に普通に見られます。

特異形質バージカラー(versicolor)は「様々な色彩の」という意味です。

Blue Flag, Ottawa.jpg
Iris Versicolour (アイリス・バージカラー)

Iris Virginica (アイリス・ヴァージニカ)

北アメリカ東部原産の多年草です。アメリカ南東部のフロリダ州からジョージア州にかけての海岸平野によく見られます。

Iris virginica 2.jpg
Iris Virginica (アイリス・ヴァージニカ)

プログラム

以下はPythonのscikit-learnライブラリを用いてアヤメのデータセットの特徴量同士の相関関係を調べるプログラムです。

from sklearn.datasets import load_iris
import pandas as pd

# アヤメのデータセットを読み込む
iris = load_iris()

# 特徴量を含むDataFrameを作成する
df = pd.DataFrame(iris.data, columns=iris.feature_names)

# 相関行列を計算する
corr_matrix = df.corr()

# 相関行列を表示する
print(corr_matrix)

実行結果

各特徴量のペアごとの相関係数が出力されました。

                   sepal length (cm)  ...  petal width (cm)
sepal length (cm)           1.000000  ...          0.817941
sepal width (cm)           -0.117570  ...         -0.366126
petal length (cm)           0.871754  ...          0.962865
petal width (cm)            0.817941  ...          1.000000

[4 rows x 4 columns]

アヤメのデータセットには4つの特徴量があります。それぞれ、がく片の長さ(sepal length)、がく片の幅(sepal width)、花びらの長さ(petal length)、花びらの幅(petal width)です。これらの特徴量同士の相関関係を調べると、以下のような傾向が見られます。

  • Sepal lengthとSepal widthは、わずかに負の相関がある(相関係数: -0.117)。
  • Sepal lengthとPetal lengthは、強い正の相関がある(相関係数: 0.872)。
  • Sepal lengthとPetal widthは、強い正の相関がある(相関係数: 0.818)。
  • Sepal widthとPetal lengthは、わずかに負の相関がある(相関係数: -0.428)。
  • Sepal widthとPetal widthは、わずかに負の相関がある(相関係数: -0.366)。
  • Petal lengthとPetal widthは、強い正の相関がある(相関係数: 0.963)。

これらの結果から、Sepal lengthとSepal widthはほとんど相関がなく、がく片の形状が花の大きさにはあまり影響を与えていないことがわかります。一方で、Petal lengthとPetal widthは非常に強い正の相関があるため、花びらの形状が花の大きさに大きく影響していることがわかります。また、Sepal lengthとPetal length、Sepal lengthとPetal width、Sepal widthとPetal length、Sepal widthとPetal widthの間にも比較的強い正の相関が見られるため、花の大きさはこれらの特徴量の組み合わせによって説明できることがわかります。

プログラムの説明

from sklearn.datasets import load_iris
import pandas as pd

sklearn.datasetsモジュールからload_iris関数をインポートします。

pandasライブラリをインポートします。

# アヤメのデータセットを読み込む
iris = load_iris()

load_iris()関数を使用してアヤメのデータセットをロードします。

# 特徴量を含むDataFrameを作成する
df = pd.DataFrame(iris.data, columns=iris.feature_names)

ロードしたデータセットの特徴量を含むDataFrameを作成します。DataFrameは、pandasライブラリで扱える表形式のデータ構造です。

# 相関行列を計算する
corr_matrix = df.corr()

DataFrameのcorr()メソッドを使用して相関行列を計算します。相関行列は、各特徴量間の相関係数をまとめた正方行列です。

# 相関行列を表示する
print(corr_matrix)

計算した相関行列を表示します。

スピアマン(Spearman)の順位相関係数

スピアマンの順位相関係数は、順位データに基づいて算出される相関係数で、ノンパラメトリックな手法です。この手法は、2つのデータセットの分布を仮定する必要がなく、変数間の関係を任意の単調関数でどの程度忠実に表現できるかを評価します。ピアソンの積率相関係数と異なり、データセットの関係が直線的であるという仮定を必要とせず、順位が明確になっていれば適用可能な指標です。具体例として、ランキングされた競技結果や、商品の評価データなどが考えられます。

スピアマンの順位相関係数は統計学において順位データから求められる相関の指標である。チャールズ・スピアマン(Charles Spearman)によって提唱され、ふつうρ あるいは rS などと書かれる。 ピアソンの積率相関係数(普通に相関係数と呼ばれるもの)と違い、ノンパラメトリックな指標である。すなわち2つの変数の分布について何も仮定せずに、変数の間の関係が任意の単調関数によってどの程度忠実に表現できるかを、評価するものである。「変数間の関係は線形である」と仮定する必要も、また変数を数値的にとる必要もなく、順位が明らかであればよい。

スピアマンの順位相関係数

ケンドール(Kendall)の順位相関係数

「ケンドールの順位相関係数」とは、順位同士の相関を測るために使われる指標で、相関の強さを示します。同様に順位相関を測る方法として、「スピアマンの順位相関係数」がありますが、ほぼ同じ結果を示します。例えば、ある人が好きな果物の順位と、同じ人が好きな野菜の順位を比べたとき、ケンドールの順位相関係数を使えば、果物と野菜の好みがどれだけ関連しているかを知ることができます。スピアマンの順位相関係数でも同じように相関を測ることができます。

ケンドールの順位相関係数は、順位間の相関計測に用いられ、相関の強さを表す。言い換えれば、それは複数のデータ間の関連性の強さを表す。1938年にモーリス・ケンドールによっ開発された。 順位相関を計測する別の方法としてはスピアマンの順位相関係数があるが、両者はほぼ同じ傾向を示す。

ケンドールの順位相関係数

誤解や誤用

相関と因果の混同

相関係数は、2つのデータセット間にある線形的な関係を測る指標であることを覚えておきましょう。ただし、相関関係があるからといって、必ずしも因果関係があるわけではないことにも注意が必要です。

例えば、2つのデータセット(AとB)に相関がある場合、次の3つの可能性が考えられます。1つ目は、AがBを引き起こしている可能性があること。2つ目は、BがAを引き起こしている可能性があること。そして3つ目は、AとBの間に因果関係がなく、別の変数Cが両者を引き起こす可能性があることです。この場合、AとBの相関は偽の相関であると呼ばれます。

相関関係と因果関係の違いを混同して使用することがあるため、この3番目の場合は誤解されやすくなっています。例えば、過去に研究された「アイスクリームの売り上げと溺死者数の間に相関がある」という報告がありますが、これはアイスクリームの売り上げが溺死者数を引き起こすという因果関係があるわけではありません。実際には、この2つの変数は夏の季節に共通して上昇するため、疑似相関が見られたということです。

相関係数は、あくまでも確率変数の間にある線形な関係の尺度に過ぎない。また、確率変数間の因果関係を説明するものでもない。相関係数は順序尺度であり比尺度ではないので、例えば「相関係数が0.2と0.4であることから、後者は前者より2倍の相関がある」などと言うことはできない。 しばしば、相関があるという表現が、あたかも因果関係を示しているかのように誤解あるいは誤用される。 2つの変数(A,B)間に相関が見られる場合、偶然による相関を除けば、次の3つの可能性が想定される(相関と因果の違いに関する誤解・誤用において目立つのは、3番目の場合である)。 1. AがBを発生させる 2. BがAを発生させる 3. 第3の変数CがAとBを発生させる(この場合、AとBの間に因果関係はなく擬似相関と呼ばれる)

相関係数

相関係数と回帰係数の混同

相関係数と回帰係数は、両方とも統計学で使用される用語ですが、異なる意味を持っています。相関係数は、2つの変数の間に線形的な関係があるかどうか、およびその強さについての指標です。たとえば、身長と体重の関係を考えると、身長が高くなると体重も増える可能性があるため、2つの変数の間に正の相関があると言えます。

一方、回帰係数は、説明変数が目的変数にどのように影響を与えるかを表す係数であり、回帰分析において求められます。たとえば、身長が体重にどのような影響を与えるかを分析し、体重を予測するための回帰式を求めることができます。

初心者の研究者によく見られる勘違いは、相関係数と回帰係数を混同することです。回帰係数を用いて相関関係を求めることはできず、相関係数を用いて因果関係を示すこともできません。回帰分析によって得られた結果は、あくまでも予測モデルを構築するための情報であり、因果関係を示すためには、実験的な手法や別の統計的手法が必要となります。

相関分析とは2変数の間に線形関係があるかどうか、およびその強さについての分析であり、2つの変数の間に質的な区別を仮定しない。それに対し回帰分析とは、変数の間にどのような関係があるか(具体的な関数の形)についての分析であり、また説明変数によって目的変数を予測するのを目的としている。 初学者によく見られる勘違いとして、相関係数と回帰係数が取り違えて理解されることが多い。 また、回帰式を作ることは、あくまで予測モデルを立てることに過ぎず、回帰分析によって因果関係の推定が直接的にできるわけではない。

相関係数