• 44.2.1 cppFunction() 转换简单的C++函数—Fibnacci例子
  • 44.2.2 sourceCpp() 转换C++程序—正负交替迭代例子
  • 44.2.3 sourceCpp() 转换C++源文件中的程序—正负交替迭代例子
  • 44.2.4 sourceCpp() 转换C++源程序文件—卷积例子
  • 44.2.5 在Rmd文件中使用C++源程序文件
  • 45 R与C++的类型转换
  • 45.1 wrap() 把C++变量返回到R中
  • 45.2 as() 函数把R变量转换为C++类型
  • 45.3 as() wrap() 的隐含调用
  • 46 Rcpp 属性
  • 46.1 Rcpp属性介绍
  • 46.2 在C++源程序中指定要导出的C++函数
  • 46.3 在R中编译链接C++代码
  • 46.4 Rcpp属性的其它功能
  • 46.4.1 自变量有缺省值的函数
  • 46.4.2 允许用户中断
  • 46.4.3 把R代码写在C++源文件中
  • 46.4.4 在C++中调用R的随机数发生器
  • 47 Rcpp提供的C++数据类型
  • 47.1 RObject类
  • 47.2 IntegerVector类
  • 47.2.1 IntegerVector示例1:返回完全数
  • 47.2.2 IntegerVector示例2:输入整数向量
  • 47.3 NumericVector类
  • 47.3.1 示例1:计算元素 \(p\) 次方的和
  • 47.3.2 示例2: clone 函数
  • 47.3.3 示例3:向量子集
  • 47.4 NumericMatrix类
  • 47.4.1 示例1:计算矩阵各列模的最大值
  • 47.4.2 示例2:把输入矩阵制作副本计算元素平方根
  • 47.4.3 示例3:访问列子集
  • 47.5 Rcpp的其它向量类
  • 47.5.1 Rcpp的LogicalVector类
  • 47.5.2 Rcpp的CharacterVector类型
  • 47.6 Rcpp提供的其它数据类型
  • 47.6.1 Named类型
  • 47.6.2 List类型
  • 47.6.3 Rcpp的DataFrame类
  • 47.6.4 Rcpp的Function类
  • 47.6.5 Rcpp的Environment类
  • 48 Rcpp糖
  • 48.1 简单示例
  • 48.2 向量化的运算符
  • 48.2.1 向量化的四则运算
  • 48.2.2 向量化的二元逻辑运算
  • 48.2.3 向量化的一元运算符
  • 48.3 用Rcpp访问数学函数
  • 48.4 返回单一逻辑值的函数
  • 48.5 返回糖表达式的函数
  • 48.6 R与Rcpp不同语法示例
  • 49 用Rcpp帮助制作R扩展包
  • 49.1 不用扩展包共享C++代码的方法
  • 49.2 生成扩展包
  • 49.2.1 利用已有基于Rcpp属性的源程序制作扩展包
  • 49.2.2 DESCRIPTION文件
  • 49.2.3 NAMESPACE文件
  • 49.3 重新编译
  • 49.4 建立C++用的接口界面
  • 50 R编程例子
  • 50.1 R语言
  • 50.1.1 用向量作逆变换
  • 50.1.2 斐波那契数列计算
  • 50.1.3 穷举所有排列
  • 50.1.4 可重复分组方式穷举
  • 50.1.5 升降连计数
  • 50.1.6 高斯八皇后问题
  • 50.2 概率
  • 50.2.1 智者千虑必有一失
  • 50.2.2 圆桌夫妇座位问题
  • 50.3 科学计算
  • 50.3.1 城市间最短路径
  • 50.3.2 Daubechies小波函数计算
  • 50.3.3 房间加热温度变化
  • 50.4 统计计算
  • 50.4.1 线性回归实例
  • 50.4.2 核回归与核密度估计
  • 50.4.3 二维随机模拟积分
  • 50.4.4 潜周期估计
  • 50.4.5 ARMA(1,1)模型估计
  • 50.4.6 VAR模型平稳性
  • 50.4.7 贮存可靠性评估
  • 50.5 数据处理
  • 50.5.1 小题分题型分数汇总
  • 50.5.2 类别编号重排
  • 50.6 文本处理
  • 50.6.1 用R语言下载处理《红楼梦》htm文件
  • 51 使用经验
  • 51.1 文件管理
  • 51.1.1 文件备份
  • 51.1.2 工作空间
  • 51.2 程序格式
  • A R Markdown文件格式
  • A.1 R Markdown文件
  • A.2 R Markdown文件的编译
  • A.2.1 编译的实际过程
  • A.3 在R Markdown文件中插入R代码
  • A.4 输出表格
  • A.5 利用R程序插图
  • A.6 冗余输出控制
  • A.7 代码段选项
  • A.7.1 代码和文本输出结果格式
  • A.7.2 图形选项
  • A.7.3 缓存(cache)选项
  • A.8 章节目录链接问题
  • A.9 其它编程语言引擎
  • A.10 交互内容
  • A.11 属性设置
  • A.11.1 YAML元数据
  • A.11.2 输出格式
  • A.11.3 输出格式设置
  • A.11.4 目录设置
  • A.11.5 章节自动编号
  • A.11.6 Word输出章节自动编号及模板功能
  • A.11.7 HTML特有输出格式设置
  • A.11.8 关于数学公式支持的设置
  • A.11.9 输出设置文件
  • A.12 LaTeX和PDF输出
  • A.12.1 TinyTex的安装使用
  • A.12.2 Rmd中Latex设置
  • A.13 生成期刊文章
  • A.14 附录:经验与问题
  • A.14.1 Word模板制作
  • A.14.2 数学公式设置补充
  • B 用bookdown制作图书
  • B.1 介绍
  • B.2 一本书的设置
  • B.3 章节结构
  • B.4 书的编译
  • B.5 交叉引用
  • B.6 数学公式和公式编号
  • B.7 定理类编号
  • B.8 文献引用
  • B.9 插图
  • B.10 表格
  • B.10.1 Markdown表格
  • B.10.2 kable() 函数制作表格
  • B.10.3 R中其它制作表格的包
  • B.11 数学公式的设置
  • B.12 使用经验
  • B.12.1 学位论文
  • B.12.2 LaTeX
  • B.12.3 算法
  • B.12.4 中文乱码
  • B.12.5 图片格式
  • B.12.6 其它经验
  • B.13 bookdown的一些使用问题
  • C 用R Markdown制作简易网站
  • C.1 介绍
  • C.2 简易网站制作
  • C.2.1 网站结构
  • C.2.2 编译
  • C.2.3 内容文件
  • C.2.4 网站设置
  • C.3 用blogdown制作网站
  • C.3.1 生成新网站的框架
  • C.3.2 网页内容文件及其设置
  • C.3.3 初学者的工作流程
  • C.3.4 网站设置文件
  • C.3.5 静态文件
  • D 制作幻灯片
  • D.1 介绍
  • D.2 Slidy幻灯片
  • D.2.1 文件格式
  • D.2.2 幻灯片编译
  • D.2.3 播放控制
  • D.2.4 生成单页HTML
  • D.2.5 数学公式处理与输出设置文件
  • D.2.6 其它选项
  • D.2.7 slidy幻灯片激光笔失效问题的修改
  • D.3 MS PowerPoint幻灯片
  • D.4 Bearmer幻灯片格式
  • D.5 R Presentation格式
  • References
  • 编著:李东风
  • \(\{X_t, t \in \mathbb Z\}\) \(X_t\) 是随机变量, 称 \(\{ X_t \}\) 为时间序列。 如果 \(\{ X_t \}\) 的有限维联合分布不随时间推移而变化, 称 \(\{ X_t \}\) 严平稳 时间序列。 如果 \(\{ X_t \}\) 二阶矩有限, 期望和方差不随时间而变化, 两个时间点之间的协方差只依赖于时间距离而不依赖于具体时间, 则称 \(\{ X_t \}\) (宽)平稳 时间序列。

    如果 \(X_t\) 是随机向量, 称 \(\{ X_t \}\) 为多元(或多维)时间序列。

    对宽平稳列 \(\{ X_t \}\) , 定义其自协方差函数(ACVF)为 \gamma_k = \text{Cov}(X_{t+k}, X_t), \ k \in \mathbb Z . 定义其自相关函数(ACF)为 \rho_k = \text{corr}(X_{t+k}, X_t) = \frac{\gamma_k}{\gamma_0}, \ k \in \mathbb Z .

    偏自相关函数(PACF)定义请参考时间序列分析的教材。

    如果 \(\sum_k |\gamma_k| < \infty\) , 则平稳列 \(\{ X_t \}\) 有谱密度 \(f(\lambda), \lambda \in [-\pi, \pi]\) \(f(\lambda)\) 是非负可积偶函数,使得 \[\begin{aligned} \gamma_k =& \int_{-\pi}^{\pi} e^{ik\lambda} f(\lambda) \,d\lambda, \ k \in \mathbb Z, \\ f(\lambda) =& \frac{1}{2\pi} \sum_{k=-\infty}^{\infty} \gamma_k e^{-ik\lambda}, \ \lambda \in [-\pi, \pi] . \end{aligned}\]

    若平稳列 \(\{ \varepsilon_t \}\) 的自协方差函数满足 \(\gamma_0 = \sigma^2\) , \(\gamma_k = 0, k \neq 0\) , 称 \(\{ \varepsilon_t \}\) 为白噪声列。 如果均值为零,称为零均值白噪声列, 记为WN(0, \(\sigma^2\) )。

    38.2 时间序列数据类型

    时间序列的数据可以保存在R的向量中, 或者保存在R的数据框的一列或几列中, 对应的时间单独保存或者保存在同一数据框中。

    也有一些专门的时间序列数据类型, 将时间序列的观测数据与对应的时间同时保存在一个专用的数据结构中。

    38.2.1 ts类型

    R中最基本的时间序列类型是ts类型, 可以保存一元或者多元时间序列数据, 其中的时间必须是等间隔的, 比如年数据、月数据、季度数据、日数据, 不能在中间有缺失的日期。 生成方法如

    xts也是一种时间序列数据类型, 既可以保存等间隔时间序列数据, 也可以保存不等间隔的时间序列数据, 并且xts类型的数据访问功能更为方便。 读入方法例如

    对ts和xts类型, 仍可用 length() , mean() , sd() 等函数计算基本的统计量。

    对ts类型, plot() 函数作曲线图,如:

    38.4.2.1

    filter 函数可以计算递推的或卷积的滤波。

    arima 可以拟合ARIMA模型。 arima.sim 可以模拟生成ARIMA模型的数据。

    38.4 ARIMA建模和模拟

    38.4.1 模型公式

    AR( \(p\) )模型(零均值): \[\begin{aligned} X_t = a_1 X_{t-1} + a_2 X_{t-2} + \dots + a_p X_{t-p} + \varepsilon_t, \ \{ \varepsilon_t \} \sim \text{WN}(0, \sigma^2), \end{aligned}\] 参数为 \(a_1, \dots, a_p, \sigma^2\) , A(z) = 1 - a_1 z - \dots - a_p z^p \neq 0, \ \forall |z| \leq 1, \ z \in \mathbb C, \(\mathbb C\) 为复数域。

    可逆MA( \(q\) )模型(零均值): \[\begin{aligned} X_t = \varepsilon_t + b_1 \varepsilon_{t-1} + \dots + b_1 \varepsilon_{t-q}, \ \{ \varepsilon_t \} \sim \text{WN}(0, \sigma^2), \end{aligned}\] B(z) = 1 + b_1 z + \dots + b_q z^q \neq 0, \ \forall |z| \leq 1, \ z \in \mathbb C .

    零均值可逆ARMA( \(p,q\) )模型: \[\begin{aligned} X_t = a_1 X_{t-1} + a_2 X_{t-2} + \dots + a_p X_{t-p} + \varepsilon_t + b_1 \varepsilon_{t-1} + \dots + b_1 \varepsilon_{t-q}, \ \{ \varepsilon_t \} \sim \text{WN}(0, \sigma^2) . \end{aligned}\]

    记一阶差分为 \(\Delta X_t = X_t - X_{t-1}\) \(d\) 阶差分为 \(\Delta^d X_t = \Delta(\Delta^{d-1} X_t)\) \[\begin{aligned} \Delta^d X_t = \sum_{j=0}^d C_d^j (-1)^j X_{t-j} . \end{aligned}\] 其中 \(C_d^j\) \(k\) \(j\) 的组合个数。

    ARIMA( \(p,d,q\) )模型: 如果 \(\{ \Delta^d X_t \}\) 满足零均值可逆ARMA( \(p,q\) )模型, 就称 \(\{ X_t \}\) 满足ARIMA( \(p,d,q\) )模型。

    38.4.2 模拟

    arima.sim() 函数可以模拟生成ARIMA模型的数据, 也可以用来模拟AR、MA、ARMA。 arima.sim() 输出ts类型的时间序列, 并且在模型有一阶单位根时会比要求的个数多输出一个值, 第一个值为初值0。

    38.4.2.1 AR(4)模拟例子

    考虑如下的AR(4)模型:

    \[\begin{align} X_t =& -0.9 X_{t-1} - 1.4 X_{t-2} - 0.7 X_{t-3} - 0.6 X_{t-4} \\ & + \varepsilon_t + 0.5\varepsilon_{t-1} - 0.4\varepsilon_{t-2}, \quad t\in \mathbb Z, \tag{38.1} \end{align}\] 其中 \(\{\varepsilon_t \}\) 为WN(0, 4)。

    用如下程序模拟生成长度为 \(N=100\) 的样本:

    考虑如下的MA(2)模型:

    \[\begin{align} X_t =& \varepsilon_t + 0.5\varepsilon_{t-1} - 0.4\varepsilon_{t-2}, \quad t\in \mathbb Z, \tag{38.2} \end{align}\] 其中 \(\{\varepsilon_t \}\) 为WN(0, 4)。

    模拟生成长度为100的样本,作时间序列图, ACF,PACF图:

    考虑如下的ARMA(4,2)模型:

    \[\begin{align} X_t =& -0.9 X_{t-1} - 1.4 X_{t-2} - 0.7 X_{t-3} - 0.6 X_{t-4} \\ =& \varepsilon_t + 0.5\varepsilon_{t-1} - 0.4\varepsilon_{t-2}, \quad t\in \mathbb Z, \tag{38.3} \end{align}\] 其中 \(\{\varepsilon_t \}\) 为WN(0, 4)。

    用如下程序模拟生成长度为 \(N=100\) 的样本, 并作时间序列图、ACF图、PACF图:

    用如下程序模拟生成长度为 \(N=100\) 的ARIMA(4,1,2)样本, 并作时间序列图、ACF图、PACF图。 要注意的是, arima.sim() 在有一阶差分时会输出 \(n+1\) 个值。

    stats::arima() 可以用最大似然方法估计AR、MA、ARMA和ARIMA模型, 需要人为指定 \((p,d,q)\) 值。

    arima() 的输出结果输入到 tsdiag() 函数, 可以进行模型诊断, 结果包括标准化残差、残差的ACF、残差的Ljung-Box白噪声检验p值, 检验对多个滞后值计算, p值高于横虚线(0.05线)表示模型适合。

    Ljung-Box检验是常用的白噪声检验, 零假设为数据来自白噪声列。 Box.test(x, type="Ljung-Box", lag=m) 执行Ljung-Box白噪声检验, m 是用到的自相关函数个数。

    arima 函数允许指定某些系数固定为预先确定的值, 不从数据中估计。

    例如,考虑如下的稀疏系数的ARMA(4,2)模型

    \[\begin{aligned} X_t =& 100 + Y_t, \\ Y_t =& 0.7 X_{t-4} + \varepsilon_t - 0.4 \varepsilon_{t-2},\\ \varepsilon_t \sim& \text{WN}(0, 4) \end{aligned}\]

    产生模拟数据:

    单位根检验是一种平稳性检验, 零假设是有单位根, 即不平稳; 对立假设是平稳。 经常使用增强的Dickey-Fuller检验(ADF检验)。

    fUnitRoots包的 adfTest() 函数可以执行单位根ADF检验。 tseries包的 adf.test() 函数也可以执行单位根ADF检验。

    注意,ADF检验都是在拒绝 \(H_0\) (显著)时否认有单位根, 不显著时承认有单位根。

    例如,对模拟的ARMA(4,2)序列数据做单位根检验:

    这里列出一些与ARMA模型等时间序列理论有关的函数, 从模型参数计算Wold系数, 解Yule-Walker方程, 从模型参数计算协方差函数, 逆相关函数计算, ARMA谱密度绘图, MA矩估计, Levinson递推, 递推预测, 欠缺逆相关法等少数的程序。

    AR模型理论谱密度图: