时间序列分析与预测

第一讲:导论


黄嘉平

深圳大学中国经济特区研究中心
粤海校区汇文楼1510
https://huangjp.com/

时间序列分析第一步

什么是时间序列数据?

数据的基本结构

  • 变量:描述观测对象的某个特定特征的量,例如身高、收入、年龄等

  • 如何区分观测值:

    • 依个体区分:每一个个体为一个观测单位,例如个人、企业、国家等

    • 依时间节点区分:每一个时间点为一个观测单位,例如年、月、日等

基本数据类型:

  • 时间序列数据(time series data):对同一个体在多个时间点进行观测

  • 横截面数据(cross-sectional data):对多个个体在同一时间点进行观测

  • 面板数据(panel data):对多个个体在多个时间点进行重复观测

GDP 是什么类型的数据?

不同类型的 GDP 数据

GDP 是变量,结合不同的观测方式会形成不同的数据类型

时间序列 GDP

例如,中国在2000-2022年间的年度GDP是时间序列数据

横截面 GDP

例如,G20各国在2022年的年度GDP是横截面数据

面板 GDP

例如,G20各国在2000-2022年间的年度GDP是面板数据

时间序列分析的目的和方法

为什么要分析时间序列数据?

  • 时间序列数据在生活中随处可见

  • 通过分析时间序列数据,可以帮助我们更好的预测未来可能发生的情况

怎样分析时间序列数据?

  1. 首先要对数据进行观察 \to 变化趋势是什么?是否存在周期性?

  2. 然后假设数据生成模型 \to 白噪声、自回归、随机游走等

  3. 之后利用手中的数据对模型进行拟合 \to 求出模型中的关键参数

  4. 验证模型、选择模型 \to 如果需要可以回到第 2 步

  5. 最后利用模型预测未来

时间序列数据的例子 1

例 1.1 强生公司的季度每股收益(quarterly earnings per share, QEPS)

时间序列数据的例子 2

例 1.2 全球变暖与气候变化:纵轴为当年的平均地表温度与 1951-1980 年间的平均值之差

时间序列数据的例子 3

例 1.3 道琼斯工业平均指数(DIJA)

时间序列数据的例子 4

ENSO (El Niño-Southern Oscillation) 厄尔尼诺南方涛动是赤道地区太平洋海面温度和气压的一种综合气候现象。

厄尔尼诺(El Niño)现象指太平洋中东部海面温度过高。


拉尼娜(La Niña)现象指该区域海面温度过低。


南方涛动指该地区海面气压和西太平洋地区气压的相对变化。

时间序列数据的例子 4

例 1.4 厄尔尼诺南方涛动指数 (El Niño-Southern Oscillation Index)1 与新鱼数量指数

时间序列数据的例子 5


猞猁(shēlì, lynx)是中型猫科动物,喜欢捕食小型啮齿动物和鹿等,其中白靴兔(snowshoe hare)是加拿大猞猁最喜欢的猎物。


图中的数据是加拿大哈德逊湾公司收购的皮毛数量,可以代表种群数量的变化。

时间序列数据的例子 5

例 1.5 捕食者与猎物:加拿大猞猁 (Canada lynx) 与白靴兔 (snow shoe hare)

时间序列数据的例子 6

fMRI(functional magnetic resonance imaging,功能磁共振成像)是通过核磁共振现象观测脑活动的一种技术。它常被用来研究脑的哪些区域对特定的外部刺激产生反应,从而尝试理解脑的工作原理。

时间序列数据的例子 6

脑的某个区域的神经元活动时,其消耗的能量和氧会增加。为了补充氧气,附近血管中的血液流量会暂时性增加,使局部血液中的氧合血红蛋白浓度增加,脱氧血红蛋白浓度减少。前者的磁共振强度更高。由血氧浓度变化引起的 MRI 信号强度变化称为 BOLD(blood oxygenation level dependent, 血氧水平依赖)。


从图中可见,从刺激开始到 BOLD 信号达到峰值之间存在 6 秒左右的延迟。

时间序列数据的例子 6

例 1.6 fMRI 图像

在脑皮层(cortex)、丘脑(thalamus)和小脑(cerebellum)中各取两个部位进行观测。

试验针对麻醉的志愿者的手部进行强电流刺激(100Hz, 50mA)以模拟手术时皮肤被切割的痛感。框线代表刺激与否,每次刺激和间隔时长为 32 秒。

R 和 RStudio 第一步

R 的几种用法

R 的命令与执行结果

数值带入与运算

a <- 100    # 将 <- 右侧的值带入左侧的变量中,但不显示结果
b <- 2
c <- a * b^2
print(c)    # 显示 c 的值
[1] 400


探索数据

