2.10.1

Download some monthly Australian retail data from http://robjhyndman.com/data/retail.xlsx. These represent retail sales in various categories for different Australian states, and are stored in a MS-Excel file.

You can read the data into R with the following script:

Series ID Description
23367261 Turnover ; New South Wales ; Supermarket and grocery stores ;
23383763 Turnover ; New South Wales ; Liquor retailing ;
23914912 Turnover ; New South Wales ; Other specialised food retailing ;
25180347 Turnover ; New South Wales ; Food retailing ;
25190644 Turnover ; New South Wales ; Furniture, floor coverings, houseware and textile goods retailing ;
25570285 Turnover ; New South Wales ; Electrical and electronic goods retailing ;
25893076 Turnover ; New South Wales ; Hardware, building and garden supplies retailing ;
26021927 Turnover ; New South Wales ; Household goods retailing ;
26096129 Turnover ; New South Wales ; Clothing retailing ;
26435934 Turnover ; New South Wales ; Footwear and other personal accessory retailing ;
26877708 Turnover ; New South Wales ; Clothing, footwear and personal accessory retailing ;
26963817 Turnover ; New South Wales ; Department stores ;
27004783 Turnover ; New South Wales ; Newspaper and book retailing ;
27307395 Turnover ; New South Wales ; Other recreational goods retailing ;
A3349401C Turnover ; New South Wales ; Pharmaceutical, cosmetic and toiletry goods retailing ;
A3349873A Turnover ; New South Wales ; Other retailing n.e.c. ;
A3349872X Turnover ; New South Wales ; Other retailing ;
A3349709X Turnover ; New South Wales ; Cafes, restaurants and catering services ;
A3349792X Turnover ; New South Wales ; Takeaway food services ;
A3349789K Turnover ; New South Wales ; Cafes, restaurants and takeaway food services ;
A3349555V Turnover ; New South Wales ; Total (Industry) ;
A3349565X Turnover ; Victoria ; Supermarket and grocery stores ;
A3349414R Turnover ; Victoria ; Liquor retailing ;
A3349799R Turnover ; Victoria ; Other specialised food retailing ;
A3349642T Turnover ; Victoria ; Food retailing ;
A3349413L Turnover ; Victoria ; Furniture, floor coverings, houseware and textile goods retailing ;
A3349564W Turnover ; Victoria ; Electrical and electronic goods retailing ;
A3349416V Turnover ; Victoria ; Hardware, building and garden supplies retailing ;
A3349643V Turnover ; Victoria ; Household goods retailing ;
A3349483V Turnover ; Victoria ; Clothing retailing ;
A3349722T Turnover ; Victoria ; Footwear and other personal accessory retailing ;
A3349727C Turnover ; Victoria ; Clothing, footwear and personal accessory retailing ;
A3349641R Turnover ; Victoria ; Department stores ;
A3349639C Turnover ; Victoria ; Newspaper and book retailing ;
A3349415T Turnover ; Victoria ; Other recreational goods retailing ;
A3349349F Turnover ; Victoria ; Pharmaceutical, cosmetic and toiletry goods retailing ;
A3349563V Turnover ; Victoria ; Other retailing n.e.c. ;
A3349350R Turnover ; Victoria ; Other retailing ;
A3349640L Turnover ; Victoria ; Cafes, restaurants and catering services ;
A3349566A Turnover ; Victoria ; Takeaway food services ;
A3349417W Turnover ; Victoria ; Cafes, restaurants and takeaway food services ;
A3349352V Turnover ; Victoria ; Total (Industry) ;
A3349882C Turnover ; Queensland ; Supermarket and grocery stores ;
A3349561R Turnover ; Queensland ; Liquor retailing ;
A3349883F Turnover ; Queensland ; Other specialised food retailing ;
A3349721R Turnover ; Queensland ; Food retailing ;
A3349478A Turnover ; Queensland ; Furniture, floor coverings, houseware and textile goods retailing ;
A3349637X Turnover ; Queensland ; Electrical and electronic goods retailing ;
A3349479C Turnover ; Queensland ; Hardware, building and garden supplies retailing ;
A3349797K Turnover ; Queensland ; Household goods retailing ;
A3349477X Turnover ; Queensland ; Clothing retailing ;
A3349719C Turnover ; Queensland ; Footwear and other personal accessory retailing ;
A3349884J Turnover ; Queensland ; Clothing, footwear and personal accessory retailing ;
A3349562T Turnover ; Queensland ; Department stores ;
A3349348C Turnover ; Queensland ; Newspaper and book retailing ;
A3349480L Turnover ; Queensland ; Other recreational goods retailing ;
A3349476W Turnover ; Queensland ; Pharmaceutical, cosmetic and toiletry goods retailing ;
A3349881A Turnover ; Queensland ; Other retailing n.e.c. ;
A3349410F Turnover ; Queensland ; Other retailing ;
A3349481R Turnover ; Queensland ; Cafes, restaurants and catering services ;
A3349718A Turnover ; Queensland ; Takeaway food services ;
A3349411J Turnover ; Queensland ; Cafes, restaurants and takeaway food services ;
A3349638A Turnover ; Queensland ; Total (Industry) ;
A3349654A Turnover ; South Australia ; Supermarket and grocery stores ;
A3349499L Turnover ; South Australia ; Liquor retailing ;
A3349902A Turnover ; South Australia ; Other specialised food retailing ;
A3349432V Turnover ; South Australia ; Food retailing ;
A3349656F Turnover ; South Australia ; Furniture, floor coverings, houseware and textile goods retailing ;
A3349361W Turnover ; South Australia ; Electrical and electronic goods retailing ;
A3349501L Turnover ; South Australia ; Hardware, building and garden supplies retailing ;
A3349503T Turnover ; South Australia ; Household goods retailing ;
A3349360V Turnover ; South Australia ; Clothing retailing ;
A3349903C Turnover ; South Australia ; Footwear and other personal accessory retailing ;
A3349905J Turnover ; South Australia ; Clothing, footwear and personal accessory retailing ;
A3349658K Turnover ; South Australia ; Department stores ;
A3349575C Turnover ; South Australia ; Newspaper and book retailing ;
A3349428C Turnover ; South Australia ; Other recreational goods retailing ;
A3349500K Turnover ; South Australia ; Pharmaceutical, cosmetic and toiletry goods retailing ;
A3349577J Turnover ; South Australia ; Other retailing n.e.c. ;
A3349433W Turnover ; South Australia ; Other retailing ;
A3349576F Turnover ; South Australia ; Cafes, restaurants and catering services ;
A3349574A Turnover ; South Australia ; Takeaway food services ;
A3349816F Turnover ; South Australia ; Cafes, restaurants and takeaway food services ;
A3349815C Turnover ; South Australia ; Total (Industry) ;
A3349744F Turnover ; Western Australia ; Supermarket and grocery stores ;
A3349823C Turnover ; Western Australia ; Liquor retailing ;
A3349508C Turnover ; Western Australia ; Other specialised food retailing ;
A3349742A Turnover ; Western Australia ; Food retailing ;
A3349661X Turnover ; Western Australia ; Furniture, floor coverings, houseware and textile goods retailing ;
A3349660W Turnover ; Western Australia ; Electrical and electronic goods retailing ;
A3349909T Turnover ; Western Australia ; Hardware, building and garden supplies retailing ;
A3349824F Turnover ; Western Australia ; Household goods retailing ;
A3349507A Turnover ; Western Australia ; Clothing retailing ;
A3349580W Turnover ; Western Australia ; Footwear and other personal accessory retailing ;
A3349825J Turnover ; Western Australia ; Clothing, footwear and personal accessory retailing ;
A3349434X Turnover ; Western Australia ; Department stores ;
A3349822A Turnover ; Western Australia ; Newspaper and book retailing ;
A3349821X Turnover ; Western Australia ; Other recreational goods retailing ;
A3349581X Turnover ; Western Australia ; Pharmaceutical, cosmetic and toiletry goods retailing ;
A3349908R Turnover ; Western Australia ; Other retailing n.e.c. ;
A3349743C Turnover ; Western Australia ; Other retailing ;
A3349910A Turnover ; Western Australia ; Cafes, restaurants and catering services ;
A3349435A Turnover ; Western Australia ; Takeaway food services ;
A3349365F Turnover ; Western Australia ; Cafes, restaurants and takeaway food services ;
A3349746K Turnover ; Western Australia ; Total (Industry) ;
A3349370X Turnover ; Tasmania ; Supermarket and grocery stores ;
A3349754K Turnover ; Tasmania ; Liquor retailing ;
A3349670A Turnover ; Tasmania ; Other specialised food retailing ;
A3349764R Turnover ; Tasmania ; Food retailing ;
A3349916R Turnover ; Tasmania ; Furniture, floor coverings, houseware and textile goods retailing ;
A3349589T Turnover ; Tasmania ; Electrical and electronic goods retailing ;
A3349590A Turnover ; Tasmania ; Hardware, building and garden supplies retailing ;
A3349765T Turnover ; Tasmania ; Household goods retailing ;
A3349371A Turnover ; Tasmania ; Clothing retailing ;
A3349588R Turnover ; Tasmania ; Footwear and other personal accessory retailing ;
A3349763L Turnover ; Tasmania ; Clothing, footwear and personal accessory retailing ;
A3349372C Turnover ; Tasmania ; Department stores ;
A3349442X Turnover ; Tasmania ; Newspaper and book retailing ;
A3349591C Turnover ; Tasmania ; Other recreational goods retailing ;
A3349671C Turnover ; Tasmania ; Pharmaceutical, cosmetic and toiletry goods retailing ;
A3349669T Turnover ; Tasmania ; Other retailing n.e.c. ;
A3349521W Turnover ; Tasmania ; Other retailing ;
A3349443A Turnover ; Tasmania ; Cafes, restaurants and catering services ;
A3349835L Turnover ; Tasmania ; Takeaway food services ;
A3349520V Turnover ; Tasmania ; Cafes, restaurants and takeaway food services ;
A3349841J Turnover ; Tasmania ; Total (Industry) ;
A3349925T Turnover ; Northern Territory ; Supermarket and grocery stores ;
A3349450X Turnover ; Northern Territory ; Liquor retailing ;
A3349679W Turnover ; Northern Territory ; Other specialised food retailing ;
A3349527K Turnover ; Northern Territory ; Food retailing ;
A3349526J Turnover ; Northern Territory ; Furniture, floor coverings, houseware and textile goods retailing ;
A3349598V Turnover ; Northern Territory ; Electrical and electronic goods retailing ;
A3349766V Turnover ; Northern Territory ; Hardware, building and garden supplies retailing ;
A3349600V Turnover ; Northern Territory ; Household goods retailing ;
A3349680F Turnover ; Northern Territory ; Clothing retailing ;
A3349378T Turnover ; Northern Territory ; Footwear and other personal accessory retailing ;
A3349767W Turnover ; Northern Territory ; Clothing, footwear and personal accessory retailing ;
A3349451A Turnover ; Northern Territory ; Department stores ;
A3349924R Turnover ; Northern Territory ; Newspaper and book retailing ;
A3349843L Turnover ; Northern Territory ; Other recreational goods retailing ;
A3349844R Turnover ; Northern Territory ; Pharmaceutical, cosmetic and toiletry goods retailing ;
A3349376L Turnover ; Northern Territory ; Other retailing n.e.c. ;
A3349599W Turnover ; Northern Territory ; Other retailing ;
A3349377R Turnover ; Northern Territory ; Cafes, restaurants and catering services ;
A3349779F Turnover ; Northern Territory ; Takeaway food services ;
A3349379V Turnover ; Northern Territory ; Cafes, restaurants and takeaway food services ;
A3349842K Turnover ; Northern Territory ; Total (Industry) ;
A3349532C Turnover ; Australian Capital Territory ; Supermarket and grocery stores ;
A3349931L Turnover ; Australian Capital Territory ; Liquor retailing ;
A3349605F Turnover ; Australian Capital Territory ; Other specialised food retailing ;
A3349688X Turnover ; Australian Capital Territory ; Food retailing ;
A3349456L Turnover ; Australian Capital Territory ; Furniture, floor coverings, houseware and textile goods retailing ;
A3349774V Turnover ; Australian Capital Territory ; Electrical and electronic goods retailing ;
A3349848X Turnover ; Australian Capital Territory ; Hardware, building and garden supplies retailing ;
A3349457R Turnover ; Australian Capital Territory ; Household goods retailing ;
A3349851L Turnover ; Australian Capital Territory ; Clothing retailing ;
A3349604C Turnover ; Australian Capital Territory ; Footwear and other personal accessory retailing ;
A3349608L Turnover ; Australian Capital Territory ; Clothing, footwear and personal accessory retailing ;
A3349609R Turnover ; Australian Capital Territory ; Department stores ;
A3349773T Turnover ; Australian Capital Territory ; Newspaper and book retailing ;
A3349852R Turnover ; Australian Capital Territory ; Other recreational goods retailing ;
A3349775W Turnover ; Australian Capital Territory ; Pharmaceutical, cosmetic and toiletry goods retailing ;
A3349776X Turnover ; Australian Capital Territory ; Other retailing n.e.c. ;
A3349607K Turnover ; Australian Capital Territory ; Other retailing ;
A3349849A Turnover ; Australian Capital Territory ; Cafes, restaurants and catering services ;
A3349850K Turnover ; Australian Capital Territory ; Takeaway food services ;
A3349606J Turnover ; Australian Capital Territory ; Cafes, restaurants and takeaway food services ;
A3349932R Turnover ; Australian Capital Territory ; Total (Industry) ;
A3349862V Turnover ; Total (State) ; Supermarket and grocery stores ;
A3349462J Turnover ; Total (State) ; Liquor retailing ;
A3349463K Turnover ; Total (State) ; Other specialised food retailing ;
A3349334R Turnover ; Total (State) ; Food retailing ;
A3349863W Turnover ; Total (State) ; Furniture, floor coverings, houseware and textile goods retailing ;
A3349781T Turnover ; Total (State) ; Electrical and electronic goods retailing ;
A3349861T Turnover ; Total (State) ; Hardware, building and garden supplies retailing ;
A3349626T Turnover ; Total (State) ; Household goods retailing ;
A3349617R Turnover ; Total (State) ; Clothing retailing ;
A3349546T Turnover ; Total (State) ; Footwear and other personal accessory retailing ;
A3349787F Turnover ; Total (State) ; Clothing, footwear and personal accessory retailing ;
A3349333L Turnover ; Total (State) ; Department stores ;
A3349860R Turnover ; Total (State) ; Newspaper and book retailing ;
A3349464L Turnover ; Total (State) ; Other recreational goods retailing ;
A3349389X Turnover ; Total (State) ; Pharmaceutical, cosmetic and toiletry goods retailing ;
A3349461F Turnover ; Total (State) ; Other retailing n.e.c. ;
A3349788J Turnover ; Total (State) ; Other retailing ;
A3349547V Turnover ; Total (State) ; Cafes, restaurants and catering services ;
A3349388W Turnover ; Total (State) ; Takeaway food services ;
A3349870V Turnover ; Total (State) ; Cafes, restaurants and takeaway food services ;
A3349396W Turnover ; Total (State) ; Total (Industry) ;

