我正在尝试使用时间序列数据进行多元回归,但是当我将时间序列列添加到模型时,它最终将每个唯一值视为一个单独的变量,就像这样(我的'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) 我有一个statsmodels.discrete.discrete_model.BinaryResultsWrapper是running的输出statsmodels.api.Logit(...).fit()。我可以调用该.summary()方法来打印一个结果表,其中的系数嵌入文本中,但是我真正需要的是将这些系数存储到变量中以备后用。我怎样才能做到这一点?关于如何执行此非常基本的操作的文档还不清楚(可能是除了打印结果之外,任何人都想对结果做的最基本的事情)
当我尝试fittedvalues()方法(看起来它会返回系数)时,我得到了错误:
“系列”对象不可调用
来自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) 问题设置 在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) 通过statsmodels OLS拟合回顾线性回归我看到你必须使用add_constant在拟合之前为自变量中的所有点添加常量'1'.然而,当我们的x等于0时,我在这个上下文中对截距的唯一理解是y的值,所以我不清楚是什么目的总是在这里注入'1'.这个常数实际上告诉OLS适合什么?
我知道这个话题有很多问题,但没有一个能帮助我解决这个问题.我真的坚持这个.
有一个简单的系列:
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) 我正在使用提供的季节性分解分解多个时间序列。这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列的行格式绘制多个此类图,以查看多个时间序列的行为吗?
我正在尝试从"统计学习简介"重新创建一个图,我无法弄清楚如何计算概率预测的置信区间.具体来说,我正在尝试重新创建该图的右侧面板(图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)
但我对如何计算预测概率的置信区间感到茫然.我已经考虑过多次引导数据以获得每个时代的概率分布,但我知道有一种更简单的方法,这是我无法掌握的.
我有估计的系数协方差矩阵和与每个估计系数相关的标准误差.如果给出这些信息,我将如何计算上图中右侧面板所示的置信区间?
谢谢!
从这样的数据集:
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.
有什么建议?
我正在使用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) statsmodels ×10
python ×9
matplotlib ×2
arima ×1
numpy ×1
pandas ×1
python-3.x ×1
quantile ×1
regression ×1
statistics ×1
time-series ×1