资源预览内容
第1页 / 共41页
第2页 / 共41页
第3页 / 共41页
第4页 / 共41页
第5页 / 共41页
第6页 / 共41页
第7页 / 共41页
第8页 / 共41页
第9页 / 共41页
第10页 / 共41页
亲,该文档总共41页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
R语言时间序列中文教程2012特别声明:R语言是免费语言,其代码不带任何质量保证,使用R语舌所广生的后果由使用者负全责。刖日R语言是一种数据分析语言,它是科学的免费的数据分析语言,是凝聚了众多研究人员心血的成熟的使用范围广泛全面的语言,也是学习者能较快受益的语言。在R语言出现之前,数据分析的编程语言是SAS当时SAS的功能比较有限。在贝尔实验室里,有一群科学家讨论提到,他们研究过程中需要用到数据分析软件。SAS的局限也限制了他们的研究。于是他们想,我们贝尔实验室的研究历史要比SASK好几倍,技术力量也比SAS强好几倍,且贝尔实验室里并不缺乏训练有素的专业编程人员,那么,我们贝尔实验室为什么不自己编写数据分析语言,来满足我们应用中所需要的特殊要求呢?于是,贝尔实验室研究出了S-PLUS语言。后来,新西兰奥克兰大学的两位教授非常宵睐S-PLUS的广泛性能。他们决定重新编写与S-PLUSffi似的语言,并且使之免费,提供给全世界所有相关研究人员使用。于是,在这两位教授努力下,一种叫做R的语言在奥克兰大学诞生了。R基本上是S-PLUS的翻版,但R是免费的语言,所有编程研究人员都可以对R语言做出贡献,且他们已经将大量研究成果写成了R命令或脚本,因而R语言的功能比较强大,比较全面。研究人员可免费使用R语言,可通过阅读R语言脚本源代码,学习其他人的研究成果。笔者曾有幸在奥克兰大学受过几年熏陶,曾经向一位统计系的老师提请教过一个数据模拟方面的问题。那位老师只用一行R语句就解答了。R语言的强大功能非常令人惊讶。为了进一步推广R语言,为了方便更多研究人员学习使用R语言,我们收集了R语言时间序列分析实例,以供大家了解和学习使用。当然,这是非常简单的模仿练习,具体操作是,用复制粘贴把本材料中R代码放入R的编程环境;材料中蓝色背景的内容是相关代码和相应输出结果。经过反复模仿,学习者便能熟悉和学会。需要提醒学习者的是:建议学习者安装了R语言编程,再继续阅读本材料;执行R命令时,请删除命令的中文注解,没使用过在命令中加入中文;如果学习者是初次接触R或者Splus,建议先阅读,如果学习者比较熟悉R语言,还可以阅读优秀时间序歹0读物EcomometricsinR,也可以上QuickR网站。目录R语言时间序列分析1前言1目录21. 运用R语言研究JJ数据32. 运用R语言研究空气污染193. 运用R语言研究自动回归移动平均集成模型224. 运用R语言研究全球变暖理论305. 运用R语言研究非独立误差与线性回归326. 运用R语言研究估计波动的频率347. 运用R语言研究厄尔尼诺频率388. 运用R语言研究太阳黑子周期频率39目录R语言时间序列分析1前言1目录21.运用R语言研究JJ数据32. 运用R语言研究空气污染193. 运用R语言研究自动回归移动平均集成模型224. 运用R语言研究全球变暖理论305. 运用R语言研究非独立误差与线性回归326. 运用R语言研究估计波动的频率347. 运用R语言研究厄尔尼诺频率388. 运用R语言研究太阳黑子周期频率39jj1#thefirstelement歹0中第一个数据10.71jj84#thelastelement歹0中最后一个数据111.61jj1:4#thefirst4elements歹U中第一至第四个数据10.710.630.850.44jj-(1:80)#everythingEXCEPTthefirst80elements歹0中除第80个以外的所有数据116.2014.6716.0211.61length(jj)#thenumberofelements有多少个数据184dim(jj)#butnodimensions.但没维度NULLnrow(jj)#.norows没行NULLncol(jj)#.andnocolumns没歹UNULL#如果你要把jj变为一个向量,执行如下操作后,维度为84行1歹0。jj=as.matrix(jj)dim(jj)1841jj1#10.71jj84111.61jj1:4#thefirstelement#thelastelementthefirst4elements列中第一个数据歹0中最后一个数据列中第一至第四个数据10.710.630.850.44:80)#everythingEXCEPTthefirst80elements歹0中除第80个以外的所有数据116.2014.6716.0211.61length(jj)#thenumberofelements有多少个数据184dim(jj)#butnodimensions.但没维度NULLnrow(jj)#.norows没行NULLncol(jj)#.andnocolumns没歹UNULL#如果你要把jj转变为一个向量,执行如下操作后,维度为84行1歹0。jj=as.matrix(jj)dim(jj)1841jj1#10.71jj84111.61jj1:4#thefirstelement#thelastelementthefirst4elements列中第一个数据歹0中最后一个数据列中第一至第四个数据10.710.630.850.44:80)#everythingEXCEPTthefirst80elements歹0中除第80个以外的所有数据116.2014.6716.0211.61length(jj)#thenumberofelements有多少个数据184dim(jj)#butnodimensions.但没维度NULLnrow(jj)#.norows没行NULLncol(jj)#.andnocolumns没歹UNULL#如果你要把jj转变为一个向量,执行如下操作后,维度为84行1歹0。jj=as.matrix(jj)dim(jj)1841jj1#10.71jj84111.61jj1:4#thefirstelement#thelastelementthefirst4elements列中第一个数据歹0中最后一个数据列中第一至第四个数据10.710.630.850.44:80)#everythingEXCEPTthefirst80elements歹0中除第80个以外的所有数据116.2014.6716.0211.61length(jj)#thenumberofelements有多少个数据184dim(jj)#butnodimensions.但没维度NULLnrow(jj)#.norows没行NULLncol(jj)#.andnocolumns没歹UNULL#如果你要把jj转变为一个向量,执行如下操作后,维度为84行1歹0。jj=as.matrix(jj)dim(jj)1841ts.plot(x,main=ts.plot(x)ts.plot(ts(x),ts(y),col=1:2,main=ts.plot(x,y)#note-xandyaretsobjects#-thehelpfiles?andhelp()arethesame:?plot.tshelp(ts.plot)?par#mightaswellskimthegraphicalparametershelpfilewhileyourehere从窗口中的显示可以看出,如果数据是时间序列对象,使用plot()命令就足够了;如果数据是平常序列,使用plot.ts()也可以做时间绘图。不过,把jj数据放在一张图上,数据会随着时间的变化上上下下跳动,能从整体上反应上升或者下降的趋势。上文中用红色光滑的曲线代表上升的趋势,简单明了。这需要将过滤和光滑的技巧使用在jj数据上。在这里,我们用对称的移动平均值来达到过滤和光滑的目的。下面使用公式:fjj(t)=?jj(t-2)+?jj(t-1)+?jj(t)+?jj(t+1)+?jj(t+2)除此之外,lowess的过滤平滑技巧(蓝色曲线)也要使用在jj数据中。具体操作如下图:k=c(.5,1,1,1,.5)#kisthevectorofweights用于对称移动平均的系数(k=k/sum(k)10.1250.2500.2500.2500.125fjj=filter(jj,sides=2,k)#?filterforhelpbutyouknewthatalready使用对称移动平均plot(jj)lines(fjj,col=red)#addsalinetotheexistingplot称移动平均的绘图lines(lowess(jj),col=blue”,lty=dashed)#lowess的绘图操作后,窗口会显示下面结果:Tiw看完jj数据,我们就需要开始具体分析。第一步,我们把所有jj数据都取log值。第二步,我们把log值做差,即使用log值数列中第二值减去第一值,第三值减去第二值,第四值减去第三值等等。如果做差处理前数歹0里有n个数值,处理后的结果中将有n-1个数值。dljj=diff(log(jj)#differencetheloggeddata做log和差的处理plot(dljj)#plotitifyouhaventalready对结果制图shapiro.test(dljj)#testfornormality测试结果的正态分布的性质Shapiro-Wilknormalitytestdata:dljjW=0.9725,p-value=0.07211处理完毕以上两步,我们接下来就要将柱形分布图和QQffl放在一起。这两个图的本质仍旧在丁测试数据正态分布的性质。数据正态分布的性质是整个统计学构架坚实的基础,如果这个性质的存在比较可信、通过了所有测试,统计分析中得出的结论就比较可信、就通得过所有测试。当然如果这个性质在数据中不存在,我们需要用其它的技巧来处理。详细的,参看R语言样品比较应用的实例。以上操作,在窗口中有如下显示:par(mfrow=c(2,1)setupthegraphics设置为两图的输出hist(dljj,prob=TRUE,12)histogram柱形分布图lines(density(dljj)smoothit-?densityfordetails柱形分布图的曲线qqnorm(dljj)qqline(dljj)addaline在QQ图上加直线normalQ-QplotQQ经过测试数据后,窗口会有如下显示:HistogramofdljjJIfT-101TheoreticalQuantiles2NormalQ9Plot在实践操作中,时间序列数据存在着前后关系。例如,今天股票的价格很有可能决定明天股票的价格。明天的温度取决丁今天的气温。做天气预报的具体操作方法,是使用已经存在的天气历史记录,比如说今天的气温,昨天的气温,前天的气温等等,来预测明天的气温。当然,在进行预测之前,我们一定要看活时间序列数据中的前后关系结构,活楚哪一个特定的历史数据可以精确预测未来的数据。在这里,我们使用被log和求差后的dljj数据,来介绍分析时间序列数据前后关系结构的具体技巧。在预测的实际应用中,我们总希望用历史数据来预测即将要产生的数据。事实上,
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号