The hardware and bandwidth for this mirror is donated by METANET, the Webhosting and Full Service-Cloud Provider.
If you wish to report a bug, or if you are interested in having us mirror your free-software or open-source project, please feel free to contact us at mirror[@]metanet.ch.

MAARTS: A Comprehensive Guide to M&A AR Time-Series Analysis

Shikhar Tyagi

2026-07-17

Introduction

The MAARTS (Merger and Acquisition Autoregressive Time-Series Models) package provides a comprehensive framework for analyzing M&A time-series data using autoregressive models. This vignette demonstrates the key features and functionality of the package.

Installation

# Install from local directory
install.packages("path/to/MAARTS", repos = NULL, type = "source")

Loading the Package

library(MAARTS)
## Registered S3 method overwritten by 'quantmod':
##   method            from
##   as.zoo.data.frame zoo

Sample Data

The package includes a sample M&A time-series dataset for demonstration:

data(ma_sample_data)
head(ma_sample_data)
##          Qtr1     Qtr2     Qtr3     Qtr4
## 2000 12.34568 13.21457 14.12346 13.87654
## 2001 14.54321 15.23457
plot(ma_sample_data, type = "l", main = "Sample M&A Time-Series",
     xlab = "Time", ylab = "M&A Activity")

Descriptive Statistics

Calculate comprehensive descriptive statistics:

desc_stats <- ma_descriptive_stats(ma_sample_data)
print(desc_stats)
## Descriptive Statistics for M&A Time-Series
## ===========================================
## Sample Size:          200 
## Mean:                 49.917 
## Sum:                  9983.404 
## Variance:             459.8718 
## Standard Deviation:   21.4446 
## Standard Error (Mean): 1.5164 
## Minimum:              12.3457 
## Maximum:              86.7654 
## Range:                74.4198 
## Q1 (25%):             31.5432 
## Median (50%):         49.8888 
## Q3 (75%):             68.3827 
## IQR:                  36.8395 
## MAD:                  27.5105 
## Skewness:             -0.0013 
## Kurtosis:             1.8017 
## Coeff. of Variation:  42.9605% 
## 
## Normality Diagnostic Tests
## --------------------------
## Shapiro-Wilk W:      0.9551 (p-value: 0) [Non-normal]
## Jarque-Bera X-sq:    11.9658 (p-value: 0.0025) [Non-normal]
## Anderson-Darling A:  2.1806 (p-value: 0) [Non-normal]
## Cramer-von Mises W-sq:0.2984 (p-value: 3e-04)
## Pearson chi-square:  23.89 (p-value: 0.0472)
## Shapiro-Francia W':  0.9601 (p-value: 1e-04)
## Overall Conclusion:   Strong evidence against normality (all p-values < 0.05)

Stationarity Tests

Perform stationarity tests to ensure the time-series is suitable for AR modeling:

stationarity <- ma_stationarity_tests(ma_sample_data)
## Warning in tseries::adf.test(ts_y, alternative = "stationary"): p-value smaller
## than printed p-value
## Warning in tseries::pp.test(ts_y, alternative = "stationary"): p-value smaller
## than printed p-value
print(stationarity)
## Stationarity Tests for M&A Time-Series
## ======================================
## 
## Augmented Dickey-Fuller (ADF) Test
## ----------------------------------
## Statistic:       -7.0156 
## P-value:         0.01 
## Interpretation:  Reject null: Series is stationary 
## 
## Phillips-Perron (PP) Test
## -------------------------
## Statistic:       -235.4583 
## P-value:         0.01 
## Interpretation:  Reject null: Series is stationary 
## 
## KPSS Test
## ---------
## Statistic:       4.0989 
## Critical Values: 10%= 0.347 , 5%= 0.463 , 1%= 0.739 
## Interpretation:  Reject null: Series is non-stationary 
## 
## DF-GLS Test
## -----------
## Statistic:       0.2847 
## Critical Values: 10%= -1.62 , 5%= -1.94 , 1%= -2.58 
## Interpretation:  Fail to reject null: Series is non-stationary 
## 
## Overall Summary:  Moderate evidence for stationarity (ADF and PP support stationarity, KPSS disagrees)

ACF and PACF Analysis

Examine autocorrelation structure to determine appropriate AR order:

acf_pacf <- ma_acf_pacf(ma_sample_data, plot = TRUE)

print(acf_pacf)
## ACF and PACF Analysis for M&A Time-Series
## ==========================================
## 
## Sample size: 200 
## Max lag:     23.0103 
## 95% significance bound: +/- 0.1386 
## 
## Significant ACF lags:  1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23 
## Significant PACF lags: 1 
## Suggested AR order:    1

AR Model Estimation

Fit an AR model to the data:

