R 中的时间序列交叉验证:使用 csv() 和 tslm()-模型

2024-01-11

我目前正在尝试使用时间序列交叉验证来评估 tslm 模型。我想使用固定模型(不进行参数重新估计)来查看去年评估期的 1 到 3 步预测。

我很难得到tsCV and tslm从预测库中可以很好地协同工作。我缺少什么?

library(forecast)
library(ggfortify)

AirPassengers_train <- head(AirPassengers, 100)
AirPassengers_test  <- tail(AirPassengers, 44)

## Holdout Evaluation
n_train <- length(AirPassengers_train)
n_test  <- length(AirPassengers_test)
pred_train <- ts(rnorm(n_train))
pred_test  <- ts(rnorm(n_test))

fit <- tslm(AirPassengers_train ~ trend + pred_train)

forecast(fit, newdata = data.frame(pred_train = pred_test)) %>% 
  accuracy(AirPassengers_test)
#>                        ME     RMSE      MAE       MPE     MAPE     MASE
#> Training set 1.135819e-15 30.03715 23.41818 -1.304311 10.89785 0.798141
#> Test set     3.681350e+01 76.39219 55.35298  6.513998 11.96379 1.886546
#>                   ACF1 Theil's U
#> Training set 0.6997632        NA
#> Test set     0.7287923  1.412804


## tsCV Evaluation
fc_reg <- function(x) forecast(x, newdata = data.frame(pred_train = pred_test),
                               h = h, model = fit)

tsCV(AirPassengers_test, fc_reg, h = 1)
#>      Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
#> 1957                  NA  NA  NA  NA  NA  NA  NA  NA
#> 1958  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA
#> 1959  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA
#> 1960  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA


forecast(AirPassengers_test, newdata = data.frame(pred_train = pred_test),
         h = 1, model = fit)
#> Error in forecast.ts(AirPassengers_test, newdata = data.frame(pred_train = pred_test),
#> : Unknown model class

我有一种感觉,那就是https://gist.github.com/robjhyndman/d9eb5568a78dbc79f7acc49e22553e96 https://gist.github.com/robjhyndman/d9eb5568a78dbc79f7acc49e22553e96是相关的。我如何将其应用到上面的场景中?


对于时间序列交叉验证,您应该为每个训练集拟合一个单独的模型,而不是传递现有模型。对于预测变量,该函数需要能够在拟合每个模型时获取相关元素,并在生成预测时获取其他元素。

以下将起作用。

fc <- function(y, h, xreg)
{
  if(NROW(xreg) < length(y) + h)
    stop("Not enough xreg data for forecasting")
  X <- xreg[seq_along(y),]
  fit <- tslm(y ~ X)
  X <- xreg[length(y)+seq(h),]
  forecast(fit, newdata=X)
}

# Predictors of the same length as the data
# and with the same time series characteristics.    
pred <- ts(rnorm(length(AirPassengers)), start=start(AirPassengers),
           frequency=frequency(AirPassengers))

# Now pass the whole time series and the corresponding predictors 
tsCV(AirPassengers, fc, xreg=pred)

如果您有多个预测变量,那么xreg应该是一个矩阵。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

R 中的时间序列交叉验证:使用 csv() 和 tslm()-模型 的相关文章

