题目:
数据集timeser_com中存放着某地区每个电信基站的通话时长和短信包信息。date代表时间变量,Cell代表基站编码,tcherl和sms分别代表通话和短信量。问题如下:
(1) 根据date创建时间变量date_new;
(2) 清理数据,根据CELL和date_new变量剔除重复记录,对tcherl和sms使用三次样条曲线进行插值;
(3) ARIMA过程步识ARIMA(p,d,q)滞后阶数并简要说明确定该模型的原因(提示:通过单位根检验检验差分阶数的合理性);
(4) 估计得到的模型系数,对每个基站的tcherl和sms两个变量进行向前30步的预测数据。解答:
(1)程序:
data timese;
set voice;
date_new= input(put(date,8.),yynndd8.) ;
format date date9.;
run;
原数据集
新建的date_new变量
(2)删除重复记录:
程序:
proc sort data = timese out = timese;
by date cell;
run;
data times_new;
set timese;
by date cell;
if ^first.cell then delete;
run;
三次插值(考虑站点cell=D37C072)
频数分布情况:
程序:
proc freq data=times_new;
table cell;
run;
三次插值:
程序:proc iml;
a = shape(1,226,1);
create dates from a[colname='date_new']; append from a;
run;
quit;
data dates;
set dates;
date_new= intnx('day','04may09'd,_n_-1) ; format date_new date9.;
run;
proc sql ;
create table date_new as
select date_new from dates where date_new not in (select date_new from date); run;
data date_new;
set date_new date;
run;
proc sort data=date_new;
by date_new;
run;
proc expand data = date_new out=date_new2 method=spline;
id date_new;
run;
未插值前数据:插值之后:
(3)程序:
proc gplot data=data_f;
plot tcherl*time;
symbol color=red L=1 i=spline;
run;
Tcherl*time;
程序:
proc arima data=data_f;
identify var=tcherl;
run;
data data_f;
set data_f;
z=dif(tcherl);
run;
可以看出自相关函数出现缓慢衰减,而且后面的值并没有在两倍标准误差的范围内所以不认为它是平稳的序列
从偏自相关函数可以看出7阶截断,
P<<<0.05,拒绝原假设,所以认为它是非白噪声序列,即对序列建模是有意义的。
可以发现AR6,MA6的值3.687501最小,ARMA(6,6)的BIC信息量最小,所以选择ARMA(5,6)模型拟合原序列
由于是非平稳的所以做一阶差分
程序:
data data_f;
set data_f;
z=dif(tcherl);
run;
proc gplot data=data_f;
plot tcherl*time=1 z*time=2/overlay; symbol1 c=red l=1 i=spline; symbol2 c=green l=1 i=spline; run;
程序:
proc arima data=data_f;
identify var=tcherl(1);
run;
、检验其自相关函数,偏自相关函数
、
发现自相关函数下降的很快,很快接近于零,而且lag=3后面的值基本落在2倍标准误差里面,所以可以认为是平稳的。而且是非白噪声序列
Proc arima data_f;
Identify var=tcherl stationarity=(adf=1);run;
ADF检验中,三个模型只要有一个拒绝原假设,就可以认为序列式平稳的;显然后面两个模型,P值<0.05拒绝原假设,所以序列式平稳的
proc arima data=data_f;
identify var=tcherl(1) minic p=(0:6) q=(0:6);
estimate p=6 method=cls;
forecast lead=30 id=time out=result;
run;
然后对模型参数进行最小二乘估计:
发现这些参数是显著的。
然后对残差序列进行分析
很显然在lag=18之前,p>0.05,所以残差序列是白噪声序列,说明模型提取信息是充分的。即ARIMA(6,1,0)是适应的。
最后写出这个模型:
程序:
proc arima data=data_f;
identify var=tcherl(1) minic p=(0:6) q=(0:6);
estimate p=6 method=cls;
forecast lead=30 id=time out=result;
run;
程序:
proc gplot data=result1;
plot forecast*time=2 l95*time=3 u95*t=3/overlay;
symbol2 c=red i=join v=none l=1w=1; symbol3 c=green i=join v=none l=2 w=2; run;