【问题标题】:Simulating ARMA/ARIMA time series processes in SAS在 SAS 中模拟 ARMA/ARIMA 时间序列过程
【发布时间】:2023-03-19 21:38:01
【问题描述】:

我一直在尝试寻找在 SAS 中生成模拟时间序列数据集的最简单方法。我最初是在尝试 LAG 运算符,但这需要输入数据,因此可能不是最好的方法。 (看这个问题:SAS: Using the lag function without a set statement (to simulate time series data.)

是否有人开发了一个宏或数据集,可以使用任意数量的 AR 和 MA 术语生成时间序列?最好的方法是什么?

具体来说,我希望生成 SAS 所称的 ARMA(p,q) 过程,其中 p 表示自回归分量(因变量的滞后值),q 是移动平均分量(滞后值误差项)。

非常感谢。

【问题讨论】:

  • 您有 ETS 许可吗?
  • 很遗憾没有。我知道有内置的模拟工具?
  • 是的。如果你在做时间序列,强烈推荐 ETS。如果您在学术界,您可能能够相当容易/便宜地获得许可证(如果没有,那么我认为它并不便宜)。

标签: sas


【解决方案1】:

我开发了一个宏来尝试回答这个问题,但我不确定这是否是最有效的方法。无论如何,我认为它可能对某人有用:

%macro TimeSeriesSimulation(numDataPoints=100, model=y=e,outputDataSetName=ts, maxLags=10);

data &outputDataSetName (drop=j);
array lagy(&maxlags) _temporary_;
array lage(&maxlags) _temporary_;
/*Initialise values*/

e = 0;
y=0;
t=1;
do j = 1 to 10;
lagy(j) = 0;
lage(j) = 0;
end;

output;

do t = 2 to &numDataPoints;  /*Change this for number of observations*/

    /*SPECIFY MODEL HERE*/
    e = rannorm(-1);  /*Draw from a N(0,1)*/
    &model; 

    /*Update values of lags on the moving average and autoregressive terms*/
    do j = &maxlags-1 to 1 by -1;  /*Note you have to do this backwards because otherwise you cascade the current value to all past values!*/
        lagy(j+1) = lagy(j);
        lage(j+1) = lage(j);
    end;
    lagy(1) = y;
    lage(1) = e;

    output;
end;
run;

%mend;

/*Example 1:  Unit root*/
%TimeSeriesSimulation(numDataPoints=1000, model=y=lagy(1)+e)

/*Example 2:  Simple process with AR and MA components*/
%TimeSeriesSimulation(numDataPoints=1000, model=y=0.5*lagy(1)+0.5*lage(1)+e)

【讨论】:

    猜你喜欢
    • 2011-05-01
    • 2018-05-02
    • 2016-08-10
    • 2013-05-01
    • 2016-06-21
    • 2017-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多