WHAT' CHA GONNA DO FOR ME?

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

OLS③

OLS攻めシリーズ第3弾。
今回は、numpyのlinalg.lstsqを使う。

回帰式は例によってこれで、

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

コードはこんな感じ。

# -*- coding: utf-8 -*-
import matplotlib.pyplot as plt
import numpy as np
import seaborn as sns
import statsmodels.api as sm

#サンプリング数
N=1000

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

#OLS(numpy.linalg.lstsq)
np.linalg.lstsq(X,y)

結果は、いつも通り。返ってくる値は順番に、OLSのパラメータ、残差の合計、係数行列のランク、係数行列のsingular valueとのこと。ただ、出してくれる情報も少ないので、これを積極的に使用することはあまり無さそうな印象。

In [160]: np.linalg.lstsq(X,y)
Out[160]: 
(array([ 2.04312405,  1.4690942 ]),
 array([ 936.40319615]),
 2,
 array([ 49.95346943,  19.75905117]))