tests/testthat/test-mforecast.R

# A unit test for forecast.R
if(require(testthat))
{
  context("Test mforecast.R")

  mv_y <- ts(cbind(rnorm(120,0,3) + 1:120 + 20*sin(2*pi*(1:120)/12), rnorm(120,3,7) + 1:120 + 16*sin(2*pi*(1:120 + 6)/12)), frequency=12)
  mv_x <- ts(cbind(rnorm(120,0,8) + (1:120)/2 + 42*sin(2*pi*(1:120)/12), rnorm(120,3,7) + (1:120)*-1 + 20*sin(2*pi*(1:120 + 6)/12)), frequency=12)
  v_y <- ts(rnorm(120,0,8) + (1:120)/2 + 12*sin(2*pi*(1:120)/12), frequency = 12)
  v_x <- ts(rnorm(120,0,1) + (1:120)*(-1) + 28*sin(2*pi*(1:120)/12), frequency = 12)

  test_that("tests for is.mforecast()", {
    fit <- lm(mv_y ~ v_x)
    fcast <- forecast(fit, newdata=data.frame(v_x=30))
    expect_true(is.mforecast(fcast))
    fit <- lm(v_y ~ v_x)
    fcast <- forecast(fit, newdata=data.frame(v_x=30))
    expect_false(is.mforecast(fcast))
  })

  test_that("tests for mlmsplit()", {
    fit <- lm(mv_y ~ v_x)
    fit1 <- mlmsplit(fit, index = 1)
    fit2 <- mlmsplit(fit, index = 2)
    fit3 <- lm(mv_y[,1] ~ v_x)
    fit4 <- lm(mv_y[,2] ~ v_x)
    expect_identical(fit1$coefficients, fit3$coefficients)
    expect_identical(fit2$coefficients, fit4$coefficients)
    expect_identical(fit1$rank, fit3$rank)
    expect_identical(fit2$rank, fit4$rank)
    expect_equal(fit1$fitted.values, fit3$fitted.values)
    expect_equal(fit2$fitted.values, fit4$fitted.values)
    expect_error(mlmsplit(fit), "Must select lm")
  })

  test_that("tests for forecast.mlm()", {
    fit <- lm(mv_y ~ v_x)
    fcast <- forecast(fit, newdata=data.frame(v_x=30))
    fit2 <- lm(mv_y[,1] ~ v_x)
    fcast2 <- forecast(fit2, newdata=data.frame(v_x=30))
    expect_equal(fcast$forecast[[1]]$residuals, fcast2$residuals)
  })

  test_that("tests for forecast.mts()", {
    lungDeaths <- cbind(mdeaths, fdeaths)
    fcast_b <- forecast(lungDeaths)
    fcast_m <- forecast(mdeaths)
    fcast_f <- forecast(fdeaths)
    expect_true(all.equal(fcast_b$forecast[[1]]$mean, fcast_m$mean))
    expect_true(all.equal(fcast_b$forecast[[2]]$mean, fcast_f$mean))
  })

  test_that("tests for print.mforecast()", {
    fit <- lm(mv_y ~ v_x)
    fcast <- forecast(fit, newdata=data.frame(v_x=30))
    expect_output(print(fcast),"Series 1")
    expect_output(print(fcast),"Series 2")
  })

  test_that("tests for plot.mforecast()", {
    fit <- lm(mv_y ~ v_x)
    fcast <- forecast(fit, newdata=data.frame(v_x=30))
    plot(fcast)
  })
}
pli2016/forecast documentation built on May 25, 2019, 8:22 a.m.