随机推荐

  • Numpy 安装工具链损坏:无法链接简单的 C 程序

    System Windows 10 Python 3 7 Numpy 1 15 1 VS 2017 我不认为这是重复的 因为以下拟议的决议已失败 对于自制软件 不适用 Numpy 安装运行时错误 工具链损坏 无法链接简单的 C 程序 htt
  • JavaScript setTimeOut 似乎没有像我预期的那样工作

    这是一个简单的 JavaScript 文件 我在 Chrome localhost 下运行 所发生的情况是 DIV 背景颜色没有设置为绿色 然后设置为红色 而是直接设置为红色 第一个 setTimeout 似乎被忽略了
  • iOS Safari/Chrome 不会向上滚动以在无线电输入上显示验证错误消息

    我正在为需要移动设备友好的客户设置一份调查问卷 当表单提交 验证并且问题未得到回答时 它会滚动到第一个无效字段 无论是文本输入还是无线电输入 这仅适用于桌面浏览器和 Android 在 iOS Safari Chrome 上 文本输入按应有
  • mat-menu 穿透“cdk 覆盖雾”

    This 堆栈闪电战 https stackblitz com edit angular txgxyt file styles css SB 显示了问题 CSS类 WHYYYYY显示了我面临的 两个 问题 为了使垫菜单在悬停时打开 我需要设
  • Linux 共享内存:shmget() 与 mmap()?

    In this https stackoverflow com questions 5656530 how to use shared memory with linux in c建议OP使用线程mmap 代替shmget 在 Linux
  • DynamoDB 1 个大表还是多个小表?

    我目前面临一些有关数据库设计的问题 目前我正在开发一个 API 它可以让用户执行以下操作 创建帐户 1 个用户拥有 1 个帐户 创建配置文件 1 个帐户拥有 1 n 个配置文件 让个人资料上传 2 种类型的项目 1 个个人资料拥有 0 n
  • 关于 c++11 中的 std::result_of

    据我所知 可能的实施std result of is template
  • 如何在 jquery 中使元素既可拖动又可调整大小?

    如何在 jquery 中使元素既可拖动又可调整大小 可拖动和可调整大小都支持链接模式 因此您可以在一行中简化代码 假设你有一个div 并且该div的id是你想要使其可拖动和可调整大小的标题 然后jquery将像这样工作 document r
  • MonoTouch:从 ALAssetsLibrary.AssetForUrl 中获取图像

    在 MonoTouch 中 我正在将相机中的图像放入相册中 ALAssetsLibrary library new ALAssetsLibrary library WriteImageToSavedPhotosAlbum photo CGI
  • 使用 ORM 时跟踪数据库字段的更改

    我想跟踪对特定表中每一列所做的更改 我考虑将更改存储在另一个包含以下列的表中 id field and data where field 字符串值 是目标表中已更改的列data是该字段的新值 在返回数据集时 我想到从目标表中检索原始数据 从
  • Laravel 阻止用户访问其他用户资源 **url

    我在 url 中传递特定资源 例如 https www example com https www example com 公司ID 在控制器中我可以通过以下方式访问资源 public function index companyID Co
  • 在flutter中刷新令牌

    我正在开发一个金融项目 Flutter 其中从后端获取身份验证令牌经常过期 我怎样才能保留token只要过期用户正在使用该应用程序 我建议您可以以简单的方式处理这些事情 例如在获取数据时 如果令牌过期 您会收到 401 未经授权的异常 您可
  • 修改 iframe.src 而不进入历史对象

    我的网页中有一个 iframe 我通过 javascript 修改 src 属性 如下所示 document getElementById myiframe src http vimeo com videoid1 document getE
  • Installshield 无提示卸载在命令行中不起作用

    我们有一个 2006 年的旧应用程序 我们想使用组策略在命令行卸载 但我无法进行静默卸载 这有效 当然我需要点击下一步来卸载 C App Setup exe uninst 但事实并非如此 我看到沙漏了几秒钟 但该应用程序并未卸载 C App
  • 是否可以将 JFrame 置于前面但不获得焦点?

    我正在编写一个 Java 应用程序 Swing GUI 它会定期弹出 JFrame 是否有可能以某种方式将窗口置于前面 foo setAlwaysOnTop true 会更好 但是without有焦点吗 有些人在打字时时不时地将眼睛从屏幕上
  • 可扩展的非矩形 CSS 按钮?

    在网上进行了大量研究后 我发现了很多使用 CSS 设计提交按钮样式的建议和示例 但它们都生成了矩形按钮 我想制作一个非矩形按钮 它会自动调整自身大小以适合按钮图例 具体来说 我希望按钮看起来像这样 加上或减去圆角 有什么建议么 完全可以使用
  • 为什么我会收到“由于保护级别而无法访问”错误?

    我收到此错误 由于其保护级别 CTest A A 无法访问 编译此代码时 public class A private A public class B A public void SayHello Console WriteLine He
  • 如何子类化 QSpinBox 以便它可以将 int64 值作为最大值和最小值

    我需要实施一个QSpinBox控制应该能够处理int64值作为其最小值和最大值 目前的实现仅支持int32价值观 一天结束我的QSpinBox应该接受之间的任何值 9223372036854775807 和 9223372036854775
  • GSON disableHtmlEscaping - 为什么 GSON 默认情况下会转义 HTML?

    我注意到 GSON HTML 转义 lt and gt 字符 这可以通过使用禁用disableHtmlEscaping 构建器配置方法 但我的问题是 为什么 GSON 默认情况下会进行 HTML 转义 不进行 HTML 转义有哪些风险 Th
  • R 中的时间序列交叉验证:使用 csv() 和 tslm()-模型

    我目前正在尝试使用时间序列交叉验证来评估 tslm 模型 我想使用固定模型 不进行参数重新估计 来查看去年评估期的 1 到 3 步预测 我很难得到tsCV and tslm从预测库中可以很好地协同工作 我缺少什么 library forec