2017-11-30 3 views
0

Python에서 Y, X1, X2, X3으로 표시된 열이있는 판다 데이터 프레임이 있다고 가정합니다. X에서 X1, X2, X3으로 OLS 회귀 분석을 실행합니다. 루프를 사용하여 회귀에서 계수를 목록에 저장하고 싶습니다. 루프에서 함수의 인수를 변경하려면 어떻게합니까? 다음 코드는 작동하지 않습니다.루프 (파이썬)에서 함수의 인수를 변경하는 방법은 무엇입니까?

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

대신 회귀 이름을 구성하는 정수 반복의 아코의 대답은 단지 북동 인합니다 (statsmodels에 RegressionResultsWrapperparams 속성을 실제 이름을 사용 pd.Series, 회귀 변수 이름에 색인 됨) - 적절하게 필터링하십시오.

olsfit.params[olsfit.params.index.str.contains('^X_')]