2  相関関係

Author

Ryo Nakagami

Published

2024-10-05

Modified

2024-10-19

二つの変数間の関係のことを一般には相関関係と呼びますが,統計学では二つの変数の間に直線関係に近い傾向が見られるときに 「相関関係がある」ということが多いです.相関関係を形容する言葉として,「強い vs 弱い」と「正 vs 負」のふたつのレベルがあります.

相関係数

Def: Pearson相関係数

確率変数 X,Y のPearson相関係数は

Corr(X,Y)=σXYσXσY

σXYX,Y の共分散, σX,σY は標準偏差を表す.

▶  Pearson相関係数の値域

Pearson相関係数 |Corr(X,Y)|1 という性質があります.

X~=Xμx,Y~=Yμy とおきます.シュワルツの不等式を用いると

|Corr(X,Y)|2=|σXY|2σX2σY2=E[X~Y~]2E[X~]2E[Y~]21

従って,|Corr(X,Y)|1

▶  互いに独立な確率変数と相関係数

互いに独立な確率変数 X,Y について,

Cov(X,Y)=E[XY]E[X]E[Y]=E[X]E[Y]E[X]E[Y]=0

よりPeasorn相関係数の分子が0になるので,Corr(X,Y)=0 となることがわかります. ただし,Peasorn相関係数が 0 だとしても,独立性が成立するとは限りません.

  Example 2.1 : 単位円周上の点

一様分布に従う確率変数 ΘU(0,2π) を考えます.この確率変数を変数変換し,

X=cosΘY=sinΘ

このとき,X,Y の確率密度関数はそれぞれ

fX(t)=fY(t)=12π11t2

となります.独立でない関係は定義より X2+Y2=1 と明らかですが,同時密度関数 f(x,y) について

f(0,0)fX(0)fY(0)

で確認できます.このときのPearson相関係数は

E[X]=12π02πcosθdθ=0E[Y]=12π02πsinθdθ=0E[XY]=12π02πcosθsinθdθ=14π02πsin(θ+θ)sin(θθ)dθ=14π02πsin(2θ)dθ=0

従って,Corr(X,Y)=0

図で確認してみると以下のように,一つの x に対して,2つの y の値が存在しています.このように yx に対してユニークにおおよその位置が定まらないときはPearson相関係数は0に近い値が出力される傾向にあります.

Code
import numpy as np
import plotly.io as pio
import plotly.express as px
import regmonkey_style.stylewizard as sw


# Register custom template
sw.set_templates("regmonkey_scatter")

# Data preparation
np.random.seed(42)

N = 200
theta = np.random.uniform(0, 2 * np.pi, N)
X, Y = np.cos(theta), np.sin(theta)

# Create the figure with the template
fig = px.scatter(
    x=X,
    y=Y,
    title="一様分布乱数の単位円周上の点への変数変換<br><sup>Sample size = {}, Pearson相関係数={:.2f}</sup>".format(
        N, np.corrcoef(X, Y)[0, 1]
    ),
)

# equal xy scale
sw.equal_xy_scale(fig)
fig.show()
−3−2−10123−1−0.500.51
一様分布乱数の単位円周上の点への変数変換Sample size = 200, Pearson相関係数=0.00xy

Theorem 2.1

Var(X)>0,Var(Y)>0 の確率変数 X,Y について,

fX,Y(x,y)=fX,Y(x,y)

が成立するとする.このとき,

Corr(X,Y)=0

が成立する.

Proof

Cov(X,Y)=0 を示せば十分です.

Cov(X,Y)=fX,Y(x,y)(xμx)(yμy)dxdy=(yμy)(fX,Y(x,y)偶関数(xμx)奇関数dx)dy=(yμy)×0dy=0

従って,Corr(X,Y)=0

Theorem 2.2 : 平行移動 & スケール変換に対して不変

a10,a20,b1,b2 を定数として, 確率変数 X,Y に対して以下のような変数変換を考える

U=a1X+b1V=a2Y+b2

このとき,

Corruv=sgn(a1a2)Corrxy

Proof