Select one of the time series as follows (but replace the column name with your own chosen column):

myts
       Jan   Feb   Mar   Apr   May   Jun   Jul   Aug   Sep   Oct   Nov   Dec
1982                    17.3  18.1  18.1  18.9  19.0  18.4  20.9  22.4  29.7
1983  22.9  20.8  23.5  21.7  21.4  20.8  21.3  22.6  22.4  22.9  24.0  33.5
1984  22.2  20.8  21.9  20.4  20.6  20.4  19.3  20.4  20.5  21.4  23.5  29.6
1985  23.8  21.6  23.2  22.3  22.4  20.8  20.7  21.8  21.9  23.4  24.9  32.4
1986  25.8  24.7  26.9  23.5  24.2  22.4  22.5  23.9  23.6  24.7  26.9  34.2
1987  28.1  25.9  26.4  25.5  25.4  24.0  26.4  26.4  27.7  28.6  28.5  38.7
1988  31.0  27.9  29.1  28.0  26.2  25.8  28.5  28.2  31.0  29.7  34.5  51.3
1989  22.4  23.4  25.1  22.4  22.5  22.4  22.5  23.5  23.1  22.8  27.1  44.5
1990  22.7  23.9  26.4  25.8  25.1  24.0  23.6  25.3  24.5  26.9  29.3  45.7
1991  24.3  22.3  25.1  22.5  25.0  22.8  23.4  26.4  24.2  26.7  28.9  42.6
1992  27.3  26.4  29.3  29.0  27.0  26.1  28.5  27.0  28.7  30.8  29.7  51.8
1993  28.3  26.5  28.5  28.1  26.6  23.1  25.1  25.2  26.5  27.8  28.1  47.8
1994  24.8  25.5  30.9  27.1  27.5  27.5  25.7  25.0  26.9  28.4  28.8  46.8
1995  26.4  25.2  28.7  26.5  27.9  28.8  27.7  28.8  30.1  28.3  32.8  52.5
1996  27.6  28.5  30.9  30.2  30.5  30.2  33.5  35.4  36.5  39.7  41.6  64.3
1997  39.4  37.2  41.4  39.4  42.1  39.8  42.1  44.5  43.5  46.8  51.5  82.8
1998  46.0  43.9  47.1  46.5  49.7  44.5  52.7  52.6  53.8  51.6  60.0  93.8
1999  56.7  54.1  59.3  54.2  56.3  53.8  56.7  56.3  60.6  65.7  69.1 110.0
2000  54.8  56.7  60.6  56.5  54.5  62.8  57.6  62.1  60.6  67.3  75.7 114.9
2001  65.3  62.0  70.1  67.0  69.6  65.9  62.5  62.8  64.1  71.1  77.0 119.1
2002  68.7  60.9  70.4  60.1  63.6  58.6  66.6  70.3  69.9  74.0  80.6 120.1
2003  75.5  68.8  72.7  75.2  74.1  73.0  77.4  76.3  78.2  80.8  87.8 135.6
2004  85.7  81.5  87.3  83.5  81.2  78.5  79.2  79.3  80.3  90.4  91.3 144.9
2005  76.4  75.7  87.5  86.9  82.8  82.6  92.1  94.9  94.7  85.9  95.3 139.7
2006  91.0  84.5  96.8  95.4  89.9  92.2  92.2  96.9  98.5  94.3  98.6 159.9
2007  94.0  93.0 102.7  90.5  88.6  87.5  89.7  90.3  97.1 103.5 109.1 154.3
2008 104.4  88.6  98.0  91.2  92.1  91.0  92.2  99.9 102.8 121.3 135.9 204.4
2009 134.9 123.0 128.1 116.6 122.6 115.1 122.1 121.6 129.1 143.0 145.6 198.8
2010 134.8 117.1 138.3 125.6 124.5 121.0 132.4 135.3 143.5 161.2 167.8 232.1
2011 160.7 135.0 149.5 151.1 136.8 129.6 148.0 149.1 155.3 161.3 172.6 260.8
2012 176.6 159.2 171.1 159.2 153.8 148.8 144.6 149.6 149.6 157.0 179.3 268.7
2013 168.3 152.4 180.2 145.7 145.3 139.2 146.6 150.5 149.1 163.2 176.5 273.8

