标签: statsmodels

使用statsmodels进行时间序列分析

我正在尝试使用时间序列数据进行多元回归,但是当我将时间序列列添加到模型时,它最终将每个唯一值视为一个单独的变量,就像这样(我的'date'列的类型为datetime) :

est = smf.ols(formula='r ~ spend + date', data=df).fit()
print est.summary()

coef    std err t   P>|t|   [95.0% Conf. Int.]
Intercept   -6.249e-10  inf -0  nan nan nan
date[T.Timestamp('2014-10-08 00:00:00')]    -2.571e-10  inf -0  nan nan nan
date[T.Timestamp('2014-10-15 00:00:00')]    9.441e-11   inf 0   nan nan nan
date[T.Timestamp('2014-10-22 00:00:00')]    5.619e-11   inf 0   nan nan nan
date[T.Timestamp('2014-10-29 00:00:00')]    -8.035e-12  inf -0  nan nan nan
date[T.Timestamp('2014-11-05 00:00:00')]    6.334e-11   inf 0   nan nan nan
date[T.Timestamp('2014-11-12 00:00:00')]    7.9e+04 inf 0   nan nan nan
date[T.Timestamp('2014-11-19 00:00:00')]    1.58e+05    inf 0 …
Run Code Online (Sandbox Code Playgroud)

python statsmodels

6
推荐指数
1
解决办法
2484
查看次数

如何从MLE logit回归中获得系数?

我有一个statsmodels.discrete.discrete_model.BinaryResultsWrapper是running的输出statsmodels.api.Logit(...).fit()。我可以调用该.summary()方法来打印一个结果表,其中的系数嵌入文本中,但是我真正需要的是将这些系数存储到变量中以备后用。我怎样才能做到这一点?关于如何执行此非常基本的操作的文档还不清楚(可能是除了打印结果之外,任何人都想对结果做的最基本的事情)

当我尝试fittedvalues()方法(看起来它会返回系数)时,我得到了错误:

“系列”对象不可调用

python statsmodels logistic-regression

6
推荐指数
1
解决办法
3008
查看次数

python statsmodels:帮助将ARIMA模型用于时间序列

来自statsmodels的ARIMA给出了我输出的不准确答案.我想知道是否有人可以帮我理解我的代码有什么问题.

这是一个示例:

import pandas as pd
import numpy as np
import datetime as dt
from statsmodels.tsa.arima_model import ARIMA

# Setting up a data frame that looks twenty days into the past,
# and has linear data, from approximately 1 through 20
counts = np.arange(1, 21) + 0.2 * (np.random.random(size=(20,)) - 0.5)
start = dt.datetime.strptime("1 Nov 01", "%d %b %y")
daterange = pd.date_range(start, periods=20)
table = {"count": counts, "date": daterange}
data = pd.DataFrame(table)
data.set_index("date", inplace=True)

print data

               count
date
2001-11-01   0.998543 …
Run Code Online (Sandbox Code Playgroud)

python statistics statsmodels

6
推荐指数
1
解决办法
5776
查看次数

Python Statsmodels QuantReg拦截

问题设置statsmodels分位数回归问题中,它们的最小绝对偏差摘要输出显示截距.在该示例中,他们使用公式

from __future__ import print_function
import patsy
import numpy as np
import pandas as pd
import statsmodels.api as sm
import statsmodels.formula.api as smf
import matplotlib.pyplot as plt
from statsmodels.regression.quantile_regression import QuantReg

data = sm.datasets.engel.load_pandas().data

mod = smf.quantreg('foodexp ~ income', data)
res = mod.fit(q=.5)
print(res.summary())

                         QuantReg Regression Results                          
==============================================================================
Dep. Variable:                foodexp   Pseudo R-squared:               0.6206
Model:                       QuantReg   Bandwidth:                       64.51
Method:                 Least Squares   Sparsity:                        209.3
Date:                Fri, 09 Oct 2015   No. Observations:                  235
Time:                        15:44:23   Df Residuals: …
Run Code Online (Sandbox Code Playgroud)

python regression quantile statsmodels

6
推荐指数
1
解决办法
2807
查看次数

statsmodels add_constant用于OLS拦截,这实际上是做什么的?

通过statsmodels OLS拟合回顾线性回归我看到你必须使用add_constant在拟合之前为自变量中的所有点添加常量'1'.然而,当我们的x等于0时,我在这个上下文中对截距的唯一理解是y的值,所以我不清楚是什么目的总是在这里注入'1'.这个常数实际上告诉OLS适合什么?

python linear-regression statsmodels

6
推荐指数
2
解决办法
3263
查看次数

seasonal_decompose:操作数无法与系列中的形状一起广播

我知道这个话题有很多问题,但没有一个能帮助我解决这个问题.我真的坚持这个.

有一个简单的系列:

0
2016-01-31  266
2016-02-29  235
2016-03-31  347
2016-04-30  514
2016-05-31  374
2016-06-30  250
2016-07-31  441
2016-08-31  422
2016-09-30  323
2016-10-31  168
2016-11-30  496
2016-12-31  303

import statsmodels.api as sm
logdf = np.log(df[0])
decompose = sm.tsa.seasonal_decompose(logdf,freq=12, model='additive')
decomplot = decompose.plot()
Run Code Online (Sandbox Code Playgroud)

我一直在: ValueError: operands could not be broadcast together with shapes (12,) (14,)