class(AirPassengers)    # 显示 AirPassengers 的数据类型
[1] "ts"
tsp(AirPassengers)      # 显示 "ts" 类数据的起始时间,结束时间,频度
[1] 1949.000 1960.917   12.000
window(AirPassengers, start = c(1955,1), end = c(1957,12))
     Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
1955 242 233 267 269 270 315 364 347 312 274 237 278
1956 284 277 317 313 318 374 413 405 355 306 271 306
1957 315 301 356 348 355 422 465 467 404 347 305 336

时间序列图

library(astsa)
tsplot(AirPassengers)

tsplot 是 astsa 包中的命令,需要用 library 命令调用后才能使用

vector 和 matrix

x <- c(10, 20, 30, 40, 50)    # c() 将多个输入变量“联结”为一个 vector
x                     # 不使用 print() 也可以显示变量的值
[1] 10 20 30 40 50
y <- c("新学期", "新气象")
y
[1] "新学期" "新气象"
class(y)
[1] "character"
is.vector(y)          # 确认 y 是否为 vector
[1] TRUE


z <- matrix(c(1, 2, 3, 4, 5, 6), nrow = 2, ncol = 3)    # 生成一个 2 x 3 的矩阵
z
     [,1] [,2] [,3]
[1,]    1    3    5
[2,]    2    4    6

访问变量中特定的值

y[2]      # 调取 y 中的第 2 个值
[1] "新气象"
x[2:4]    # 调取 x 中的第 2 至 4 个值
[1] 20 30 40


z[1:4]    # 调取 z 中的第 1 至 4 个值
[1] 1 2 3 4
z[2,3]    # 调取 z 的第 (2,3) 要素
[1] 6
z[1,]     # 调取 z 的第 1 行
[1] 1 3 5
z[,2]     # 调取 z 的第 2 列
[1] 3 4

Data Frame

data frame 是 R 中储存多元数据的一种形式,以 matrix 形式存在,每一列代表一个变量,每一行代表一个观测值

t = data.frame(a = c(11, 12, 14), b = c(19, 29, 39), c = c(100, 101, 102))
t
   a  b   c
1 11 19 100
2 12 29 101
3 14 39 102


调取特定的变量或值

t$b         # 调取 t 中变量 b 的全部内容
[1] 19 29 39
t$a[2:3]    # 调取 t 中变量 a 的第 2 至 3 个值
[1] 12 14

统计分析

simData <- rnorm(100, mean = 10, sd = 2)      # 生成 100 个服从 N(10, 2^2) 的随机数
c(mean(simData), var(simData), sd(simData))   # 求样本均值、样本方差和样本标准差
[1] 10.185594  4.442609  2.107750
summary(simData)                              # 显示 sim 的描述性统计量
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
  4.987   8.726  10.430  10.186  11.753  14.358 
hist(simData)                                     # 画直方图

时间序列数据

mydata <- ts(simData, start = 1980, frequency = 4)  # 将 simData 转变为时间序列 "ts" 数据
                                                    # 设起始时间为 1980 年,频度为季度
mydata
          Qtr1      Qtr2      Qtr3      Qtr4
1980 10.708035 10.700184 10.590652  5.815130
1981 10.558424  8.927074 10.845801  8.611551
1982  8.669853  9.856191 11.749573  8.767241
1983  7.889519 10.253606  7.278482  9.822089
1984  9.532941 12.446561 11.835172  5.292277
1985 12.094152  7.116744 11.045953  8.164090
1986 10.522020 12.033055  6.326227 10.266675
1987  8.040169  7.700520  9.693745 11.406721
1988 13.458012 13.776898 11.625925 12.312619
1989 12.613230 11.761831 12.050888  8.319644
1990  8.798271  7.919231  7.936008  6.268639
1991 10.910109 12.783742  9.376673 13.203286
1992 10.410863  9.299600 12.281544 11.022189
1993 10.130211  7.662521 11.979844  9.626112
1994 10.416211 12.077936  8.744918 11.685580
1995  8.601648  8.094782 11.444585 11.739039
1996 11.703520  6.963215 10.911149 11.377305
1997 11.305646 13.409401  7.310022  9.967388
1998 12.420338 12.779758  6.322634  9.154425
1999 13.794065  9.838574 11.159178  8.206040
2000 11.683190 13.219041 12.664969 13.185881
2001 12.284056  6.318481 12.706599  9.518151
2002 14.357976 10.444750  9.307620  7.866954
2003  9.021633 10.863902  9.284822  4.987490
2004  9.121473 11.301007 10.619663 10.286105

错误提示

学会用 script 文件工作




\to RStudio 操作演示

进一步学习

我们会随着课程的进展逐渐介绍更多 R 的命令


如何自学(或复习)R 的基本用法?

  • 参考学习资料中列举的资料

  • 有效利用 RStudio > Help > R Help 中的内容

  • 如果遇到运行错误,学会根据错误提示寻找问题所在

  • 熟能生巧