1 2R version 3.6.2 (2019-12-12) -- "Dark and Stormy Night" 3Copyright (C) 2019 The R Foundation for Statistical Computing 4Platform: x86_64-pc-linux-gnu (64-bit) 5 6R is free software and comes with ABSOLUTELY NO WARRANTY. 7You are welcome to redistribute it under certain conditions. 8Type 'license()' or 'licence()' for distribution details. 9 10R is a collaborative project with many contributors. 11Type 'contributors()' for more information and 12'citation()' on how to cite R or R packages in publications. 13 14Type 'demo()' for some demos, 'help()' for on-line help, or 15'help.start()' for an HTML browser interface to help. 16Type 'q()' to quit R. 17 18> ################################################### 19> ### chunk number 1: setup 20> ################################################### 21> options(prompt = "R> ", continue = "+ ", width = 64, 22+ digits = 4, show.signif.stars = FALSE, useFancyQuotes = FALSE) 23R> 24R> options(SweaveHooks = list(onefig = function() {par(mfrow = c(1,1))}, 25+ twofig = function() {par(mfrow = c(1,2))}, 26+ threefig = function() {par(mfrow = c(1,3))}, 27+ fourfig = function() {par(mfrow = c(2,2))}, 28+ sixfig = function() {par(mfrow = c(3,2))})) 29R> 30R> library("AER") 31Loading required package: car 32Loading required package: carData 33Loading required package: lmtest 34Loading required package: zoo 35 36Attaching package: 'zoo' 37 38The following objects are masked from 'package:base': 39 40 as.Date, as.Date.numeric 41 42Loading required package: sandwich 43Loading required package: survival 44R> 45R> suppressWarnings(RNGversion("3.5.0")) 46R> set.seed(1071) 47R> 48R> 49R> ################################################### 50R> ### chunk number 2: options 51R> ################################################### 52R> options(digits = 6) 53R> 54R> 55R> ################################################### 56R> ### chunk number 3: ts-plot eval=FALSE 57R> ################################################### 58R> ## data("UKNonDurables") 59R> ## plot(UKNonDurables) 60R> 61R> 62R> ################################################### 63R> ### chunk number 4: UKNonDurables-data 64R> ################################################### 65R> data("UKNonDurables") 66R> 67R> 68R> ################################################### 69R> ### chunk number 5: tsp 70R> ################################################### 71R> tsp(UKNonDurables) 72[1] 1955.00 1988.75 4.00 73R> 74R> 75R> ################################################### 76R> ### chunk number 6: window 77R> ################################################### 78R> window(UKNonDurables, end = c(1956, 4)) 79 Qtr1 Qtr2 Qtr3 Qtr4 801955 24030 25620 26209 27167 811956 24620 25972 26285 27659 82R> 83R> 84R> ################################################### 85R> ### chunk number 7: filter eval=FALSE 86R> ################################################### 87R> ## data("UKDriverDeaths") 88R> ## plot(UKDriverDeaths) 89R> ## lines(filter(UKDriverDeaths, c(1/2, rep(1, 11), 1/2)/12), 90R> ## col = 2) 91R> 92R> 93R> ################################################### 94R> ### chunk number 8: ts-plot1 95R> ################################################### 96R> data("UKNonDurables") 97R> plot(UKNonDurables) 98R> data("UKDriverDeaths") 99R> plot(UKDriverDeaths) 100R> lines(filter(UKDriverDeaths, c(1/2, rep(1, 11), 1/2)/12), 101+ col = 2) 102R> 103R> 104R> ################################################### 105R> ### chunk number 9: filter1 eval=FALSE 106R> ################################################### 107R> ## data("UKDriverDeaths") 108R> ## plot(UKDriverDeaths) 109R> ## lines(filter(UKDriverDeaths, c(1/2, rep(1, 11), 1/2)/12), 110R> ## col = 2) 111R> 112R> 113R> ################################################### 114R> ### chunk number 10: rollapply 115R> ################################################### 116R> plot(rollapply(UKDriverDeaths, 12, sd)) 117R> 118R> 119R> ################################################### 120R> ### chunk number 11: ar-sim 121R> ################################################### 122R> set.seed(1234) 123R> x <- filter(rnorm(100), 0.9, method = "recursive") 124R> 125R> 126R> ################################################### 127R> ### chunk number 12: decompose 128R> ################################################### 129R> dd_dec <- decompose(log(UKDriverDeaths)) 130R> dd_stl <- stl(log(UKDriverDeaths), s.window = 13) 131R> 132R> 133R> ################################################### 134R> ### chunk number 13: decompose-components 135R> ################################################### 136R> plot(dd_dec$trend, ylab = "trend") 137R> lines(dd_stl$time.series[,"trend"], lty = 2, lwd = 2) 138R> 139R> 140R> ################################################### 141R> ### chunk number 14: seat-mean-sd 142R> ################################################### 143R> plot(dd_dec$trend, ylab = "trend") 144R> lines(dd_stl$time.series[,"trend"], lty = 2, lwd = 2) 145R> plot(rollapply(UKDriverDeaths, 12, sd)) 146R> 147R> 148R> ################################################### 149R> ### chunk number 15: stl 150R> ################################################### 151R> plot(dd_stl) 152R> 153R> 154R> ################################################### 155R> ### chunk number 16: Holt-Winters 156R> ################################################### 157R> dd_past <- window(UKDriverDeaths, end = c(1982, 12)) 158R> ## dd_hw <- try(HoltWinters(dd_past)) ## IGNORE_RDIFF, excluded due to small numeric deviations on different platforms 159R> ## if(!inherits(dd_hw, "try-error")) { 160R> ## dd_pred <- predict(dd_hw, n.ahead = 24) 161R> ## 162R> ## 163R> ## ################################################### 164R> ## ### chunk number 17: Holt-Winters-plot 165R> ## ################################################### 166R> ## plot(dd_hw, dd_pred, ylim = range(UKDriverDeaths)) 167R> ## lines(UKDriverDeaths) 168R> ## 169R> ## 170R> ## ################################################### 171R> ## ### chunk number 18: Holt-Winters-plot1 172R> ## ################################################### 173R> ## plot(dd_hw, dd_pred, ylim = range(UKDriverDeaths)) 174R> ## lines(UKDriverDeaths) 175R> ## } 176R> 177R> ################################################### 178R> ### chunk number 19: acf eval=FALSE 179R> ################################################### 180R> ## acf(x) 181R> ## pacf(x) 182R> 183R> 184R> ################################################### 185R> ### chunk number 20: acf1 186R> ################################################### 187R> acf(x, ylim = c(-0.2, 1)) 188R> pacf(x, ylim = c(-0.2, 1)) 189R> 190R> 191R> ################################################### 192R> ### chunk number 21: ar 193R> ################################################### 194R> ar(x) 195 196Call: 197ar(x = x) 198 199Coefficients: 200 1 2010.928 202 203Order selected 1 sigma^2 estimated as 1.29 204R> 205R> 206R> ################################################### 207R> ### chunk number 22: window-non-durab 208R> ################################################### 209R> nd <- window(log(UKNonDurables), end = c(1970, 4)) 210R> 211R> 212R> ################################################### 213R> ### chunk number 23: non-durab-acf 214R> ################################################### 215R> acf(diff(nd), ylim = c(-1, 1)) 216R> pacf(diff(nd), ylim = c(-1, 1)) 217R> acf(diff(diff(nd, 4)), ylim = c(-1, 1)) 218R> pacf(diff(diff(nd, 4)), ylim = c(-1, 1)) 219R> 220R> 221R> ################################################### 222R> ### chunk number 24: non-durab-acf1 223R> ################################################### 224R> acf(diff(nd), ylim = c(-1, 1)) 225R> pacf(diff(nd), ylim = c(-1, 1)) 226R> acf(diff(diff(nd, 4)), ylim = c(-1, 1)) 227R> pacf(diff(diff(nd, 4)), ylim = c(-1, 1)) 228R> 229R> 230R> ################################################### 231R> ### chunk number 25: arima-setup 232R> ################################################### 233R> nd_pars <- expand.grid(ar = 0:2, diff = 1, ma = 0:2, 234+ sar = 0:1, sdiff = 1, sma = 0:1) 235R> nd_aic <- rep(0, nrow(nd_pars)) 236R> for(i in seq(along = nd_aic)) nd_aic[i] <- AIC(arima(nd, 237+ unlist(nd_pars[i, 1:3]), unlist(nd_pars[i, 4:6])), 238+ k = log(length(nd))) 239R> nd_pars[which.min(nd_aic),] 240 ar diff ma sar sdiff sma 24122 0 1 1 0 1 1 242R> 243R> 244R> ################################################### 245R> ### chunk number 26: arima 246R> ################################################### 247R> nd_arima <- arima(nd, order = c(0,1,1), seasonal = c(0,1,1)) 248R> nd_arima 249 250Call: 251arima(x = nd, order = c(0, 1, 1), seasonal = c(0, 1, 1)) 252 253Coefficients: 254 ma1 sma1 255 -0.353 -0.583 256s.e. 0.143 0.138 257 258sigma^2 estimated as 9.65e-05: log likelihood = 188.14, aic = -370.27 259R> 260R> 261R> ################################################### 262R> ### chunk number 27: tsdiag 263R> ################################################### 264R> tsdiag(nd_arima) 265R> 266R> 267R> ################################################### 268R> ### chunk number 28: tsdiag1 269R> ################################################### 270R> tsdiag(nd_arima) 271R> 272R> 273R> ################################################### 274R> ### chunk number 29: arima-predict 275R> ################################################### 276R> nd_pred <- predict(nd_arima, n.ahead = 18 * 4) 277R> 278R> 279R> ################################################### 280R> ### chunk number 30: arima-compare 281R> ################################################### 282R> plot(log(UKNonDurables)) 283R> lines(nd_pred$pred, col = 2) 284R> 285R> 286R> ################################################### 287R> ### chunk number 31: arima-compare1 288R> ################################################### 289R> plot(log(UKNonDurables)) 290R> lines(nd_pred$pred, col = 2) 291R> 292R> 293R> ################################################### 294R> ### chunk number 32: pepper 295R> ################################################### 296R> data("PepperPrice") 297R> plot(PepperPrice, plot.type = "single", col = 1:2) 298R> legend("topleft", c("black", "white"), bty = "n", 299+ col = 1:2, lty = rep(1,2)) 300R> 301R> 302R> ################################################### 303R> ### chunk number 33: pepper1 304R> ################################################### 305R> data("PepperPrice") 306R> plot(PepperPrice, plot.type = "single", col = 1:2) 307R> legend("topleft", c("black", "white"), bty = "n", 308+ col = 1:2, lty = rep(1,2)) 309R> 310R> 311R> ################################################### 312R> ### chunk number 34: adf1 313R> ################################################### 314R> library("tseries") 315R> adf.test(log(PepperPrice[, "white"])) 316 317 Augmented Dickey-Fuller Test 318 319data: log(PepperPrice[, "white"]) 320Dickey-Fuller = -1.744, Lag order = 6, p-value = 0.684 321alternative hypothesis: stationary 322 323R> 324R> 325R> ################################################### 326R> ### chunk number 35: adf1 327R> ################################################### 328R> adf.test(diff(log(PepperPrice[, "white"]))) 329 330 Augmented Dickey-Fuller Test 331 332data: diff(log(PepperPrice[, "white"])) 333Dickey-Fuller = -5.336, Lag order = 6, p-value = 0.01 334alternative hypothesis: stationary 335 336Warning message: 337In adf.test(diff(log(PepperPrice[, "white"]))) : 338 p-value smaller than printed p-value 339R> 340R> 341R> ################################################### 342R> ### chunk number 36: pp 343R> ################################################### 344R> pp.test(log(PepperPrice[, "white"]), type = "Z(t_alpha)") 345 346 Phillips-Perron Unit Root Test 347 348data: log(PepperPrice[, "white"]) 349Dickey-Fuller Z(t_alpha) = -1.644, Truncation lag 350parameter = 5, p-value = 0.726 351alternative hypothesis: stationary 352 353R> 354R> 355R> ################################################### 356R> ### chunk number 37: urca eval=FALSE 357R> ################################################### 358R> ## library("urca") 359R> ## pepper_ers <- ur.ers(log(PepperPrice[, "white"]), 360R> ## type = "DF-GLS", model = "const", lag.max = 4) 361R> ## summary(pepper_ers) 362R> 363R> 364R> ################################################### 365R> ### chunk number 38: kpss 366R> ################################################### 367R> kpss.test(log(PepperPrice[, "white"])) 368 369 KPSS Test for Level Stationarity 370 371data: log(PepperPrice[, "white"]) 372KPSS Level = 0.6173, Truncation lag parameter = 5, 373p-value = 0.0211 374 375R> 376R> 377R> ################################################### 378R> ### chunk number 39: po 379R> ################################################### 380R> po.test(log(PepperPrice)) 381 382 Phillips-Ouliaris Cointegration Test 383 384data: log(PepperPrice) 385Phillips-Ouliaris demeaned = -24.1, Truncation lag 386parameter = 2, p-value = 0.024 387 388R> 389R> 390R> ################################################### 391R> ### chunk number 40: joh-trace 392R> ################################################### 393R> library("urca") 394R> pepper_jo <- ca.jo(log(PepperPrice), ecdet = "const", 395+ type = "trace") 396R> ## summary(pepper_jo) ## IGNORE_RDIFF, excluded due to small numeric deviations on different platforms 397R> 398R> 399R> ################################################### 400R> ### chunk number 41: joh-lmax eval=FALSE 401R> ################################################### 402R> ## pepper_jo2 <- ca.jo(log(PepperPrice), ecdet = "const", type = "eigen") 403R> ## summary(pepper_jo2) 404R> 405R> 406R> ################################################### 407R> ### chunk number 42: dynlm-by-hand 408R> ################################################### 409R> dd <- log(UKDriverDeaths) 410R> dd_dat <- ts.intersect(dd, dd1 = lag(dd, k = -1), 411+ dd12 = lag(dd, k = -12)) 412R> lm(dd ~ dd1 + dd12, data = dd_dat) 413 414Call: 415lm(formula = dd ~ dd1 + dd12, data = dd_dat) 416 417Coefficients: 418(Intercept) dd1 dd12 419 0.421 0.431 0.511 420 421R> 422R> 423R> ################################################### 424R> ### chunk number 43: dynlm 425R> ################################################### 426R> library("dynlm") 427R> dynlm(dd ~ L(dd) + L(dd, 12)) 428 429Time series regression with "ts" data: 430Start = 1970(1), End = 1984(12) 431 432Call: 433dynlm(formula = dd ~ L(dd) + L(dd, 12)) 434 435Coefficients: 436(Intercept) L(dd) L(dd, 12) 437 0.421 0.431 0.511 438 439R> 440R> 441R> ################################################### 442R> ### chunk number 44: efp 443R> ################################################### 444R> library("strucchange") 445R> dd_ocus <- efp(dd ~ dd1 + dd12, data = dd_dat, 446+ type = "OLS-CUSUM") 447R> 448R> 449R> ################################################### 450R> ### chunk number 45: efp-test 451R> ################################################### 452R> sctest(dd_ocus) 453 454 OLS-based CUSUM test 455 456data: dd_ocus 457S0 = 1.487, p-value = 0.0241 458 459R> 460R> 461R> ################################################### 462R> ### chunk number 46: efp-plot eval=FALSE 463R> ################################################### 464R> ## plot(dd_ocus) 465R> 466R> 467R> ################################################### 468R> ### chunk number 47: Fstats 469R> ################################################### 470R> dd_fs <- Fstats(dd ~ dd1 + dd12, data = dd_dat, from = 0.1) 471R> plot(dd_fs) 472R> sctest(dd_fs) 473 474 supF test 475 476data: dd_fs 477sup.F = 19.33, p-value = 0.00672 478 479R> 480R> 481R> ################################################### 482R> ### chunk number 48: ocus-supF 483R> ################################################### 484R> plot(dd_ocus) 485R> plot(dd_fs, main = "supF test") 486R> 487R> 488R> ################################################### 489R> ### chunk number 49: GermanM1 490R> ################################################### 491R> data("GermanM1") 492R> LTW <- dm ~ dy2 + dR + dR1 + dp + m1 + y1 + R1 + season 493R> 494R> 495R> ################################################### 496R> ### chunk number 50: re eval=FALSE 497R> ################################################### 498R> ## m1_re <- efp(LTW, data = GermanM1, type = "RE") 499R> ## plot(m1_re) 500R> 501R> 502R> ################################################### 503R> ### chunk number 51: re1 504R> ################################################### 505R> m1_re <- efp(LTW, data = GermanM1, type = "RE") 506R> plot(m1_re) 507R> 508R> 509R> ################################################### 510R> ### chunk number 52: dating 511R> ################################################### 512R> dd_bp <- breakpoints(dd ~ dd1 + dd12, data = dd_dat, h = 0.1) 513R> 514R> 515R> ################################################### 516R> ### chunk number 53: dating-coef 517R> ################################################### 518R> coef(dd_bp, breaks = 2) 519 (Intercept) dd1 dd12 5201970(1) - 1973(10) 1.45776 0.117323 0.694480 5211973(11) - 1983(1) 1.53421 0.218214 0.572330 5221983(2) - 1984(12) 1.68690 0.548609 0.214166 523R> 524R> 525R> ################################################### 526R> ### chunk number 54: dating-plot eval=FALSE 527R> ################################################### 528R> ## plot(dd) 529R> ## lines(fitted(dd_bp, breaks = 2), col = 4) 530R> ## lines(confint(dd_bp, breaks = 2)) 531R> 532R> 533R> ################################################### 534R> ### chunk number 55: dating-plot1 535R> ################################################### 536R> plot(dd_bp, legend = FALSE, main = "") 537R> plot(dd) 538R> lines(fitted(dd_bp, breaks = 2), col = 4) 539R> lines(confint(dd_bp, breaks = 2)) 540R> 541R> 542R> ################################################### 543R> ### chunk number 56: StructTS 544R> ################################################### 545R> dd_struct <- StructTS(log(UKDriverDeaths)) 546R> 547R> 548R> ################################################### 549R> ### chunk number 57: StructTS-plot eval=FALSE 550R> ################################################### 551R> ## plot(cbind(fitted(dd_struct), residuals(dd_struct))) 552R> 553R> 554R> ################################################### 555R> ### chunk number 58: StructTS-plot1 556R> ################################################### 557R> dd_struct_plot <- cbind(fitted(dd_struct), residuals = residuals(dd_struct)) 558R> colnames(dd_struct_plot) <- c("level", "slope", "season", "residuals") 559R> plot(dd_struct_plot, main = "") 560R> 561R> 562R> ################################################### 563R> ### chunk number 59: garch-plot 564R> ################################################### 565R> data("MarkPound") 566R> plot(MarkPound, main = "") 567R> 568R> 569R> ################################################### 570R> ### chunk number 60: garch 571R> ################################################### 572R> data("MarkPound") 573R> mp <- garch(MarkPound, grad = "numerical", trace = FALSE) 574R> summary(mp) 575 576Call: 577garch(x = MarkPound, grad = "numerical", trace = FALSE) 578 579Model: 580GARCH(1,1) 581 582Residuals: 583 Min 1Q Median 3Q Max 584-6.79739 -0.53703 -0.00264 0.55233 5.24867 585 586Coefficient(s): 587 Estimate Std. Error t value Pr(>|t|) 588a0 0.0109 0.0013 8.38 <2e-16 589a1 0.1546 0.0139 11.14 <2e-16 590b1 0.8044 0.0160 50.13 <2e-16 591 592Diagnostic Tests: 593 Jarque Bera Test 594 595data: Residuals 596X-squared = 1060, df = 2, p-value <2e-16 597 598 599 Box-Ljung test 600 601data: Squared.Residuals 602X-squared = 2.478, df = 1, p-value = 0.115 603 604R> 605R> 606R> 607> proc.time() 608 user system elapsed 609 4.372 2.273 3.386 610