2017-11-30 6 views
0

Pythonでは、Y、X1、X2、X3というラベルの列があるパンダデータフレームがあるとします。 私はX1、X2、X3でYに対してOLS回帰を実行します。 ループを使用して回帰からの係数をリストに格納します。 ループ内の関数の引数を変更するにはどうすればよいですか? 次のコードは機能しません。ループ(Python)で関数の引数を変更する方法は?

import pandas as pd 
import statsmodels.api as sm 

ols = sm.OLS(df[['Y']],(df[['X_1','X_2','X_3']])) 
olsfit = ols.fit(cov_type='HC0') 

coef = [] 

for i in range(4): 
    coef.append(olsfit.params.X_i) 
+0

なぜループが必要ですか?モデルオブジェクトには、すべてのモデルパラメータの係数を含む 'params'属性があります。 – ako

+0

それは良い点です。多くの他の退行者がいるとしましょう。 Z_1、... Z_100、そしてX_1、...、X_N係数だけを抽出したいのですか? – DaveK

+0

paramsはこの場合pandas.Seriesであり、いくつかの個別のパラメータを選択するためにインデックスを付けたり、numpy配列に変換してnumpyインデックスを使用したりすることができます。 – user333700

答えて

0

私は、これはあなたのコードが動作して取得するのに十分であるかどうかわからないんだけど、あなたが今言っgetattr

# Also using comprehension notation 
coef = [ 
    getattr(olsfit.params, 'X_' + str(i)) 
    for i in range(4) 
] 

を使用し、動的プロパティにアクセスする必要がある場合、私はあなたが従うことをお勧め代わりに回帰名を構築するために、整数を反復処理の赤穂の答え

+0

ありがとう、これは完璧です! – DaveK

0

、NEであるだけstatsmodelsに実際の名前を使用RegressionResultsWrapperparams属性( pd.Seriesで、回帰者名に索引付けされています)。適切にフィルタリングするには -

olsfit.params[olsfit.params.index.str.contains('^X_')] 
関連する問題