WHAT' CHA GONNA DO FOR ME?

Python、統計、機械学習、R、ファイナンスとか

OLS④

OLSシリーズ第4弾。
OLSは本当に重要なのでしつこくやる。

今回は、scipyのstats.linregressを使う。

いつも通り下記の回帰式を推定する。

{ 
y=2+1.5x+\epsilon\\
x \sim\ \mathcal{N}(1,1)\\
\epsilon \sim\ \mathcal{N}(0,1)\\
}

コードは以下の通り。

# -*- coding: utf-8 -*-
import numpy as np
from scipy import stats

#サンプリング数
N=1000

#データ生成
np.random.seed(0)
x=np.random.normal(1,1,N)
eps=np.random.normal(0,1,N)
y=2+1.5*x+eps

#OLS(stats.linregress)
beta, intercept, r_value, p_value, std_err = stats.linregress(x,y)

beta
intercept
r_value
p_value
std_err

結果はいつも通り。係数、定数項、相関係数、係数のp値、係数の標準誤差を返してくれる模様。どうでもいいけど、この変数を並べるMatlab風の書き方はどうも慣れない…

In [132]: beta, intercept, r_value, p_value, std_err = stats.linregress(x,y)


In [133]: beta
Out[133]: 1.4690941983978636

In [134]: intercept
Out[134]: 2.0431240470954477

In [135]: r_value
Out[135]: 0.8317899971487972

In [136]: p_value
Out[136]: 2.275528428788794e-257

In [137]: std_err
Out[137]: 0.031033762367292484

ファイナンスでは、例えばCAPMなんかを推定したときには、定数項であるαの標準誤差とt値を確認したくなるので、その意味ではこれもなかなか使いづらそう。

これでPythonのOLS推定関数も出尽くした感があるので(少なくとも頻度論に基づくいわゆる最小二乗法的なものに限っては)、次はMCMCでもやるか