Explore your chosen retail time series using the following functions:

autoplot, ggseasonplot, ggsubseriesplot, gglagplot, ggAcf

Can you spot any seasonality, cyclicity and trend? What do you learn about the series?

ap <- autoplot(myts)+
  theme_yaz()
seas <- ggseasonplot(myts)+
  theme_yaz()
subs <- ggsubseriesplot(myts)+
  theme_yaz()
lag <- gglagplot(myts)+
  theme_yaz()
acf <- ggAcf(myts)+
  theme_yaz()
pacf <- ggPacf(myts)+
  theme_yaz()
library(gridExtra)
grid.arrange(ap, subs, seas, lag, acf, pacf, nrow = 3)

Liquor sales exhibit annual seasonality where sales spike during December (around the holidays) and are otherwise flat. The lag plot, partial autocorrelation plot, and subseries plot each show strong correlations with 12 month seasons. That said, there is also a general upward trend over time since 1992.

2.10.2

Repeat for the following series:

bicoal, chicken, dole, usdeaths, bricksq, lynx, ibmclose

Use the help files to find out what the series are.

bicoal

The bicoal data is not seasonal (to the point where ggseasonalplot threw an error). There may be some cyclicality around a four year lag, but it’s weak if at all existent.

library(fma)
a <- autoplot(bicoal)+ theme_yaz()
# b <- ggseasonplot(bicoal)+theme_yaz()
c <- ggsubseriesplot(bicoal)+theme_yaz()
d <- ggPacf(bicoal)+theme_yaz()
grid.arrange(a,c,d, nrow = 2)

chicken

The chicken data is not seasonal (again, to the point where ggseasonalplot threw an error). The overall trend is negative between 1950 and 2000.

a <- autoplot(chicken)+ theme_yaz()
# b <- ggseasonplot(chicken)+theme_yaz()
c <- ggsubseriesplot(chicken)+theme_yaz()
d <- ggPacf(chicken)+theme_yaz()
grid.arrange(a,c,d, nrow = 2)

dole

The dole data has a general positive trend indicating either an increase in population or an increase in the generosity of Austrailia’s welfare state (or both). There appears to have been a shift in seasonality in recent years. Before the spike in enrollment, there were no seasonal trends - welfare receipt was similar year-round. In recent years, seasonality has shifted towards earlier in the year. This may reflect the seasonality of job availability in retail.

a <- autoplot(dole)+ theme_yaz()
b <- ggseasonplot(dole)+theme_yaz()+theme(legend.position = 'none')
c <- ggsubseriesplot(dole)+theme_yaz()
d <- ggPacf(dole)+theme_yaz()
grid.arrange(a,b,c,d, nrow = 2)

usdeaths

Data on accidental deaths in the US in the 1970s indicates a seasonal trend in the summers with a peak in July of every year. On a brighter note, the sheer number of deaths appears to have a slightly negative trend, which should be viewed positively in light of the fact that the US population is continuously growing.

a <- autoplot(usdeaths)+ theme_yaz()
b <- ggseasonplot(usdeaths)+theme_yaz()
c <- ggsubseriesplot(usdeaths)+theme_yaz()
d <- ggPacf(usdeaths)+theme_yaz()
grid.arrange(a,b,c,d, nrow = 2)

bricksq

The bricksq data has a seasonal trend with peaks in Q2 and Q3. This doesn’t make a ton of sense since those quarters are winter in Austrailia and I would assume brick production wouldl heavily correlate with building. Perhaps building season is in winter in Austrailia due to teh summer heat?

a <- autoplot(bricksq)+ theme_yaz()
b <- ggseasonplot(bricksq)+theme_yaz()+theme(legend.position = 'none')
c <- ggsubseriesplot(bricksq)+theme_yaz()
d <- ggPacf(bricksq)+theme_yaz()
grid.arrange(a,b,c,d, nrow = 2)

lynx

Lynx population growth may be cyclical but it’s not seasonal. The trend in population size is also relatively flat.

a <- autoplot(lynx)+ theme_yaz()
# b <- ggseasonplot(lynx)+theme_yaz()
c <- ggsubseriesplot(lynx)+theme_yaz()
d <- ggPacf(lynx)+theme_yaz()
grid.arrange(a,c,d, nrow = 2)

lynx ibmclose

Lastly, IBM closing prices are trending downward in this time series with no clear seasonal trend. There may be some cyclicality, but that is unclear based on this data.

a <- autoplot(ibmclose)+ theme_yaz()
# b <- ggseasonplot(ibmclose)+theme_yaz()
c <- ggsubseriesplot(ibmclose)+theme_yaz()
d <- ggPacf(ibmclose)+theme_yaz()
grid.arrange(a,c,d, nrow = 2)

2.10.3

The arrivals data set comprises quarterly international arrivals (in thousands) to Australia from Japan, New Zealand, UK and the US. Use autoplot and ggseasonplot and compare the differences between the arrivals from these four countries. Can you identify any unusual observations?

I couldn’t find the arrivals data set so I used the woolyrnq data set instead. Generally woollen yarn peaks in either Q2 or Q3, but that is not really consistent from year to year. It looks like Q3 is the peak for about half of the years and Q2 is the peak for another half.

grid.arrange(
  autoplot(woolyrnq)+theme_yaz(),
  ggseasonplot(woolyrnq)+theme_yaz(),
  nrow = 1
)

2.10.4

1 = B 2 = C 3 = D 4 = A

Chapter 5 Questions

5.10.1

Electricity consumption was recorded for a small town on 12 consecutive days. The following maximum temperatures (degrees Celsius) and consumption (megawatt-hours) were recorded for each day. TODO: change the econsumption to a ts of 12 concecutive days - change the lm to tslm below

library(GGally)
ggpairs(econsumption)+
  theme_yaz()

lm.fit <- tslm(Mwh ~ temp, data = ts(econsumption))
library(gridExtra)
grid.arrange(
  data.frame(Mwh = econsumption$Mwh, error = residuals(lm.fit))%>%
    ggplot(aes(Mwh, error))+
      geom_point(color = yaz_cols[1])+
      theme_yaz()+
      geom_hline(yintercept =  0, linetype = 'dashed'),
  data.frame(error = residuals(lm.fit))%>%
    ggplot(aes(x = ' ', y = error))+
      geom_boxplot(fill = yaz_cols[1])+
      labs(y = 'error', x = element_blank())+
      theme_yaz()
  , nrow = 1, widths = c(3,1)
  )

forecast(lm.fit, newdata=data.frame(temp=c(10,35)))
   Point Forecast    Lo 80    Hi 80    Lo 95    Hi 95
13       18.74795 17.27010 20.22579 16.34824 21.14766
14       15.11902 13.50469 16.73335 12.49768 17.74035
autoplot(ts(econsumption$Mwh)) +
  forecast::autolayer(forecast(lm.fit, newdata=data.frame(temp=c(10))), PI=TRUE, series="10 Degrees") +
  forecast::autolayer(forecast(lm.fit, newdata=data.frame(temp=c(35))), PI=TRUE, series="35 Degrees")+
  labs(title = 'Consumption Forecast', y = 'Electricity Consumption',
       x = element_blank())+
  theme_yaz()+
  scale_color_manual(name = 'Possible Temperature', values = yaz_cols[c(3,4)])

5.10.2

Data set olympic contains the winning times (in seconds) for the men’s 400 meters final in each Olympic Games from 1896 to 2012.

olympic%>%head()
ggplot(olympic, aes(Year, time))+
  geom_point()+
  theme_yaz()+
  labs(y = 'Seconds',
       title = 'Men\'s 400M Time (seconds): Olympic Games from 1896 to 2012')

olympic.fit <- tslm(time~Year, data = ts(olympic))
summary(olympic.fit)

Call:
tslm(formula = time ~ Year, data = ts(olympic))

Residuals:
    Min      1Q  Median      3Q     Max 
-1.5215 -0.7037 -0.1642  0.4952  3.7141 

Coefficients:
              Estimate Std. Error t value Pr(>|t|)    
(Intercept) 196.079876  14.177031   13.83 5.09e-12 ***
Year         -0.076790   0.007278  -10.55 7.51e-10 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 1.089 on 21 degrees of freedom
Multiple R-squared:  0.8413,    Adjusted R-squared:  0.8337 
F-statistic: 111.3 on 1 and 21 DF,  p-value: 7.515e-10
grid.arrange(
  ggplot(data.frame(year = olympic$Year, error = olympic.fit$residuals),
         aes(year, error))+
        geom_point(color = yaz_cols[1])+
        theme_yaz()+
        geom_hline(yintercept =  0, linetype = 'dashed'),
    data.frame(error = residuals(olympic.fit))%>%
      ggplot(aes(x = ' ', y = error))+
        geom_boxplot(fill = yaz_cols[1])+
        labs(y = 'error', x = element_blank())+
        theme_yaz()
    , nrow = 1, widths = c(3,1)
)