Corruv=Cov(U,V)Var(U)Var(V)=a1a2Cov(X,Y)a12Var(X)a22Var(Y)=a1a2|a1a2|Corr(X,Y)=sgn(a1a2)Corr(X,Y)

Pearson相関係数はスケール及び平行移動について不変である性質を確認できましたが,2つの確率変数の関係性を捉える指標として相関係数の他に共分散があります. 共分散はスケールに依存じます.上の例をベースに確認してみると.

Cov(U,V)=a1a2Cov(X,Y)

より平行移動に関しては不変だが,スケール変換に対して不変ではありません.

Theorem 2.3 正の相関係数の非推移性

3つの確率変数 X,Y,Z について

Corr(X,Y)>0Corr(Y,Z)>0

が成立したとしても,Corr(X,Z)>0 とは限らない

Proof

3つの独立な確率変数 X,Y,Z にたいして

U=X+YV=Y+ZW=ZX

とおくと

Cov(U,V)=Var(Y)>0Cov(V,W)=Var(Z)>0Cov(U,W)=Var(X)<0

となり, 正の推移性が成立しないことがわかる.

Theorem 2.4 : A measure of Linear relation

確率変数 X,Y について,|Corr(X,Y)|=1 とする.このとき,X,Y は完全な線形関係で表せる.

Proof

Corr(X,Y)2=Cov(X,Y)Var(X)Cov(X,Y)Var(Y)=1

YX に線形回帰するとき, X の係数 β について

β=Cov(X,Y)Var(X)

であるので,|Corr(X,Y)|=1 より

Cov(X,Y)Var(Y)=1β

である必要があります.e=Yμyβ(Xμx) と定義すると

Var(Y)=β2(Var)(X)+Var(e)

であるので,

Cov(X,Y)Var(Y)=Cov(X,Y)Var(X)Var(X)Var(Y)=βVar(X)β2Var(X)+Var(e)=1βVar(X)Var(X)+Var(e)/β2

従って,

Var(e)=0

が必要条件であることが分かります.従って,

Y=α+βXwhereα=μyβμx

が導けます.

▶  Pythonでの確認

Pearson相関係数が強いほど,線形回帰及び逆線形回帰の予測ラインが近づいていくことを以下で確認しています.

Code
from plotly.subplots import make_subplots
import plotly.graph_objects as go
import statsmodels.api as sm


X1, Y1 = np.random.multivariate_normal([0, 0], [[1, 0.4], [0.4, 1]], N).T

X2, Y2 = np.random.multivariate_normal([0, 0], [[1, 0.95], [0.95, 1]], N).T

# Set common x and y ranges
x_range = np.array([-3, 3])  # Define your desired x range
y_range = np.array([-3, 3])  # Define your desired y range

# regression
result_1_yx = sm.OLS(Y1, sm.add_constant(X1)).fit()
result_1_xy = sm.OLS(X1, sm.add_constant(Y1)).fit()
result_2_yx = sm.OLS(Y2, sm.add_constant(X2)).fit()
result_2_xy = sm.OLS(X2, sm.add_constant(Y2)).fit()

fig = make_subplots(rows=1, cols=2)
fig.add_trace(go.Scatter(x=X1, y=Y1, name="相関係数:0.4"), row=1, col=1)
fig.add_trace(
    go.Scatter(
        x=x_range,
        y=result_1_yx.predict(sm.add_constant(x_range)),
        mode="lines",
        line=dict(color='gray'),
        showlegend=False,
        name="coef: {:.2f}".format(result_1_yx.params[1]),
    ),
    row=1,
    col=1,
)
fig.add_trace(
    go.Scatter(
        x=result_1_xy.predict(sm.add_constant(y_range)),
        y=y_range,
        mode="lines",
        line=dict(color='gray'),
        showlegend=False,
        name="coef: {:.2f}".format(result_1_xy.params[1]),
    ),
    row=1,
    col=1,
)

