Author: Shikhar Tyagi
Date: 2026-07-17

# 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.