ar_model <- ma_ar_fit(ma_sample_data, order = 2)
print(ar_model)
## AR Model Fit for M&A Time-Series
## ================================
## Order: 2 
## Method: OLS 
## Sample Size: 200 
## 
## Coefficients:
##      Estimate Std. Error t value  Pr(>|t|)
## [1,]   0.5050    0.05793   8.717 1.177e-15
## [2,]   0.4946    0.05829   8.486 5.102e-15
## 
## Intercept: 49.917 
## Variance of Prediction: 0.1444 
## 
## Information Criteria:
## AIC: 184.7332 
## BIC: 194.598 
## HQIC: 188.7261 
## 
## Model Stability:
## Stable: TRUE 
## Persistence: 0.9996 
## F-statistic: 302482.2 
## F-pvalue: 0

Forecasting

Generate forecasts with multiple confidence intervals:

forecast <- ma_forecast(ar_model, h = 12, confidence = c(0.80, 0.90, 0.95, 0.99))
print(forecast)
## Forecast for M&A AR Time-Series
## ================================
## Forecast Horizon: 12 
## 
## Point Forecasts and Confidence Intervals:
##   Period  1: 136.3167 (SE = 0.3800)  CI_80% [135.8297, 136.8037]  CI_90% [135.6917, 136.9418]  CI_95% [135.5719, 137.0615]  CI_99% [135.3379, 137.2955]
##   Period  2: 161.6674 (SE = 0.4257)  CI_80% [161.1219, 162.2130]  CI_90% [160.9672, 162.3676]  CI_95% [160.8331, 162.5018]  CI_99% [160.5709, 162.7639]
##   Period  3: 198.9781 (SE = 0.5122)  CI_80% [198.3216, 199.6345]  CI_90% [198.1356, 199.8206]  CI_95% [197.9742, 199.9820]  CI_99% [197.6587, 200.2974]
##   Period  4: 230.3574 (SE = 0.5651)  CI_80% [229.6332, 231.0817]  CI_90% [229.4279, 231.2870]  CI_95% [229.2498, 231.4650]  CI_99% [228.9018, 231.8131]
##   Period  5: 264.6576 (SE = 0.6227)  CI_80% [263.8596, 265.4556]  CI_90% [263.6334, 265.6818]  CI_95% [263.4372, 265.8780]  CI_99% [263.0537, 266.2615]
##   Period  6: 297.4988 (SE = 0.6710)  CI_80% [296.6389, 298.3588]  CI_90% [296.3951, 298.6026]  CI_95% [296.1837, 298.8140]  CI_99% [295.7704, 299.2273]
##   Period  7: 331.0481 (SE = 0.7181)  CI_80% [330.1279, 331.9683]  CI_90% [329.8670, 332.2292]  CI_95% [329.6407, 332.4555]  CI_99% [329.1985, 332.8977]
##   Period  8: 364.2332 (SE = 0.7613)  CI_80% [363.2577, 365.2088]  CI_90% [362.9811, 365.4854]  CI_95% [362.7412, 365.7253]  CI_99% [362.2724, 366.1941]
##   Period  9: 397.5847 (SE = 0.8025)  CI_80% [396.5562, 398.6132]  CI_90% [396.2647, 398.9048]  CI_95% [396.0118, 399.1577]  CI_99% [395.5175, 399.6519]
##   Period 10: 430.8401 (SE = 0.8416)  CI_80% [429.7616, 431.9186]  CI_90% [429.4558, 432.2244]  CI_95% [429.1907, 432.4896]  CI_99% [428.6724, 433.0079]
##   Period 11: 464.1292 (SE = 0.8790)  CI_80% [463.0028, 465.2557]  CI_90% [462.6835, 465.5750]  CI_95% [462.4065, 465.8520]  CI_99% [461.8652, 466.3933]
##   Period 12: 497.3879 (SE = 0.9147)  CI_80% [496.2156, 498.5602]  CI_90% [495.8833, 498.8925]  CI_95% [495.5950, 499.1807]  CI_99% [495.0317, 499.7441]
plot(forecast)

Diagnostic Tests

Check for residual autocorrelation:

