当前位置:文档之家› 时间序列分析作业步骤

时间序列分析作业步骤

特别说明:
1、数据一定要选好(多么痛的领悟),否则模型建立后残差不是正态分布也需要差分
2、首先一定要对趋势项进行分析,后面ARIMA模型是对趋势项的残差进行分析的
3、这些都是一般步骤,如果数据好的话没多大问题,对于数据不太好的,我只能呵呵了。。。

第一步 打开R软件设置R工作目录(便于保存数据),读入数据(最好只有一列数据不要少于150个)吐槽下最好是要到好的数据否则不好做


> temData=scan('E:\\data\\R\\temperature.txt');//多列时可以用read.table等具体的看学习文档

> library(TSA); //首先要安装TSA包


第二步 显示数据的时序图(从中可以看出趋势比如线性、二次项甚至三次项、周期项)

win.graph(width=5.85,height=3.85,height=8)
plot(temData,main='温度时序图',xlab='时间序号',ylab='温度',type='o')
> plot(y=temData,x=zlag(temData),xlab='上次温度',ylab='本次温度',main='上次温度和本次温度散点图',type='p')


第三步 分析趋势(包括线性、多次项、周期项、季节项)//当然有些数据没有周期项或季节项,比如我的

> model1=lm(temData~time(temData))
> summary(mode11)

Call:
lm(formula = temData ~ time(temData))

Residuals:
Min 1Q Median 3Q Max
-0.39156 -0.14341 -0.04516 0.13291 1.56159

Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 2.909e+01 2.507e-02 1160.54 <2e-16 ***
time(temData) -2.834e-03 7.228e-05 -39.21 <2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.3067 on 598 degrees of freedom
Multiple R-squared: 0.72, Adjusted R-squared: 0.7195
F-statistic: 1538 on 1 and 598 DF, p-value: < 2.2e-16

> model2=lm(temData~time(temData)+I(temData^2))
> summary(model2)

Call:
lm(formula = temData ~ time(temData) + I(temData^2))

Residuals:
Min 1Q Median 3Q Max
-0.027002 -0.003635 0.000461 0.002757 0.020043

Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 1.467e+01 1.293e-02 1134.4 <2e-16 ***
time(temData) -8.463e-05 2.928e-06 -28.9 <2e-16 ***
I(temData^2) 1.704e-02 1.527e-05 1116.1 <2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.006717 on 597 degrees of freedom
Multiple R-squared: 0.9999, Adjusted R-squared: 0.9999
F-statistic: 2.225e+06 on 2 and 597 DF, p-value: < 2.2e-16


第四步 展示趋势图

> plot(temData,type='o',xlab='时间序号',ylab='温度',main='温度时序图与线性时间趋势')
> abline(model1)
> plot(temData,type='o',xlab='时间序号',ylab='温度',main='温度时序图与线性时间趋势')

> X=as.vector(time(temData));
> plot(y=rstudent(mode22)

,x=X,type='o',ylab='标准残差',xlab='时间序号',main='二次趋势残差-时间图')


第五步 选定自己的趋势以及趋势系数

> temRst=rstudent(mode22);
选定的趋势项分析后对残差进行正态分析
> hist(temRst,xlab='标准残差',ylab='频率',main='二次趋势标准残差直方图')
> qqnorm(temRst)
> qqline(temRst)
> qqnorm(temRst)


第六步 模型识别 //如果有必要可以进行差分(一般不超过2次差分,AR、MA不超过5阶)

> acf(temRst)
> pacf(temRst)
> eacf(temRst)
AR/MA
0 1 2 3 4 5 6 7 8 9 10 11 12 13
0 x x x x x x x x x x x x x x
1 x x x x x x x x x x x x x o
2 x x o o x x x o o o o o o o
3 x x o o x x o o o o o o o o
4 o x o x o o o o o o o o o o
5 o x x x x o o o o o o o o o
6 x x x x x x o o o o o o o o
7 x x o o x o o o o o o o o o


第七步 参数估计

> arimaCSS=arima(temRst,order=c(1,0,0),method='CSS');
> arimaML=arima(temRst,order=c(1,0,0),method='ML');


第八步 模型诊断以及诊断展示

> plot(rstandard(arimaCSS),type='l')
> abline(h=0)
> qqnorm(residuals(arimaCSS))
> qqline(residuals(arimaCSS))

> shapiro.test(rstandard(arimaCSS))

> hist(residuals(arimaCSS))
> plot(residuals(arimaCSS,type='p'))
> runs(rstandard(arimaCSS))
$pvalue
[1] 0.00567 //该值越大越好

$observed.runs
[1] 264

$expected.runs
[1] 298

$n1
[1] 330

$n2
[1] 270

$k
[1] 0

> tsdiag(arimaCSS,gof=15,omit.initial=F) (第三个图要在虚线以上)



第九步 把趋势项及ARIMA参数估计项结合起来写出最终的模型表达式

eg:Y_t=-1.948*〖10〗^4+1.890*10*t-4.583*〖10〗^(-3)*t^2+1.2238Y_(t-1)-0.2782Y_(t-2)+e_t-0.5731e_(t-1)
这是一个二次项的ARMA(2,1)
当然还有一些对上述图表进行表达的话照着课本就行了!!!!!

相关主题
文本预览
相关文档 最新文档