spsanderson / healthyR.ts

A time-series companion package to healthyR
https://www.spsanderson.com/healthyR.ts/
Other
18 stars 3 forks source link

double differencing of log #488

Closed spsanderson closed 11 months ago

spsanderson commented 11 months ago

Function:

util_doubledifflog_ts <- function(.time_series){

  time_series <- .time_series
  f <- stats::frequency(time_series)
  min_x <- min(time_series)

  # Diff of Log
  diff_order <- 1
  while (
    (min_x > 0) & 
    (ts_adf_test(diff(diff(log(time_series), diff_order)))$p_value >= 0.05 & 
     (diff_order <= f))
  ){
    diff_order <- diff_order + 1
  }

  if (diff_order <= f){
    rlang::inform(
      message = paste0("Double Differencing of order "
                       , diff_order
                       , " made the time series stationary"),
      use_cli_format = TRUE
    )
    # Return
    stationary_ts <- diff(diff(log(time_series), diff_order))
    return(
      list(
        stationary_ts = stationary_ts,
        ndiffs = diff_order,
        adf_stats = ts_adf_test(stationary_ts),
        trans_type = "double_diff_log",
        ret = TRUE
      )
    )
  } else {
    rlang::inform(
      message = "Could not stationarize data.",
      use_cli_format = TRUE
    )
    return(list(ret = FALSE))
  }
}

Examples:

> util_doubledifflog_ts(x)
Double Differencing of order 1 made the time series stationary
$stationary_ts
               Jan           Feb           Mar           Apr           May           Jun
1949                              0.0599315450 -0.1351068163 -0.0410323405  0.1735060916
1950 -0.1520462214  0.1171022747  0.0211282048 -0.1559630954 -0.0334759292  0.2525936098
1951 -0.1703526544 -0.0011897681  0.1372467045 -0.2591816057  0.1417776255 -0.0194552025
1952 -0.0987053985  0.0216175262  0.0184400436 -0.1339264957  0.0751822792  0.1640197884
1953 -0.1101071821 -0.0102565002  0.1857171458 -0.1899634367 -0.0216172197  0.0852029504
1954 -0.0955329714 -0.0964931168  0.3048215823 -0.2577790480  0.0650065945  0.0902568899
1955 -0.0653003019 -0.0931149952  0.1741094774 -0.1287474836 -0.0037521418  0.1504401004
1956 -0.1382078481 -0.0463098564  0.1598409997 -0.1475828510  0.0285467756  0.1463562224
1957 -0.0924787442 -0.0744499110  0.2132828402 -0.1905487172  0.0426435608  0.1529722149
1958 -0.0849649257 -0.0787286925  0.1964870639 -0.1690345611  0.0816420865  0.1387428423
1959 -0.0174895318 -0.1173143955  0.2228357169 -0.1964813709  0.0837794484  0.0578837743
1960 -0.0830437006 -0.0935778165  0.1335420218  0.0263637631 -0.0719461805  0.1017068187
               Jul           Aug           Sep           Oct           Nov           Dec
1949 -0.0175467375 -0.0919374953 -0.0845573880 -0.0489740046 -0.0012012013  0.2610263193
1950 -0.0437804375 -0.1318521311 -0.0732034040 -0.0990425008  0.0180952250  0.3595946540
1951  0.0772322010 -0.1115212744 -0.0783690671 -0.0489703553  0.0233497089  0.2323708802
1952 -0.1214246638 -0.0027258289 -0.1974618914  0.0565426503 -0.0147181273  0.2251426335
1953  0.0235482200 -0.0530346967 -0.1675948883  0.0215399175 -0.0426992749  0.2692493398
1954  0.0138499264 -0.1647323226 -0.0930901390  0.0002384892  0.0025900336  0.2410320490
1955 -0.0095694510 -0.1924103165 -0.0584925044 -0.0235534893 -0.0151928838  0.3046289378
1956 -0.0630126191 -0.1187523214 -0.1122087518 -0.0167634099  0.0270664065  0.2429325621
1957 -0.0758554330 -0.0927402395 -0.1492062318 -0.0071757183  0.0230770947  0.2258123867
1958 -0.0598451001 -0.0929837952 -0.2512578528  0.1050510618 -0.0286576015  0.2302607239
1959  0.0325720271 -0.1294221152 -0.2082966053  0.0595085504  0.0117448950  0.2294118289
1960  0.0253855845 -0.1767334525 -0.1503384318  0.0793151339 -0.0701678993  0.2695301530

$ndiffs
[1] 1

$adf_stats
$adf_stats$test_stat
[1] -7.318571

$adf_stats$p_value
[1] 0.01

$trans_type
[1] "double_diff_log"