fig.add_trace(go.Scatter(x=X2, y=Y2, name="相関係数:0.95"), row=1, col=2)
fig.add_trace(
    go.Scatter(
        x=x_range,
        y=result_2_yx.predict(sm.add_constant(x_range)),
        mode="lines",
        line=dict(color='gray'),
        showlegend=False,
        name="coef: {:.2f}".format(result_2_yx.params[1]),
    ),
    row=1,
    col=2,
)
fig.add_trace(
    go.Scatter(
        x=result_2_xy.predict(sm.add_constant(y_range)),
        y=y_range,
        mode="lines",
        line=dict(color='gray'),
        showlegend=False,
        name="coef: {:.2f}".format(result_2_xy.params[1]),
    ),
    row=1,
    col=2,
)

fig.update_layout(title='相関係数水準に応じた回帰係数と逆回帰係数の比較')
fig.update_xaxes(
    range=x_range, scaleanchor="y", scaleratio=1, row=1, col=1
)  # Link x-axis of plot 1 to y-axis
fig.update_yaxes(
    range=y_range, scaleanchor="x", scaleratio=1, row=1, col=1
)  # Link y-axis of plot 1 to x-axis
fig.update_xaxes(
    range=x_range, scaleanchor="y2", scaleratio=1, row=1, col=2
)  # Link x-axis of plot 2 to y-axis
fig.update_yaxes(range=y_range, scaleanchor="x2", scaleratio=1, row=1, col=2)
fig.show()
−202−3−2−10123−202−3−2−10123
相関係数:0.4相関係数:0.95相関係数水準に応じた回帰係数と逆回帰係数の比較X-axis TitleX-axis TitleY-axis TitleY-axis Title

  Example 2.2

単位円周上の一様分布に従う確率変数 Θ を考えます.円周がこの Θ によって分割されるとき,ふたつの線分ができます.このうち長い方を X, 短い方を Y とすると,

XU(π,2π)YU(0,π)X=2πY

と表せます.このとき,X,Y の相関係数は

Corr(X,Y)=E[XY]E[X]E[Y]V(X)V(Y)=E[Y(2πY)]π/23π/2π2/12=1

と計算できます.

Def: 標本Pearson相関係数

確率変数の組 {(xi,yi)}i=1n について,それぞれの標本平均を x,y とする.このとき標本Pearson相関係数 ρxy

(2.1)ρxy=(xix)(yiy)(xix)2(yiy)2

標本Peason相関係数の値域もpopulationPeason相関係数と同様に [1,1] となります. シュワルツの不等式より

ai2bi2(aibi)2

ここで,ai=(xix),yi=(yiy) とすると

(2.2)i=1n(xix¯)2i=1n(yiy¯)2(i=1n(xix¯)(yiy¯))2

従って,ρxy21 が成立することがわかります.

また,シュワルツの不等式のの等号成立条件の必要十分条件は, すべての i について ai:bi が一定(ここではその比率を k とおく) なので,

yi=kxi+y¯kx¯=kxi+c(c:定数)

のとき,|ρxy|=1.また,変数感に1次式の関係があるとき |ρxy|=1 が成立することがわかります.

▶  ベクトルのなす角との関係

について,ノルムで表現することもできます.n 次元実ベクトル uu,vv に対し,その内積を

(uu,vv)=i=1nuivi

とします.xx=(x1x,,xnx)T,yy=(y1y,,yny)T とすると,

(2.3)ρxy=(xx,yy)xxyy

について,ベクトル xx,yy のなす角と理解することができます.実際に2つのベクトルのなす角は

cosθ=(uu,vv)uuvv

Appendix

▶  母集団相関係数の絶対値が1以下になる証明

Proof: 判別式を用いた証明

任意の tR について

Var(tX+Y)=t2Var(X)+2tCov(X,Y)+Var(Y)0

非負の2次形式の判別式 D は0以下なので

D=Cov(X,Y)2Var(X)Var(Y)0

整理すると

Cov(X,Y)2Var(X)Var(Y)1|Corrxy|211Corrxy1

Proof: 分散標準化した変数の和

確率変数 X,Y の標準偏差をそれぞれ σx,σy とします.

0Var(Xσx±Yσy)=Var(Xσx)±2Cov(Xσx,Yσy)+Var(Yσy)=1σx2Var(X)±2σxσyCov(X,Y)+1σy2Var(Y)=2±2σxσyCov(X,Y)=2±2Corrxy

従って,1Corrxy1 を得ます.