全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
3208 4
2013-05-03
亲们,我最近学习SAS,遇到一个问题,在此请求大家能赐教
问题如下:有一组数据,比如就是:1 2 3 4 5 6 7 8 9 10  
这10个数据,我想通过前5个数据预测第6个数据,利用sas软件可以得到第6个数的预测值和置信区间,然后数据再增加一个(增加的数据是给的第6个原始数据,不是预测的第6个数据哦),就是前6个数据预测第7个数据,同样想得到第7个数的置信区间,以此类推下去、、、就是会得到后5个数据的预测值的置信区间,请问这个该怎么弄?希望强者留下程序、、、灰常感谢!
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2013-5-3 19:03:13
你的信賴區間要如何估計?
要用標準差還是迴歸估計?
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2013-5-3 19:57:22
ariman911 发表于 2013-5-3 19:03
你的信賴區間要如何估計?
要用標準差還是迴歸估計?
首先感谢您给我回复!我做的是时间序列数据,建立了一个MA(1)模型,然后在模型的基础上我
forecast lead=5 id=time out=results;
run;
就预测了后5期的预测值了,也给出了95%的置信区间。
我的具体程序如下:
模型绘制时序图、平稳性与随机性检验 、识别
data example;
input status@@;
difx=dif(status);
time=_n_;
cards;
0.97 0.45 1.61 1.26 1.37 1.43 1.32 1.23 0.84 0.89 1.18 1.33 1.21 0.98 0.91 0.61 1.23 0.97 1.10 0.74 0.80 0.81 0.80 0.60 0.59 0.63 0.87 0.36 0.81 0.91 0.77 0.96 0.93 0.95 0.65 0.98 0.70 0.86 1.32 0.88 0.68 0.78 1.25 0.79 1.19 0.69 0.92 0.86 0.86 0.85 0.90 0.54 0.32 1.40 1.14 0.69 0.91 0.68 0.57 0.94 0.35 0.39 0.45 0.99 0.84 0.62 0.85 0.73 0.66 0.76 0.63 0.32 0.17 0.46
;
proc gplot;
plot status*time difx*time;
symbol v=star c=blue i=join;
run;

proc arima;
identify var=status(1,0) minic p=(0:10)q=(0:5);
run;
模型的参数估计
estimate q=1;
run;

estimate q=1 noint;
run;
模型序列的预测
forecast lead=5 id=time out=results;
run;
模型序列的预测图
proc gplot data=results;
plot status*time=1 forecast*time=2 l95*time=3 u95*time=3/overlay;
symbol1 c=black I=none v=star;
symbol2 c=red I=join v=none;
symbol3 c=green I=join v=none l=32;
run;
就是我想得到后面每个数据的预测值的置信区间,虽然实际上呢我也知道这些数据的实际值。你看我给你的程序上已经有了74个数据了,假如说我想利用前70个预测第71个,这个我会。利用前71个预测第72个我也会。这样一个一个很麻烦,因为我的数据太多。有没有可能就是用个循环语句,就是系统会自己每次会往后读取一个数据,然后就能每读取一个就能预测一个。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2013-5-3 20:32:19
1006138054 发表于 2013-5-3 19:57
首先感谢您给我回复!我做的是时间序列数据,建立了一个MA(1)模型,然后在模型的基础上我
forecast lead ...
你在这里也问了啊
如果我给你的宏还可以用的话
就贴出来共享下吧
只不过我一次写完的,也没有测试
你可能要先改改才能用
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2013-5-3 21:27:09
playmore 发表于 2013-5-3 20:32
你在这里也问了啊
如果我给你的宏还可以用的话
就贴出来共享下吧
我相信您的程序应该没问题,贴出来共享下~~可惜了我这个门外汉只会sas的皮毛、、、、
%macro GetRollArima(SourceTable,TargetTable);
        proc sql noprint;
                select COUNT(*) into :GRA_Num from &SourceTable;
        quit;

        %do GRA_i=1 %to %EVAL(&GRA_Num-5);
                proc arima data=&SourceTable(where=(&GRA_i<=_N_<=%EVAL(&GRA_i+70)));
                        identify var=status(1,0) minic p=(0:10) q=(0:5);
                        estimate q=1 noint;
                        forecast lead=5 id=time out=GRA_Temp;
                quit;

                %if &GRA_i EQ 1 %then %do;
                        data &TargetTable;
                                set GRA_Temp(where=(_N_=71));                /* 把预测值导出至结果表格 */
                        run;
                %end;
                %else %do;
                        data &TargetTable;
                                set &TargetTable GRA_Temp(where=(_N_=71));
                        run;
                %end;
        %end;
%mend;
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群