The hardware and bandwidth for this mirror is donated by dogado GmbH, the Webhosting and Full Service-Cloud Provider. Check out our Wordpress Tutorial.
If you wish to report a bug, or if you are interested in having us mirror your free-software or open-source project, please feel free to contact us at mirror[@]dogado.de.
The FARS
package provides a comprehensive framework for
modeling and forecasting economic scenarios based on the Multilevel
Dynamic Factor Model (MLDFM).
# Install FARS from CRAN
#install.packages("FARS")
# Install FARS from GitHub
#install.packages("devtools")
#devtools::install_github("GPEBellocca/FARS")
library(FARS)
##
## Attaching package: 'FARS'
## The following object is masked from 'package:stats':
##
## density
##
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
##
## as.Date, as.Date.numeric
library(readxl)
# Input dep variable
data_input_path <- system.file("extdata", "Data_IMF.xlsx", package = "FARS")
data_input <- read_excel(data_input_path, sheet = "data")
data_ts <- ts(data_input[, -1], frequency = 4)
data_diff <- diff(log(data_ts)) * 400
dep_variable <- data_diff[, 'United States', drop = FALSE]
dep_variable <- dep_variable[2:60]
# Input data
data_df_path <- system.file("extdata", "DataBase.xlsx", package = "FARS")
data_df <- openxlsx::read.xlsx(data_df_path, sheet = "fulldata", cols = 2:625)
data_df <- data_df[,1:519]
data <- as.matrix(data_df)
dimnames(data) <- NULL
# Generate dates
quarters <- as.yearqtr(seq(from = as.yearqtr("2005 Q2"), by = 0.25, length.out = 59))
dates <- as.Date(quarters)
This section demonstrates how to use the mldfm function to fit the Multilevel Dynamic Factor Model using the input data.
# MULTI-LEVEL DYNAMIC FACTOR MODEL
# 3 blocks
n_blocks <- 3 # 63 248 208
block_ind <- c(63,311,519)
r <- c(1,0,1,0,1,1,1)
mldfm_result <- mldfm(data,
r=r,
blocks = n_blocks,
block_ind = block_ind ,
tol = 1e-6,
max_iter = 1000,
method = 0)
## Summary of Multilevel Dynamic Factor Model (MLDFM)
## ===================================================
## Number of observations: 59
## Total number of factors: 5
## Number of nodes: 5
## Initialization method: CCA
## Number of iterations to converge: 46
##
## Factors per node:
## - 1-2-3 : 1 factor(s)
## - 1-3 : 1 factor(s)
## - 1 : 1 factor(s)
## - 2 : 1 factor(s)
## - 3 : 1 factor(s)
##
## Residual sum of squares (RSS): 15464.0395
## Average RSS per observation: 262.1024
# Subsampling
n_samples <- 100
sample_size <- 0.9
mldfm_subsampling_result <- mldfm_subsampling(data,
r=r,
blocks = n_blocks,
block_ind = block_ind ,
tol = 1e-6,
max_iter = 1000,
method = 0,
n_samples = n_samples,
sample_size = sample_size,
seed = 123)
## Generating 100 subsamples...
##
## Subsampling completed.
## Number of subsamples generated: 100
# Create stressed scenario
scenario <- create_scenario(model = mldfm_result,
subsample = mldfm_subsampling_result,
data = data,
block_ind = block_ind,
alpha=0.95)
## Constructing scenario using 100 subsamples and alpha = 0.95...
## Scenario construction completed.
# Compute Quantiles
fars_result <- compute_fars(dep_variable,
mldfm_result$Factors,
scenario = scenario,
h = 1,
edge = 0.05,
min = TRUE)
## Running Factor-Augmented Quantile Regressions (FARS)...
## Factor-Augmented Quantile Regressions (FARS)
## ===========================================
## Forecasted quantiles:
## - Time periods: 59
## - Quantile levels: 0.05 0.25 0.50 0.75 0.95
##
## Stressed scenario quantiles: YES
# Density
density <- nl_density(fars_result$Quantiles,
levels = fars_result$Levels,
est_points = 512,
random_samples = 100000,
seed = 123)
## Estimating skew-t densities from forecasted quantiles...
## FARS Density
## ====================
## Time observations : 59
## Estimation points : 512
## Random samples : 100000
## Range of x values : [ -30 , 10 ]
# Scenario Density
scenario_density <- nl_density(fars_result$Scenario_Quantiles,
levels = fars_result$Levels,
est_points = 512,
random_samples = 100000,
seed = 123)
## Estimating skew-t densities from forecasted quantiles...
## FARS Density
## ====================
## Time observations : 59
## Estimation points : 512
## Random samples : 100000
## Range of x values : [ -30 , 10 ]
# Final GaR and GiS plot
library(ggplot2)
time <- dates[-1]
MLGaRGiS <- data.frame(
time = time,
dep_variable = as.vector(dep_variable[2:59]),
GaR.05 = as.vector(GaR0.05[1:58]),
GaR.95 = as.vector(GaR0.95[1:58]),
GiS.05 = as.vector(GiS0.05[1:58]),
GiS.25 = as.vector(GiS0.25[1:58]),
GiS.75 = as.vector(GiS0.75[1:58]),
GiS.95 = as.vector(GiS0.95[1:58])
)
p <- ggplot(MLGaRGiS,aes(x=time,y=dep_variable)) +
geom_line() + theme_bw()+
geom_ribbon(aes(ymin=GiS.05,ymax=GiS.95), alpha=0.1, fill="red") +
geom_ribbon(aes(ymin=GiS.25,ymax=GiS.75), alpha=0.1, fill="grey10") +
geom_line(aes(x=time, GaR.05), linewidth=0.1, colour="black", linetype="dashed") +
geom_line(aes(x=time, GaR.95), linewidth=0.1, colour="black", linetype="dashed") +
scale_y_continuous("Growth") +
scale_x_date(date_labels = "%Y", date_breaks = "2 years") +
theme(axis.text.x = element_text(angle = 90))
fig <- plotly::ggplotly(p)
fig
These binaries (installable software) and packages are in development.
They may not be fully stable and should be used with caution. We make no claims about them.
Health stats visible at Monitor.