> util_doubledifflog_ts(BJsales)
Double Differencing of order 1 made the time series stationary
$stationary_ts
Time Series:
Start = 3 
End = 150 
Frequency = 1 
  [1]  2.501626e-03 -2.009293e-03  3.013311e-03  5.509403e-03 -1.403616e-02  1.504873e-02
  [7] -5.525739e-03  2.984319e-03 -2.497098e-03 -2.482253e-03  4.961548e-04  9.876623e-03
 [13] -3.020573e-03  3.823663e-03  5.604172e-03 -1.628388e-02 -3.330957e-03 -1.446883e-03
 [19]  8.124723e-03  1.416007e-02 -1.516448e-02  4.187404e-03  1.006802e-02 -1.158078e-02
 [25] -1.837461e-03  1.167545e-02 -1.933339e-02  8.956576e-03 -1.390597e-02  1.213038e-02
 [31] -9.473211e-03  4.097400e-04  9.546207e-03 -9.163224e-04 -1.000522e-02  2.698308e-03
 [37]  4.578552e-03 -1.202070e-02  1.387432e-02  1.388557e-03  9.156379e-04 -3.698571e-03
 [43]  4.604060e-03 -2.110026e-05  1.443935e-02 -1.008969e-02 -2.101060e-02  5.304418e-03
 [49]  3.596797e-03 -2.749852e-03 -1.876955e-03  2.721558e-03  4.618731e-03 -7.445573e-03
 [55] -5.339697e-04  1.595107e-02 -4.241033e-03 -7.937937e-03 -2.376522e-03  3.741457e-03
 [61]  1.131525e-02 -8.948433e-03  2.816021e-03 -1.035168e-02  1.225000e-02 -4.835732e-04
 [67] -1.272583e-02  8.011220e-03 -1.428900e-03  9.020179e-03 -1.281301e-02  5.214950e-03
 [73] -2.871489e-03  4.301082e-03  0.000000e+00  8.583744e-03 -2.429878e-03 -1.915573e-03
 [79] -5.649061e-03  1.217614e-02 -8.440333e-03  7.841404e-03 -4.207226e-03  2.687023e-03
 [85] -1.872679e-03  1.327612e-02 -1.257876e-02  1.332706e-02 -1.013462e-02 -4.741172e-03
 [91]  8.731627e-03 -1.441397e-03 -7.078679e-03 -3.284150e-03 -1.630815e-03  4.449262e-03
 [97] -6.071827e-03  1.211224e-03  5.628636e-03 -8.041201e-03  5.213078e-03 -1.209859e-03
[103]  1.585986e-03 -1.397416e-02  4.351737e-03  1.047318e-02  1.575458e-03 -5.212912e-03
[109]  7.935118e-03 -6.369506e-03  2.348101e-03 -4.162342e-04 -5.475789e-03  6.234796e-03
[115]  6.133764e-03 -1.312489e-02  6.524821e-03 -8.437804e-03  8.047971e-03 -7.660499e-03
[121] -7.789363e-04  7.576833e-04  2.697868e-03 -5.424417e-03  6.975414e-03 -3.890273e-04
[127] -2.716413e-03  1.552042e-03  1.553851e-03  3.868618e-03 -9.291689e-03  3.869823e-03
[133] -1.554152e-03  3.107853e-03 -3.887876e-03  5.444297e-03 -4.665783e-03  4.275545e-03
[139] -3.497184e-03  1.942276e-03  7.345264e-03 -2.360774e-03  1.108765e-03 -5.349921e-03
[145] -3.421115e-03 -1.911653e-03  5.339151e-03  3.784075e-04

$ndiffs
[1] 1

$adf_stats
$adf_stats$test_stat
[1] -2.110919

$adf_stats$p_value
[1] 0.5301832

$trans_type
[1] "double_diff_log"

> util_doubledifflog_ts(runif(150))
Double Differencing of order 1 made the time series stationary
$stationary_ts
  [1] -1.067536200  2.987998777 -2.314006930 -1.230786223  2.191311846  0.235726666 -2.549298334
  [8]  2.911949156 -3.386124062  4.210826292 -2.969903817  0.712444507 -1.167348447  3.491885190
 [15] -2.225294216 -0.197307968 -0.863454910  0.299367307  2.651001223 -2.910944937  1.217484101
 [22]  0.772273988 -1.059431931  0.170972135 -0.020179459 -1.436214772  2.310517392 -0.707888972
 [29] -1.381818918  2.302345298 -1.753624156  1.244897016 -0.456402323 -1.631570093  0.240075742
 [36]  3.830603275 -5.342225833  5.191353517 -2.361624211 -0.069849474 -0.185102679 -1.440427541
 [43]  3.245000664 -2.911402179 -0.071227717  1.651376441 -1.734669093  4.809903099 -3.134350343
 [50] -0.239343529 -2.224418812  4.168678251 -1.671813928 -1.059439562  1.147577788 -0.537213403
 [57] -0.141844840  1.097047290 -0.752750395 -0.200954022 -0.032143500  0.126228339  0.401061025
 [64] -1.232881523  0.856360705  0.900606836 -1.371555763 -1.855723095  4.371350398 -2.567710523
 [71]  1.153513034 -0.037922161 -0.459908278 -0.001916005 -0.561963793  0.767780564 -0.981624594
 [78] -0.494193936  1.627054141  0.775095799 -0.875306480 -1.321943000  0.075930851  2.563399910
 [85] -2.588623082  1.827323378 -0.925279509 -1.347865030  1.332346193  1.060496667 -1.014205115
 [92]  0.277181785 -1.206098253  1.603239076 -0.611947578 -0.496377192 -0.081340132  1.292243585
 [99] -2.988689336  4.302796086 -1.754227591 -1.364952694  1.195451827  0.090694918 -0.157933452
[106]  0.329607951 -0.515721048  0.205967760 -0.313735344 -0.404562460  0.679266711 -0.126255515
[113] -2.238472862  2.524205954  1.127749847 -2.949383799  4.091448976 -2.743503602  0.573536465
[120] -0.681967586 -0.120219924 -0.047828647  1.844527037 -2.477903550  0.986019713 -1.800259167
[127]  4.791247809 -3.118542800 -2.337084572  5.367372876 -2.452756772 -2.927803917  4.962517814
[134] -1.971342488 -2.725547190  3.397109242 -0.309188698 -1.367980610 -0.255302793  2.857984822
[141] -1.871737391 -0.654319210  0.673688676 -1.386899756 -0.513916339  5.191616885 -4.374831496
[148]  0.330140782

$ndiffs
[1] 1

$adf_stats
$adf_stats$test_stat
[1] -5.927793

$adf_stats$p_value
[1] 0.01

$trans_type
[1] "double_diff_log"