我试图通过以下命令使用R中的预测包从季节性arima模型生成模拟:
simulate(model_temp)
Run Code Online (Sandbox Code Playgroud)
model_temp将arima()函数应用于我观察到的时间序列的结果在哪里,顺便提一下,我将模型指定为ARIMA(2,1,2)(0,1,2)[12]模型.
但是,当我尝试这个时,我收到以下错误:
Error in diffinv.vector(x, lag, differences, xi) :
NA/NaN/Inf in foreign function call (arg 1)
Run Code Online (Sandbox Code Playgroud)
任何人都可以解释为什么会这样(以及如何避免这个问题)?
我应该进一步补充一点,我知道我应用的模型和产生model_temp的模型不是生成该系列的模型,但是,我仍然希望从该模型(或任何其他模型)生成模拟).
最后,是否可以通过仅指定ar,d,ma,sar,sd,sma和sigma参数从而无需首先创建正确ARIMA类型的对象,从季节性ARIMA模型生成模拟?
感谢您的任何帮助,
乔纳森
我正在预测大量的时间序列(5,000+).如果我在更高级别进行预测,然后将预测分配到每个SKU,我想使用分层方法执行此操作.我认为有必要这样做,以便放大到较低的地理细节水平,同时在更高的层次(自上而下)进行预测.
例如,下面您将看到我正在考虑的结构示例.
Total
=> Europe
=> Netherlands
=> RegionA
=> Client_A_in_Netherlands
=> SKU1
=> SKU2
=> SKU3
=> Client_Q_in_Netherlands
=> SKU15
=> Germany1
=> (...)
=> ClientY_in_Germany
=> SKU89
=> Africa
=> South Africa
=> (...)
=> Client_Z_in_SouthAfrica
=> SKU792
Run Code Online (Sandbox Code Playgroud)
我想在大陆层面(即欧洲或非洲)层面做自上而下的预测.然后将适当的份额分配给国家/地区,然后分配给该国家/地区的客户,然后分配给SKU.
在'hts'包的文档中,有一个关于如何使用两级层次结构执行此操作的示例.我想知道是否有人可以建议如何使用多级层次结构来做到这一点?
我试图auto.arima通过在带有4个双核CPU的计算机上运行来加速缓慢的功能(我使用的是Ubuntu 13.04和R 2.15.2).该函数拟合了350,000个数据点和大约50个外生变量的时间序列.我正在使用以下代码
fit<-auto.arima(orders,xreg=exogen, stepwise=FALSE, parallel=TRUE, num.cores=4)
Run Code Online (Sandbox Code Playgroud)
但是,我有多个CPU(每个都有多个内核),而不只是一个具有多个内核的CPU.如果R足够智能以解决这个核心/ CPU的差异,我看了看我的资源监视器并看到了这个:

这表明只有CPU3最大化.
有关如何解决的任何想法?forecast包是否适用DoSNOW?
我正在尝试使用varsR中的包来学习矢量自回归模型.这个包没有任何方法来测量返回模型的准确性.
具体来说,我想使用R中包中accuracy函数中定义的MASE forecast,将VAR预测与每个组件时间序列上使用Arima模型的预测进行比较(我使用了4个可能相关的时间序列).accuracy无法识别varest返回的对象vars.如何获取每个预测组件的MASE?我想计算样本内和样本外的准确度
代码示例:
library(vars)
library(forecast)
data(Canada)
v<- VAR(window(Canada, end=c(1998,4)), p=2)
accuracy(v$varresult[[1]])
Run Code Online (Sandbox Code Playgroud)
参数accuracy是一个lm对象,并返回系列1的训练精度:
ME RMSE MAE MPE MAPE MASE
Training set 1.536303e-15 0.3346096 0.2653946 -1.288309e-05 0.0281736 0.03914555
Run Code Online (Sandbox Code Playgroud)
我希望使用类似的东西来获得样本外的测试精度(不完全是这样,因为需要指定预测期):
accuracy(v$varresult[[1]], window(Canada[,1], start=c(1999,1)))
Run Code Online (Sandbox Code Playgroud)
但是lm对象不支持这种情况并返回错误
Error in testaccuracy(f, x, test) : Unknown list structure
Run Code Online (Sandbox Code Playgroud)
如果我直接使用这些值如下,我没有得到MASE,它需要有关训练集的信息.这也容易出现一个错误,因为使用了值而不是ts对象,因为它们accuracy将直接匹配存储的时间:
p<-predict(v, n.ahead=8)
accuracy(p$fcst[[1]][,"fcst"],window(Canada[,1], start=c(1999,1)))
ME RMSE MAE MPE MAPE ACF1 Theil's U
Test set -0.1058358 0.8585455 0.7385238 -0.01114099 0.07694492 0.5655117 1.359761 …Run Code Online (Sandbox Code Playgroud) 我正在按照Rob Hyndman的教程进行初始化(添加剂).
计算初始值的步骤指定为:

