Classic auto-regressive models can handle cycles! Going way back, Yule (1927) and Walker (1931) modeled the periodicity of sunspots using an equation of the form:
$$y_{t+1} = a + b_1 y_t + b_2 y_{t-1} + \epsilon_{t+1}$$
Sunspot activity tends to operate on 11 year cycles, and though it's not immediately obvious, the inclusion of two auto-regressive terms can create cyclic behavior! Auto-regressive models are now ubiquitous in modern time-series analysis. The U.S. Census Bureau uses an ARIMA model to calculate seasonal adjustment.
More generally, you can fit an ARIMA model which involves:
- $p$ order auto-regressive terms (as above)
- $q$ order moving-average terms
- $d$ differences (to get the data stationary)
If you dive into the math, there's a relation between ARIMA models and representations in the frequency domain with a Fourier transform. You can represent a stationary time-series process using an auto-regressive model, moving average model, or the spectral density.
Practical way forward:
- You first need to obtain a stationary time series. For example with gross domestic product or aggregate consumption, people typically take the logarithm and compute the first difference. (Basic idea is that distribution over percent changes in aggregate consumption is invariant across time.) To obtain a stationary time series $\Delta c_t$ from aggregate consumption $C_t$.
$$\Delta c_t = \log C_t - \log C_{t-1}$$
- Once you have a stationary time series, it's easy to fit an auto-regressive AR(n) model. You can simply do least squares. For an AR(2) model you can run the regression.
$$ y_{t} = a + b_1 y_{t-!} + b_2 y_{t-2} + \epsilon_t $$
Of course you can get more fancy, but often simple stuff can work surprisingly well. There are well developed packages for time series analysis in R, EViews, Stata, etc...