Как получить регрессионный перехват с помощью Statsmodels.api

Я пытаюсь вычислить выход регрессии, используя библиотеку python, но я не хочу, чтобы получить значение перехвата при использовании библиотеки:

import statsmodels.api as sm

Он печатает весь регрессионный анализ, кроме перехвата.

но когда я использую:

from pandas.stats.api import ols

Мой код для pandas:

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     exec code в 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

запуск кода очистки

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 данный)

Конечный результат: 1-й из pandas 2nd из статистики.... Я хочу, чтобы перехват vaule как один из pandas из статистики также:

1 ответ

Итак, statsmodels имеет метод add_constant, который необходимо использовать для явного добавления значений перехвата. IMHO, это лучше, чем альтернатива 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 kwag in sm.add_constant

Или, не рекомендуется, но вы можете использовать Numpy для явного добавления столбца константы так:

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

licensed under cc by-sa 3.0 with attribution.