logo资料库

R语言时间序列分析.pdf

第1页 / 共60页
第2页 / 共60页
第3页 / 共60页
第4页 / 共60页
第5页 / 共60页
第6页 / 共60页
第7页 / 共60页
第8页 / 共60页
资料共60页,剩余部分请下载后查看
时间序列分析
读取时间序列数据
Plotting Time Series绘制时间序列图
分解时间序列
分解非季节性数据
分解季节性数据
季节性因素调整
使用指数平滑法进行预测
简单指数平滑法
霍尔特指数平滑法
Holt-Winters指数平滑法
ARIMA模型
时间序列的差分
选择一个合适的ARIMA模型
英国国王去世年龄的例子
既然对于英国国王去世年龄的时间序列,ARIMA(0,1)被认为是最合适的模型,那么原始的时间序列可以使用ARIMA(0,1,1) (p=0,d=1,q=1,这里d是差分阶层所需要的)来建模。
北半球的火山灰覆盖实例
使用ARIMA模型进行预测
英国国王去世年龄的例子
北半球的火山灰覆盖问题
链接和扩展阅读
R 语言时间序列初探! 说明:  作者:Avril Coghlan Email:alc@sanger.ac.uk  原文:http://a-little-book-of-r-for-time-series.readthedocs.org/en/latest/src/timeseries.html  本文档由梁德明、赵华蕾合译;联系方式:hunt4game@gmail.com;内容遵循许可协议 CC 3.0 BY  本文档 PDF 版本地址为:http://doc.datapanda.net/a-Little-Book-of-R-for-Time-Series.pdf  本文档中所提及数据集,如出现无法访问,只需将 robjhyndman.com 替换为 doc.datapanda.net 即可 这是一份关于使用 R 统计软件进行时间序列分析的入门文档。 内容大纲:  使用 R 进行实现序列分析 o 时间序列分析 o 读取时间序列数据 o 绘制时间曲线图 o 分解时间序列  分解非季节性数据  分解季节性数据  季节性的修正 o 使用指数平滑法进行预测  简单指数平滑法  Holt 指数平滑法  Holt-Winters 指数平滑法 o ARIMA 模型  时间序列的差分  选择一个合适的 ARIMA 模型
 使用 ARIMA 模型进行预测 o 链接与拓展阅读 时间序列分析 这本小册子将告诉你如何使用 R 软件实现对常见时间序列数据进行简单分析。 这本小册子假定读者已经有一定时间序列分析的基础,并且本册的侧重点并不在于解释时间序列分析,而是在于 如何使用 R 软件实现这些分析。 如果你是一位学习时间序列的新手,并且很想学习更多关于本册中提及的概念,我强烈推荐英国公开大学的 《Time series》(产品编号 M249/02),你可以从英国公开大学商店购买到。 在本册中,我使用的时间序列数据是由 Rob Hyndman 的时间序列数据库(http://robjhyndman.com/TSDL/) 提供的。 本册的 PDF 版本(英文)在:https://media.readthedocs.org/pdf/a-little-book-of-r-for-time- series/latest/a-little-book-of-r-for-time-series.pdf 如果你喜欢本册,也许你应该瞧瞧这本《R 语言与生物统计》(英文)(http://a-little-book-of-r-for- biomedical-statistics.readthedocs.org/)是否感兴趣, 还有我的另一本《R 语言与多元统计分析》(英文) (http://little-book-of-r-for-multivariate-analysis.readthedocs.org/) 读取时间序列数据 当你想要分析时间序列数据时,第一件事就是将数据读入 R 软件,并且绘制时间序列图。假设你的数据是以连续 的时间点的形式存储在简单的文本文件的一列里,你可以使用 scan()函数将数据读入到 R。 例如,这个文件(http://robjhyndman.com/tsdldata/misc/kings.dat)包含着从威廉一世开始的英国国王的去 世年龄数据。(原始出处:Hipel and Mcleod, 1994) 数据集如下: Age of Death of Successive Kings of England #starting with William the Conqueror #Source: McNeill, "Interactive Data Analysis"
60 43 67 50 56 42 50 65 68 43 65 34 ... 这里仅显示了文件的一些行。第一个三行包含了一些数据的注解内容,在我们读入数据到 R 的时候,直接忽略这 些。我们可以使用 sacn()函数的”skip”参数指定文件中从顶部开始有多少行需要忽略。为了将数据读入到 R, 并且忽略掉文件中的前三行,我们输入以下代码: > kings <- scan("http://robjhyndman.com/tsdldata/misc/kings.dat",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 48 [26] 59 86 55 68 51 33 49 67 77 81 67 71 81 68 70 77 56 在这个案例中有 42 位英国国王的去世年龄数据被读入到变量”kings”中。
一旦你将时间序列数据读入到 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 48 [26] 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)。 一个样本数据集是从 1946 年 1 月到 1959 年 12 月的纽约每月出生人口数量(由牛顿最初收集)数据集可以从此 链接下载(http://robjhyndman.com/tsdldata/data/nybirths.dat)。我们将数据读入 R,并且存储到一个时间 序列对象中,输入以下代码: > births <- scan("http://robjhyndman.com/tsdldata/data/nybirths.dat") Read 168 items > birthstimeseries <- ts(births, frequency=12, start=c(1946,1)) > birthstimeseries Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
1946 26.663 23.598 26.931 24.740 25.806 24.364 24.477 23.901 23.175 23.227 21.672 21.870 1947 21.439 21.089 23.709 21.669 21.752 20.761 23.479 23.824 23.105 23.110 21.759 22.073 1948 21.937 20.035 23.590 21.672 22.222 22.123 23.950 23.504 22.238 23.142 21.059 21.573 1949 21.548 20.000 22.424 20.615 21.761 22.874 24.104 23.748 23.262 22.907 21.519 22.025 1950 22.604 20.894 24.677 23.673 25.320 23.583 24.671 24.454 24.122 24.252 22.084 22.991 1951 23.287 23.049 25.076 24.037 24.430 24.667 26.451 25.618 25.014 25.110 22.964 23.981 1952 23.798 22.270 24.775 22.646 23.988 24.737 26.276 25.816 25.210 25.199 23.162 24.707 1953 24.364 22.644 25.565 24.062 25.431 24.635 27.009 26.606 26.268 26.462 25.246 25.180 1954 24.657 23.304 26.982 26.199 27.210 26.122 26.706 26.878 26.152 26.379 24.712 25.688 1955 24.990 24.239 26.721 23.475 24.767 26.219 28.361 28.599 27.914 27.784 25.693 26.881 1956 26.217 24.218 27.914 26.975 28.527 27.139 28.982 28.169 28.056 29.136 26.291 26.987 1957 26.589 24.848 27.543 26.896 28.878 27.390 28.065 28.141 29.048 28.484 26.634 27.735 1958 27.132 24.924 28.963 26.589 27.931 28.009 29.229 28.759 28.405 27.945 25.912 26.619 1959 26.076 25.286 27.660 25.951 26.398 25.565 28.865 30.000 29.261 29.012 26.992 27.897 同样的,这个文件(http://robjhyndman.com/tsdldata/data/fancy.dat )包含着一家位于昆士兰海滨度假圣地 的纪念品商店从 1987 年 1 月到 1987 年 12 月的每月销售数据(原始数据源于 Wheelwright and Hyndman, 1998)。我们将数据读入 R 使用以下代码: > souvenir <- scan("http://robjhyndman.com/tsdldata/data/fancy.dat") Read 84 items > souvenirtimeseries <- ts(souvenir, frequency=12, start=c(1987,1)) > souvenirtimeseries Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
1987 1664.81 2397.53 2840.71 3547.29 3752.96 3714.74 4349.6 1 3566.34 5021.82 6423.48 7600.60 19756.21 1988 2499.81 5198.24 7225.14 4806.03 5900.88 4951.34 6179.12 4752.15 5496.43 5835.10 12600.08 28541.72 1989 4717.02 5702.63 9957.58 5304.78 6492.43 6630.80 7349.62 8176.62 8573.17 9690.50 15151.84 34061.01 1990 5921.10 5814.58 12421.25 6369.77 7609.12 7224.75 8121.22 7979.25 8093.06 8476.70 17914.66 30114.41 1991 4826.64 6470.23 9638.77 8821.17 8722.37 10209.48 11276.55 1 2552.22 11637.39 13606.89 21822.11 45060.69 1992 7615.03 9849.69 14558.40 11587.33 9332.56 13082.09 16732.78 19888.61 23933.38 25391.35 36024.80 80721.71 1993 10243.24 11266.88 21826.84 17357.33 15997.79 18601.53 26155.15 285 86.52 30505.41 30821.33 46634.38 104660.67 Plotting Time Series 绘制时间序列图 一旦我们将时间序列读入 R,下一步通常是用这些数据绘制时间序列图,我们可以使用 R 中的 plot.ts()函数。 例如,绘制英国国王(依次的)去世年龄数据的时间序列图,我们输入代码: > plot.ts(kingstimeseries)
从时间曲线图可以看出,这个时间序列可以用相加模型来描述,因为在这一段时间内的随机变动大致是不变的。 Likewise, to plot the time series of the number of births per month in New York city, we type: 同样的,我们画一个纽约每月出生人口数量的时间序列图,输入代码: > plot.ts(birthstimeseries)
我们可以看到这个时间序列在一定月份存在的季节性变动:在每年的夏天都有一个出生峰值,在冬季的时候进入 波谷。同样,这样的时间序列也可能是一个相加模型,随着时间推移,季节性波动时大致稳定的而不是依赖于时 间序列水平,且对着时间的变化,随机波动看起来也是大致稳定的。 类似的,我们画出澳大利亚昆士兰州海滨度假圣地的纪念品商店从 1987 年 1 月到 1987 年 12 月的每月销售数 据,代码如下: > plot.ts(souvenirtimeseries)
分享到:
收藏