Python statsmodels GLM:应用0和1时更改类的处理方式

Python statsmodels GLM:应用0和1时更改类的处理方式,python,r,logistic-regression,statsmodels,glm,Python,R,Logistic Regression,Statsmodels,Glm,我有一个来自GitHub的股市数据集: import pandas as pd import numpy as np import statsmodels.api as sm Smarket_url = 'https://raw.githubusercontent.com/selva86/datasets/master/Smarket.csv' #Load data Smarket = pd.read_csv(Smarket_url) 我正在使用“statsmodels”包的GLM函数进行逻

我有一个来自GitHub的股市数据集:

import pandas as pd
import numpy as np
import statsmodels.api as sm

Smarket_url = 'https://raw.githubusercontent.com/selva86/datasets/master/Smarket.csv'
#Load data
Smarket = pd.read_csv(Smarket_url)
我正在使用“statsmodels”包的GLM函数进行逻辑回归。我使用R-Studio做了同样的回归,它给了我同样的结果,只是在R中得到的系数在Python中为负,在Python中为正,反之亦然。在python中,我最初使用:

Smarket_model = sm.formula.glm('Direction ~ Lag1 + Lag2 + Lag3 + Lag4 + Lag5 + Volume',
                         data=Smarket,family=sm.families.Binomial()).fit()
结果如下:

Intercept      0.1260 
Lag1           0.0731
Lag2           0.0423
Lag3          -0.0111
Lag4          -0.0094 
Lag5          -0.0103 
Volume        -0.1354
我将问题归结为statsmodels如何对结果变量进行分类:“股票上涨”为0,“股票下跌”为1。因此,我创建了一个numpy数组,将此配置更改为Stock Up=1和Stock Down=0。然后我使用了statsmodel.GML()函数:

#Create numpy array changing zeros to ones and vice versa
change = np.where(Smarket['Direction']=='Up',1,0)   

#Add intercept
smarket_vars = sm.add_constant(Smarket[['Lag1','Lag2', 'Lag3', 'Lag4','Lag5','Volume']]) 
#Fit model
market_model = sm.GLM(change, smarket_vars,family=sm.families.Binomial() ).fit()
这给了我正确的负系数:

const         -0.1260      
Lag1          -0.0731      
Lag2          -0.0423      
Lag3           0.0111      
Lag4           0.0094      
Lag5           0.0103     
Volume         0.1354    

我的问题是,如何在不必创建更改0和1的numpy数组的情况下获得正确的值?为什么
sm.formula.glm()
假设“股票上涨”是0,“股票下跌”是1?感谢所有读过这些废话并愿意帮助我的人:)

嗨,Jorge,我也对此感到困惑,你可以检查这个答案,结果发现底层模块(patsy)将更高频率的类别作为成功“1”。感谢StupidWolf,我一直在代码中收到patsy消息,但不知道它是什么。因此,我想,根据答案,这取决于用户定义哪个类别等于成功。