Main Content


Generate univariate ARIMA model impulse response function (IRF)



y = impulse(Mdl) returns the impulse response function (IRF) of the input univariate ARIMA model. impulse returns the dynamic responses starting at period 0, during which impulse applies a unit shock to the innovation.


y = impulse(Mdl,numObs) returns the numObs dynamic responses from periods 0 through numObs – 1.


impulse(___) plots a discrete stem plot of the IRF of the input ARIMA model to the current axes, using any of the input argument combinations in the previous syntaxes.

impulse(ax,___) plots on the axes specified by ax instead of the current axes (gca). ax can precede any of the input argument combinations in the previous syntaxes. (since R2024a)

[___,h] = impulse(___) plots the IRF and additionally returns handles to the plotted graphics objects. Use elements of h to modify properties of the plot after you create it. (since R2024a)


collapse all

Create the AR(2) model


where εt is a standard Gaussian process.

Mdl = arima('AR',{0.5,-0.7},'Constant',0)
Mdl = 
  arima with properties:

     Description: "ARIMA(2,0,0) Model (Gaussian Distribution)"
      SeriesName: "Y"
    Distribution: Name = "Gaussian"
               P: 2
               D: 0
               Q: 0
        Constant: 0
              AR: {0.5 -0.7} at lags [1 2]
             SAR: {}
              MA: {}
             SMA: {}
     Seasonality: 0
            Beta: [1×0]
        Variance: NaN

Plot the IRF of yt.


The IRF has length 26; it begins at period 0, during which impulse applies a unit shock to the innovation, and ends at period 25. impulse computes the IRF by inverting the underlying AR lag operator polynomial. The length of the IRF is 26 because the dynamic multipliers beyond period 25 are below the division algorithm tolerances.

The model is stationary; the impulse response function decays with a sinusoidal pattern.

You can change characteristics of the plot by adjusting the properties of the underlying stem plot. The axes handle object stores the stem plot handle in the Children property.

Increase the line thickness (the default is 0.5). Also, change the color of the stem plot to red by using the RGB color value.

h = gca; % Current axes handle
stemh = h.Children;
stemh.LineWidth = 5;
stemh.Color = [1 0 0];

Load the quarterly US GDP data set.

load Data_GDP

For details on the data, enter Description at the command line.

Compute the GDP growth rate.

y = price2ret(Data);

Consider an ARMA(2,2) model for the GDP rate series. Create an arima model template for estimation.

Mdl = arima(2,0,2)
Mdl = 
  arima with properties:

     Description: "ARIMA(2,0,2) Model (Gaussian Distribution)"
      SeriesName: "Y"
    Distribution: Name = "Gaussian"
               P: 2
               D: 0
               Q: 2
        Constant: NaN
              AR: {NaN NaN} at lags [1 2]
             SAR: {}
              MA: {NaN NaN} at lags [1 2]
             SMA: {}
     Seasonality: 0
            Beta: [1×0]
        Variance: NaN

NaN values in properties are placeholders for estimable model parameters.

Fit the model to the entire series.

EstMdl = estimate(Mdl,y)
    ARIMA(2,0,2) Model (Gaussian Distribution):
                  Value       StandardError    TStatistic      PValue  
                __________    _____________    __________    __________

    Constant     0.0036702     0.00058179        6.3084      2.8189e-10
    AR{1}            1.372       0.089006        15.415      1.3064e-53
    AR{2}          -0.8069       0.069497       -11.611      3.6432e-31
    MA{1}          -1.1431        0.10159       -11.253      2.2483e-29
    MA{2}          0.67355        0.08512        7.9129      2.5155e-15
    Variance    8.3071e-05     5.9331e-06        14.001      1.5322e-44
EstMdl = 
  arima with properties:

     Description: "ARIMA(2,0,2) Model (Gaussian Distribution)"
      SeriesName: "Y"
    Distribution: Name = "Gaussian"
               P: 2
               D: 0
               Q: 2
        Constant: 0.00367019
              AR: {1.37199 -0.806899} at lags [1 2]
             SAR: {}
              MA: {-1.14315 0.673546} at lags [1 2]
             SMA: {}
     Seasonality: 0
            Beta: [1×0]
        Variance: 8.30707e-05

The estimated AR(2) model of the GDP rate series is


where εt is a Gaussian series with mean 0 and variance 0.00008.

Compute the IRF of the estimated model for 50 periods.


The dynamic response to the initial innovation shock dissipates after about 35 quarters.

Create the ARMA(1,1) model


Mdl = arima('AR',0.7,'MA',0.2,'Constant',0);

Return the IRF for 15 periods.

