2016-05-27 3 views
-1

私は重いRユーザーで、最近はPythonを学んでいます。 statsmodels.apiが複製された機能をどのように処理するかについて質問があります。 私の理解では、この関数はRパッケージのglmのpython版です。だから私は関数が最尤推定値(MLE)を返すことを期待しています。pythonパッケージ内のstatmodels、正確に複製されたフィーチャーはどのように扱われますか?

私の質問は、statsmodelsがMLEを取得するために使用するアルゴリズムですか? 特に、アルゴリズムが重複した機能を持つ状況をどのように処理していますか?

私の質問を明確にするために、ベルヌーイ分布からサイズ50のサンプルを単一の共変量x1で生成します。

import statsmodels.api as sm 
import pandas as pd 
import numpy as np 
def ilogit(eta): 
    return 1.0 - 1.0/(np.exp(eta)+1) 

## generate samples 
Nsample = 50 
cov = {} 
cov["x1"] = np.random.normal(0,1,Nsample) 
cov = pd.DataFrame(cov) 
true_value = 0.5 
resp = {} 
resp["FAIL"] = np.random.binomial(1, ilogit(true_value*cov["x1"])) 
resp = pd.DataFrame(resp) 
resp["NOFAIL"] = 1 - resp["FAIL"] 

次にとしてロジスティック回帰にフィット:

## fit logistic regrssion 
fit = sm.GLM(resp,cov,family=sm.families.Binomial(sm.families.links.logit)).fit() 
fit.summary() 

これは戻します

enter image description here

推定係数がより多くのまたは真の値(= 0.5)にあまり類似しています。 次に、重複列、つまりx2を作成し、ロジスティック回帰モデルに再度適合させます。 (RパッケージのGLM X2のためのNAを返します)

cov["x2"] = cov["x1"] 
fit = sm.GLM(resp,cov,family=sm.families.Binomial(sm.families.links.logit)).fit() 
fit.summary() 

この出力:

enter image description here

は驚くべきことに、これは動作し、X1とX2の係数の推定値は、(= 0.1182)全く同じです。以前のフィットがx1 = 0.2364の係数推定値を返すので、推定値は半分になりました。 は、その後、私は9に重複機能の数を増やし、モデルを当てはめる:予想通り

cov = cov 
for icol in range(3,10): 
    cov["x"+str(icol)] = cov["x1"] 
fit = sm.GLM(resp,cov,family=sm.families.Binomial(sm.families.links.logit)).fit() 
fit.summary() 

enter image description here

、各重複変数の推定値は(0.0263)と同じであり、彼らは9倍であるように見えますx1(0.2364)の元の推定値よりも小さい。

このような予期しない最尤推定の動作には驚いています。なぜこれが起こっているのか、そしてstatsmodels.apiの後ろにどのようなアルゴリズムが採用されているのか説明できますか?

答えて

1

短い答え:

GLMはゼロ固有値を持つ成分が廃棄され主成分回帰に対応し、この場合には、PINVのムーア・ペンローズ一般逆行列を使用しています。ゼロ固有値は、numpy.linalg.pinvのデフォルトのしきい値(rcond)によって定義されます。

statsmodelsには、共線性に向けた体系的なポリシーがありません。一部の非線形最適化ルーチンは、逆行列が失敗した場合に例外を発生させます。しかし、線形回帰モデルOLSとWLSは、デフォルトで一般化された逆関数を使用します。この場合、上記のような振る舞いが見られます。

GLM.fitの既定の最適化アルゴリズムは、WLSを使用し、特異なデザインマトリックスに対してWLSの既定の動作を継承する反復最小二乗irlsです。 statsmodels masterのバージョンには、標準的なscipyオプティマイザを使用するオプションもあります。ここで、単数または近似の特異行列の動作は、最適化アルゴリズムの詳細に依存します。

+0

デフォルトでは、olsが使用するアルゴリズムをどのように選択しますか?ドキュメントはkwargsに言及していますが、リストには載っていません。 –

+0

したがって、デフォルト最適化アルゴリズムを使用するstatsmodelのGLMの推定値はMLEではありません。 – ThePrincess

+1

@ ThePrincess IRLSは従来の最適化アルゴリズムに過ぎません。推定された平均パラメータは、最尤推定値である。 OLSと同様に、スケールパラメータの推定値はデフォルトで自由度補正を使用しますが、これはMLEにはありません。これは、PoissonまたはBinomialのようにスケールが固定されていない場合のパラメータ推定値のデフォルトの標準誤差にのみ影響します。 – user333700

関連する問題