-
Notifications
You must be signed in to change notification settings - Fork 6
/
README.Rmd
163 lines (115 loc) · 5.39 KB
/
README.Rmd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
---
output: github_document
---
<!-- README.md is generated from README.Rmd. Please edit that file -->
```{r, include = FALSE}
knitr::opts_chunk$set(
collapse = TRUE,
comment = "#>",
fig.path = "man/figures/README-",
out.width = "100%",
fig.align = "center",
fig.dim = c(7,4) * 1.4
)
```
# `rjd3nowcasting` <a href="https://rjdverse.github.io/rjd3nowcasting/"><img src="man/figures/logo.png" align="right" height="150" style="float:right; height:150px;"/></a>
<!-- badges: start -->
[![CRAN status](https://www.r-pkg.org/badges/version/rjd3nowcasting)](https://CRAN.R-project.org/package=rjd3nowcasting)
[![R-CMD-check](https://github.com/rjdverse/rjd3nowcasting/actions/workflows/R-CMD-check.yaml/badge.svg)](https://github.com/rjdverse/rjd3nowcasting/actions/workflows/R-CMD-check.yaml)
[![lint](https://github.com/rjdverse/rjd3nowcasting/actions/workflows/lint.yaml/badge.svg)](https://github.com/rjdverse/rjd3nowcasting/actions/workflows/lint.yaml)
[![GH Pages built](https://github.com/rjdverse/rjd3nowcasting/actions/workflows/pkgdown.yaml/badge.svg)](https://github.com/rjdverse/rjd3nowcasting/actions/workflows/pkgdown.yaml)
<!-- badges: end -->
## Overview
Nowcasting is often defined as the prediction of the present, the very near future and the very recent past.
rjd3nowcasting provides helps to operationalize the process of nowcasting. It can be used to specify and estimate Dynamic Factor Models.
Recent version of the package also includes news analysis. The way the package was conceived is inspired by the [GUI add-in](https://github.com/nbbrd/jdemetra-nowcasting) developed for JDemetra+ V2.
## Installation
Running rjd3 packages requires **Java 17 or higher**. How to set up such a configuration in R is explained [here](https://jdemetra-new-documentation.netlify.app/#Rconfig)
### Latest release
To get the current stable version (from the latest release):
- From GitHub:
```{r, echo = TRUE, eval = FALSE}
# install.packages("remotes")
remotes::install_github("rjdverse/rjd3toolkit@*release")
remotes::install_github("rjdverse/rjd3nowcasting@*release", build_vignettes = TRUE)
```
- From [r-universe](https://rjdverse.r-universe.dev/rjd3nowcasting):
```{r, echo = TRUE, eval = FALSE}
install.packages("rjd3nowcasting", repos = c("https://rjdverse.r-universe.dev", "https://cloud.r-project.org"))
```
### Development version
You can install the development version of **rjd3nowcasting** from [GitHub](https://github.com/) with:
```{r, echo = TRUE, eval = FALSE}
# install.packages("remotes")
remotes::install_github("rjdverse/rjd3nowcasting")
```
## Usage
```{r loading-library}
library("rjd3nowcasting")
```
Once the package is loaded, there are four steps to follow:
1. Import data
2. Create or update the model
3. Estimate the model
4. Get results
Detailed information concerning each step can be found in the vignette.
### 1. Input
```{r input}
data("data0", "data1")
data0_ts<-ts(data0[,-1], start=c(2012,1), frequency = 12)
data1_ts<-ts(data1[,-1], start=c(2012,1), frequency = 12)
```
### 2. Create or update the model
```{r model}
### Create a model from scratch
ns<-ncol(data0_ts)
types<-c("M","M","Q","YoY","YoY","M","M","YoY","YoY","YoY")
loadings1<-matrix(data=TRUE, ns, 2)
#loadings2<-matrix(data=c(rep(TRUE,ns+5),rep(FALSE,5)), ns, 2)
dfm0_init <- create_model(nfactors=2,
nlags=2,
factors_type = types,
factors_loading = loadings1,
var_init = "Unconditional")
### Update an existing model
est0 <- estimate_em(dfm0_init, data0_ts) # cfr. next step
dfm1_init <- est0$dfm # R object (list) to save from one time to another
# or, equivalently,
# dfm1_init <- create_model(nfactors=2,
# nlags=2,
# factors_type = types,
# factors_loading = loadings1,
# var_init = "Unconditional",
# var_coefficients = est0$dfm$var_coefficients,
# var_errors_variance = est0$dfm$var_errors_variance,
# measurement_coefficients = est0$dfm$measurement_coefficients,
# measurement_errors_variance = est0$dfm$measurement_errors_variance)
```
### 3. Estimate the model
```{r estimation}
est0 <- estimate_ml(dfm0_init, data0_ts)
# or est0<-estimate_em(dfm0_init, data0_ts)
# or est0<-estimate_pca(dfm0_init, data0_ts) # to be avoided unless you only have monthly data
```
### 4. Get results
#### Model and forecasts
```{r results}
rslt0 <- get_results(est0)
print(rslt0)
fcsts0 <- get_forecasts(est0, n_fcst = 3)
print(fcsts0)
plot(fcsts0, series_name = "FR_PVI")
# Note: impact of Covid-19 on the model estimate could be eliminated by treating affected indicators as missing data during this period. This has not been done in this example.
```
#### News analysis
```{r news}
news1 <- get_news(est0, data1_ts, target_series = "FR_PVI", n_fcst = 3)
news1$impacts
news1$forecasts
plot(news1)
```
## Package Maintenance and contributing
Any contribution is welcome and should be done through pull requests and/or issues.
pull requests should include **updated tests** and **updated documentation**. If functionality is changed, docstrings should be added or updated.
## Licensing
The code of this project is licensed under the [European Union Public Licence (EUPL)](https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12).