Sha*_*ank 11 python pandas statsmodels
我正在尝试使用python库计算回归输出,但我无法使用;当我使用库时获取拦截值:
import statsmodels.api as sm
Run Code Online (Sandbox Code Playgroud)
它打印除截距之外的所有回归分析.
但是当我使用时:
from pandas.stats.api import ols
Run Code Online (Sandbox Code Playgroud)
我的熊猫代码:
Regression = ols(y= Sorted_Data3['net_realization_rate'],x = Sorted_Data3[['Cohort_2','Cohort_3']])
print Regression
Run Code Online (Sandbox Code Playgroud)
我得到了拦截,并警告说这个librabry将来会被弃用,所以我试图使用Statsmodels.
我在使用pandas.stats.api时得到的警告:
警告(来自警告模块):文件"C:\ Python27\lib\idlelib\run.py",第325行exec代码在self.locals中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
Run Code Online (Sandbox Code Playgroud)
运行一些清洁代码
sm_model = sm.OLS(Sorted_Data3['net_realization_rate'],Sorted_Data3[['Cohort_2','Cohort_3']])
results = sm_model.fit()
print '\n'
print results.summary()
Run Code Online (Sandbox Code Playgroud)
我甚至尝试过statsmodels.formula.api:as:
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()
Run Code Online (Sandbox Code Playgroud)
但我得到错误:
TypeError:init()至少需要2个参数(给定1个)
Kar*_*tik 16
因此,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()
Run Code Online (Sandbox Code Playgroud)
请注意,您可以在数组之前添加常量,或者通过传递True(默认)或False在prependkwag中添加常量sm.add_constant
或者,不推荐,但您可以使用Numpy显式添加常量列,如下所示:
exog = np.concatenate((np.repeat(1, len(Sorted_Data3))[:, None],
Sorted_Data3[['Cohort_2','Cohort_3']].values),
axis = 1)
Run Code Online (Sandbox Code Playgroud)
小智 6
您还可以执行以下操作:
df['intercept'] = 1
Run Code Online (Sandbox Code Playgroud)
在这里,您正在显式创建用于拦截的列。
然后,您可以像这样使用sm.OLS方法:
lm = sm.OLS(df['y_column'], df[['intercept', 'x_column']])
results = lm.fit()
results.summary()
Run Code Online (Sandbox Code Playgroud)