4

We can use following code to plot and decompose a time series in R:

# Monthly Airline Passenger Numbers 1949-1960
data(AirPassengers)
data = data.frame(AirPassengers)
data

#Transform to time series
ts.data1 = ts(data=as.vector(t(data['AirPassengers'])), start = c(1949), end = c(1960), frequency=12)
#Plot seasonality, trend

plot(stl(ts.data1, "periodic"))
plot(ts.data1)

decomposed <- stl(ts.data1, s.window="periodic")
seasonal <- decomposed$time.series[,1]
trend   <- decomposed$time.series[,2]
remainder <- decomposed$time.series[,3]

#Show seasonal effect
seasonal

Now comes my question: in order to deseasonalize, can I simply type

# deseasonalize time sereis
ts.data1 <- ts.data1 - seasonal
ts.data1
plot(ts.data1)

to subtract the seasonal values?

I realized that in another dataset, subtracting the seasonal values caused negative values. That's why I thought using a factor or something would be better.

Note: I'd prefer not to use the "deseasonalize" package.

pyrrhic
  • 1,769
  • 2
  • 15
  • 27
Rnaldinho
  • 421
  • 2
  • 6
  • 15

1 Answers1

7

Yes, that will work.

Or just use the seasadj function in the forecast package. However, with the AirPassengers data, an additive decomposition such as that given in stl is not a good choice. You could take logs first, and then it gives reasonable results.

library(forecast)
library(ggplot2)

decomp <- stl(log(AirPassengers), s.window="periodic")
ap.sa <- exp(seasadj(decomp))
autoplot(cbind(AirPassengers, SeasonallyAdjusted=ap.sa)) +
  xlab("Year") + ylab("Number of passengers (thousands)")

enter image description here

Rob Hyndman
  • 30,301
  • 7
  • 73
  • 85