web-dev-qa-db-ja.com

Statsmodels.apiを使用して回帰インターセプトを取得する方法

pythonライブラリを使用して回帰出力を計算しようとしていますが、ライブラリを使用すると切片の値を取得できません。

import statsmodels.api as sm

切片を除くすべての回帰分析を出力します。

しかし私が使うとき:

from pandas.stats.api import ols

パンダの私のコード:

Regression = ols(y= Sorted_Data3['net_realization_rate'],x = Sorted_Data3[['Cohort_2','Cohort_3']])
print Regression  

このライブラリーは将来廃止される予定であることを警告するインターセプトが表示されるので、Statsmodelsを使用しようとしています。

pandas.stats.apiの使用中に表示される警告:

警告(警告モジュールから):ファイル「C:\ Python27\lib\idlelib\run.py」、self.localsの行325のexecコードFutureWarning:pandas.stats.olsモジュールは非推奨であり、将来のバージョンでは削除されます。 statsmodelsなどの外部パッケージを参照します。ここでいくつかの例を参照してください: http://statsmodels.sourceforge.net/stable/regression.html

Statsmodelsの私のコード:

import pandas as pd
import numpy as np
from pandas.stats.api import ols
import statsmodels.api as sm

Data1 = pd.read_csv('C:\Shank\Regression.csv')  #Importing CSV
print Data1

クリーニングコードを実行する

sm_model = sm.OLS(Sorted_Data3['net_realization_rate'],Sorted_Data3[['Cohort_2','Cohort_3']])
results = sm_model.fit()
print '\n'
print results.summary()

私もstatsmodels.formula.api:を試しました:

sm_model = sm.OLS(formula ="net_realization_rate ~ Cohort_2 + Cohort_3", data = Sorted_Data3)
results = sm_model.fit()
print '\n'
print result.params
print '\n'
print results.summary()

しかし、私はエラーが出ます:

TypeError:init()は少なくとも2つの引数を取ります(1つが指定されています)

最終出力:1つ目はpandasからです。2つ目はStatsからです。..pandasからの統計値からのインターセプト値も必要です: enter image description here

13
Shank

したがって、statsmodelsにはadd_constantメソッドがあり、切片値を明示的に追加するために使用する必要があります。私見、これはインターセプトがデフォルトで追加されるRの代替案よりも優れています。

あなたの場合、これを行う必要があります:

import statsmodels.api as sm
endog = Sorted_Data3['net_realization_rate']
exog = sm.add_constant(Sorted_Data3[['Cohort_2','Cohort_3']])

# Fit and summarize OLS model
mod = sm.OLS(endog, exog)
results = mod.fit()
print results.summary()

True(デフォルト)またはFalseprepend kwagのsm.add_constantに渡して、配列の前、または配列の後に定数を追加できることに注意してください。


または、お勧めしませんが、Numpyを使用して、次のように定数列を明示的に追加できます。

exog = np.concatenate((np.repeat(1, len(Sorted_Data3))[:, None], 
                       Sorted_Data3[['Cohort_2','Cohort_3']].values),
                       axis = 1)
15
Kartik

次のようなこともできます:

df['intercept'] = 1

ここでは、切片の列を明示的に作成しています。

その後、次のようにsm.OLSメソッドを使用できます。

lm = sm.OLS(df['y_column'], df[['intercept', 'x_column']])
results = lm.fit()
results.summary()
4
Cody Mitchell