2014-06-06 3 views
1

달 단위로 OLS를 실행하고 있습니다. 단일 제품에 대해서는 정상적으로 작동하지만 데이터 프레임에는 많은 제품이 포함되어 있습니다. groupby 객체를 만들면 OLS에서 오류가 발생합니다.statsmodels에서 groupby로 OLS를 적용하는 방법

linear_regression_df: 
    product_desc period_num TOTALS 
0 product_a  1   53 
3 product_a  2   52 
6 product_a  3   50 
1 product_b  1   44 
4 product_b  2   43 
7 product_b  3   41 
2 product_c  1   36 
5 product_c  2   35 
8 product_c  3   34 


from pandas import DataFrame, Series 
import statsmodels.api as sm  

linear_regression_grouped = linear_regression_df.groupby(['product_desc']) 
X = linear_regression_grouped['period_num'] 
y = linear_regression_grouped['TOTALS'] 

model = sm.OLS(y, X) 
results = model.fit() 

그리고 나는 sm.OLS에이 오류가() 라인 :

ValueError: unrecognized data structures: <class 'pandas.core.groupby.SeriesGroupBy'> 

그래서 난 내 dataframe을 통해 이동하고 각 product_desc에 대한 sm.OLS()를 적용 할 수있는 방법? 당신은 이런 일을 할 수

답변

2

...

import pandas as pd 
import statsmodels.api as sm 

for products in linear_regression_df.product_desc.unique(): 
    tempdf = linear_regression_df[linear_regression_df.product_desc == products] 
    X = tempdf['period_num'] 
    y = tempdf['TOTALS'] 

    model = sm.OLS(y, X) 
    results = model.fit() 

    print results.params # Or whatever summary info you want 
2

사용 get_group 각 개별 그룹을 취득하고 각각에 OLS 모델을 수행 할 수

for group in linear_regression_grouped.groups.keys(): 
    df= linear_regression_grouped.get_group(group) 
    X = df['period_num'] 
    y = df['TOTALS'] 
    model = sm.OLS(y, X) 
    results = model.fit() 
    print results.summary() 

그러나 실제 경우에, 당신은 또한 원하는 절편을 사용하여 모델을 약간 다르게 정의해야합니다.

결과는 (절편과 절판을 제외하고는) 분명히 매우 다릅니다.