numObs = 15;
periods = 0:(numObs-1);
y = impulse(Mdl,numObs);
irf = table(periods',y,'VariableNames',["Period" "y"])
irf=15×2 table
    Period       y    
    ______    ________

       0             1
       1           0.9
       2          0.63
       3         0.441
       4        0.3087
       5       0.21609
       6       0.15126
       7       0.10588
       8      0.074119
       9      0.051883
      10      0.036318
      11      0.025423
      12      0.017796
      13      0.012457
      14       0.00872

y(0), which is the dynamic response of the system at the time impulse shocks the innovation, is 1.

Input Arguments

collapse all

Fully specified ARIMA model, specified as an arima model object created by arima or estimate.

The properties of Mdl cannot contain NaN values.

Number of periods to include in the IRF (the number of periods for which impulse computes the IRF), specified as a positive integer.

If you specify numObs, impulse computes the IRF by filtering a unit impulse, followed by a vector of zeros of length numObs – 1, through the model Mdl. In this case, the filtering algorithm is efficient.

By default, impulse determines the length of the IRF by implementing the following algorithm:

  1. Represent the ARIMA process as a pure MA process by applying lag operator polynomial division.

  2. Truncate the resulting MA polynomial by enforcing the default tolerances.

For more details, see mldivide.


  • If Mdl contains an AR or differencing polynomial (seasonal or nonseasonal) the MA representation of the model has infinite lag order. Consider specifying numObs in this case.

  • If Mdl contains only MA polynomials, the IRF has length Mdl.Q + 1.

Example: 10

Data Types: double

Since R2024a

Axes on which to plot, specified as an Axes object.

By default, impulse plots to the current axes (gca).

Output Arguments

collapse all

IRF, returned as a numeric column vector. If you specify numObs, Y has length numObs. If you do not specify numObs, the tolerances of the underlying lag operator polynomial division algorithm determine the length of y.

y(j) is the impulse response of yt at period j – 1. y(0) represents the impulse response during the period in which impulse applies the unit shock to the innovation (ε0 = 1).

Since R2024a

Handles to plotted graphics objects, returned as a graphics array. h contains unique plot identifiers, which you can use to query or modify properties of the plot.

More About

collapse all

Impulse Response Function

The impulse response function (IRF) of a univariate ARIMAX process is the dynamic response of the system to a single impulse (innovation shock).

Consider an ARIMAX model expressed as an MA process



  • ψ(L) is the infinite-degree MA lag operator polynomial ψ0+ψ1L+ψ2L2+ with scalar coefficients ψj, j = 0,1,2,… and ψ0 = 1.

  • mt is the deterministic, innovation-free conditional mean of the process at time t.

The IRF measures the change to the response j periods in the future due to a change in the innovation at time t, for j = 0,1,2,…. Symbolically, the IRF at period j is


The sequence of dynamic multipliers [3], ψ0, ψ1, ψ2,..., measures the sensitivity of the process to a purely transitory change in the innovation process, with past responses and future innovations set to 0. Because the partial derivative is taken with respect to the innovation, the presence of deterministic terms in the model, such as the constant and the exogenous regression component, has no effect on the impulse responses.

Properties of the IRF determine characteristics of the process:

  • If the sequence {ψj} is absolutely summable, yt is a covariance-stationary stochastic process [5]. For a stationary stochastic process, the impact on the process due to a change in εt is not permanent, and the effect of the impulse decays to zero.

  • Otherwise, the process yt is nonstationary, and a change in εt affects the process permanently.

Because innovations can be interpreted as one-step-ahead forecast errors, the impulse response is also known as the forecast error impulse response.


  • To improve performance of the filtering algorithm, specify the number of periods to include in the IRF numObs. When you do not specify numObs, impulse computes the IRF by using the lag operator polynomial division algorithm, which is relatively slow, to represent the input model Mdl as a truncated, infinite-degree, moving average model. The length of the resulting IRF is generally unknown.

Alternative Functionality

The armairf function generates or plots the IRF of an ARMA process specified by input AR and MA lag operator polynomial coefficients.


[1] Box, George E. P., Gwilym M. Jenkins, and Gregory C. Reinsel. Time Series Analysis: Forecasting and Control. 3rd ed. Englewood Cliffs, NJ: Prentice Hall, 1994.

[2] Enders, Walter. Applied Econometric Time Series. Hoboken, NJ: John Wiley & Sons, Inc., 1995.

[3] Hamilton, James D. Time Series Analysis. Princeton, NJ: Princeton University Press, 1994.

[4] Lütkepohl, Helmut. New Introduction to Multiple Time Series Analysis. New York, NY: Springer-Verlag, 2007.

[5] Wold, Herman. "A Study in the Analysis of Stationary Time Series." Journal of the Institute of Actuaries 70 (March 1939): 113–115.

Version History

Introduced in R2012a

expand all