diagnostics <- ma_diagnostic_tests(ar_model)
print(diagnostics)
## Diagnostic Tests for M&A AR Model Residuals
## ============================================
## 
## Number of residuals: 198 
## Model order (fitdf): 2 
## 
## Ljung-Box Test
## --------------
##   Lag 6: Q = 578.8614, df = 4, p-value = 0.0000 [Significant autocorrelation detected]
##   Lag 12: Q = 1140.4877, df = 10, p-value = 0.0000 [Significant autocorrelation detected]
##   Lag 18: Q = 1684.3114, df = 16, p-value = 0.0000 [Significant autocorrelation detected]
##   Lag 24: Q = 2210.3785, df = 22, p-value = 0.0000 [Significant autocorrelation detected]
## 
## Box-Pierce Test
## ---------------
##   Lag 6: Q = 561.5396, df = 4, p-value = 0.0000 [Significant autocorrelation detected]
##   Lag 12: Q = 1089.5213, df = 10, p-value = 0.0000 [Significant autocorrelation detected]
##   Lag 18: Q = 1584.4539, df = 16, p-value = 0.0000 [Significant autocorrelation detected]
##   Lag 24: Q = 2047.4461, df = 22, p-value = 0.0000 [Significant autocorrelation detected]

Residual Diagnostics

Comprehensive residual analysis including normality and heteroscedasticity tests:

resid_diag <- ma_residual_diagnostics(ar_model, plot = FALSE)
## Warning in nortest::cvm.test(data): p-value is smaller than 7.37e-10, cannot be
## computed more accurately
print(resid_diag)
## Residual Diagnostics for M&A AR Model
## ======================================
## 
## Residual Summary Statistics:
##   Mean:      0 
##   Std Dev:   0.381 
##   Min:       -0.475 
##   Max:       0.7677 
##   Skewness:  0.0567 
##   Kurtosis:  1.5363 
## 
## Normality Tests on Residuals:
##   Shapiro-Wilk:      p = 0 [ Non-normal ]
##   Jarque-Bera:       p = 1e-04 [ Non-normal ]
##   Anderson-Darling:  p = 0 [ Non-normal ]
##   Conclusion:        Strong evidence against normality (all p-values < 0.05) 
## 
## Heteroscedasticity Tests:
##   Breusch-Pagan: stat = NA , p = NA [ Heteroscedasticity detected ]
##   ARCH LM:       stat = 192.9985 , p = 0 [ ARCH effects detected ]

Stability Analysis

Analyze model stability and persistence:

stability <- ma_stability_analysis(ar_model)
print(stability)
## Stability Analysis for M&A AR Model
## ====================================
## 
## AR Order: 2 
## 
## Characteristic Roots:
##   Root 1: 1.0003 + -0.0000i  (modulus = 1.0003)
##   Root 2: -2.0211 + 0.0000i  (modulus = 2.0211)
## 
## All roots outside unit circle: TRUE 
## Model is: STABLE (stationary) 
## 
## Persistence (sum of AR coefficients): 0.9996 
## Mean Reversion Speed: 4e-04 
## Half-life of shocks: 2499.1 periods
## Long-run Mean: 120418.1

Impulse Response Analysis

Analyze shock transmission and dynamic effects:

irf <- ma_impulse_response(ar_model, n_periods = 20, plot = FALSE)
print(irf)
## Impulse Response Function for M&A AR Model
## ============================================
## 
## Periods computed: 20 
## Long-run multiplier: 2412.365 
## Innovation std dev: 0.38 
## 
## IRF values (first 10 periods):
##  Period      IRF Cumulative
##       0 1.000000   1.000000
##       1 0.504950   1.504950
##       2 0.749610   2.254560
##       3 0.628282   2.882842
##       4 0.688035   3.570876
##       5 0.658194   4.229070
##       6 0.672681   4.901751
##       7 0.665236   5.566987
##       8 0.668643   6.235630
##       9 0.666681   6.902311

Model Comparison

Compare multiple AR models using information criteria:

ar1 <- ma_ar_fit(ma_sample_data, order = 1)
ar2 <- ma_ar_fit(ma_sample_data, order = 2)
ar3 <- ma_ar_fit(ma_sample_data, order = 3)
comparison <- ma_model_comparison(ar1, ar2, ar3)
print(comparison)
## Model Comparison for M&A AR Models
## ===================================
## 
##    Model Order    AIC    BIC   HQIC  LogLik   Sigma2
##  Model_1     1  240.0  246.5  242.6 -117.98 0.191639
##  Model_2     2  184.7  194.6  188.7  -89.37 0.144398
##  Model_3     3 -780.7 -767.5 -775.4  394.33 0.001069
## 
## Best Model by AIC:  Model_3 
## Best Model by BIC:  Model_3 
## Best Model by HQIC: Model_3

Structural Break Analysis

Detect structural breaks in the time-series:

breaks <- ma_structural_break(ma_sample_data)
print(breaks)
## Structural Break Analysis for M&A Time-Series
## ===============================================
## 
## Bai-Perron Multiple Breakpoint Analysis
##   Estimated breakpoints: 34, 68, 101, 134, 167 
## 
## CUSUM Test
##   Statistic: 0.2522 
##   P-value:   1 
##   Result:    No structural instability

Spectral Analysis

Identify cyclical components in the frequency domain:

