Nothing
## ----include = FALSE----------------------------------------------------------
knitr::opts_chunk$set(
collapse = TRUE,
comment = "#>"
)
## ----load data----------------------------------------------------------------
library(mcgf)
data(wind)
head(wind$data)
wind$locations
## ----leap, message = F--------------------------------------------------------
# install.packages("lubridate")
library(lubridate)
ind_leap <- month(wind$data$time) == 2 & day(wind$data$time) == 29
wind_de <- wind$data[!ind_leap, ]
wind_de[, -1] <- sqrt(wind_de[, -1])
## ----split--------------------------------------------------------------------
is_train <- year(wind_de$time) <= 1970
wind_train <- wind_de[is_train, ]
wind_test <- wind_de[!is_train, ]
## ----annual, message = F------------------------------------------------------
# install.packages("dplyr")
library(dplyr)
# Estimate annual trend
avg_train <- tibble(
month = month(wind_train$time),
day = day(wind_train$time),
ws = rowMeans(wind_train[, -1])
)
trend_train <- avg_train %>%
group_by(month, day) %>%
summarise(trend = mean(ws))
# Subtract annual trend
trend_train2 <- left_join(avg_train, trend_train, by = c("month", "day"))$trend
wind_train[, -1] <- wind_train[, -1] - trend_train2
## ----station------------------------------------------------------------------
# Subtract station-wise mean
mean_train <- colMeans(wind_train[, -1])
wind_train[, -1] <- sweep(wind_train[, -1], 2, mean_train)
wind_trend <- list(
annual = as.data.frame(trend_train),
mean = mean_train
)
## ----test---------------------------------------------------------------------
avg_test <- tibble(
month = month(wind_test$time),
day = day(wind_test$time)
)
trend_train3 <-
left_join(avg_test, trend_train, by = c("month", "day"))$trend
wind_test[, -1] <- wind_test[, -1] - trend_train3
wind_test[, -1] <- sweep(wind_test[, -1], 2, mean_train)
## ----mcgf---------------------------------------------------------------------
wind_mcgf <- mcgf(wind_train[, -1], locations = wind$locations, longlat = TRUE)
wind_mcgf <- add_acfs(wind_mcgf, lag_max = 3)
wind_mcgf <- add_ccfs(wind_mcgf, lag_max = 3)
## ----acfs---------------------------------------------------------------------
acfs(wind_mcgf)
## ----ccfs---------------------------------------------------------------------
ccfs(wind_mcgf)
## ----spatial, message=F-------------------------------------------------------
fit_spatial <- fit_base(
wind_mcgf,
model = "spatial",
lag = 3,
par_init = c(nugget = 0.1, c = 0.001),
par_fixed = c(gamma = 0.5)
)
fit_spatial$fit
## -----------------------------------------------------------------------------
library(Rsolnp)
solnp2 <- function(pars, fun, lower, upper, ...) {
solnp(pars, fun, LB = lower, UB = upper, ...)
}
fit_spatial2 <- fit_base(
wind_mcgf,
model = "spatial",
lag = 3,
par_init = c(nugget = 0.1, c = 0.001),
par_fixed = c(gamma = 0.5),
optim_fn = "other",
other_optim_fn = "solnp2"
)
fit_spatial2$fit
## ----temporal-----------------------------------------------------------------
fit_temporal <- fit_base(
wind_mcgf,
model = "temporal",
lag = 3,
par_init = c(a = 0.5, alpha = 0.5)
)
fit_temporal$fit
## ----sep----------------------------------------------------------------------
wind_mcgf <- add_base(wind_mcgf,
fit_s = fit_spatial,
fit_t = fit_temporal,
sep = T
)
## -----------------------------------------------------------------------------
fit_sep <- fit_base(
wind_mcgf,
model = "sep",
lag = 3,
par_init = c(nugget = 0.1, c = 0.001, a = 0.5, alpha = 0.5),
par_fixed = c(gamma = 0.5)
)
fit_sep$fit
## ----fs-----------------------------------------------------------------------
par_sep <- c(fit_spatial$fit$par, fit_temporal$fit$par, gamma = 0.5)
fit_fs <-
fit_base(
wind_mcgf,
model = "fs",
lag = 3,
par_init = c(beta = 0),
par_fixed = par_sep
)
fit_fs$fit
## ----base---------------------------------------------------------------------
wind_mcgf <- add_base(wind_mcgf, fit_base = fit_fs, old = TRUE)
model(wind_mcgf, model = "base", old = TRUE)
## ----westerly-----------------------------------------------------------------
fit_lagr <- fit_lagr(wind_mcgf,
model = "lagr_tri",
par_init = c(v1 = 200, lambda = 0.1),
par_fixed = c(v2 = 0, k = 2)
)
fit_lagr$fit
## ----stat---------------------------------------------------------------------
wind_mcgf <- add_lagr(wind_mcgf, fit_lagr = fit_lagr)
model(wind_mcgf, old = TRUE)
## ----krige--------------------------------------------------------------------
krige_emp <- krige(
x = wind_mcgf,
newdata = wind_test[, -1],
model = "empirical",
interval = TRUE
)
krige_base <- krige(
x = wind_mcgf,
newdata = wind_test[, -1],
model = "base",
interval = TRUE
)
krige_stat <- krige(
x = wind_mcgf,
newdata = wind_test[, -1],
model = "all",
interval = TRUE
)
## ----rmse---------------------------------------------------------------------
# RMSE
rmse_emp <- sqrt(colMeans((wind_test[, -1] - krige_emp$fit)^2, na.rm = T))
rmse_base <- sqrt(colMeans((wind_test[, -1] - krige_base$fit)^2, na.rm = T))
rmse_stat <- sqrt(colMeans((wind_test[, -1] - krige_stat$fit)^2, na.rm = T))
rmse <- c(
"Empirical" = mean(rmse_emp),
"Base" = mean(rmse_base),
"STAT" = mean(rmse_stat)
)
rmse
## ----MAE----------------------------------------------------------------------
mae_emp <- colMeans(abs(wind_test[, -1] - krige_emp$fit), na.rm = T)
mae_base <- colMeans(abs(wind_test[, -1] - krige_base$fit), na.rm = T)
mae_stat <- colMeans(abs(wind_test[, -1] - krige_stat$fit), na.rm = T)
mae <- c(
"Empirical" = mean(mae_emp),
"Base" = mean(mae_base),
"STAT" = mean(mae_stat)
)
mae
## ----popi---------------------------------------------------------------------
# POPI
popi_emp <- colMeans(
wind_test[, -1] < krige_emp$lower | wind_test[, -1] > krige_emp$upper,
na.rm = T
)
popi_base <- colMeans(
wind_test[, -1] < krige_base$lower | wind_test[, -1] > krige_base$upper,
na.rm = T
)
popi_stat <- colMeans(
wind_test[, -1] < krige_stat$lower | wind_test[, -1] > krige_stat$upper,
na.rm = T
)
popi <- c(
"Empirical" = mean(popi_emp),
"Base" = mean(popi_base),
"STAT" = mean(popi_stat)
)
popi
## ----krige_new----------------------------------------------------------------
krige_stat_new <- krige_new(
x = wind_mcgf,
newdata = wind_test[, -1],
locations_new = c(-9, 52),
model = "all",
interval = TRUE
)
head(krige_stat_new$fit)
## ----krige_plot, fig.width=6, fig.height = 4----------------------------------
plot.ts(krige_stat_new$fit[1:100, 12], ylab = "Wind Speed for New_1")
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.