【问题标题】:Forecast() function in R: how it works?R 中的 Forecast() 函数:它是如何工作的?
【发布时间】:2021-07-21 21:10:09
【问题描述】:

我对 Forecast 包中的 forecast () 函数有疑问。 在给定 ARIMAX 模型(使用xreg)的情况下,我正在使用此函数来预测股票的收盘价。 疑问是:在预测时,t时间的收盘价取决于t-1时间的外部回归量还是它(收盘价)价格)取决于时间 t 的外部回归器? 换句话说,今天我仍然不知道高价(即),所以今天的收盘价不能取决于今天的高价,而是取决于昨天的高价。 这个函数是这样工作还是以不同的方式工作?

我希望我已经清楚了。谢谢!

【问题讨论】:

    标签: r forecasting


    【解决方案1】:

    你可以设置函数像这样工作是的!虽然需要采取一些步骤:

    1. 滞后回归器,因为您希望昨天的值解释今天的值
    2. 没有回归器的干净值(时间序列的第一个值没有回归器,因为它将用于 ts 的第二个值)
    3. 为预测构建回归器
    4. 建模和预测

    下面我从几个链接中讨论了一些事情,这些链接显示了它是如何完成的,因此应该解释在你的案例中使用回归器的预测如何与预测一起工作:

    library(quantmod)
    library(forecast)
    library(dplyr)
    
    # get some finance data to play with
    quantmod::getSymbols("AAPL", from = '2017-01-01',
                         to = "2018-03-01",warnings = FALSE,
                         auto.assign = TRUE)
    
    # I prefer working with df and then convert to ts objects later
    new_AAPL <- as.data.frame(AAPL)%>%
        # select close values and lag high values
        dplyr::transmute(AAPL.Close,
                         AAPL.High = lag(AAPL.High)) %>%
        # keep only complete values
        dplyr::filter(across(everything(), ~!is.na(.x)))
    
    # set up new time series, regressor (watch the starting points)
    AAPL.Close <- ts(new_AAPL$AAPL.Close, start = as.Date("2017-01-04"), frequency = 365)
    AAPL.High <- ts(new_AAPL$AAPL.High, start = as.Date("2017-01-04"), frequency = 365)
    
    # set up the future regressor (last value of original high values
    AAPL.futureg <- ts(as.data.frame(AAPL)$AAPL.High[291], start = as.Date("2018-03-02"), frequency = 365)
    
    # I will use a arima model here
    modArima <- forecast::auto.arima(AAPL.Close, xreg=AAPL.High)
    
    # forecast with regressor
    forecast::forecast(modArima, h = 1, xreg = AAPL.futureg)
    

    我从这里得到信息:

    https://www.codingfinance.com/post/2018-03-27-download-price/

    https://stats.stackexchange.com/questions/41070/how-to-setup-xreg-argument-in-auto-arima-in-r

    【讨论】:

    • @GDC 如果这就是您要找的东西,请考虑接受我的回答,让其他人知道它已经解决...stackoverflow.com/help/someone-answers
    • 感谢您的回答。我只是需要澄清一些事情。我落后于 xreg 删除最新值结束插入一行零作为第一行(最旧的)。所以假设我有 640 个观察值,我删除了第 640 个并在第 1 点添加了一个新行。但是,结果中发生了一些奇怪的事情。事实上,当我不滞后 xreg 时的预测结果是在时间 1 500 美元(即),但是当我在时间 1 滞后 xreg 时,我有一个不同的值,但在时间 2 我有 500 美元(预测只是移动了大约从 t=1 到 t=2 的 1 个位置,没有任何变化)。你能帮助我吗?有办法在 R 中做到这一点吗?
    • @GDC 滞后后,您必须删除第一个(也就是最早或最旧的)观察,因为没有可用的 xreg 值(它转到第二个,也就是第二个最早的观察)。将 xreg 中的 generate NA 替换为 0 会“混淆”您的模型(因为您在使用 0 估算时提供了错误信息)。我不知道你的数据,但听起来你确实滞后了,没有删除 xreg 的最后一个(又名最新或 jungest)值,这是在未来(考虑模型),因此只能在 forecast() 函数中使用
    • @GDC 可能会尝试重现我的代码,然后用您的数据替换输入 (AAPL),仅使用一个 xreg 变量(相应地调整开始日期等)
    • 谢谢。看来我通过使用shift() 函数解决了问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-28
    相关资源
    最近更新 更多