我在Rob Hydman免费在线教科书中提供的数据集上手动(使用笔/纸)上面的步骤.我在前两个步骤后得到的值是:

我在"R"上使用了相同的数据集,但R中的季节性输出值却截然不同(截图如下)

不确定我做错了什么.任何帮助,将不胜感激.
我刚刚观察到的另一个有趣的事情是,(l(t))教科书中的初始级别是33.8,但在R输出中它是:48.24,这证明我在手动计算时遗漏了一些东西.
编辑:
以下是我如何计算平均移动平均值(基于此链接第2节中使用的公式.)
计算后我已经去趋势,意味着原始值 - 平滑值.
然后是季节性价值:这是
S1 =Average of Q1
S2 = Average of Q2
...
Run Code Online (Sandbox Code Playgroud)

我有一个具有季节性(每周)模式的重复时间序列,并且我想返回没有每周趋势的相同时间序列,以第一个值作为起点。
具体来说,第一个值仍然是 39.8,但第八个值也将是 39.8,而不是 17.1。如果只是重复前七个值,那么将会重复出现为期一周的负面趋势,而我希望根本没有趋势(因此第 7 个值 6.2 也会更高)。
有没有一种优雅的方法来做到这一点,尤其是对时间序列中的零值条目具有鲁棒性的方法(我有很多这样的条目)?
我们可以假设时间序列趋势是线性且恒定的(即不仅仅是分段线性)。
demand <- ts(
c(39.8, 33.5, 40.6, 23.6, 11.9, 12.3, 6.2, 17.1, 10.8, 18, 1, -10.7,
-10.4, -16.5, -5.6, -11.9, -4.7, -21.7, -33.4, -33.1, -39.2, -28.2,
-34.6, -27.4, -44.4, -56.1, -55.7, -61.8, -50.9, -57.2, -50.1),
frequency = 7
)
plot(demand)
Run Code Online (Sandbox Code Playgroud)
我正在尝试使用这个hts 包进行分层预测,以便一起预测水网的不同尺度,以便进行协调预测.水网络由流量计组成,流量计以正或负的方式测量流量,当我们对净流量进行聚集时,它给出了一个邻域的内部消耗.
这不是100%的等级敏感因为: - 流量计对于进入一个邻域的流量是积极的,但是在离开另一个邻域时是负的.
所以结构是这样的,简化了3个流量计和2个邻域:
所以我试图复制F2仪表,一个正面和一个负面,但输出效果不理想.我怎么处理这个?
m=structure(c(28, 20, 20, 17, 19, 22, 26, 38, 45, 45, 42, 38, 37,
37, 33, 29, 28, 31, 37, 40, 36, 31, 26, 23, 22, 15, 13, 11, 11,
12, 16, 22, 25, 24, 21, 19, 17, 16, 14, 13, 13, 14, 16, 17, 16,
13, 11, 8, 7, 7, 8, 8, 8, 8, 8, 9, 11, 11, 11, 12, 12, 12, 11,
11, 11, 10, 10, 9, 9, 9, 8, …Run Code Online (Sandbox Code Playgroud) 我已经有一个适合data[0:100]使用python 的时间序列数据(例如ex )的ARIMA(p,d,q)模型。我想forecast[100:120]使用此模型进行预测()。但是,考虑到我也拥有未来的真实数据(例如:)data[100:120],如何确保多步预测将我拥有的未来的真实数据考虑在内,而不是使用其预测的数据?
本质上,当进行预测时,我希望forecast[101]使用data[100]代替进行计算forecast[100]。
我想避免在每个时间步都用更新的“历史记录”重新拟合整个ARIMA模型。
我适合ARIMAX模型,如下所示:
train, test = data[:100], data[100:]
ext_train, ext_test = external[:100], external[100:]
model = ARIMA(train, order=(p, d, q), exog=ext_train)
model_fit = model.fit(displ=False)
Run Code Online (Sandbox Code Playgroud)
现在,以下代码使我可以预测整个数据集(包括测试)的值
forecast = model_fit.predict(end=len(data)-1, exog=external, dynamic=False)
Run Code Online (Sandbox Code Playgroud)
但是,在这种情况下,经过100步后,ARIMAX预测值会迅速收敛到长期平均值(如预期的那样,因为经过100步后,它仅使用预测值)。我想知道是否有办法提供“未来”的真实价值,以提供更好的在线预测。类似于以下内容:
forecast = model_fit.predict_fn(end = len(data)-1, exog=external, true=data, dynamic=False)
Run Code Online (Sandbox Code Playgroud)
我知道我总是可以通过以下方式不断调整ARIMAX模型
historical = train
historical_ext = ext_train
predictions = []
for t in range(len(test)):
model = ARIMA(historical, order=(p,d,q), exog=historical_ext)
model_fit = model.fit(disp=False)
output = model_fit.forecast(exog=ext_test[t])[0]
predictions.append(output)
observed …Run Code Online (Sandbox Code Playgroud) 我想预测在服务时间内进入商店的顾客数量。我有每小时的数据
因此,我认为我的时间序列实际上是有规律的,但在某种意义上是非典型的,因为我每天有 10 个小时,每周有 5 天。
我可以通过将非服务时间设置为零来对这个常规的 24/7 时间序列进行建模,但我发现这样做效率低下而且也不正确,因为时间并没有丢失。相反,它们并不存在。
使用旧的ts框架我能够明确指定
myTS <- ts(x, frequency = 10)
Run Code Online (Sandbox Code Playgroud)
然而,在新的tsibble/fable框架内这是不可能的。它检测每小时的数据,预计每天 24 小时,而不是 10 小时。每个后续函数都会提醒我隐含的时间间隙。手动覆盖interval-Attribute 有效:
> attr(ts, "interval") <- new_interval(hour = 10)
> has_gaps(ts)
# A tibble: 1 x 1
.gaps
<lgl>
1 FALSE
Run Code Online (Sandbox Code Playgroud)
但对建模没有影响:
model(ts,
snaive = SNAIVE(customers ~ lag("week")))
Run Code Online (Sandbox Code Playgroud)
我仍然收到相同的错误消息:
snaive [1] 遇到 1 个错误。数据包含隐式时间间隙。您应该检查数据并
tsibble::fill_gaps()根据需要使用将隐式间隙转换为显式缺失值。
任何帮助,将不胜感激。
我在这里遇到了用于批量预测的Joseph Owen 代码。我有一个包含接近 19k 行的数据集,但问题是即使应用了批量预测方法,我的代码仍然运行速度非常慢。
在进行实际预测之前,我需要评估使用 MAPE 作为评估标准的最佳模型。以下是相同的可行代码片段。我的问题是如何优化以下代码以使其在可接受的时间内运行(2 分钟以内)
fcnChooseETS <- function(Ts){
TsPositive <- ( min( as.numeric(Ts) ) > 0 ) # Check if all values of timeseries are positive or not
ModelsUsed <- c("ANN","MNN","ANA","AAN","AAA","MAA","MNM","MMN","MMM","MNA","MAN","MAM")
ModelsNonPositive <- c("ANN","ANA","AAN","AAA") # Multiplicative models cannot take non positive data
if( !TsPositive ){
ModelsUsed <- ModelsNonPositive
}
lAllModels <- lapply(ModelsUsed, function(M){
ets(Ts, damped = NULL, model = M)
})
vecResult <- sapply(lAllModels, function(M) accuracy(M)[2])
names(vecResult) <- ModelsUsed
min(vecResult)
}
fcnTrending …Run Code Online (Sandbox Code Playgroud) forecasting ×10
r ×9
time-series ×6
arima ×1
data.table ×1
fable-r ×1
graph ×1
hierarchical ×1
hierarchy ×1
holtwinters ×1
python ×1
trend ×1
tsibble ×1