我在R中做了一个forecast(),我只想要预测值.我怎样才能做到这一点?如果我使用forecast$means
我得到额外的信息而不是像矢量那样的可用数据对象.
suppressMessages(require('forecast'))
suppressMessages(require('rjson'))
# Load data. Let user choose what file they want to input.
my_json = "[1,2,3,4,5]"
my_data = fromJSON(my_json)
my_df = data.frame(my_data)
# Plot the decomposed time series. Let user choose their season length.
forecasted_data = forecast(ts(my_df[,1]), h=5)
print(forecasted_data$mean)
Run Code Online (Sandbox Code Playgroud)
电流输出:
Time Series:
Start = 6
End = 10
Frequency = 1
[1] 4.9999 4.9999 4.9999 4.9999 4.9999
Run Code Online (Sandbox Code Playgroud)
期望的输出:
[1] 4.9999 4.9999 4.9999 4.9999 4.9999
Run Code Online (Sandbox Code Playgroud) 我使用非常nicht 的代码对象arma_order_select_ic
来找到最低的信息标准来选择 p- 和 q 值。
我不确定我是否做得对,或者代码是否只是偶然发现了一些错误......
在:
y = indexed_df
res = arma_order_select_ic(y, max_ar=7, max_ma=7, ic=['aic', 'bic', 'hqic'], trend='c', fit_kw=dict(method='css'))
print res
print ('AIC-order: {}' .format(res.aic_min_order))
print ('BIC-order: {}' .format(res.bic_min_order))
print ('HQIC-order: {}' .format(res.hqic_min_order))
Run Code Online (Sandbox Code Playgroud)
出去:
/Applications/anaconda/lib/python2.7/site-packages/statsmodels-0.6.1-py2.7-macosx-10.5-x86_64.egg/statsmodels/base/model.py:466: ConvergenceWarning: Maximum Likelihood optimization failed to converge. Check mle_retvals
"Check mle_retvals", ConvergenceWarning)
Run Code Online (Sandbox Code Playgroud)
另外:它打印出三个矩阵样式列表(每个 IC 一个矩阵)和最终推荐:
AIC-order: (7, 5)
BIC-order: (7, 0)
HQIC-order: (7, 0)
Run Code Online (Sandbox Code Playgroud)
所以,整件事似乎都奏效了。
问题是,每次计算都会打印警告,大约需要 30-60 秒,即它非常慢!
我检查了相关的源代码(statsmodels/base/model.py)以及如何跳过打印 CovergenceWarning:
#TODO: hardcode scale?
if isinstance(retvals, dict):
mlefit.mle_retvals = retvals
if warn_convergence …
Run Code Online (Sandbox Code Playgroud) 我很确定我错过了一些非常简单的东西,但仍然无法弄清楚为什么会出现这个错误.我所拥有的数据是2013年4月至2014年3月的每个月末数据.现在我想了解12个月期间的趋势.
xx <- structure(c(41.52, 41.52, 41.52, 41.68, 41.68, 41.68, 41.84,
41.84, 41.84, 42.05, 42.05, 42.05), .Tsp = c(2013.25, 2014.16666666667,
12), class = "ts");
Run Code Online (Sandbox Code Playgroud)
是我的时间序列数据.现在我用的时候
stl(xx,s.window ="periodic")
Run Code Online (Sandbox Code Playgroud)
我收到错误:
Error in stl(xx, s.window = "periodic") :
series is not periodic or has less than two periods
Run Code Online (Sandbox Code Playgroud)
我不知道出了什么问题,因为据我所知这个系列有12个时期.请协助
我正在使用R预测包装模型,如下所示:
fit <- auto.arima(df)
plot(forecast(fit,h=200))
Run Code Online (Sandbox Code Playgroud)
其中打印原始数据框加上预测.当df非常大时,这就成了一个问题,因为很难看到预测的样子.我希望能够只选择整个系列中的最后X点(原始+预测).
假设我有一些时间序列如下,我想预测c1
一步一步,这样做很简单直接在R:
testurl = "https://docs.google.com/spreadsheets/d/1jtpQaSxNY1V3b-Xfa5OJKDCLE6pNlzTbwhSHByei4EA/pub?gid=0&single=true&output=csv"
test = getURL(testurl)
mydata = read.csv(textConnection(test), header = TRUE)
data <- ts(mydata['c1'])
fit <- auto.arima(data)
fcast <- forecast(fit)
fcast
Run Code Online (Sandbox Code Playgroud)
请注意,这些数字只是随机数,auto.arima建议我们使用a arima(0,1,0)
和预测一步,一个头是52.
但是,如果想要使用c2
和c3
改进(例如aic和bic)样本预测,该怎么办?那个人怎么会继续呢?
c1 c2 c3
40 0,012 1
41 0,015 1
42 0,025 1
40 ?0,015 1
44 0,000 0
50 0,015 0
52 0,015 1
51 0,020 1
50 0,025 1
52 0,030 0
53 0,045 1
52 0,030 1
52 0,025 0
52 0,000 0
51 0,010 …
Run Code Online (Sandbox Code Playgroud) 嗨,我大致了解置信区间和预测区间之间的差异(参见Rob Hyndman 的帖子和关于交叉验证的讨论)。并且该预测区间比置信区间宽得多。
我的问题是我可以从中获得置信区间forecast.Arima
吗?为什么只计算预测区间而不是置信区间forecast
?在预测文件中:
forecast(object, h=10, level=c(80,95), fan=FALSE, lambda=NULL,
bootstrap=FALSE, npaths=5000, biasadj=FALSE, ...)
Run Code Online (Sandbox Code Playgroud)
level
是预测区间的置信水平。
我正在尝试根据 Excel 中的代码在 Javascript 中创建预测函数,在https://support.office.com/en-US/article/FORECAST-function-50CA49C9-7B40-4892-94E4-7AD38BBEDA99 中解释
但我不明白公式中带有特征的 x(也是 y)是什么,所以我不知道如何在 Javascript 中翻译它。
有人可以帮我吗?
谢谢你。
我正在运行此链接中的示例。
经过几次修改,我已经成功运行了代码。下面是修改后的代码:
import quandl, math
import numpy as np
import pandas as pd
from sklearn import preprocessing, cross_validation, svm
from sklearn.linear_model import LinearRegression
import matplotlib.pyplot as plt
from matplotlib import style
import datetime
style.use('ggplot')
df = quandl.get("WIKI/GOOGL")
df = df[['Adj. Open', 'Adj. High', 'Adj. Low', 'Adj. Close', 'Adj. Volume']]
df['HL_PCT'] = (df['Adj. High'] - df['Adj. Low']) / df['Adj. Close'] * 100.0
df['PCT_change'] = (df['Adj. Close'] - df['Adj. Open']) / df['Adj. Open'] * 100.0
df = df[['Adj. Close', 'HL_PCT', …
Run Code Online (Sandbox Code Playgroud) 我想为各种预测模型绘制图表。
当我在加载 ggplot2 后使用 autoplot 时,绘图显示如下:
autoplot(m_hw1_ff)
Run Code Online (Sandbox Code Playgroud)
我还想为训练和测试数据添加拟合线。为此,我使用以下代码:
autoplot(m_hw1_ff) +
geom_line(aes(y=m_reg1_ff$fitted), col = "green") +
geom_line(data=test_ts_data, aes(y=test_ts_data), col = "red")
Run Code Online (Sandbox Code Playgroud)
当上面的代码在加载ggplot2后运行时,它给出了以下错误:
Error in order(data$PANEL, data$group, data$x) :
argument 3 is not a vector
Run Code Online (Sandbox Code Playgroud)
在参考了这个问题的评论和答案后,我也加载了 ggfortify 包。
之后代码工作正常,并且完美地绘制了训练和测试数据的拟合线。然而,之前为蓝色的阴影区域(Lo 80、Hi 80、Lo 95 和 Hi 95 的深色和浅色)已完全变成灰色,如下图所示:
我希望阴影到区域显示为它出现在第一个图中。
我的数据集看起来像这样:
Category Weekly_Date a b
<chr> <date> <dbl> <dbl>
1 aa 2018-07-01 36.6 1.4
2 aa 2018-07-02 5.30 0
3 bb 2018-07-01 4.62 1.2
4 bb 2018-07-02 3.71 1.5
5 cc 2018-07-01 3.41 12
... ... ... ... ...
Run Code Online (Sandbox Code Playgroud)
我分别为每个组拟合线性回归:
fit_linreg <- train %>%
group_by(Category) %>%
do(model = lm(Target ~ Unit_price + Unit_discount, data = .))
Run Code Online (Sandbox Code Playgroud)
现在我对每个类别都有不同的模型:
aa model1
bb model2
cc model3
Run Code Online (Sandbox Code Playgroud)
所以,我需要将每个模型应用到适当的类别.怎么实现呢?(dplyr更好)
forecasting ×10
r ×7
time-series ×5
python ×2
dplyr ×1
excel ×1
ggfortify ×1
ggplot2 ×1
grouping ×1
javascript ×1
python-2.7 ×1
scikit-learn ×1
statsmodels ×1
trend ×1