forecast(olympic.fit, newdata=data.frame(Year = years))
   Point Forecast    Lo 80    Hi 80    Lo 95    Hi 95
24       42.49977 40.94361 44.05593 40.05401 44.94554
25       42.19261 40.62355 43.76167 39.72657 44.65866
26       41.88545 40.30266 43.46825 39.39782 44.37308
27       41.57829 39.98095 43.17563 39.06780 44.08879
new_years <- data.frame(Year= c(24, 25, 26, 27),
                        time = c(44, 43.75 ,43.94 , 43.03))
autoplot(ts(olympic$time, frequency = 1))+
  geom_point()+
  ylim(0,55)+
  autolayer(forecast(olympic.fit, newdata= data.frame(Year = years)), PI=TRUE)+
  labs(y = 'Olympic Times', x = 'Olympic Games Since 1896',
       title = 'Prediction Quality Demonstration')+
  geom_point(data = new_years, aes(Year, time))+
  theme_yaz()

5.10.3

Type easter(ausbeer) and interpret what you see. Easter always occurs in the first or second quarter of the year. The date is close enough to the border of the quarter that occasionally the holiday falls partially in Q1 and partially in Q2 (as happened in 1956).

library(fpp)
easter(ausbeer)%>%
  head(20)
     Qtr1 Qtr2 Qtr3 Qtr4
1956 0.67 0.33 0.00 0.00
1957 0.00 1.00 0.00 0.00
1958 0.00 1.00 0.00 0.00
1959 1.00 0.00 0.00 0.00
1960 0.00 1.00 0.00 0.00

Chapter 6 Questions

6.8.1

Show that a 3×5 MA is equivalent to a 7-term weighted moving average with weights of 0.067, 0.133, 0.200, 0.200, 0.200, 0.133, and 0.067.

6.8.2

The plastics data set consists of the monthly sales (in thousands) of product A for a plastics manufacturer for five years. * Plot the time series of sales of product A. Can you identify seasonal fluctuations and/or a trend-cycle? There is a general upward trend over the course of the years covered by this data. Additionally, there does appear to be a seasonal trend where most plastics are sold around the fall and early winter, which may coincide with holiday gift purchasing.

6.8.3

Recall your retail time series data (from Exercise 1 in Section ??). Decompose the series using X11. Does it reveal any outliers, or unusual features that you had not noticed previously? The x11 decomposition enveils a few outliers in the 1990s and mid 2000s that were not easy to see in the initial plotting of the data! Additionally, we can see that seasonal effects start to increase in teh 1990s leading to a more general updard trend going forward.