我已经尝试了很多东西,只传递了logdf.values,传递了非日志系列.它不起作用.Numpy和statsmodel版本:

print(statsmodels.__version__)
print(pd.__version__)
print(np.__version__)
0.6.1
0.18.1
1.11.3
Run Code Online (Sandbox Code Playgroud)

numpy time-series decomposition pandas statsmodels

6
推荐指数
1
解决办法
2386
查看次数

如何在一个图中绘制多个季节性分解图?

我正在使用提供的季节性分解分解多个时间序列。这statsmodels是代码和相应的输出:

def seasonal_decompose(item_index):
    tmp = df2.loc[df2.item_id_copy == item_ids[item_index], "sales_quantity"]
    res = sm.tsa.seasonal_decompose(tmp)
    res.plot()
    plt.show()

seasonal_decompose(100)
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

有人可以告诉我如何以X列的行格式绘制多个此类图,以查看多个时间序列的行为吗?

python matplotlib statsmodels

6
推荐指数
2
解决办法
5855
查看次数

Logistic回归statsmodels的概率预测置信区间

我正在尝试从"统计学习简介"重新创建一个图,我无法弄清楚如何计算概率预测的置信区间.具体来说,我正在尝试重新创建该图的右侧面板(图7.1),该面板预测工资> 250的概率基于4度多项式的年龄和相关的95%置信区间.如果有人关心,工资数据就在这里.

我可以使用以下代码预测并绘制预测概率

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import statsmodels.api as sm
from sklearn.preprocessing import PolynomialFeatures

wage = pd.read_csv('../../data/Wage.csv', index_col=0)
wage['wage250'] = 0
wage.loc[wage['wage'] > 250, 'wage250'] = 1

poly = Polynomialfeatures(degree=4)
age = poly.fit_transform(wage['age'].values.reshape(-1, 1))

logit = sm.Logit(wage['wage250'], age).fit()

age_range_poly = poly.fit_transform(np.arange(18, 81).reshape(-1, 1))

y_proba = logit.predict(age_range_poly)

plt.plot(age_range_poly[:, 1], y_proba)
Run Code Online (Sandbox Code Playgroud)

但我对如何计算预测概率的置信区间感到茫然.我已经考虑过多次引导数据以获得每个时代的概率分布,但我知道有一种更简单的方法,这是我无法掌握的.

我有估计的系数协方差矩阵和与每个估计系数相关的标准误差.如果给出这些信息,我将如何计算上图中右侧面板所示的置信区间?

谢谢!

python confidence-interval statsmodels logistic-regression

6
推荐指数
1
解决办法
5787
查看次数

从statsmodels检索模型估计

从这样的数据集:

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

# A dataframe with two variables
np.random.seed(123)
rows = 12
rng = pd.date_range('1/1/2017', periods=rows, freq='D')
df = pd.DataFrame(np.random.randint(100,150,size=(rows, 2)), columns=['y', 'x']) 
df = df.set_index(rng)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

......和这样的线性回归模型:

x = sm.add_constant(df['x'])
model = sm.OLS(df['y'], x).fit()
Run Code Online (Sandbox Code Playgroud)

...你可以通过这种方式轻松检索一些模型系数:

print(model.params)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

但我无法找到如何从模型摘要中检索所有其他参数:

print(str(model.summary()))
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

如问题中所述,我对R平方特别感兴趣.

从帖子如何从Pandas中的OLS摘要中提取特定值?我了解到你可以在print(model.r2)那里做同样的事情.但这似乎不适用于statsmodels.

有什么建议?

python statsmodels

6
推荐指数
1
解决办法
4454
查看次数

ARIMA模型在每周时间序列数据上的预测误差

我正在使用ARIMA模型来预测产品的销售量。数据位于2015年1月1日至2016年11月24日的csv文件中,间隔为1周。我正在尝试预测9步,即未来9周。

CSV中的数据:

"01-01-2015",9
"08-01-2015",8
"15-01-2015",13
"22-01-2015",10
"29-01-2015",12
"05-02-2015",5
"12-02-2015",4
"19-02-2015",6
"26-02-2015",9
"05-03-2015",3
"12-03-2015",3
"19-03-2015",2
...
Run Code Online (Sandbox Code Playgroud)

这是我正在使用的代码:

def parser(x):
    return datetime.datetime.strptime(x, '%d-%m-%Y')
fn = 'filename.csv'
y = pd.read_csv(fn, header = 0, parse_dates = [0], index_col = 0, squeeze = True, date_parser = parser)
newmod = sm.tsa.statespace.SARIMAX(y,order=(1, 1, 0),seasonal_order=(1, 1, 0, 12),enforce_stationarity=False,enforce_invertibility=False)
newresults = newmod.fit()
pred_uc = newresults.get_forecast(steps = 9)
pred_ci = pred_uc.conf_int()
y1 = pred_ci.iloc[:,0]
y2 = pred_ci.iloc[:,1]
ax = y.plot(label = "observed")
pred_uc.predicted_mean.plot(ax=ax, label='Forecast')
ax.fill_between(pred_ci.index, pred_ci.iloc[:,0],pred_ci.iloc[:,1], color = 'k' , …
Run Code Online (Sandbox Code Playgroud)

python matplotlib python-3.x statsmodels arima

6
推荐指数
0
解决办法
199
查看次数