radf
returns the recursive univariate and panel Augmented Dickey-Fuller test statistics.
radf(data, minw = NULL, lag = 0L)
A univariate or multivariate numeric time series object, a numeric vector or matrix, or a data.frame. The object should not have any NA values.
A positive integer. The minimum window size (default = \((0.01 + 1.8/\sqrt(T))T\), where T denotes the sample size).
A non-negative integer. The lag length of the Augmented Dickey-Fuller regression (default = 0L).
A list that contains the unit root test statistics (sequence):
Augmented Dickey-Fuller
Backward Augmented Dickey-Fuller
Supremum Augmented Dickey-Fuller
Backward Supremum Augmented Dickey-Fuller
Generalized Supremum Augmented Dickey-Fuller
Panel Backward Supremum Augmented Dickey-Fuller
Panel Generalized Supremum Augmented Dickey-Fuller
And attributes:
The matrix used in the estimation.
The index parsed from the dataset.
The lag used in the estimation.
The number of rows.
The minimum window used in the estimation.
The series names.
The radf()
function is vectorized, i.e., it can handle multiple series
at once, to improve efficiency. This property also enables the computation of panel
statistics internally as a by-product of the univariate estimations with minimal
additional cost incurred.
Phillips, P. C. B., Wu, Y., & Yu, J. (2011). Explosive Behavior in The 1990s Nasdaq: When Did Exuberance Escalate Asset Values? International Economic Review, 52(1), 201-226.
Phillips, P. C. B., Shi, S., & Yu, J. (2015). Testing for Multiple Bubbles: Historical Episodes of Exuberance and Collapse in the S&P 500. International Economic Review, 56(4), 1043-1078.
Pavlidis, E., Yusupova, A., Paya, I., Peel, D., Martínez-García, E., Mack, A., & Grossman, V. (2016). Episodes of exuberance in housing markets: in search of the smoking gun. The Journal of Real Estate Finance and Economics, 53(4), 419-449.
# \donttest{
# We will use simulated data that are stored as data
sim_data
#> # A tibble: 100 × 5
#> psy1 psy2 evans div blan
#> <sim> <sim> <sim> <sim> <sim>
#> 1 100 100 0.5 68.4 0.1
#> 2 90.3 102 0.563 66 0.0408
#> 3 93.4 110 0.583 78.9 0.121
#> 4 92.9 116 0.575 75.6 0.0195
#> 5 106 127 0.545 74.8 0.0216
#> 6 102 114 0.577 77.7 0.0117
#> 7 109 120 0.658 80.8 0.0265
#> 8 105 130 0.7 91.4 0.0238
#> 9 112 128 0.684 87.4 0.0332
#> 10 124 131 0.735 72.2 0.0342
#> # ℹ 90 more rows
rsim <- radf(sim_data)
str(rsim)
#> List of 7
#> $ adf : Named num [1:5] -2.46 -2.86 -5.83 -1.95 -5.15
#> ..- attr(*, "names")= chr [1:5] "psy1" "psy2" "evans" "div" ...
#> $ badf : num [1:81, 1:5] -2.31 -2.36 -2.49 -2.26 -1.63 ...
#> ..- attr(*, "dimnames")=List of 2
#> .. ..$ : NULL
#> .. ..$ : chr [1:5] "psy1" "psy2" "evans" "div" ...
#> $ sadf : Named num [1:5] 1.95 7.88 5.28 1.11 3.93
#> ..- attr(*, "names")= chr [1:5] "psy1" "psy2" "evans" "div" ...
#> $ bsadf : num [1:81, 1:5] -2.31 -2.36 -2.49 -2.26 -1.26 ...
#> ..- attr(*, "dimnames")=List of 2
#> .. ..$ : NULL
#> .. ..$ : chr [1:5] "psy1" "psy2" "evans" "div" ...
#> $ gsadf : Named num [1:5] 5.19 7.88 5.99 1.34 10.95
#> ..- attr(*, "names")= chr [1:5] "psy1" "psy2" "evans" "div" ...
#> $ bsadf_panel: num [1:81] -0.0702 -1.5266 -1.2379 -1.101 -0.7169 ...
#> $ gsadf_panel: num 2.41
#> - attr(*, "mat")= num [1:100, 1:5] 100 90.3 93.4 92.9 106.2 ...
#> ..- attr(*, "dimnames")=List of 2
#> .. ..$ : NULL
#> .. ..$ : chr [1:5] "psy1" "psy2" "evans" "div" ...
#> ..- attr(*, "index")= num [1:100] 1 2 3 4 5 6 7 8 9 10 ...
#> ..- attr(*, "series_names")= chr [1:5] "psy1" "psy2" "evans" "div" ...
#> - attr(*, "index")= num [1:100] 1 2 3 4 5 6 7 8 9 10 ...
#> - attr(*, "series_names")= chr [1:5] "psy1" "psy2" "evans" "div" ...
#> - attr(*, "minw")= num 19
#> - attr(*, "lag")= int 0
#> - attr(*, "n")= int 100
#> - attr(*, "class")= chr [1:2] "radf_obj" "list"
# We would also use data that contain a Date column
sim_data_wdate
#> # A tibble: 100 × 6
#> psy1 psy2 evans div blan date
#> <sim> <sim> <sim> <sim> <sim> <date>
#> 1 100 100 0.5 68.4 0.1 2000-01-01
#> 2 90.3 102 0.563 66 0.0408 2000-02-01
#> 3 93.4 110 0.583 78.9 0.121 2000-03-01
#> 4 92.9 116 0.575 75.6 0.0195 2000-04-01
#> 5 106 127 0.545 74.8 0.0216 2000-05-01
#> 6 102 114 0.577 77.7 0.0117 2000-06-01
#> 7 109 120 0.658 80.8 0.0265 2000-07-01
#> 8 105 130 0.7 91.4 0.0238 2000-08-01
#> 9 112 128 0.684 87.4 0.0332 2000-09-01
#> 10 124 131 0.735 72.2 0.0342 2000-10-01
#> # ℹ 90 more rows
rsim_wdate <- radf(sim_data_wdate)
#> Using `date` as index variable.
tidy(rsim_wdate)
#> # A tibble: 5 × 4
#> id adf sadf gsadf
#> <fct> <dbl> <dbl> <dbl>
#> 1 psy1 -2.46 1.95 5.19
#> 2 psy2 -2.86 7.88 7.88
#> 3 evans -5.83 5.28 5.99
#> 4 div -1.95 1.11 1.34
#> 5 blan -5.15 3.93 11.0
augment(rsim_wdate)
#> # A tibble: 405 × 6
#> key index id data badf bsadf
#> <int> <date> <chr> <dbl> <dbl> <dbl>
#> 1 20 2001-08-01 psy1 104. -2.31 -2.31
#> 2 20 2001-08-01 psy2 161. -0.756 -0.756
#> 3 20 2001-08-01 evans 1.92 5.28 5.28
#> 4 20 2001-08-01 div 134. 0.184 0.184
#> 5 20 2001-08-01 blan 0.0585 -2.75 -2.75
#> 6 21 2001-09-01 psy1 110. -2.36 -2.36
#> 7 21 2001-09-01 psy2 170. -0.167 -0.167
#> 8 21 2001-09-01 evans 0.489 -2.73 -2.69
#> 9 21 2001-09-01 div 140. 0.288 0.288
#> 10 21 2001-09-01 blan 0.0438 -2.81 -2.70
#> # ℹ 395 more rows
tidy(rsim_wdate, panel = TRUE)
#> # A tibble: 1 × 1
#> gsadf_panel
#> <dbl>
#> 1 2.41
head(index(rsim_wdate))
#> [1] "2000-01-01" "2000-02-01" "2000-03-01" "2000-04-01" "2000-05-01"
#> [6] "2000-06-01"
# For lag = 1 and minimum window = 20
rsim_20 <- radf(sim_data, minw = 20, lag = 1)
# }