spectral <- ma_spectral_analysis(ma_sample_data, plot = FALSE)
print(spectral)
## Spectral Analysis for M&A Time-Series
## =====================================
## 
## Sample Size: 200 
## Dominant Frequency: 0.335 
## Dominant Period: 2.99 observations

Monte Carlo Simulation

Evaluate estimator performance using simulation:

set.seed(123)
sim_results <- ma_monte_carlo_simulation(
  true_coefficients = c(0.6, -0.2),
  intercept = 10,
  n = 100,
  n_sim = 500,
  sigma = 2
)
print(sim_results)
## Monte Carlo Simulation Results for M&A AR Model
## =================================================
## 
## Simulations: 500 / 500 (successful)
## Sample size: 100 
## Confidence level: 95 %
## 
## Parameter Estimation Performance:
##  Parameter True Mean_Est      Bias      MSE   RMSE Coverage
##        AR1  0.6   0.5851 -0.014939 0.008932 0.0945    0.868
##        AR2 -0.2  -0.2012 -0.001157 0.005661 0.0752    0.954

Accuracy Measures

Calculate forecast accuracy measures:

# Create actual vs predicted for demonstration
actual <- ma_sample_data[1:150]
predicted <- ma_sample_data[2:151]
accuracy <- ma_accuracy(actual, predicted)
print(accuracy)
## Forecast Accuracy Measures
## ==========================
## MSE:          0.332109 
## RMSE:         0.5763 
## MAE:          0.5377 
## MAPE:         1.6428% 
## SMAPE:        1.6248% 
## MASE:         0.9964 
## Theil's U:    1.0679 
## R-squared:    0.9987 
## Observations: 150

Complete Workflow Example

A complete analysis workflow:

# 1. Load and examine data
data(ma_sample_data)
plot(ma_sample_data, type = "l", main = "M&A Time-Series")

# 2. Descriptive statistics
desc_stats <- ma_descriptive_stats(ma_sample_data)

# 3. Check stationarity
stationarity <- ma_stationarity_tests(ma_sample_data)
## Warning in tseries::adf.test(ts_y, alternative = "stationary"): p-value smaller
## than printed p-value
## Warning in tseries::pp.test(ts_y, alternative = "stationary"): p-value smaller
## than printed p-value
# 4. Examine ACF/PACF
acf_pacf <- ma_acf_pacf(ma_sample_data, plot = FALSE)

# 5. Fit models of different orders
models <- list()
for (p in 1:4) {
  models[[p]] <- ma_ar_fit(ma_sample_data, order = p)
}

# 6. Compare models
comparison <- do.call(ma_model_comparison, models)
print(comparison)
## Model Comparison for M&A AR Models
## ===================================
## 
##    Model Order     AIC     BIC    HQIC  LogLik    Sigma2
##  Model_1     1   240.0   246.5   242.6 -117.98 1.916e-01
##  Model_2     2   184.7   194.6   188.7  -89.37 1.444e-01
##  Model_3     3  -780.7  -767.5  -775.4  394.33 1.069e-03
##  Model_4     4 -1374.4 -1358.0 -1367.8  692.20 5.012e-05
## 
## Best Model by AIC:  Model_4 
## Best Model by BIC:  Model_4 
## Best Model by HQIC: Model_4
# 7. Select best model
best_model <- models[[comparison$Order[1]]]

# 8. Forecast
forecast <- ma_forecast(best_model, h = 12)

# 9. Diagnostics
diagnostics <- ma_diagnostic_tests(best_model)
resid_diag <- ma_residual_diagnostics(best_model, plot = FALSE)
## Warning in nortest::cvm.test(data): p-value is smaller than 7.37e-10, cannot be
## computed more accurately
# 10. Stability analysis
stability <- ma_stability_analysis(best_model)

# 11. Impulse response
irf <- ma_impulse_response(best_model, n_periods = 20, plot = FALSE)

# Summary
cat("\n=== Analysis Summary ===\n")
## 
## === Analysis Summary ===
cat("Best Model: AR", comparison$Order[1], "\n")
## Best Model: AR 1
cat("AIC:", round(comparison$AIC[1], 4), "\n")
## AIC: 239.9612
cat("BIC:", round(comparison$BIC[1], 4), "\n")
## BIC: 246.5478
cat("Stable:", stability$is_stable, "\n")
## Stable: TRUE
cat("Persistence:", round(stability$persistence, 4), "\n")
## Persistence: 0.9995

Conclusion

The MAARTS package provides a comprehensive toolkit for M&A time-series analysis. All major aspects of AR modeling are covered, from descriptive statistics and stationarity testing to forecasting and advanced diagnostic analysis.

These binaries (installable software) and packages are in development.
They may not be fully stable and should be used with caution. We make no claims about them.