精华内容
下载资源
问答
  • 常用时间序列分析方法

    千次阅读 2017-11-13 10:50:00
     趋势性且季节性变动趋势的时间序列   ARMA(ARIMA)法  理论上可以针对数据产生的机理构建动态模型,实际上是根据数据扰动项之间相关性结构构建预测模型   优点 :该方法在一个统一的框架下适用...

    #平滑法

         #滑动平均法

         #霍尔特指数平滑法

         #霍尔特-温特指数平滑法

         #平滑法应用场景

             #平滑法之移动平均法

                 #简单移动平滑(Single Moving Average)

                 #指数平滑(Exponential Moving Average)

                 #简单的移动平滑和指数平滑法案例

              #平滑法之霍尔特指数平滑法

              #平滑法之霍尔特温特指数平滑法

                 #霍尔特温特指数平滑法案例

    #ARMA(ARIMA)法

     

    附件是数据

     

     

    •  平滑法

    滑动平均法

        处于恒定水平和没有季节性变动的时间序列

     

    霍尔特指数平滑法

        有趋势性但没有季节性因素的时间序列

     

    霍尔特-温特指数平滑法

        有趋势性且有季节性变动趋势的时间序列

     

    • ARMA(ARIMA)法

        理论上可以针对数据产生的机理构建动态模型,实际上是根据数据扰动项之间相关性结构构建预测模型

        优点:该方法在一个统一的框架下适用与所有的时间序列

        缺点:模型形成需要基于知识和经验判定

     

    • 平滑法应用场景

    13105019_sB3S.png

                                    滑动平均法

     

    13105019_XfHD.png

                        霍尔特指数平滑法

    13105019_i4Tu.jpg

                霍尔特-温特指数平滑法

     

     

     

    • 平滑法之移动平均法

        

    简单移动平滑(Single Moving Average)

        简单移动平均认为最近 N 期的数据对当前数据有预测作用,而且认为这 N 期数据的影响大小是相等的

     

    数学表达式

    13105019_Whm5.png

        n表示移动平均的期数,n越长,拟合曲线越平滑;n越短,对近期变化越敏感

     

     

    指数平滑(Exponential Moving Average)

        指数平滑认为最近各期的影响权重会随着时间间隔的变大而呈现指数衰减

     

    数学表达式

    13105019_KCCJ.png

     

        平滑系数α设定较大时,近期数据的权重变大,适合预测对近期敏感的时间序列数据,而α设定较小时则适合变化缓慢的时间序列数据, α的经验值为0.05到0.3之间

     

    简单的移动平滑和指数平滑法案例

    #简单的移动平滑和指数平滑法
    #股票预测案例
    
    > library(TTR)
    > data(ttrc)#股票数据
    
    #SMA() 表示简单的移动平滑
    > SMA(1:5,n=3)  # n=3 表示平均移动的期数3
    [1] NA NA  2  3  4
    
    #EMA() 表示指数平滑
    > EMA(1:5,n=3,ratio = 0.2) # ratio表示系数α,例如最后一个预测数据根据公式等于2.92 = 5.0*0.2+2.40*2.92
    [1]   NA   NA 2.00 2.40 2.92
    
    > sma.20 <-SMA(ttrc[,"Close"], 20) #去前面的20期做平滑统计
    > tail(sma.20) #获取向量、矩阵、表、数据框架或函数或最后一个部分,head()开头部分
    [1] 51.6855 51.6930 51.7640 51.8470 51.8945 51.9440
    > plot.ts(sma.20)  #如下图
    

     

    13105020_Oj5U.png

    • 平滑法之霍尔特指数平滑法

    不考虑周期性时,并且当数据有 向上或向下的线性趋势时,可以使用 霍尔特指数平滑法(Holt Exponential Moving Average)进行预测

     

    这种方法是指数平滑方法中的一种,其认为序列是存在一个较固定的趋势γ,那么第 t 期的估计值应该为第 t-1 期的观测值加上固定趋势的影响

    13105020_IHro.png

    每一期的固定趋势会受到随机因素的影响不恒等于r,所以r本身是一个随机序列:

    13105020_rS2F.png

     

    加入平滑系数 ? 得到第 t 期的平滑值为:

    13105020_dwWS.png

     

    由于r本身是一个随机序列,自然也可以被平滑:

    13105020_u5WM.png

     

    ?_?称为趋势序列,所以霍尔特指数平滑法是含有两个参数α和β的平滑方法

     

     

    • 平滑法之霍尔特温特指数平滑法

    当时间序列 除了趋势性之外,还表现出 明显的周期性或季节性时,可以使用 霍尔特温特指数平滑法(HoltWinters)进行预

        

    HoltWinters来源于Holt指数平滑法,在其基础上增加了季节项,而季节效应可分为累加与累积两种

     

    累加公式如下

    13105020_4w4G.png

    累积公式如下

    13105020_KGVR.png

     

    两者比较

    13105020_Av9d.png

     

    霍尔特温特指数平滑法案例

    #方式一
    
    > par(mfrow = c(2,1))
    > tsHW <- HoltWinters(tsdata)#霍尔特温特指数平滑法默认是累加的 
    > plot(tsHW) #下图中上部分
    > tsHW <- HoltWinters(tsdata,seasonal = 'multi') #默认是累加的,这里用累乘的方法
    > plot(tsHW) #下图中下部分,红色线是预测值,蓝色是置信区间
    > tsHW.Pred<-predict(tsHW,12, prediction.interval = TRUE) #模型进行预测 predict()等于调用predict.HolWinters()进行预测
                                                              #prediction.interval = TRUE 给出预测区
                                                              #12表示预测 12个月
    > tsHW.Pred
                  fit      upr      lwr
    Jan 1961 447.0559 466.8057 427.3061
    Feb 1961 419.7123 440.2920 399.1326
    Mar 1961 464.8671 486.7712 442.9630
    Apr 1961 496.0839 519.3350 472.8329
    May 1961 507.5326 531.9278 483.1375
    Jun 1961 575.4509 602.1935 548.7083
    Jul 1961 666.5923 696.5558 636.6288
    Aug 1961 657.9137 688.6454 627.1821
    Sep 1961 550.3088 578.9777 521.6398
    Oct 1961 492.9853 520.9553 465.0153
    Nov 1961 420.2073 446.9458 393.4688
    Dec 1961 465.6345 487.9686 443.3004
    > plot(tsHW,tsHW.Pred)

     

    13105020_sIoM.png

    #方式二:使用 forecast包中的 hw方法()
    
    > library(forecast)
    > par(mfrow = c(2,1))
    > plot(hw(tsdata,h = 12))  #如下图上部分
    > plot(hw(tsdata,seasonal='multi',h = 12)) #如下图下部分

     

    13105020_2dtw.png


    •  

    转载于:https://my.oschina.net/u/1785519/blog/1572616

    展开全文
  • 针对常见的降维方法难以有效保留多元时间序列主要特征的问题, 分析了传统主成分分析(PCA) 方法在多 元时间序列降维中的局限性, 提出一种基于共同主成分分析的多元时间序列降维方法, 并通过仿真实验比较了两种...
  • SPSS(十九)SPSS之时间序列模型(图文+数据集)

    万次阅读 多人点赞 2019-06-17 22:32:38
    SPSS(十九)SPSS之时间序列模型(图文+数据集) 时间序列是指将同一统计指标的数值按其发生的时间先后顺序排列...在大数据时代,时间序列分析已经成为 AI 技术的一个分支,通过将时间序列分析与分类模型相结合,更好...

    SPSS(十九)SPSS之时间序列模型(图文+数据集)

    时间序列是指将同一统计指标的数值按其发生的时间先后顺序排列而成的数列。正如人们常说,人生的出场顺序很重要,时间序列中隐藏着一些过去与未来的关系。时间序列分析试图通过研究过去来预测未来。

    时间序列分析在工程、金融、科技等众多领域有着广泛的应用。在大数据时代,时间序列分析已经成为 AI 技术的一个分支,通过将时间序列分析与分类模型相结合,更好的应用于数据检测、预测等场景。

    时间序列模型简介

    • 依时间顺序排列起来的一系列观测值(观测值之间不独立)
    • 它考虑的不是变量间的因果关系,而是重点考察变量在时间方面的发展变化规律,并为之建立数学模型
    • 使用时间序列模型的前提:有足够长的数据序列;数据序列的变动是稳定而规律的

    另外一种理解方式:假如我们对一件事情研究其背后规律很久的话,可以收集到很多的自变量/影响因素去研究与因变量之间的关系,但是由于各种原因我们做不到,我们只能用一个t(时间)来替代所有的影响因素来研究自变量是如何变化的

     

    时间序列分析面临的问题

    时序应该在现实生活中应用的很广,但是为什么不常用这个模型呢?

    • 基础统计数据原因(数据收集)

    报表系统——质量问题
    统计口径——不统一
    范围变化、区域划分——变化

    • 理论和技术培训原因 

    之前没有好的工具来实现时间序列模型

     

    时间序列的方法分类

    • Time domain(最为常见的方法):将时间序列看成是过去一些点的函数,或者认为序列具有随时间系统变化的趋势,它可以用不多的参数来加以描述,或者说可以通过差分、周期等还原成随机序列。
    • Frequency domain:认为时间序列是由数个正弦波成份叠加而成,当序列的确来自一些周期函数集合时,该方法特别有用。 比如心电图
       

    时间序列的构成

    并不是每个序列都包含所有4种成分。比如以年为时间单位的序列就不会有季节变化;
    一些较短的序列也看不出循环变化。所以在分析的时候得具体情况具体分析。 

    • 长期趋势

    指一种长期的变化趋势。它采取一种全局的视角,不考虑序列局部的波动

    下图,整体呈下降趋势

    • 季节变化(Season)

    反映一种周期性的变化一般在一年中完成
    虽然称作“季节”,但是周期并不一定是季度,也可以是月、周等其它能在一年内完成的周期。因为,大多数的周期都以季节的形式出现,所以称作季节变化

    比较典型的季节变化例子:圣诞节效应;冷饮的销售情况

    • 循环变化(Cyclic)

    循环跨度超年

    指一种较长时间的周期变化。一般来说循环时间为2-15年。循环变化一般会出现波峰和波谷,呈现一种循环往复的现象。 
    比如:经济危机 

    • 不规则变化(error) 

    指时间序列中无法预计的部分,也可以理解为误差
    序列的随机波动 
    突发事件引起的 
    它是无法预测的 
    在分析中往往又将其称为白噪声

    它是时间序列中除去趋势、季节变化和自相关性之后的剩余随机扰动。由于时间序列存在不确定性,随机噪声总是夹杂在时间序列中,致使时间序列表现出某种震荡式的无规律运动。
    比如:911事件

     

    时间序列分析对长度的要求

    • 不同的序列分析方法对时间序列分析对长度不一样,建模过程一般都会做差分,差分会损失信息,差分得越多,相应要求的时间序列越长
    • 如果是稳定序列的话,历史数据越多,对预测的帮助越大
    • 如果存在周期,一般需要4个周期以上数理上认为应当在20个周期以上

           假如只有两三个周期,那周期性的分析就没有太大作用了

     

    对于时间序列问题有哪些基本分析思路

    看到数据其实不一定要上最复杂的方法

    • 平滑与季节分解(遇到比较简单的序列)

    用移动平均的方式消除波动,反映出主要的趋势

    • 回归模型

    如果在序列分析中我们考虑到自变量的话,根据历史数据建立相应的回归模型用于预测。甚至来说可以直接把时间当做自变量用于预测,当然我们知道回归时候要求残差是独立的,假如检验出来是非独立的话,我们可以去建一个自回归模型

    • ARIMA

    如果时间序列变化太复杂,我们可以采用ARIMA建模,现在最强大的时序建模方法。真正的时间序列模型建模分析方法
     

    平滑与季节分解

    • 是利用时间序列资料进行短期预测的一种方法。它的基本思想是:除去一些不规则变化后,时间序列将剩下一些基本的变化模式,而这种变化模式将延续到将来。
    • 描述时间序列数据的变化规律和行为,不去试图解释和理解这种变化的原因。例如:您可能发现在过去的一年里,三月和九月都会出现销售的高峰,您可能希望继续保持这样,尽管您不知道为什么。
    • 平滑的主要目的就是除去时间序列的不规则变化,把时间序列的基本变化模式突现出来,作为短期预测的基础。因此也有人把平滑称作“修匀”。
    • 平滑的方法很多。广义上说,可以认为回归也是一种平滑。因为拟合回归曲线可以把杂乱的观测数据修匀得到连续而光滑的曲线。
    • 移动平均和移动中位数等这些不同的平滑技术又被称为平滑器。平滑处理后,可以得到一些新的序列。不同的平滑器得到的新序列是不同的。选择合适的平滑器,寻求最佳的预测效果是平滑处理的关键。

     

    案例:NRC数据的建模预测

    美国1947年1月到1969年12月住宅建筑的数据,分析目的是希望能过通过历史数据来预测1970年全年的情况。

    数据集

    nrc是我们准备用于分析的变量

    nrc2又新增了12个月的数据,可以用来评价我们的预测效果

    556	556
    528	528
    545	545
    607	607
    701	701
    785	785
    874	874
    950	950
    1006	1006
    1093	1093
    1135	1135
    1070	1070
    891	891
    757	757
    874	874
    1028	1028
    1168	1168
    1257	1257
    1294	1294
    1305	1305
    1273	1273
    1203	1203
    1100	1100
    978	978
    846	846
    731	731
    763	763
    844	844
    981	981
    1086	1086
    1147	1147
    1171	1171
    1207	1207
    1238	1238
    1241	1241
    1171	1171
    1077	1077
    1031	1031
    1089	1089
    1276	1276
    1499	1499
    1703	1703
    1827	1827
    1898	1898
    1900	1900
    1785	1785
    1614	1614
    1427	1427
    1289	1289
    1188	1188
    1229	1229
    1288	1288
    1324	1324
    1399	1399
    1428	1428
    1409	1409
    1400	1400
    1397	1397
    1330	1330
    1200	1200
    1015	1015
    963	963
    1149	1149
    1234	1234
    1346	1346
    1437	1437
    1472	1472
    1486	1486
    1473	1473
    1481	1481
    1438	1438
    1309	1309
    1131	1131
    1057	1057
    1206	1206
    1363	1363
    1431	1431
    1570	1570
    1577	1577
    1550	1550
    1514	1514
    1481	1481
    1420	1420
    1294	1294
    1104	1104
    1029	1029
    1167	1167
    1347	1347
    1517	1517
    1627	1627
    1717	1717
    1770	1770
    1783	1783
    1759	1759
    1717	1717
    1650	1650
    1473	1473
    1379	1379
    1562	1562
    1753	1753
    1925	1925
    2064	2064
    2098	2098
    2082	2082
    2051	2051
    1983	1983
    1851	1851
    1656	1656
    1392	1392
    1305	1305
    1457	1457
    1618	1618
    1753	1753
    1884	1884
    1908	1908
    1895	1895
    1860	1860
    1798	1798
    1741	1741
    1567	1567
    1324	1324
    1206	1206
    1350	1350
    1486	1486
    1604	1604
    1718	1718
    1767	1767
    1796	1796
    1787	1787
    1761	1761
    1694	1694
    1513	1513
    1292	1292
    1192	1192
    1302	1302
    1421	1421
    1550	1550
    1702	1702
    1804	1804
    1876	1876
    1907	1907
    1954	1954
    1957	1957
    1832	1832
    1606	1606
    1493	1493
    1676	1676
    1907	1907
    2091	2091
    2253	2253
    2350	2350
    2358	2358
    2310	2310
    2232	2232
    2092	2092
    1883	1883
    1588	1588
    1408	1408
    1613	1613
    1804	1804
    1935	1935
    2112	2112
    2039	2039
    1982	1982
    1931	1931
    1860	1860
    1790	1790
    1644	1644
    1378	1378
    1221	1221
    1459	1459
    1720	1720
    1860	1860
    2059	2059
    2053	2053
    2053	2053
    2055	2055
    2041	2041
    1974	1974
    1807	1807
    1543	1543
    1368	1368
    1605	1605
    1906	1906
    2141	2141
    2377	2377
    2357	2357
    2377	2377
    2330	2330
    2210	2210
    2113	2113
    1965	1965
    1686	1686
    1492	1492
    1666	1666
    1950	1950
    2206	2206
    2421	2421
    2517	2517
    2553	2553
    2516	2516
    2500	2500
    2450	2450
    2230	2230
    1867	1867
    1678	1678
    1866	1866
    2068	2068
    2191	2191
    2385	2385
    2518	2518
    2541	2541
    2439	2439
    2327	2327
    2260	2260
    2118	2118
    1834	1834
    1639	1639
    1782	1782
    2000	2000
    2203	2203
    2429	2429
    2550	2550
    2561	2561
    2473	2473
    2377	2377
    2284	2284
    2136	2136
    1848	1848
    1644	1644
    1781	1781
    1979	1979
    2124	2124
    2287	2287
    2387	2387
    2351	2351
    2202	2202
    1978	1978
    1785	1785
    1614	1614
    1368	1368
    1248	1248
    1405	1405
    1613	1613
    1836	1836
    2107	2107
    2336	2336
    2471	2471
    2446	2446
    2375	2375
    2310	2310
    2191	2191
    1859	1859
    1655	1655
    1885	1885
    2262	2262
    2518	2518
    2628	2628
    2721	2721
    2790	2790
    2780	2780
    2678	2678
    2593	2593
    2454	2454
    2133	2133
    1940	1940
    2195	2195
    2540	2540
    2810	2810
    2962	2962
    2974	2974
    2880	2880
    2763	2763
    2648	2648
    2482	2482
    2288	2288
    	1961
    	1765
    	1986
    	2297
    	2485
    	2592
    	2650
    	2707
    	2721
    	2747
    	2735
    	2627


    时间序列操作的基本步骤

    • 预处理过程

    缺失值的填补 

    一般这两种方法我们比较常用


    时间变量的定义(spss对数据集进行了特殊标记,让spss知道其为序列数据,并非新增三个变量那么简单,必须是刚才进行下面的操作)


    时间序列的平稳化

    观测原始序列是什么分布,时间刻度这一块随便选一个时间自变量

    发现其有长期趋势及季节变化(大概一年)


    一次差分(假如序列匀速上升的话,一次差分序列后应该是平的)

    继续查看其变化(一次差分作为变量)

    确实序列变平了,但是随着时间增加季节变换还是存在的


    季节差分(把周期性也干掉),一阶:相邻的两个季节做相减

    看季节差分分布分布状况

    看到下面的序列,无长期趋势、无季节变换,可认为是一个比较平稳的序列了

    但是刚才上面在做一次差分后的序列,可以看出其序列随着时间增长离散程度会慢慢变大,后续分析可以考虑这一点,可以做变量变换。

    其实刚才上面的步骤不用那么麻烦,在序列图中即可观察

    当前周期:12在哪里设置呢?(在我们刚才定义日期选取的)

     

    关于数据平稳化问题:(非常详细的理论基础)

    大家可以参考

    https://zhuanlan.zhihu.com/p/60023855

    https://zhuanlan.zhihu.com/p/60648709

     

    时间序列趋势的图形化观察

    • Sequence Chart:序列图

    实际上就是一种特殊的线图

    • Autocorrelation Chart:做单个序列,任意滞后(包括负的滞后,也就是超前)的自相关和偏相关图

    对序列图的初步观察结果作进一步确认(检验其是不是白噪声序列)
    重点关心主要的相关趋势,然后再对模型进一步修正

    刚才我们认为做了一次差分和季节差分真的为平稳序列了吗?

    滞后n阶:隔了n个数据的自相关性

    Sig.<0.05,证明存在自相关的,不都是白噪声

    为了方便查看,给出了图,1到5阶都是存在统计学意义的

    自相关系数是有传递性的问题在里面的,spss就会计算偏自相关系数,屏蔽传递的效应后,看剩余的关联是否还存在

    自相关拖尾,偏自相关也拖尾,这两个是为了知道我们进行建模的

    自相关图:自回归系数的变化
    偏相关图:偏回归系数的变化

    假如他是以下模型,应满足下面的特征

    实际用起来,spss会提供一个自动分析的方法

    模型拟合
    几乎均可包含在ARIMA模型族中
    寻找适当的参数是一个反复尝试的过程

    生成 ARIMA 模型的基本步骤:

    1. 对序列绘图,进行 ADF 检验,观察序列是否平稳;对于非平稳时间序列要先进行 d 阶差分,转化为平稳时间序列;
    2. 经过第一步处理,已经得到平稳时间序列。要对平稳时间序列分别求得其自相关系数(ACF)和偏自相关系数(PACF),通过对自相关图和偏自相关图的分析,得到最佳的阶数p、q;
    3. 由以上得到的d、q、p ,得到 ARIMA 模型。然后开始对得到的模型进行模型检验。

    专家建模器:会在指数平滑模型和ARIMA模型里面选取

     

    R方相对于平稳的R方来说,是比较过于乐观的,假如数据是有波动趋势的,我们将趋势解释掉之后,占相当大的变异解释度进去了,平稳的R方比较客观

    RMSE(残差均方)

    MAPE(相对误差)

    MAXAPE(最大值相对误差)

    MAE(绝对误差)

    MAXAE(最大值绝对误差)

    正态化BIC(比较专业化的指标)

     

    当前模型剩下来的这块能否当成白噪声?

    H0:白噪声序列

    Sig.>0.05,剩下来的确实是白噪声序列

     

     

    如何让其做预测?怎么用时间序列?

    由于SPSS的一个小BUG,变量名前缀要修改一下,不能是中文

    对比一下原始序列和预测值效果

    我们想预测到久一点呢?

    假如我们有1970年的真实数据了,对比一下模型预测及真实数据差别

    展开全文
  • 时间序列预测分析方法(一):相关分析

    万次阅读 多人点赞 2019-06-18 14:35:11
    针对特定的预测问题,只是拥有数据还不够,想要从纷繁复杂的数据关系中挖掘出可用于预测的规律或模式,还得运用恰当的分析方法。比如聚类分析,恰当地选择聚类算法,可以按维度将数据适当地分群,根据各类的特征制订...

            针对特定的预测问题,只是拥有数据还不够,想要从纷繁复杂的数据关系中挖掘出可用于预测的规律或模式,还得运用恰当的分析方法。比如聚类分析,恰当地选择聚类算法,可以按维度将数据适当地分群,根据各类的特征制订营销计划或决策,抑或是根据各类不冋规律建立起更有针对性的预测模型;还有常用的关联分析,可以从事物的历史数据中挖掘出变化规律有指导性地对未来进行预测,如此等等。本内容将分别介绍常用的分析方法,本节介绍相关分析。

    目录

    1. 自相关分析            2. 偏相关分析           3. 简单相关分析           4. 互相关分析           5. 典型相关分析


           相关关系是一种与函数关系相区别的非确定性关系,而相关分析就是研究事物或现象之间是否存在这种非确定性关系的统计方法。相关分析按处理问题的不同,通常可分为自相关分析、偏相关分析、简单相关分析、互相关分析及典型相关分析。其中:

    • 自相关分析、偏相关分析:适用于分析变量自身的规律;
    • 简单相关分析:通常可分析任意两个等长数列间的相关性;
    • 互相关分析:允许在一定的间隔下进行简单相关分析;
    • 典型相关分析:适用于分析两组变量的相关性。

    变量与变量的关系通常有两种:

    • 函数关系:表示确定的非随机变量之间的关系,可以用表达式具体地定义。比如,位移与速度就是确定的函数关系。
    • 非确定性关系:表示非随机变量与随机变量的关系,也就是说当给定一个变量时,另一个变量是随机的,它不能由具体的表达式来定义。比如,身高和体重就无法用一个确定的函数关系来表达,但是根据经验,身高比较高的人,其体重也比较重,说明两者是相关关系

    1. 自相关分析

            自相关是指同一时间序列在不同时刻取值的相关程度,假设有时间序列X_{t}, t=1,2,3,...,则在时刻t和滞后n阶t+n之间的相关即为n阶自相关,其定义如下: 

                                

    其中,函数f为计算相关系数的函数,可通过上式计算滞后n阶自相关系数的值。这里使用 airmiles时序数据来分析时间序列的自相关性,该数据集记录的是从1937年到1960年美国商业航空公司的飞机里程数据,如图1-1所示。 

                           

                                                      图 1-1 从1937年到1960年美国商业航空公司的飞机里程趋势

    在R语言中,可用acf函数分析时间序列的自相关性,该函数定义及参数说明如下表: 

    acf(airmiles,type='correlation',lag.max=10)
    
    # airmiles:美国1937-1960年客运里程营收(实际售出机位乘以飞行哩数)

    效果图如下: 

                       

    如图可见,滞后阶数为0时,相关系数为1,随着滞后阶数的增加,相关系数逐渐减弱,并趋于稳定。 

    2. 偏相关分析 

           在分析当期与前n期指标的相关性时,1期到n-1期之间的指标会对相关性的分析有影响,于是将这些影响指标去掉后,再进行的相关分析叫作偏相关分析。

            由于自相关性分析的是时间序列X_{t}, t=1,2,3,...,在时刻tt+n之间取值的相关性程度,其值是未在限定X_{t+1}\sim X_{t+n-1}取值的情况下进行计算的,所得的自相关系数多少会受X_{t+1}\sim X_{t+n-1}取值的影响。为了更加真实地计算自相关关系数值,需要在限定其他值的情况下进行计算,这就是所谓的偏相关,其定义如下:

            

          其中pf函数是求解X_{t}X_{t+n}在排除X_{t+1}\sim X_{t+n-1}因素影响的情况下的偏相关系数。同时,对X_{s}X_{t}在限定X_{k}的情况下,其偏相关系数定义如下: 

                                           

         在R语言中,可直接使用pacf函数分析时间序列的偏相关性,该函数定义及参数说明如表3-1-2所示 :

             

    pacf(airmiles,lag.max=10)

     效果图如下: 

     

           如图所示,最小为1阶滞后,对应值为0.876,与对应的1阶自相关系数相等,随着滞后阶数的增加(大于2阶),偏相关系数一直较小并且稳定。

    1阶滞后:相当于X_{t}X_{t+1},因此其自相关系数和偏自相关系数相等。

    3. 简单相关分析

           相关关系是一种非确定的关系,就好像身高与体重的关系一样,它们之间不能用一个固定的函关系来表示。而相关分析就是研究这种随机变量间相关关系的统计方法。此处,主要探讨不同特征对研究对象的相关性影响。常见进行相关分析的方法,主要有散点图和相关图。

    3.1 散点图

           散点图就是数据点在直角坐标系上的分布图,通常分为散点图矩阵和三维散点图。其中散点矩阵是由变量两两组合由数据点分布图构成的矩阵,而三维散点图就是从所有变量中选择三个变量进行绘制,进一步在三维空间里观察数据的形态。

    (1)散点图矩阵

           常用于绘制散点矩阵的方法是R语言中:

    • car包中的 scatterplotMatrix函数;
    • graphics包中的pais函数。

           这里以R语言自带的iris数据集为例,说明分析鸢尾花的四个指标的相关关系,绘制散点图矩阵,代码如下。

    # 图3-1
    pairs(~Sepal.Length+Sepal.Width+Petal.Length+Petal.Width,data=iris, 
       main="Simple Scatterplot Matrix")
    
    # 图3-2
    library(car)
    scatterplotMatrix(~Sepal.Length+Sepal.Width+Petal.Length+Petal.Width|Species, 
           data=iris)
    
    # 图3-3
    library(rgl)
    scatter3d(iris$Sepal.Length, iris$Petal.Length, iris$Petal.Width)

                

                                                                                          图 3-1

           如图3-1所示为所有变量的两两组合的散点图矩阵,每个散点图中呈现的是任意两变量的数据点,可通过数据点的分布,了解变量之间的相关性。此图中 Petal.Length与 Petal.Width对应的散点图比较接近线性,说明这两个变量间的相关性较强。

               

                                                                                                     图 3-2

           如代码所示,通过“|”指定了分组的变量,这里使用鸢尾花的种类进行分组。如图3-2所示对角线上的图形表示各个变量在不同鸢尾花类型下的分布情况;其他图形分别用不同颜色为数据点着色,同时实线表示对数据点的拟合线,上下虚线表示浮动范围,直接表示线性拟合线。根据该图可以更进一步地知道不同类型鸢尾花各变量的相关关系,以及线性及非线性的变化规律

    (2)三维散点图

            常用于绘制三维散点图的方法是:

    • car包的 scatter3d函数

            通过该函数绘制的图形,可以进行转动,以便切换不同角度,查看数据在三维空间的分布情况。通过使用 scatter3d函数绘制鸢尾花的 Sepal.Length、 Petal.Length、 Petal.Width这三个指标在三维空间的散点图,如下所示,该函数为三维空间中的点拟合了线性平面,通过旋转可以更直观地观察数据的分布规律。

                                             

                                                                                                图 3-3

    3.2 相关图

            所谓相关图是基于变量间的相关关系大小,通过可视化方式反应不同变量组合间相关关系的差异的图形。可以把相关图分为相关矩阵图、相关层次图。

    (1)相关矩阵图

           R语言中,绘制相关矩阵图的包,主要有两个,分别为:

    • corrgram包中的 corrgram函数;

            panel:统一设置非对角的面板,

            lower.panel和 upper panel:分别设置相关矩阵下三角和上三角的面板形状,

            通常可以设置:panel.pie(饼图)、 panel.shade(阴影图)、 panel.ellipse(椭圆图)、panel.pts(散点图)

    library(corrgram)
    
    #1、设置排序处理
    corrgram(mtcars,order=TRUE)
    
    #2、设置上下三角面板形状
    corrgram(mtcars,order=TRUE,lower.panel=panel.shade,upper.panel=panel.pie)
    
    #3、只显示下三角部分
    corrgram(mtcars,order=TRUE,lower.panel=panel.shade,upper.panel=NULL)
    
    #4、调整面板颜色
    corrgram(mtcars,order=TRUE,lower.panel=panel.shade,upper.panel=panel.pie,
             col.regions=colorRampPalette(c("darkgoldenrod4","burlywood1","white",
             "darkkhaki","darkgreen")))

     

                                                                    图 3-4:以上程序1、2、3、4效果图

    • complot包中的 complot函数

             method:可以取7个值,分别为 circle(圆形,默认) 、square(方形) 、ellipse(椭圆)、number(数字)、pie(饼图) 、shade(阴影) 、color(热力图)。

            type:用来设置相关矩阵图的显示区域,通常取full全部,默认)upper(上三角)、lower(下三角)

            col:可通过 colorRampPalette函数向col参数赋值来设置颜色

            order:用来指定相关系数变量的排序方式,通常可取 original(原始顺序,默认),AOE(特征向量的角顺序,FPC(第一主成分的顺序), hclust(层次聚类的顺序)以及 alphabet(字母表顺序)

    library(corrplot)
    
    #1、设置method=color绘制热力矩阵图
    corrplot(cor(mtcars), method="color", order = "AOE",tl.col="black",tl.srt=45,
             addCoef.col="black",col=colorRampPalette(c("#7F0000","red","#FF7F00",
             "yellow","white", "cyan", "#007FFF", "blue","#00007F"))(20))
    
    #2、绘制上下三角及不同色彩的相关矩阵图
    library(RColorBrewer)
    par(mfrow=c(2,2))
    corrplot(cor(mtcars),type="lower")
    corrplot(cor(mtcars),type="lower",order="hclust", col=brewer.pal(n=8,name="RdYlBu"))
    corrplot(cor(mtcars),type="upper",order="AOE", col=c("black","white"),bg="lightblue")
    corrplot(cor(mtcars),type="upper",order="FPC", col=brewer.pal(n=8, name="PuOr"))
    par(mfrow=c(1,1))

        

                                                                         图 3-5:以上程序1、2效果图 

    (2)相关层次图

          层次图,通过计算样本间的距离来判断各样本是否属于同一类。通过将相关系数转化为距离度量,进行系统聚类,旨在分析各变量的相关关系及组合影响情况。通常有四种方法将相关系数转化为相异性度量d

     使用mtcars数据集,进行系统聚类,如下: 方式一:hclust() 

    • d=1-r
    • d=(1-r)/2
    • d=1-|r|
    • d=\sqrt{1-r^{2}}
    d<-sqrt(1-cor(mtcars)^2)
    hc<-hclust(as.dist(d))
    plot(hc)
    rect.hclust(hc,k=3)  # 添加聚类分类矩形,如分为3类

     效果如下图所示: 

                           

    方式二:pvclust(),通过p值来评估层次聚类的不确定性,表明了影响显著的聚类,显著的类越多,效果越好。

    参数:method.dist() 指定用于计算距离的方法,设定为correlation时,按 d=1-r 计算;设定为abscor时,按 d=1-|r| 计算。

    library(pvclust)
    cluster.bootstrap <- pvclust(mtcars, nboot=1000, method.dist="correlation")
    plot(cluster.bootstrap)
    pvrect(cluster.bootstrap)  # 添加聚类分类矩形

     效果如下图所示:

                         

    • AU值:Approxiamtely Unbiased,通过多尺度自助重抽样法计算而来;
    • BP值:Bootstrap Probability,通过普通自助重抽样法计算而来 

    4. 互相关分析

          与自相关不同,互相关是指两个时间序列在做任意两个不同时刻的相关程度,假设有时间序列X_{t}, t=1,2,3,...Y_{t}, t=1,2,3,...,则X在时刻t和y在时刻t+n之间的相关即为n阶互相关,其定义如下:

                              

            其中函数∫为计算相关系数的函数,可通过上式计算滞后n阶互相关系数的值。

            使用 airmiles和 Lakehuron数据集,来说明互相关分析的方法。其中 airmiles数据集记录了从1937年到1960年美国商业航空公司每年的乘客里程数据,而 Lakehuron数据集记录了从1875年到1972年休伦湖每年的湖平面的测量数据。将它们的时间限制在1937年到1960年,并绘制各自的时间序列曲线如图4-1所示。 

                                     

                          

                                                                                          图 4-1 

    在R语言中,可直接使用ccf函数分析时间序列的互相关性,该函数定义及参数说明如表3-1-3所示:

            

            

    plot(airmiles)
    plot(LakeHuron,xlim=c(1937,1960))
    
    ccf(airmiles, ts(LakeHuron, start = 1937, end = 1960), type="correlation")

    结果如下: 

                         

            效果如图所示,当没有延迟(即Lag=0)时,互相关系数取得最小,将近-0.8,两个时间序列大致上呈负相关关系。而当延迟10阶时,两个时间序列互相关系数最大,且为弱正相关。可通过互相关性的分析,构建用于预测的合适指标。 

    5. 典型相关分析

            典型相关是指两组变量间的相关关系,当然,它不是指对两组变量进行两两组合的简单相关,而是反映两组变量作为两个整体之间的相关性。所以典型相关的问题就是如何构建综合指标使其相关性最大。常见的做法是:

            从两组变量中提取一对线性组合,使其相关性最大;然后,从剩余的且与前面不相关的线性组合中再提取一对,使其具有最大的相关性,这样依次进行下去。所提取的线性组合就是典型变量,两组典型变量对应的相关系数就是典型相关系数。

            R语言程序包 stats中的 cancor函数,可以直接求解两个数值矩阵的典型相关系数,它的定义及参数说明如表3-1-4所示。

                  

             现使用iris数据集,分别将第1、2列和3、4列转换成数值矩阵,使用 cancor函数求解典型相关系数,代码如下。

    x<-as.matrix(iris[,1:2])
    y<-as.matrix(iris[,3:4])
    cancor(x,y)

      结果如下: 

                                     

           由结果可知,典型相关系数有两个,分别是0.9409690和0.1239369,说明第一组典型变量的相关性很强,第二组典型变量的相关性很弱。这种情况,通常第一个典型相关系数用于分析。

           xcof和ycof分别表示矩阵x和y中典型变量与原变量对应的系数矩阵,可通过标准化的数据矩阵进行乘法运算得到典型变量。

     

    展开全文
  • 用python进行时间序列分析(一)

    千次阅读 2019-02-26 19:04:43
    时间序列分析相关概念一、用python生成时间序列1.几种常见的时间序列2.data_range()函数—创建时间序列3.truncate()过滤函数4.时间戳可以转化为时间周期二、数据重采样三、pandas滑动窗口1.制作pandas滑动窗口2.数据...

    一、用python生成时间序列

    首先,需要导入pandas和numpy库

    import pandas as pd
    import numpy as np
    

    1.几种常见的时间序列

    1. 时间戳 (timestamp);
    2. 固定周期 (period);
    3. 时间间隔 (interval);

    2.data_range()函数—创建时间序列

    函数参数:pd.date_range(start=None, end=None, periods=None, freq=None, tz=None, normalize=False,name=None, closed=None, **kwargs)
    其中freq变量常见的类型有:D(天)、W(周)、M(月)
    date_range函数应用示例
    date_range()函数也可用于Dataframe中创建索引,示例如下:
    用时间序列作为索引

    3.truncate()过滤函数

    使用方法:DataFrame.truncate(before=None, after=None, axis=None, copy=True)[source]
    在这里插入图片描述

    4.时间戳可以转化为时间周期

    可以使用DatetimeArray.to_period(freq=None)函数

    链接: 示例参考来源.
    在这里插入图片描述

    二、数据重采样

    定义:时间数据由一个频率(年,月,周,日,分,秒)转换到另一个频率(年,月,周,日,分,秒)

    • 降采样:由周转化为月

    • 升采样:由月转化为周

    • 使用Series.resample()方法
      生成时间序列
      时间序列降采样
      在这里插入图片描述

      时间序列升采样
      在这里插入图片描述
      时间序列升采样过程中需要对NaN空值采用某种插值方法,可采用以下三种:

      • ffill空值取前面的值
      • bfill空值取后面的值
      • interpolate线性取值
        在这里插入图片描述

    三、pandas滑动窗口

    1.制作pandas滑动窗口

    import matplotlib.pyplot as plt
    import pandas as pd
    import numpy as np
    df=pd.Series(np.random.randn(600), index=pd.date_range('7/1/2016', freq='D', periods=600))
    df.head()
    r=df.rolling(windows=10)
    print(r.mean())
    

    2.数据可视化

    plt.figure(figsize=(15,5))
    df.plot(style='r--')
    df.rolling(windows=10).mean().plot(style='g')
    

    四、数据平稳性与差分法

    1.平稳性

    • 平稳性:平稳性就是要求经由时间序列所得到的拟合曲线在未来一段时间内仍能顺着现有的形态“惯性”地延续下去。

    • 平稳性要求序列的均值和方差不发生明显变化

    • 严平稳与弱平稳

    • 严平稳:分布不随时间的改变而改变,如白噪声(正态),无论怎样取值,均值为0,方差为1。

    • 弱平稳:期望与相关系数不变,未来某时刻t的值Xt就要依赖于它过去的信息,需要依赖性。

    2.差分法

    • 定义:时间序列在t与t-1时刻的差值
    • 一阶差分:s = pd.Series([1, 1, 2, 3, 5, 8]).diff(1)
    • 二阶差分:s = pd.Series([1, 1, 2, 3, 5, 8]).diff(2)

    五、ARIMA模型

    1.ARIMA(p,d,q)模型

    全称为差分自回归移动平均模型(Autoregressive Integrated Moving Average Model,ARIMA),其中AR-自回归,p-自回归项,,MA-移动平均,q-移动平均数,d-时间序列成为平稳时所做的差分次数

    • 原理:将非平稳的时间序列转化为平稳的时间序列然后将因变量仅对他的滞后值以及随机误差项的现值和滞后值进行回归所建立的模型。
    • 构成:由AR模型(自回归模型)和MA模型(移动平均模型)组成
    • 参数:需要确定p,d,q的最优取值

    2.ARIMA(p,d,q)阶数确定

    • AR(p)由PACF确定
    • MA(q)由ACF确定
    • 截尾:落在置信区间内(95%的点都符合该规则)在这里插入图片描述

    3.ARIMA建模流程

    • 序列平稳化(差分法确定d)
    • p和q阶数确定:ACF和PACF
    • ARIMA(p,d,q)
    展开全文
  • 本篇以美国1980年-2015年月度失业率为对象,进行一个更为完善的、季节效应的非平稳时间序列分析流程。 理论支持: 拿到非平稳时间序列,首先进行的就是差分法消除趋势性,然后根据情况判断拟合季节加法模型或乘法...
  • 一、时间序列分析的简介

    千次阅读 2018-06-11 10:22:04
     按照时间的顺序把随机时间变化发展的过程记录下来就构成了一个时间序列,对时间序列进行观察、研究,寻找它的变化发展规律,预测它将来的走势,就是时间序列分析。  在统计研究中,常用按时间顺序排列的一组随机...
  • 常见时间序列模型

    万次阅读 2018-12-30 11:50:22
    本文主要对各种时间序列模型及其特征做了一个归纳总结,以便查询了解。 符号说明: 变量: x,yx,yx,y 变量集:X,YX,YX,Y 变量xxx在ttt时刻的值:xtx_txt​ 参数:α,β\alpha, \betaα,β ##自回归模型...
  • 作者简介饭饭爱吃饭,携程高级数据分析师,主要负责旅游领域数据赋能相关工作。对旅游趋势识别与推荐、旅游广告投放、旅游LBS等领域浓厚兴趣。一、背景随着大数据的发展,自然科学、社会科学、...
  • 时间序列分析

    万次阅读 多人点赞 2017-03-22 17:04:51
    http://blog.csdn.net/pipisorry/article/details/62053938时间序列简介时间序列是时间间隔不变的情况下收集的时间点集合。这些集合被分析用来了解长期发展趋势,为了预测未来或者表现分析的其他形式。但是什么时间...
  • Python实实现现时时间间序序列列可可视视化化的的...时间序列数据在数据科学领域无处不在在量化金融领域也十分常见可以用于分析价格趋势预测价格探索价格 行为等 学会对时间序列数据进行可视化能够帮助我们更加直观地探
  • 用于时间序列分析的 5 个Python 库

    千次阅读 2021-08-05 09:12:44
    时间序列分析是数据科学家最常见的问题之一。 大多数时间序列解决方案涉及经济预测、资源需求预测、股票市场分析和销售分析。 如果从头开始,为大量与时间相关的数据开发复杂的模型对于程序员来说可能是一项艰巨的...
  • 网上很多用R语言进行金融时间序列分析的资料,但是用Python的不多,我在此介绍下怎么用Python操作,至于R语言怎么弄,读者随便在网上查查就好了。 PS: 在时间序列分析领域R比Python简单的多,如果单单是进行分析...
  • 时间序列预测常见模型总结

    千次阅读 2019-09-08 09:59:29
    按照研究对象可分为一元时间序列、多元时间序列; 按照连续性可分为离散时间序列、连续时间序列; 按照统计特性分为平稳时间序列、非平稳时间序列。其中,序列概率分布与时间无关,则称该序列为狭义平稳时间序列;...
  • 时间序列分析系统综述及应用

    千次阅读 2020-01-22 11:27:56
    (转载请注明:... 系统日志分析 1 需求分析 XX系统的日志量非常庞大,每天落地日志将近四亿到五亿条。XX表二十几个字段。这里选择对每日业务量峰值和业务总量进行分析。 ...进行时间序列分析。 2...
  • 时间序列分析关键理论知识点整理

    千次阅读 2020-06-28 14:09:59
    目录时间序列的组合成分[^实用案例分析]常用时序算法及适应范围[^实用案例分析]拖尾和截尾自相关和偏自相关函数的特征ARIMA过程与其自相关函数偏自相关函数特征[^计量经济学]在这里插入图片描述]...
  • 时间序列分析基础

    千次阅读 2016-01-05 12:55:01
    时间序列是现实生活中经常会碰到的数据形式。...由于工作需要,我最近简单学习了时间序列分析相关的基础理论和应用方法,这篇文章可以看做是我的学习笔记。 文章主要内容会首先描述时间序列分析的基本概念和相关
  • 数据挖掘之 时间序列分析

    万次阅读 2016-05-26 01:04:49
    时间序列是指按时间顺序排列的一组数据,这些数据两个特点:趋势和季节性 趋势:总体情况 季节性:周期性波动 时间序列挖掘的基本思路:根据之前已的序列数据,发现隐含的规则,来预测后面的发展趋势 实现方法...
  • 【Python】时间序列分析完整过程

    万次阅读 多人点赞 2019-05-20 10:48:21
    1. 导言 1.1 基本定义   根据维基百科上对时间序列的定义,我们简单将其理解为: 时间序列:一系列以时间顺序作为索引的数据点...  咱们先来看看,对时间序列数据分析,需要用到哪些库吧 ~ import numpy as np ...
  • 时间序列分析笔记(待整理)

    万次阅读 2018-04-25 17:29:19
    时间序列有三种基本模式:平稳性 / 随机性(Stationarity):当数据没有明显的模式特征的话,我们认为它是平稳的,Y值在一个范围内随着时间上下浮动。趋势性(Trend):当Y值在一段时间内随着时间明显的向上或者向下的...
  • 时间序列分析--ARIMA模型

    万次阅读 多人点赞 2016-10-15 14:08:57
    指数平滑法对时间序列上连续的值之间的相关性没有要求。但是,如果你想使用指数平滑法计算出预测区间, 那么预测误差必须是不相关的, 且必须是服从零均值、 方差不变的正态分布。即使指数平滑法对时间序列连续数值...
  • 时间序列常见的相似性度量是动态时间规整(DTW)或欧氏距离(ED)。 但是,它们已有数十年历史,无法满足当今的要求。 对UCR时间序列分类基准的研究过于依赖导致了两个陷阱,即:(a)他们主要关注准确性,并且...
  • 数据分析——时间序列分析模型(AR,MA,ARMA,ARIMA)

    万次阅读 多人点赞 2019-01-08 17:39:21
    1.概述 时间序列是某个时间段或者某些时间点对应的不同数值的数值对,...这些时间序列都直接或者间接的反应者某种事物的发展变化趋势与状态,也就是时间序列变化的背后必然蕴藏着非直观的某种变换规律,通过对这些...
  • 在前几次分享中我们知道,很多时序算法都依赖完整的时序数据进行建模,许多业务也需要数据保持完整性,以更好地进行可视化与分析。然而在真实场景中,由于采集能力或网络传输的原因,时序数据常常会缺...
  • 它的逻辑简单,但对时间序列问题能够做出相当准确的预测。 1)自回归函数 y^t=b0+b1yt−1+...+bnyt−n,其中n<t y\hat{}_t = b_0 + b_1y_{t-1} + ... + b_ny_{t-n} , 其中n<ty^t​=b0​+b1​yt−1​+......
  • 本节简单回归一下时间序列任务的几种方向以及哪些比较优秀的开源算法。1 时序预测时序预测从不同角度看不同分类。从实现原理的角度,可以分为传统统计学、机器学习(又分非深度学习和深度学习)...
  • pandas时间序列常用方法简介

    千次阅读 2020-08-10 08:18:00
    作者:lluanhz来源:小数志导读pandas是Python数据分析最好用的第三方库,没有之一。——笛卡儿没说过这句话!在进行时间相关的数据分析时,时间序列的处理是自然而然的事情,从创...
  • Python之--时间序列(一)&时间数据分析

    千次阅读 2019-03-25 15:34:40
    1.时间序列 不管在哪个领域中(金融学、经济学、生态学、神经科学、物理学等),时间序列数据都是一种重要的结构化数据形式,在多...时间序列数据的意义取决于具体的应用场景,主要以下几种: 时间戳(timestamp...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 114,006
精华内容 45,602
关键字:

常见的时间序列分析方法有