LS0tDQp0aXRsZTogIlBSRURJQ1QgNDEzIEhXIDEiDQphdXRob3I6ICdKb3NoIFlhem1hbicNCm91dHB1dDogaHRtbF9ub3RlYm9vaw0KLS0tDQoNCiMjIDIuMTAuMQ0KRG93bmxvYWQgc29tZSBtb250aGx5IEF1c3RyYWxpYW4gcmV0YWlsIGRhdGEgZnJvbSBbaHR0cDovL3JvYmpoeW5kbWFuLmNvbS9kYXRhL3JldGFpbC54bHN4XShodHRwOi8vcm9iamh5bmRtYW4uY29tL2RhdGEvcmV0YWlsLnhsc3gpLiBUaGVzZSByZXByZXNlbnQgcmV0YWlsIHNhbGVzIGluIHZhcmlvdXMgY2F0ZWdvcmllcyBmb3IgZGlmZmVyZW50IEF1c3RyYWxpYW4gc3RhdGVzLCBhbmQgYXJlIHN0b3JlZCBpbiBhIE1TLUV4Y2VsIGZpbGUuDQoNCllvdSBjYW4gcmVhZCB0aGUgZGF0YSBpbnRvIFIgd2l0aCB0aGUgZm9sbG93aW5nIHNjcmlwdDoNCg0KYGBge3J9DQpsaWJyYXJ5KGZvcmVjYXN0KQ0KbGlicmFyeShkcGx5cikNCmxpYnJhcnkoZ2dwbG90MikNCmxpYnJhcnkoeWF6dGhlbWUpDQpsaWJyYXJ5KHJlYWRyKQ0KIyBzZXR3ZCgnJykNCg0KcmV0YWlsZGF0YSA8LSByZWFkX2NzdigiQzovVXNlcnMvam9zaHkvR29vZ2xlIERyaXZlL25vcnRod2VzdGVybi9QUkVESUNULTQxMy9nZW5lcmFsLWRvY3MvSG9tZXdvcmsgMS9yZXRhaWxkYXQuY3N2IiwNCiAgICAgICAgICAgICAgICAgICAgICAgc2tpcCA9IDEpJT4lDQogIGZpbHRlcighaXMubmEoQTMzNDk0MTRSKSkNCmNvZGVib29rIDwtIHJlYWRfY3N2KCdyZXRhaWwuY3N2JykNCmtuaXRyOjprYWJsZShjb2RlYm9vaykNCmBgYA0KDQpTZWxlY3Qgb25lIG9mIHRoZSB0aW1lIHNlcmllcyBhcyBmb2xsb3dzIChidXQgcmVwbGFjZSB0aGUgY29sdW1uIG5hbWUgd2l0aCB5b3VyIG93biBjaG9zZW4gY29sdW1uKToNCg0KYGBge3J9DQpteXRzIDwtIHRzKHJldGFpbGRhdGElPiVzZWxlY3QobGlxdW9yX3NhbGVzID0gQTMzNDk0MTRSKSwgZnJlcXVlbmN5PTEyLCBzdGFydD1jKDE5ODIsNCkpDQpgYGANCg0KRXhwbG9yZSB5b3VyIGNob3NlbiByZXRhaWwgdGltZSBzZXJpZXMgdXNpbmcgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnM6DQoNCmBhdXRvcGxvdGAsIGBnZ3NlYXNvbnBsb3RgLCBgZ2dzdWJzZXJpZXNwbG90YCwgYGdnbGFncGxvdGAsIGBnZ0FjZmANCg0KQ2FuIHlvdSBzcG90IGFueSBzZWFzb25hbGl0eSwgY3ljbGljaXR5IGFuZCB0cmVuZD8gV2hhdCBkbyB5b3UgbGVhcm4gYWJvdXQgdGhlIHNlcmllcz8NCg0KYGBge3IsIGZpZy53aWR0aCA9IDgsIGZpZy5oZWlnaHQ9MTJ9DQphcCA8LSBhdXRvcGxvdChteXRzKSsNCiAgdGhlbWVfeWF6KCkNCg0Kc2VhcyA8LSBnZ3NlYXNvbnBsb3QobXl0cykrDQogIHRoZW1lX3lheigpDQoNCnN1YnMgPC0gZ2dzdWJzZXJpZXNwbG90KG15dHMpKw0KICB0aGVtZV95YXooKQ0KDQpsYWcgPC0gZ2dsYWdwbG90KG15dHMpKw0KICB0aGVtZV95YXooKQ0KDQphY2YgPC0gZ2dBY2YobXl0cykrDQogIHRoZW1lX3lheigpDQoNCnBhY2YgPC0gZ2dQYWNmKG15dHMpKw0KICB0aGVtZV95YXooKQ0KDQpsaWJyYXJ5KGdyaWRFeHRyYSkNCmdyaWQuYXJyYW5nZShhcCwgc3Vicywgc2VhcywgbGFnLCBhY2YsIHBhY2YsIG5yb3cgPSAzKQ0KYGBgDQoNCkxpcXVvciBzYWxlcyBleGhpYml0IGFubnVhbCBzZWFzb25hbGl0eSB3aGVyZSBzYWxlcyBzcGlrZSBkdXJpbmcgRGVjZW1iZXIgKGFyb3VuZCB0aGUgaG9saWRheXMpIGFuZCBhcmUgb3RoZXJ3aXNlIGZsYXQuIFRoZSBsYWcgcGxvdCwgcGFydGlhbCBhdXRvY29ycmVsYXRpb24gcGxvdCwgYW5kIHN1YnNlcmllcyBwbG90IGVhY2ggc2hvdyBzdHJvbmcgY29ycmVsYXRpb25zIHdpdGggMTIgbW9udGggc2Vhc29ucy4gVGhhdCBzYWlkLCB0aGVyZSBpcyBhbHNvIGEgZ2VuZXJhbCB1cHdhcmQgdHJlbmQgb3ZlciB0aW1lIHNpbmNlIDE5OTIuIA0KDQojIyAyLjEwLjINClJlcGVhdCBmb3IgdGhlIGZvbGxvd2luZyBzZXJpZXM6DQoNCmBiaWNvYWxgLCBgY2hpY2tlbmAsIGBkb2xlYCwgYHVzZGVhdGhzYCwgYGJyaWNrc3FgLCBgbHlueGAsIGBpYm1jbG9zZWANCg0KVXNlIHRoZSBoZWxwIGZpbGVzIHRvIGZpbmQgb3V0IHdoYXQgdGhlIHNlcmllcyBhcmUuDQoNCiMjIyBiaWNvYWwNClRoZSBiaWNvYWwgZGF0YSBpcyBub3Qgc2Vhc29uYWwgKHRvIHRoZSBwb2ludCB3aGVyZSBgZ2dzZWFzb25hbHBsb3RgIHRocmV3IGFuIGVycm9yKS4gVGhlcmUgbWF5IGJlIHNvbWUgY3ljbGljYWxpdHkgYXJvdW5kIGEgZm91ciB5ZWFyIGxhZywgYnV0IGl0J3Mgd2VhayBpZiBhdCBhbGwgZXhpc3RlbnQuDQpgYGB7cn0NCmxpYnJhcnkoZm1hKQ0KDQphIDwtIGF1dG9wbG90KGJpY29hbCkrIHRoZW1lX3lheigpDQojIGIgPC0gZ2dzZWFzb25wbG90KGJpY29hbCkrdGhlbWVfeWF6KCkNCmMgPC0gZ2dzdWJzZXJpZXNwbG90KGJpY29hbCkrdGhlbWVfeWF6KCkNCmQgPC0gZ2dQYWNmKGJpY29hbCkrdGhlbWVfeWF6KCkNCg0KZ3JpZC5hcnJhbmdlKGEsYyxkLCBucm93ID0gMikNCmBgYA0KDQojIyMgY2hpY2tlbg0KVGhlIGNoaWNrZW4gZGF0YSBpcyBub3Qgc2Vhc29uYWwgKGFnYWluLCB0byB0aGUgcG9pbnQgd2hlcmUgYGdnc2Vhc29uYWxwbG90YCB0aHJldyBhbiBlcnJvcikuIFRoZSBvdmVyYWxsIHRyZW5kIGlzIG5lZ2F0aXZlIGJldHdlZW4gMTk1MCBhbmQgMjAwMC4NCmBgYHtyfQ0KYSA8LSBhdXRvcGxvdChjaGlja2VuKSsgdGhlbWVfeWF6KCkNCiMgYiA8LSBnZ3NlYXNvbnBsb3QoY2hpY2tlbikrdGhlbWVfeWF6KCkNCmMgPC0gZ2dzdWJzZXJpZXNwbG90KGNoaWNrZW4pK3RoZW1lX3lheigpDQpkIDwtIGdnUGFjZihjaGlja2VuKSt0aGVtZV95YXooKQ0KDQpncmlkLmFycmFuZ2UoYSxjLGQsIG5yb3cgPSAyKQ0KYGBgDQoNCiMjIyBkb2xlDQpUaGUgZG9sZSBkYXRhIGhhcyBhIGdlbmVyYWwgcG9zaXRpdmUgdHJlbmQgaW5kaWNhdGluZyBlaXRoZXIgYW4gaW5jcmVhc2UgaW4gcG9wdWxhdGlvbiBvciBhbiBpbmNyZWFzZSBpbiB0aGUgZ2VuZXJvc2l0eSBvZiBBdXN0cmFpbGlhJ3Mgd2VsZmFyZSBzdGF0ZSAob3IgYm90aCkuIFRoZXJlIGFwcGVhcnMgdG8gaGF2ZSBiZWVuIGEgc2hpZnQgaW4gc2Vhc29uYWxpdHkgaW4gcmVjZW50IHllYXJzLiBCZWZvcmUgdGhlIHNwaWtlIGluIGVucm9sbG1lbnQsIHRoZXJlIHdlcmUgbm8gc2Vhc29uYWwgdHJlbmRzIC0gd2VsZmFyZSByZWNlaXB0IHdhcyBzaW1pbGFyIHllYXItcm91bmQuIEluIHJlY2VudCB5ZWFycywgc2Vhc29uYWxpdHkgaGFzIHNoaWZ0ZWQgdG93YXJkcyBlYXJsaWVyIGluIHRoZSB5ZWFyLiBUaGlzIG1heSByZWZsZWN0IHRoZSBzZWFzb25hbGl0eSBvZiBqb2IgYXZhaWxhYmlsaXR5IGluIHJldGFpbC4gDQpgYGB7cn0NCmEgPC0gYXV0b3Bsb3QoZG9sZSkrIHRoZW1lX3lheigpDQpiIDwtIGdnc2Vhc29ucGxvdChkb2xlKSt0aGVtZV95YXooKSt0aGVtZShsZWdlbmQucG9zaXRpb24gPSAnbm9uZScpDQpjIDwtIGdnc3Vic2VyaWVzcGxvdChkb2xlKSt0aGVtZV95YXooKQ0KZCA8LSBnZ1BhY2YoZG9sZSkrdGhlbWVfeWF6KCkNCg0KZ3JpZC5hcnJhbmdlKGEsYixjLGQsIG5yb3cgPSAyKQ0KYGBgDQoNCiMjIyB1c2RlYXRocw0KRGF0YSBvbiBhY2NpZGVudGFsIGRlYXRocyBpbiB0aGUgVVMgaW4gdGhlIDE5NzBzIGluZGljYXRlcyBhIHNlYXNvbmFsIHRyZW5kIGluIHRoZSBzdW1tZXJzIHdpdGggYSBwZWFrIGluIEp1bHkgb2YgZXZlcnkgeWVhci4gT24gYSBicmlnaHRlciBub3RlLCB0aGUgc2hlZXIgbnVtYmVyIG9mIGRlYXRocyBhcHBlYXJzIHRvIGhhdmUgYSBzbGlnaHRseSBuZWdhdGl2ZSB0cmVuZCwgd2hpY2ggc2hvdWxkIGJlIHZpZXdlZCBwb3NpdGl2ZWx5IGluIGxpZ2h0IG9mIHRoZSBmYWN0IHRoYXQgdGhlIFVTIHBvcHVsYXRpb24gaXMgY29udGludW91c2x5IGdyb3dpbmcuIA0KYGBge3J9DQphIDwtIGF1dG9wbG90KHVzZGVhdGhzKSsgdGhlbWVfeWF6KCkNCmIgPC0gZ2dzZWFzb25wbG90KHVzZGVhdGhzKSt0aGVtZV95YXooKQ0KYyA8LSBnZ3N1YnNlcmllc3Bsb3QodXNkZWF0aHMpK3RoZW1lX3lheigpDQpkIDwtIGdnUGFjZih1c2RlYXRocykrdGhlbWVfeWF6KCkNCg0KZ3JpZC5hcnJhbmdlKGEsYixjLGQsIG5yb3cgPSAyKQ0KYGBgDQoNCiMjIyBicmlja3NxDQpUaGUgYnJpY2tzcSBkYXRhIGhhcyBhIHNlYXNvbmFsIHRyZW5kIHdpdGggcGVha3MgaW4gUTIgYW5kIFEzLiBUaGlzIGRvZXNuJ3QgbWFrZSBhIHRvbiBvZiBzZW5zZSBzaW5jZSB0aG9zZSBxdWFydGVycyBhcmUgd2ludGVyIGluIEF1c3RyYWlsaWEgYW5kIEkgd291bGQgYXNzdW1lIGJyaWNrIHByb2R1Y3Rpb24gd291bGRsIGhlYXZpbHkgY29ycmVsYXRlIHdpdGggYnVpbGRpbmcuIFBlcmhhcHMgYnVpbGRpbmcgc2Vhc29uIGlzIGluIHdpbnRlciBpbiBBdXN0cmFpbGlhIGR1ZSB0byB0ZWggc3VtbWVyIGhlYXQ/DQpgYGB7cn0NCmEgPC0gYXV0b3Bsb3QoYnJpY2tzcSkrIHRoZW1lX3lheigpDQpiIDwtIGdnc2Vhc29ucGxvdChicmlja3NxKSt0aGVtZV95YXooKSt0aGVtZShsZWdlbmQucG9zaXRpb24gPSAnbm9uZScpDQpjIDwtIGdnc3Vic2VyaWVzcGxvdChicmlja3NxKSt0aGVtZV95YXooKQ0KZCA8LSBnZ1BhY2YoYnJpY2tzcSkrdGhlbWVfeWF6KCkNCg0KZ3JpZC5hcnJhbmdlKGEsYixjLGQsIG5yb3cgPSAyKQ0KYGBgDQoNCiMjIyBseW54IA0KTHlueCBwb3B1bGF0aW9uIGdyb3d0aCBtYXkgYmUgY3ljbGljYWwgYnV0IGl0J3Mgbm90IHNlYXNvbmFsLiBUaGUgdHJlbmQgaW4gcG9wdWxhdGlvbiBzaXplIGlzIGFsc28gcmVsYXRpdmVseSBmbGF0Lg0KYGBge3J9DQphIDwtIGF1dG9wbG90KGx5bngpKyB0aGVtZV95YXooKQ0KIyBiIDwtIGdnc2Vhc29ucGxvdChseW54KSt0aGVtZV95YXooKQ0KYyA8LSBnZ3N1YnNlcmllc3Bsb3QobHlueCkrdGhlbWVfeWF6KCkNCmQgPC0gZ2dQYWNmKGx5bngpK3RoZW1lX3lheigpDQoNCmdyaWQuYXJyYW5nZShhLGMsZCwgbnJvdyA9IDIpDQpgYGANCg0KIyMjIGx5bnggaWJtY2xvc2UNCkxhc3RseSwgSUJNIGNsb3NpbmcgcHJpY2VzIGFyZSB0cmVuZGluZyBkb3dud2FyZCBpbiB0aGlzIHRpbWUgc2VyaWVzIHdpdGggbm8gY2xlYXIgc2Vhc29uYWwgdHJlbmQuIFRoZXJlIG1heSBiZSBzb21lIGN5Y2xpY2FsaXR5LCBidXQgdGhhdCBpcyB1bmNsZWFyIGJhc2VkIG9uIHRoaXMgZGF0YS4gDQpgYGB7cn0NCmEgPC0gYXV0b3Bsb3QoaWJtY2xvc2UpKyB0aGVtZV95YXooKQ0KIyBiIDwtIGdnc2Vhc29ucGxvdChpYm1jbG9zZSkrdGhlbWVfeWF6KCkNCmMgPC0gZ2dzdWJzZXJpZXNwbG90KGlibWNsb3NlKSt0aGVtZV95YXooKQ0KZCA8LSBnZ1BhY2YoaWJtY2xvc2UpK3RoZW1lX3lheigpDQoNCmdyaWQuYXJyYW5nZShhLGMsZCwgbnJvdyA9IDIpDQpgYGANCg0KIyMgMi4xMC4zDQpUaGUgYGFycml2YWxzYCBkYXRhIHNldCBjb21wcmlzZXMgcXVhcnRlcmx5IGludGVybmF0aW9uYWwgYXJyaXZhbHMgKGluIHRob3VzYW5kcykgdG8gQXVzdHJhbGlhIGZyb20gSmFwYW4sIE5ldyBaZWFsYW5kLCBVSyBhbmQgdGhlIFVTLiBVc2UgYXV0b3Bsb3QgYW5kIGdnc2Vhc29ucGxvdCBhbmQgY29tcGFyZSB0aGUgZGlmZmVyZW5jZXMgYmV0d2VlbiB0aGUgYXJyaXZhbHMgZnJvbSB0aGVzZSBmb3VyIGNvdW50cmllcy4gQ2FuIHlvdSBpZGVudGlmeSBhbnkgdW51c3VhbCBvYnNlcnZhdGlvbnM/DQoNCkkgY291bGRuJ3QgZmluZCB0aGUgYGFycml2YWxzYCBkYXRhIHNldCBzbyBJIHVzZWQgdGhlIGB3b29seXJucWAgZGF0YSBzZXQgaW5zdGVhZC4gR2VuZXJhbGx5IHdvb2xsZW4geWFybiBwZWFrcyBpbiBlaXRoZXIgUTIgb3IgUTMsIGJ1dCB0aGF0IGlzIG5vdCByZWFsbHkgY29uc2lzdGVudCBmcm9tIHllYXIgdG8geWVhci4gSXQgbG9va3MgbGlrZSBRMyBpcyB0aGUgcGVhayBmb3IgYWJvdXQgaGFsZiBvZiB0aGUgeWVhcnMgYW5kIFEyIGlzIHRoZSBwZWFrIGZvciBhbm90aGVyIGhhbGYuDQpgYGB7ciwgZmlnLndpZHRoPTEwLCBmaWcuaGVpZ2h0PTR9DQpncmlkLmFycmFuZ2UoDQogIGF1dG9wbG90KHdvb2x5cm5xKSt0aGVtZV95YXooKSwNCiAgZ2dzZWFzb25wbG90KHdvb2x5cm5xKSt0aGVtZV95YXooKSwNCiAgbnJvdyA9IDENCikNCmBgYA0KDQojIyAyLjEwLjQNCjEgPSBCDQoyID0gQw0KMyA9IEQNCjQgPSBBDQoNCiMjIENoYXB0ZXIgNSBRdWVzdGlvbnMNCiMjIDUuMTAuMQ0KRWxlY3RyaWNpdHkgY29uc3VtcHRpb24gd2FzIHJlY29yZGVkIGZvciBhIHNtYWxsIHRvd24gb24gMTIgY29uc2VjdXRpdmUgZGF5cy4gVGhlIGZvbGxvd2luZyBtYXhpbXVtIHRlbXBlcmF0dXJlcyAoZGVncmVlcyBDZWxzaXVzKSBhbmQgY29uc3VtcHRpb24gKG1lZ2F3YXR0LWhvdXJzKSB3ZXJlIHJlY29yZGVkIGZvciBlYWNoIGRheS4gVE9ETzogY2hhbmdlIHRoZSBlY29uc3VtcHRpb24gdG8gYSB0cyBvZiAxMiBjb25jZWN1dGl2ZSBkYXlzIC0gY2hhbmdlIHRoZSBsbSB0byB0c2xtIGJlbG93DQoNCiogUGxvdCB0aGUgZGF0YSBhbmQgZmluZCB0aGUgcmVncmVzc2lvbiBtb2RlbCBmb3IgTXdoIHdpdGggdGVtcGVyYXR1cmUgYXMgYW4gZXhwbGFuYXRvcnkgdmFyaWFibGUuIFdoeSBpcyB0aGVyZSBhIG5lZ2F0aXZlIHJlbGF0aW9uc2hpcD8NCmBgYHtyfQ0KbGlicmFyeShHR2FsbHkpDQpnZ3BhaXJzKGVjb25zdW1wdGlvbikrDQogIHRoZW1lX3lheigpDQpgYGANCg0KKiBQcm9kdWNlIGEgcmVzaWR1YWwgcGxvdC4gSXMgdGhlIG1vZGVsIGFkZXF1YXRlPyBBcmUgdGhlcmUgYW55IG91dGxpZXJzIG9yIGluZmx1ZW50aWFsIG9ic2VydmF0aW9ucz8NClRoZSByZXNpZHVhbHMgdmlvbGF0ZSB0aGUgYXNzdW1wdGlvbiB0aGF0IHRoZXkgYXJlIG5vcm1hbGx5IGRpc3RyaWJ1dGVkIHdpdGggbWVhbiB6ZXJvLiBUaGVyZSBpcyBvbmUgb3V0bGllciB3aXRoIGEgcmVzaWR1YWwgb3ZlciAyLiAgDQpgYGB7cn0NCmxtLmZpdCA8LSB0c2xtKE13aCB+IHRlbXAsIGRhdGEgPSB0cyhlY29uc3VtcHRpb24pKQ0KDQpsaWJyYXJ5KGdyaWRFeHRyYSkNCmdyaWQuYXJyYW5nZSgNCiAgZGF0YS5mcmFtZShNd2ggPSBlY29uc3VtcHRpb24kTXdoLCBlcnJvciA9IHJlc2lkdWFscyhsbS5maXQpKSU+JQ0KICAgIGdncGxvdChhZXMoTXdoLCBlcnJvcikpKw0KICAgICAgZ2VvbV9wb2ludChjb2xvciA9IHlhel9jb2xzWzFdKSsNCiAgICAgIHRoZW1lX3lheigpKw0KICAgICAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gIDAsIGxpbmV0eXBlID0gJ2Rhc2hlZCcpLA0KICBkYXRhLmZyYW1lKGVycm9yID0gcmVzaWR1YWxzKGxtLmZpdCkpJT4lDQogICAgZ2dwbG90KGFlcyh4ID0gJyAnLCB5ID0gZXJyb3IpKSsNCiAgICAgIGdlb21fYm94cGxvdChmaWxsID0geWF6X2NvbHNbMV0pKw0KICAgICAgbGFicyh5ID0gJ2Vycm9yJywgeCA9IGVsZW1lbnRfYmxhbmsoKSkrDQogICAgICB0aGVtZV95YXooKQ0KICAsIG5yb3cgPSAxLCB3aWR0aHMgPSBjKDMsMSkNCiAgKQ0KYGBgDQoNCiogVXNlIHRoZSBtb2RlbCB0byBwcmVkaWN0IHRoZSBlbGVjdHJpY2l0eSBjb25zdW1wdGlvbiB0aGF0IHlvdSB3b3VsZCBleHBlY3QgZm9yIHRoZSBuZXh0IGRheSBpZiB0aGUgbWF4aW11bSB0ZW1wZXJhdHVyZSB3YXMgMTDiiJggYW5kIGNvbXBhcmUgaXQgd2l0aCB0aGUgZm9yZWNhc3QgaWYgdGhlIHdpdGggbWF4aW11bSB0ZW1wZXJhdHVyZSB3YXMgMzXiiJguIERvIHlvdSBiZWxpZXZlIHRoZXNlIHByZWRpY3Rpb25zPw0KSXQgbWFrZXMgc2Vuc2UgdGhhdCB0aGUgMzUgZGVncmVlIHByZWRpY3Rpb24gd291bGQgYmUgbG93ZXIgdGhhbiB0aGUgMTAgZGVncmVlIHByZWRpY3Rpb24gaGFzIGVuZXJneSBjb25zdW1wdGlvbiB0ZW5kcyB0byBiZSBsb3dlciBpbiBjb29sZXIgdGVtcGVyYXR1cmVzLiBUaGF0IHNhaWQsIHRoZSBwcmVkaWN0aW9uIGludGVydmFscyBhcmUgdmVyeSB3aWRlIQ0KYGBge3J9DQpmb3JlY2FzdChsbS5maXQsIG5ld2RhdGE9ZGF0YS5mcmFtZSh0ZW1wPWMoMTAsMzUpKSkNCg0KYXV0b3Bsb3QodHMoZWNvbnN1bXB0aW9uJE13aCkpICsNCiAgZm9yZWNhc3Q6OmF1dG9sYXllcihmb3JlY2FzdChsbS5maXQsIG5ld2RhdGE9ZGF0YS5mcmFtZSh0ZW1wPWMoMTApKSksIFBJPVRSVUUsIHNlcmllcz0iMTAgRGVncmVlcyIpICsNCiAgZm9yZWNhc3Q6OmF1dG9sYXllcihmb3JlY2FzdChsbS5maXQsIG5ld2RhdGE9ZGF0YS5mcmFtZSh0ZW1wPWMoMzUpKSksIFBJPVRSVUUsIHNlcmllcz0iMzUgRGVncmVlcyIpKw0KICBsYWJzKHRpdGxlID0gJ0NvbnN1bXB0aW9uIEZvcmVjYXN0JywgeSA9ICdFbGVjdHJpY2l0eSBDb25zdW1wdGlvbicsDQogICAgICAgeCA9IGVsZW1lbnRfYmxhbmsoKSkrDQogIHRoZW1lX3lheigpKw0KICBzY2FsZV9jb2xvcl9tYW51YWwobmFtZSA9ICdQb3NzaWJsZSBUZW1wZXJhdHVyZScsIHZhbHVlcyA9IHlhel9jb2xzW2MoMyw0KV0pDQpgYGANCg0KKiBHaXZlIHByZWRpY3Rpb24gaW50ZXJ2YWxzIGZvciB5b3VyIGZvcmVjYXN0cy4NCg0KIyMgNS4xMC4yDQpEYXRhIHNldCBgb2x5bXBpY2AgY29udGFpbnMgdGhlIHdpbm5pbmcgdGltZXMgKGluIHNlY29uZHMpIGZvciB0aGUgbWVu4oCZcyA0MDAgbWV0ZXJzIGZpbmFsIGluIGVhY2ggT2x5bXBpYyBHYW1lcyBmcm9tIDE4OTYgdG8gMjAxMi4NCg0KYGBge3J9DQpvbHltcGljJT4laGVhZCgpDQpgYGANCg0KKiBQbG90IHRoZSB3aW5uaW5nIHRpbWUgYWdhaW5zdCB0aGUgeWVhci4gRGVzY3JpYmUgdGhlIG1haW4gZmVhdHVyZXMgb2YgdGhlIHNjYXR0ZXJwbG90Lg0KVGhlcmUgaXMgYSBkb3dud2FyZCB0cmVuZCBpbiA0MDBNIHRpbWVzIG92ZXIgdGhlIHllYXJzLiBSdW5uZXJzIGFyZSBnZXR0aW5nIGZhc3RlciENCmBgYHtyfQ0KZ2dwbG90KG9seW1waWMsIGFlcyhZZWFyLCB0aW1lKSkrDQogIGdlb21fcG9pbnQoKSsNCiAgdGhlbWVfeWF6KCkrDQogIGxhYnMoeSA9ICdTZWNvbmRzJywNCiAgICAgICB0aXRsZSA9ICdNZW5cJ3MgNDAwTSBUaW1lIChzZWNvbmRzKTogT2x5bXBpYyBHYW1lcyBmcm9tIDE4OTYgdG8gMjAxMicpDQpgYGANCg0KKiBGaXQgYSByZWdyZXNzaW9uIGxpbmUgdG8gdGhlIGRhdGEuIE9idmlvdXNseSB0aGUgd2lubmluZyB0aW1lcyBoYXZlIGJlZW4gZGVjcmVhc2luZywgYnV0IGF0IHdoYXQgYXZlcmFnZSByYXRlIHBlciB5ZWFyPw0KVGhlIGF2ZXJhZ2UgcmF0ZSBvZiBjaGFuZ2UgZm9yIDQwME0gdGltZXMgaXMgLS4wNyBzZWNvbmRzIHBlciB5ZWFyLiANCmBgYHtyfQ0Kb2x5bXBpYy5maXQgPC0gdHNsbSh0aW1lflllYXIsIGRhdGEgPSB0cyhvbHltcGljKSkNCnN1bW1hcnkob2x5bXBpYy5maXQpDQpgYGANCg0KKiBQbG90IHRoZSByZXNpZHVhbHMgYWdhaW5zdCB0aGUgeWVhci4gV2hhdCBkb2VzIHRoaXMgaW5kaWNhdGUgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoZSBmaXR0ZWQgbGluZT8NCkZvciB0aGUgbW9zdCBwYXJ0LCB0aGUgcmVncmVzc2lvbiBsaW5lIGZpdHMgdGhlIGRhdGEgYXBwcm9wcmlhdGVseSwgYnV0IHRoZSBmaXJzdCB5ZWFyIGlzIGFuIGluZmx1ZW50aWFsIHBvaW50LiANCmBgYHtyfQ0KZ3JpZC5hcnJhbmdlKA0KICBnZ3Bsb3QoZGF0YS5mcmFtZSh5ZWFyID0gb2x5bXBpYyRZZWFyLCBlcnJvciA9IG9seW1waWMuZml0JHJlc2lkdWFscyksDQogICAgICAgICBhZXMoeWVhciwgZXJyb3IpKSsNCiAgICAgICAgZ2VvbV9wb2ludChjb2xvciA9IHlhel9jb2xzWzFdKSsNCiAgICAgICAgdGhlbWVfeWF6KCkrDQogICAgICAgIGdlb21faGxpbmUoeWludGVyY2VwdCA9ICAwLCBsaW5ldHlwZSA9ICdkYXNoZWQnKSwNCiAgICBkYXRhLmZyYW1lKGVycm9yID0gcmVzaWR1YWxzKG9seW1waWMuZml0KSklPiUNCiAgICAgIGdncGxvdChhZXMoeCA9ICcgJywgeSA9IGVycm9yKSkrDQogICAgICAgIGdlb21fYm94cGxvdChmaWxsID0geWF6X2NvbHNbMV0pKw0KICAgICAgICBsYWJzKHkgPSAnZXJyb3InLCB4ID0gZWxlbWVudF9ibGFuaygpKSsNCiAgICAgICAgdGhlbWVfeWF6KCkNCiAgICAsIG5yb3cgPSAxLCB3aWR0aHMgPSBjKDMsMSkNCikNCmBgYA0KDQoqIFByZWRpY3QgdGhlIHdpbm5pbmcgdGltZSBmb3IgdGhlIG1lbuKAmXMgNDAwIG1ldGVycyBmaW5hbCBpbiB0aGUgMjAwMCwgMjAwNCwgMjAwOCBhbmQgMjAxMiBPbHltcGljcy4gR2l2ZSBhIHByZWRpY3Rpb24gaW50ZXJ2YWwgZm9yIGVhY2ggb2YgeW91ciBmb3JlY2FzdHMuIFdoYXQgYXNzdW1wdGlvbnMgaGF2ZSB5b3UgbWFkZSBpbiB0aGVzZSBjYWxjdWxhdGlvbnM/DQpUaGUgYXNzdW1wdGlvbnMgaW4gdGhpcyBtb2RlbCBhcmUgdGhlIHNhbWUgYXMgdGhlIGFzc3VtcHRpb25zIGZvciBPTFMgcmVncmVzc2lvbiBpbiBhIG5vbi10aW1lIHNlcmllcyBjb250ZXh0LiANCmBgYHtyfQ0KZm9yZWNhc3Qob2x5bXBpYy5maXQsIG5ld2RhdGE9ZGF0YS5mcmFtZShZZWFyID0geWVhcnMpKQ0KYGBgDQoNCiogRmluZCBvdXQgdGhlIGFjdHVhbCB3aW5uaW5nIHRpbWVzIGZvciB0aGVzZSBPbHltcGljcyAoc2VlIHd3dy5kYXRhYmFzZW9seW1waWNzLmNvbSkuIEhvdyBnb29kIHdlcmUgeW91ciBmb3JlY2FzdHMgYW5kIHByZWRpY3Rpb24gaW50ZXJ2YWxzPw0KVGhlIHByZWRpY3Rpb25zIHdlcmUgT0ssIGFsdGhvdWdoIEkgdGhpbmsgdGhlIGluZmx1ZW50aWFsIHBvaW50IGZyb20gMTg5NiBsZWQgdG8gdGhlIG1vZGVsIGJlaW5nIGEgYml0IG92ZXJseSBvcHRpbWlzdGljLiBBbGwgZm91ciBhY3R1YWwgdGltZXMgZmVsbCB3aXRoaW4gdGhlIDgwJSBjb25maWRlbmNlIGludGVydmFsLCBidXQgYWxsIHdlcmUgb2ZmIGluIHRoZSBzYW1lIGRpcmVjdGlvbi4NCmBgYHtyfQ0KbmV3X3llYXJzIDwtIGRhdGEuZnJhbWUoWWVhcj0gYygyNCwgMjUsIDI2LCAyNyksDQogICAgICAgICAgICAgICAgICAgICAgICB0aW1lID0gYyg0NCwgNDMuNzUgLDQzLjk0ICwgNDMuMDMpKQ0KYXV0b3Bsb3QodHMob2x5bXBpYyR0aW1lLCBmcmVxdWVuY3kgPSAxKSkrDQogIGdlb21fcG9pbnQoKSsNCiAgeWxpbSgwLDU1KSsNCiAgYXV0b2xheWVyKGZvcmVjYXN0KG9seW1waWMuZml0LCBuZXdkYXRhPSBkYXRhLmZyYW1lKFllYXIgPSB5ZWFycykpLCBQST1UUlVFKSsNCiAgbGFicyh5ID0gJ09seW1waWMgVGltZXMnLCB4ID0gJ09seW1waWMgR2FtZXMgU2luY2UgMTg5NicsDQogICAgICAgdGl0bGUgPSAnUHJlZGljdGlvbiBRdWFsaXR5IERlbW9uc3RyYXRpb24nKSsNCiAgZ2VvbV9wb2ludChkYXRhID0gbmV3X3llYXJzLCBhZXMoWWVhciwgdGltZSkpKw0KICB0aGVtZV95YXooKQ0KYGBgDQoNCg0KIyMgNS4xMC4zDQpUeXBlIGVhc3RlcihhdXNiZWVyKSBhbmQgaW50ZXJwcmV0IHdoYXQgeW91IHNlZS4NCkVhc3RlciBhbHdheXMgb2NjdXJzIGluIHRoZSBmaXJzdCBvciBzZWNvbmQgcXVhcnRlciBvZiB0aGUgeWVhci4gVGhlIGRhdGUgaXMgY2xvc2UgZW5vdWdoIHRvIHRoZSBib3JkZXIgb2YgdGhlIHF1YXJ0ZXIgdGhhdCBvY2Nhc2lvbmFsbHkgdGhlIGhvbGlkYXkgZmFsbHMgcGFydGlhbGx5IGluIFExIGFuZCBwYXJ0aWFsbHkgaW4gUTIgKGFzIGhhcHBlbmVkIGluIDE5NTYpLg0KYGBge3J9DQpsaWJyYXJ5KGZwcCkNCmVhc3RlcihhdXNiZWVyKSU+JQ0KICBoZWFkKDIwKQ0KYGBgDQoNCiMjIENoYXB0ZXIgNiBRdWVzdGlvbnMNCiMjIDYuOC4xDQpTaG93IHRoYXQgYSAzw5c1ICBNQSBpcyBlcXVpdmFsZW50IHRvIGEgNy10ZXJtIHdlaWdodGVkIG1vdmluZyBhdmVyYWdlIHdpdGggd2VpZ2h0cyBvZiAwLjA2NywgMC4xMzMsIDAuMjAwLCAwLjIwMCwgMC4yMDAsIDAuMTMzLCBhbmQgMC4wNjcuDQpgYGB7cn0NCg0KYGBgDQoNCiMjIDYuOC4yDQpUaGUgcGxhc3RpY3MgZGF0YSBzZXQgY29uc2lzdHMgb2YgdGhlIG1vbnRobHkgc2FsZXMgKGluIHRob3VzYW5kcykgb2YgcHJvZHVjdCBBIGZvciBhIHBsYXN0aWNzIG1hbnVmYWN0dXJlciBmb3IgZml2ZSB5ZWFycy4NCiogUGxvdCB0aGUgdGltZSBzZXJpZXMgb2Ygc2FsZXMgb2YgcHJvZHVjdCBBLiBDYW4geW91IGlkZW50aWZ5IHNlYXNvbmFsIGZsdWN0dWF0aW9ucyBhbmQvb3IgYSB0cmVuZC1jeWNsZT8NClRoZXJlIGlzIGEgZ2VuZXJhbCB1cHdhcmQgdHJlbmQgb3ZlciB0aGUgY291cnNlIG9mIHRoZSB5ZWFycyBjb3ZlcmVkIGJ5IHRoaXMgZGF0YS4gQWRkaXRpb25hbGx5LCB0aGVyZSBkb2VzIGFwcGVhciB0byBiZSBhIHNlYXNvbmFsIHRyZW5kIHdoZXJlIG1vc3QgcGxhc3RpY3MgYXJlIHNvbGQgYXJvdW5kIHRoZSBmYWxsIGFuZCBlYXJseSB3aW50ZXIsIHdoaWNoIG1heSBjb2luY2lkZSB3aXRoIGhvbGlkYXkgZ2lmdCBwdXJjaGFzaW5nLg0KYGBge3J9DQphdXRvcGxvdChwbGFzdGljcykrDQogIHRoZW1lX3lheigpDQpgYGANCg0KKiBVc2UgYSBjbGFzc2ljYWwgbXVsdGlwbGljYXRpdmUgZGVjb21wb3NpdGlvbiB0byBjYWxjdWxhdGUgdGhlIHRyZW5kLWN5Y2xlIGFuZCBzZWFzb25hbCBpbmRpY2VzLg0KYGBge3J9DQpmaXQubXVsdCA8LSBkZWNvbXBvc2UocGxhc3RpY3MsIHR5cGU9Im11bHRpcGxpY2F0aXZlIikNCmF1dG9wbG90KGZpdC5tdWx0KSsNCiAgdGhlbWVfeWF6KCkNCmBgYA0KDQoqIERvIHRoZSByZXN1bHRzIHN1cHBvcnQgdGhlIGdyYXBoaWNhbCBpbnRlcnByZXRhdGlvbiBmcm9tIHBhcnQgKGEpPw0KWWVzIQ0KKiBDb21wdXRlIGFuZCBwbG90IHRoZSBzZWFzb25hbGx5IGFkanVzdGVkIGRhdGEuDQpgYGB7cn0NCmF1dG9wbG90KGZpdC5tdWx0JHRyZW5kICsgZml0Lm11bHQkcmFuZG9tKSsNCiAgdGhlbWVfeWF6KCkNCmBgYA0KDQoqIENoYW5nZSBvbmUgb2JzZXJ2YXRpb24gdG8gYmUgYW4gb3V0bGllciAoZS5nLiwgYWRkIDUwMCB0byBvbmUgb2JzZXJ2YXRpb24pLCBhbmQgcmVjb21wdXRlIHRoZSBzZWFzb25hbGx5IGFkanVzdGVkIGRhdGEuIFdoYXQgaXMgdGhlIGVmZmVjdCBvZiB0aGUgb3V0bGllcj8NCkkgY2hhbmdlZCB0aGUgZmlmdGggdmFsdWUgdG8gYW4gb3V0bGllciBieSBhZGRpbmcgMTAwMCB0byBpdC4gVGhlIHNlYXNvbmFsbHkgYWRqdXN0ZWQgZGF0YSBpcyBpbmZsYXRlZCBmb3IgZWFyaWxlciB2YWx1ZXMgYnV0IHRoYXQgZWZmZWN0IGlzIGVsaW1pbmF0ZWQgZnVydGhlciBhbG9uZyB0aGUgdGltZSBzZXJpZXMuIA0KYGBge3J9DQpwbGFzdGljc1s1XSA8LSBwbGFzdGljc1s1XSsxMDAwDQpwbGFzdGljc1szMF0gPC0gcGxhc3RpY3NbMzBdKzEwMDANCg0KZml0Lm11bHQgPC0gZGVjb21wb3NlKHBsYXN0aWNzLCB0eXBlPSJtdWx0aXBsaWNhdGl2ZSIpDQoNCmF1dG9wbG90KGZpdC5tdWx0JHRyZW5kICsgZml0Lm11bHQkcmFuZG9tKSsNCiAgdGhlbWVfeWF6KCkNCmBgYA0KDQoqIERvZXMgaXQgbWFrZSBhbnkgZGlmZmVyZW5jZSBpZiB0aGUgb3V0bGllciBpcyBuZWFyIHRoZSBlbmQgcmF0aGVyIHRoYW4gaW4gdGhlIG1pZGRsZSBvZiB0aGUgdGltZSBzZXJpZXM/DQpBZnRlciBnb2luZyBiYWNrIGFuZCBhZGRpbmcgYW5vdGhlciBvdXRsaWVyIGluIHRoZSBtaWRkbGUgb2YgdGhlIGRhdGFzZXQsIHRoZSBpbmZsYXRpb24gcGF0dGVybiAodGhlIGJ1bXAgaW4gdGhlIHRyZW5kIGxpbmUpIGFwcGVhcnMgdG8gYmVoYXZlIHByZXR0eSBzaW1pbGFybHkuIA0KDQojIyA2LjguMw0KUmVjYWxsIHlvdXIgcmV0YWlsIHRpbWUgc2VyaWVzIGRhdGEgKGZyb20gRXhlcmNpc2UgMSBpbiBTZWN0aW9uID8/KS4gRGVjb21wb3NlIHRoZSBzZXJpZXMgdXNpbmcgWDExLiBEb2VzIGl0IHJldmVhbCBhbnkgb3V0bGllcnMsIG9yIHVudXN1YWwgZmVhdHVyZXMgdGhhdCB5b3UgaGFkIG5vdCBub3RpY2VkIHByZXZpb3VzbHk/DQpUaGUgeDExIGRlY29tcG9zaXRpb24gZW52ZWlscyBhIGZldyBvdXRsaWVycyBpbiB0aGUgMTk5MHMgYW5kIG1pZCAyMDAwcyB0aGF0IHdlcmUgbm90IGVhc3kgdG8gc2VlIGluIHRoZSBpbml0aWFsIHBsb3R0aW5nIG9mIHRoZSBkYXRhISBBZGRpdGlvbmFsbHksIHdlIGNhbiBzZWUgdGhhdCBzZWFzb25hbCBlZmZlY3RzIHN0YXJ0IHRvIGluY3JlYXNlIGluIHRlaCAxOTkwcyBsZWFkaW5nIHRvIGEgbW9yZSBnZW5lcmFsIHVwZGFyZCB0cmVuZCBnb2luZyBmb3J3YXJkLg0KYGBge3J9DQpzZWFzKG15dHMsIHgxMT0nJyklPiUNCiAgYXV0b3Bsb3QoKQ0KYGBgDQoNCg==