ARIMA时间序列

一:基础

我们可以使用sacn()函数的”skip”参数指定文件中从顶部开始有多少行需要忽略。为了将数据读入到R,并且忽略掉文件中的前三行,
我们输入以下代码:

kings <- scan(“D:\test\timeseries\king.txt”,skip=3)
Read 42 items
kings
[1] 60 43 67 50 56 42 50 65 68 43 65 34 47 34 49 41 13 35 53 56 16 43 69 59
[25] 48 59 86 55 68 51 33 49 67 77 81 67 71 81 68 70 77 56
str(kings)
num [1:42] 60 43 67 50 56 42 50 65 68 43 …
一旦你将时间序列数据读入到R,下一步便是将数据存储到R中的一个时间序列对象里,
以便你能使用R的很多函数分析时间序列数据。我们在R中使用ts()函数将数据存储到一个时间序列对象中去。
例如存储“kings”这个变量中的数据到时间序列对象中,我们输入以下代码:

kingstimeseries <- ts(kings)
kingstimeseries
Time Series:
Start = 1
End = 42
Frequency = 1
[1] 60 43 67 50 56 42 50 65 68 43 65 34 47 34 49 41 13 35 53 56 16 43 69 59
[25] 48 59 86 55 68 51 33 49 67 77 81 67 71 81 68 70 77 56

有时候时间序列数据集是少于一年的间隔相同的数据,比如月度或者季度数据。在这种情况下,
你可以使用ts()函数中的“frequency”参数指定收集数据在一年中的频数。
如月度数据就设定frequency=12,季度数据就设定frequency=4。
你也可以通过ts()函数中的“start”参数来指定收集数据的第一年和这一年第一个间隔期。
例如,如果你想指定第一个时间点为1986年的第二个季度,你只需设定start=c(1986,2)。

一旦我们将时间序列读入R,下一步通常是用这些数据绘制时间序列图,我们可以使用
R中的plot.ts()函数。 例如,绘制英国国王(依次的)去世年龄数据的时间序列图,
我们输入代码:

plot.ts(kingstimeseries)
时间序列分析—(一) - lemon - Lemon

这里写图片描述

二、分解时间序列
分解一个时间序列意味着把它拆分成构成元件,一般序列包含一个趋势部分、
一个不规则部分,如果是一个季节性时间序列,则还有一个季节性部分。

1)分解非季节性数据
一个非季节性时间序列包含一个趋势部分和一个不规则部分。
分解时间序列即为试图把时间序列拆分成这些成分,也就是说,需要估计趋势的和不规则的这两个部分。
为了估计出一个非季节性时间序列的趋势部分,使之能够用相加模型进行描述,最常用的方法便是平滑法,
比如计算时间序列的简单移动平均
“TTR”包中的SMA()函数可以用简单的移动平均来平滑时间序列数据
然后即可使用“SMA()”函数去平滑时间序列数据。使用SMA()函数时,你需要通过参数“n”指定来简单移动平均的跨度。
例如,计算跨度为5的简单易懂平均,我们在SMA()函数中设定n=5。 例如如上所述的,
这个42位英国国王的去世年龄数据呈现出非季节性,并且由于其随机变动在整个时间段内是大致不变的,这个序列也可以被描述称为一个相加模型。
因此,我们可以尝试使用简单移动平均平滑来估计趋势部分。我们使用跨度为3的简单移动平均平滑时间序列数据,并且作图,代码如下:

kingstimeseriesSMA3 <- SMA(kingstimeseries,n=3)
str(kingstimeseriesSMA3)
Time-Series [1:42] from 1 to 42: NA NA 56.7 53.3 57.7 …
plot.ts(kingstimeseriesSMA3)
时间序列分析—(一) - lemon - Lemon

这里写图片描述
当我们使用跨度为3的简单移动平均平滑后,时间序列依然呈现出大量的随便波动。因此,为了更加准确地估计这个趋势部分,
我们也许应该尝试下更大的跨度进行平滑。正确的跨度往往是在反复试错中获得的。例如,我们尝试使
用跨度为8的简单移动平均:

kingstimeseriesSMA8 <- SMA(kingstimeseries,n=8)
plot.ts(kingstimeseriesSMA8)时间序列分析—(一) - lemon - Lemon

这里写图片描述
这个跨度为8的简单移动平均平滑数据的趋势部分看起来更加清晰了,我们可以发现这个时间序列前20为国王去世年龄从最初的
55周岁下降到38周岁,然后一直上升到第40届国王的73周岁

2)分解季节性数据
一个季节性时间序列包含一个趋势部分,一个季节性部分和一个不规则部分。
分解时间序列就意味着要把时间序列分解称为这三个部分:也就是估计出这三个部分。
对于可以使用相加模型进行描述的时间序列中的趋势部分和季节性部分,我们可以使用
R中“decompose()”函数来估计。这个函数可以估计出时间序列中趋势的、季节性的和不规则的部分,
而此时间序列须是可以用相加模型描述的。 “decompose()”这个函数返回的结果是一个列表对象,
里面包含了估计出的季节性部分,趋势部分和不规则部分,他们分别对应的列表对象元素名为“seasonal”、“trend”、和“random”。
为了估计时间序列的趋势的、季节性和不规则部分,输入代码:

births <- scan(“D:\test\timeseries\birth.txt”)
Read 168 items
birthstimeseries <- ts(births,frequency = 12,start=c(1946,1))
birthstimeseriescomponents <- decompose(birthstimeseries)

估计出的季节性、趋势的和不规则部分现在被存储在变量birthstimeseriescomponents seasonal,birthstimeseriescomponents trend
和 birthstimeseriescomponents$ran

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值