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からの統計値からのインターセプト値も必要です:
したがって、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
(デフォルト)またはFalse
をprepend
kwagのsm.add_constant
に渡して、配列の前、または配列の後に定数を追加できることに注意してください。
または、お勧めしませんが、Numpyを使用して、次のように定数列を明示的に追加できます。
exog = np.concatenate((np.repeat(1, len(Sorted_Data3))[:, None],
Sorted_Data3[['Cohort_2','Cohort_3']].values),
axis = 1)
次のようなこともできます:
df['intercept'] = 1
ここでは、切片の列を明示的に作成しています。
その後、次のようにsm.OLSメソッドを使用できます。
lm = sm.OLS(df['y_column'], df[['intercept', 'x_column']])
results = lm.fit()
results.summary()