Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

adapt example in readme #19

Merged
merged 6 commits into from
Jun 21, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
94 changes: 60 additions & 34 deletions README.Rmd
Original file line number Diff line number Diff line change
Expand Up @@ -31,9 +31,8 @@ knitr::opts_chunk$set(

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. This first version can be used to specify and estimate dynamic factor models.
A later version is expected to include the concept of "news" similar to the [Nowcasting plugin](https://github.com/nbbrd/jdemetra-nowcasting/tree/master)
for the Graphical User Interface of JDemetra+ v2.
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

Expand All @@ -57,60 +56,87 @@ remotes::install_github("rjdverse/rjd3nowcasting", build_vignettes = TRUE)

## Usage

```{r, echo = TRUE, eval = TRUE}
``` r
library("rjd3nowcasting")
```

Once the package is loaded, there are four steps to follow:

### Input
1. Import data
2. Create or update the model
3. Estimate the model
4. Get results

```{r, echo = TRUE, eval = TRUE}
Detailed information concerning each step can be found in the vignette.

### 1. Input

``` r
set.seed(100)
data <- ts(
data0 <- stats::ts(
data = matrix(rnorm(500), 100, 5),
frequency = 12,
start = c(2010, 1)
)
data[100, 1] <- data[99:100, 2] <- data[(1:100)[-seq(3, 100, 3)], 5] <- NA
```

data0[100, 1] <- data0[99:100, 2] <- data0[(1:100)[-seq(3, 100, 3)], 5] <- NA

### Model

```{r, echo = TRUE, eval = TRUE}
dfm_model <- model(
nfactors = 2,
nlags = 2,
factors_type = c("M", "M", "YoY", "M", "Q"),
factors_loading = matrix(data = TRUE, 5, 2),
var_init = "Unconditional"
data1 <- stats::ts(
data = rbind(data0, c(NA, NA, 1, 1, NA)),
frequency = 12,
start = c(2010, 1)
)
data1[100,1] <- data1[99,2] <- 1
```

### 2. Create or update the model

``` r
### Create model from scratch
dfm0 <- create_model(nfactors=2,
nlags=2,
factors_type = c("M", "M", "YoY", "M", "Q"),
factors_loading = matrix(data = TRUE, 5, 2),
var_init = "Unconditional")

### Update model
est0 <- estimate_em(dfm0, data0) # cfr. next step

dfm1 <- est0$dfm # R object (list) to potentially save from one time to another
# or, equivalently,
dfm1 <- create_model(nfactors=2,
nlags=2,
factors_type = c("M", "M", "YoY", "M", "Q"),
factors_loading = matrix(data = TRUE, 5, 2),
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)
```

### Estimation
### 3. Estimate the model

```{r, echo = TRUE, eval = TRUE}
rslt_ml <- estimate_ml(dfm_model, data)
# or rslt_em<-estimate_em(dfm_model, data)
# or rslt_pca<-estimate_pca(dfm_model, data)
``` r
est1 <- estimate_ml(dfm1, data1)
# or est1<-estimate_em(dfm1, data1)
# or est1<-estimate_pca(dfm1, data1)
```

### 4. Get results

### Results
``` r
rslt1 <- get_results(est1)
print(rslt1)
fcst1 <- get_forecasts(est1, n_fcst = 2)
print(fcst1)
plot(fcst1)

```{r, echo = TRUE, eval = TRUE}
fcst <- get_forecasts(rslt_ml, nf = 2, forecasts_only = TRUE)
params <- get_parameters(rslt_ml)
factors <- get_factors(rslt_ml)
news1 <- get_news(est0, data1, target_series = "Series 1", n_fcst = 2)
print(news1)
plot(news1)
# ...

print(rslt_ml)
summary(rslt_ml)
plot(rslt_ml)
```


## Package Maintenance and contributing

Any contribution is welcome and should be done through pull requests and/or issues.
Expand Down
117 changes: 55 additions & 62 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,10 +22,7 @@ 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. It also includes the
concept of “news” similar to the [Nowcasting
plugin](https://github.com/nbbrd/jdemetra-nowcasting/tree/master) for
the Graphical User Interface of JDemetra+ v2.
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

Expand Down Expand Up @@ -54,87 +51,83 @@ remotes::install_github("rjdverse/rjd3nowcasting", build_vignettes = TRUE)
library("rjd3nowcasting")
```

### Input
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
set.seed(100)
data <- ts(
data0 <- stats::ts(
data = matrix(rnorm(500), 100, 5),
frequency = 12,
start = c(2010, 1)
)
data[100, 1] <- data[99:100, 2] <- data[(1:100)[-seq(3, 100, 3)], 5] <- NA
```

### Model
data0[100, 1] <- data0[99:100, 2] <- data0[(1:100)[-seq(3, 100, 3)], 5] <- NA

``` r
dfm_model <- model(
nfactors = 2,
nlags = 2,
factors_type = c("M", "M", "YoY", "M", "Q"),
factors_loading = matrix(data = TRUE, 5, 2),
var_init = "Unconditional"
data1 <- stats::ts(
data = rbind(data0, c(NA, NA, 1, 1, NA)),
frequency = 12,
start = c(2010, 1)
)
data1[100,1] <- data1[99,2] <- 1
```

### Estimation
### 2. Create or update the model

``` r
rslt_ml <- estimate_ml(dfm_model, data)
# or rslt_em<-estimate_em(dfm_model, data)
# or rslt_pca<-estimate_pca(dfm_model, data)
### Create model from scratch
dfm0 <- create_model(nfactors=2,
nlags=2,
factors_type = c("M", "M", "YoY", "M", "Q"),
factors_loading = matrix(data = TRUE, 5, 2),
var_init = "Unconditional")

### Update model
est0 <- estimate_em(dfm0, data0) # cfr. next step

dfm1 <- est0$dfm # R object (list) to potentially save from one time to another
# or, equivalently,
dfm1 <- create_model(nfactors=2,
nlags=2,
factors_type = c("M", "M", "YoY", "M", "Q"),
factors_loading = matrix(data = TRUE, 5, 2),
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)
```

### Results
### 3. Estimate the model

``` r
fcst <- get_forecasts(rslt_ml, nf = 2, forecasts_only = TRUE)
params <- get_parameters(rslt_ml)
factors <- get_factors(rslt_ml)
# ...

print(rslt_ml)
#> Measurement:
#> Sample mean Sample Stdev Coeff. of normalized factor F1
#> Series 1 0.01480 1.01376 0.11234
#> Series 2 0.01656 0.79045 -0.07066
#> Series 3 0.01279 1.03407 0.00171
#> Series 4 -0.08325 1.07544 -0.00624
#> Series 5 -0.21205 1.06909 -0.00302
#> Coeff. of normalized factor F2 Idiosyncratic variance
#> Series 1 0.55341 0.41091
#> Series 2 -0.06925 0.93488
#> Series 3 0.04849 0.98831
#> Series 4 0.03340 0.99792
#> Series 5 -0.33934 0.00000
#>
#> State:
#> VAR coefficients:
#> F1[-1] F2[-1] F1[-2] F2[-2]
#> F1 1.44836 -0.97181 -0.76117 1.23216
#> F2 -0.02442 -0.59011 -0.02834 -0.09459
#>
#> Innovative variance:
#> F1 F2
#> F1 1 -1
#> F2 -1 1
est1 <- estimate_ml(dfm1, data1)
# or est1<-estimate_em(dfm1, data1)
# or est1<-estimate_pca(dfm1, data1)
```

``` r
summary(rslt_ml)
#> Nowcasted values (only):
#> Series 1 Series 2 Series 3 Series 4 Series 5
#> Mar 2018 NA 0.3198988965 NA NA NA
#> Apr 2018 0.1827459 0.0001724063 NA NA -2.427725
```
### 4. Get results

``` r
plot(rslt_ml)
rslt1 <- get_results(est1)
print(rslt1)
fcst1 <- get_forecasts(est1, n_fcst = 2)
print(fcst1)
plot(fcst1)

news1 <- get_news(est0, data1, target_series = "Series 1", n_fcst = 2)
print(news1)
plot(news1)
# ...
```

<img src="man/figures/README-unnamed-chunk-8-1.png" width="100%" style="display: block; margin: auto;" />

## Package Maintenance and contributing

Any contribution is welcome and should be done through pull requests
Expand Down
Loading