У меня есть набор данных фондового рынка от 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)
Я делаю регрессию c с помощью функции GLM пакета statsmodels. Я сделал ту же регрессию, используя R-Studio, и она дает мне те же результаты, за исключением того, что результирующие коэффициенты в R, которые являются отрицательными, отображаются как положительные в 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, а 'Stock Down' было 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
Мой вопрос: как мне получить правильные значения, не создавая массив numpy, изменяющий 0 и 1? Почему sm.formula.glm()
предположил, что «Stock Up» был 0, а «Stock Down» был 1? Спасибо всем, кто прочитал всю эту чушь и готов помочь мне:)