web-dev-qa-db-fra.com

Comment obtenir l'interception de régression à l'aide de Statsmodels.api

J'essaie de calculer une sortie de régression en utilisant la bibliothèque python mais je ne peux pas; e pour obtenir la valeur d'interception lorsque j'utilise la bibliothèque:

import statsmodels.api as sm

Il imprime toute l'analyse de régression à l'exception de l'interception.

mais quand j'utilise:

from pandas.stats.api import ols

Mon code pour les pandas:

Regression = ols(y= Sorted_Data3['net_realization_rate'],x = Sorted_Data3[['Cohort_2','Cohort_3']])
print Regression  

Je reçois l'interception avec un avertissement que cette librabry sera obsolète à l'avenir, donc j'essaie d'utiliser Statsmodels.

l'avertissement que je reçois en utilisant pandas.stats.api:

Avertissement (depuis le module d'avertissements): Fichier "C:\Python27\lib\idlelib\run.py", ligne 325 code d'exécution dans self.locals FutureWarning: Le module pandas.stats.ols est obsolète et sera supprimé dans une future version . Nous nous référons à des packages externes comme statsmodels, voir quelques exemples ici: http://statsmodels.sourceforge.net/stable/regression.html

Mon code pour 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

exécuter un code de nettoyage

sm_model = sm.OLS(Sorted_Data3['net_realization_rate'],Sorted_Data3[['Cohort_2','Cohort_3']])
results = sm_model.fit()
print '\n'
print results.summary()

J'ai même essayé 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()

mais je reçois l'erreur:

TypeError: init () prend au moins 2 arguments (1 donné)

Sortie finale: 1er est de pandas 2e est de Stats .... Je veux le vaule d'interception comme celui de pandas de stats aussi: enter image description here

13
Shank

Ainsi, statsmodels a un add_constant méthode que vous devez utiliser pour ajouter explicitement des valeurs d'interception. À mon humble avis, c'est mieux que l'alternative R où l'interception est ajoutée par défaut.

Dans votre cas, vous devez faire ceci:

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()

Notez que vous pouvez ajouter une constante avant votre tableau ou après en passant True (par défaut) ou False au prepend kwag dans sm.add_constant


Ou, non recommandé, mais vous pouvez utiliser Numpy pour ajouter explicitement une colonne constante comme ceci:

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

Vous pouvez également faire quelque chose comme ceci:

df['intercept'] = 1

Ici, vous créez explicitement une colonne pour l'interception.

Ensuite, vous pouvez simplement utiliser la méthode sm.OLS comme ceci:

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