rjdverse / rjdemetra

R interface to JDemetra+ v 2.x
https://rjdverse.github.io/rjdemetra
52 stars 16 forks source link

last msr not exportable for monthly ts #122

Closed AQLT closed 7 months ago

AQLT commented 12 months ago
library(RJDemetra)
y_month <- ipi_c_eu[,"FR"]
sa_m <- x13(y_month, 
            userdefined = c("diagnostics.msr-global",
                            sprintf("diagnostics.msr(%i)", 1:12)))
c(sa_m$user_defined)
#> $`diagnostics.msr-global`
#> [1] 4.224309
#> 
#> $`diagnostics.msr(1)`
#> [1] 6.918248
#> 
#> $`diagnostics.msr(2)`
#> [1] 4.679206
#> 
#> $`diagnostics.msr(3)`
#> [1] 4.351482
#> 
#> $`diagnostics.msr(4)`
#> [1] 5.808313
#> 
#> $`diagnostics.msr(5)`
#> [1] 4.446801
#> 
#> $`diagnostics.msr(6)`
#> [1] 3.175827
#> 
#> $`diagnostics.msr(7)`
#> [1] 5.102764
#> 
#> $`diagnostics.msr(8)`
#> [1] 2.756466
#> 
#> $`diagnostics.msr(9)`
#> [1] 4.216562
#> 
#> $`diagnostics.msr(10)`
#> [1] 4.750469
#> 
#> $`diagnostics.msr(11)`
#> [1] 5.088831
#> 
#> $`diagnostics.msr(12)`
#> NULL

A workaround is to use the following code:

extract_msr <- function(x, i = 1:12){
    jmodel <- suppressWarnings(jx13(get_ts(x), x13_spec(x)))
    jres <- jmodel$result@internal$getResults()
    jres <- new(Class = "X13_java", internal = jres)
    res <- sapply(i, function(i_){
        RJDemetra:::result(jres,
                           sprintf("msr(%i)", i_))
    })
    names(res) <- sprintf("msr(%i)", i)
    res
}
extract_msr(sa_m)
#>   msr(1)   msr(2)   msr(3)   msr(4)   msr(5)   msr(6)   msr(7)   msr(8) 
#> 6.918248 4.679206 4.351482 5.808313 4.446801 3.175827 5.102764 2.756466 
#>   msr(9)  msr(10)  msr(11)  msr(12) 
#> 4.216562 4.750469 5.088831 2.953120

There is no problem with quarterly or bi-annual time series:

y_qtr <- rjd3toolkit::aggregate(ipi_c_eu[,"FR"], nfreq = 4)
sa_q <- x13(y_qtr, 
            userdefined = c("diagnostics.msr-global",
                            sprintf("diagnostics.msr(%i)", 1:4)))
c(sa_q$user_defined)
#> $`diagnostics.msr-global`
#> [1] 3.550392
#> 
#> $`diagnostics.msr(1)`
#> [1] 4.589953
#> 
#> $`diagnostics.msr(2)`
#> [1] 3.69637
#> 
#> $`diagnostics.msr(3)`
#> [1] 4.091684
#> 
#> $`diagnostics.msr(4)`
#> [1] 2.381584

y_ba <- rjd3toolkit::aggregate(ipi_c_eu[,"FR"], nfreq = 2)
sa_ba <- x13(y_ba, 
            userdefined = c("diagnostics.msr-global",
                            sprintf("diagnostics.msr(%i)", 1:2)))
c(sa_ba$user_defined)
#> $`diagnostics.msr-global`
#> [1] 5.200167
#> 
#> $`diagnostics.msr(1)`
#> [1] 5.268673
#> 
#> $`diagnostics.msr(2)`
#> [1] 5.130636