如何使用Statsmodels.api获得回归拦截

时间:2016-08-08 18:49:30

标签: python pandas statsmodels

我正在尝试使用python库计算回归输出,但我无法使用; e在我使用库时获取拦截值:

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  

我得到了拦截,并警告说将来不推荐使用此librabry,因此我尝试使用Statsmodels。

使用pandas.stats.api时收到的警告:

  

警告(来自警告模块):    文件“C:\ Python27 \ lib \ idlelib \ run.py”,第325行       self.locals中的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个)

最终输出: 第一个是来自熊猫,第二个是来自统计数据....我想拦截vaule作为来自统计数据的熊猫的那个: enter image description here

2 个答案:

答案 0 :(得分:11)

因此,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 sm.add_constant kwag >

或者,不推荐,但你可以使用Numpy显式添加一个常量列,如下所示:

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

答案 1 :(得分:2)

您还可以执行以下操作:

df['intercept'] = 1

在这里,您正在为拦截器显式创建一列。

然后,您可以像这样使用sm.OLS方法:

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