E-Prime · 2026年5月31日

EviewsR:使用 EViews、R、R Markdown 和 Quarto 实现动态可重复研究的 R 包

The R Journal  ·  第 15 卷,第 2 期  ·  2023  ·  页码 169–205

作者: Sagiru Mati(近东大学)· Irfan Civcir(安卡拉大学)· S. I. Abba(法赫德国王石油矿产大学)
DOI: 10.32614/RJ-2023-045  ·  CC BY 4.0

目录

  1. 摘要
  2. 引言
  3. 安装 EviewsR
  4. 设置 EviewsR
  5. 基础 R 函数
  6. R Markdown 和 Quarto 中的 EViews 引擎
  7. 函数参考
  8. 重现性和动态文档
  9. 图表自定义
  10. 结论
  11. 参考文献

摘要

EViews 是一款专为计量经济数据分析而设计的软件。EViews 和 R 之间存在单向通信——前者可以运行后者的代码,但反过来不行。本文介绍 EviewsR,一个允许 R、R Markdown 和 Quarto 用户执行 EViews 代码的 R 包。本质上,EviewsR 不仅为基础 R 提供函数,还将 EViews 添加到现有的 knitr 引擎中。我们还展示了如何在 R、R Markdown 和 Quarto 文档中动态且可重复地导入和自定义 EViews 的方程、图形、序列和表格对象。因此,EviewsR 旨在提高使用 EViews 和 R 进行研究的准确性、透明性和可重复性。

图 1: 设置 EviewsR、EViews、R、R Markdown 和 Quarto 的步骤与要求流程图

1. 引言

EViews(Econometric Views 的缩写)是一款专为计量经济分析设计的软件。EViews 通过创新、易用的面向对象界面提供强大的统计、时间序列、预测和建模工具(Startz, 2019)。该软件可以通过内置菜单或保存为 .prg 扩展名的代码或脚本进行操作。尽管 EViews 可编程,但它缺乏一些用于估计新计量经济技术的例程。因此,EViews 用户不得不求助于 R 来实现那些在 R 中可用但尚未在 EViews 中实现的例程。这一过程需要在 R 和 EViews 之间切换,这阻碍了可重复性并可能导致错误。EViews 可以打开并运行 R 代码,但反之则不成立。已有 R 包 hexView(Murrell, 2019)可用于将 EViews 工作文件数据导入 R。但该包的功能有限,无法从 R 环境内部运行 EViews 代码。另一个 R 包 gets(Pretis et al., 2018)允许通过该包的函数 eviews(object, file=NULL, print=TRUE, return=FALSE) 将 R 对象导出为 EViews 程序。但 gets 包不允许在 R Markdown 和 Quarto 中嵌入 EViews 代码。Xie(2019)创建的 R 包 knitr 可实现 R 与其他统计应用程序(如 Stata 和 Octave)或编程语言(如 Julia 和 Python)之间的通信。knitr 包支持的统计应用程序和编程语言称为 knit 引擎,而 EViews 不在其中。用户可以通过在 R 控制台中运行以下代码查看现有的 knit 语言:names(knitr::knit_engines$get())。另一个主要挑战是 EViews 不支持 markdown 语法。为解决这些问题,我们创建了 R 包 EviewsR(Mati, 2019b),该包集成了 EViews 和 R。基本上,EviewsR 提供了基本的 R 函数以及额外的 knitr knit 引擎。

EviewsR 包旨在为所有 EViews、R、R Markdown 和 Quarto 用户提供帮助。该包允许 EViews 用户在 R、R Markdown 或 Quarto 中舒适地工作,并访问所有应用程序的生态系统。例如,他们可以使文档动态化。另一方面,R、R Markdown 和 Quarto 的用户可以轻松受益于 EViews 独特的统计或计量经济例程以及吸引人的图形。例如,他们可以通过 EviewsR::eviews_graph(dataFrame, start_date=1990) 轻松地从无日期的 R 数据框绘制折线图,而基础 R 可能需要几行代码。EViews 相比 R 具有以下优势:

  1. 代码稳定性——EViews 具有标准语法和文档,并提供代码的向后兼容性,使代码不会中断;
  2. 每个菜单操作都会生成相应的代码,便于用户学习自动化;
  3. 对计量经济模型有更好的支持,内置大量专用工具;
  4. 更容易自定义图形——EViews 图形可通过图形用户界面(GUI)编辑,并获取由 EViews 生成的相应代码;
  5. 对时间序列和面板数据有更强的支持,处理日期和面板结构更简便。

因此,计量经济学教师可以将更多时间用于教授计量经济学,而不是教授软件。EviewsR 包帮助 EViews 用户使用 R Markdown 或 Quarto,而无需学习用于估计和绘图的 R 函数。

2. 安装 EviewsR

EviewsR 可以像其他 R 包一样从 CRAN 安装:

install.packages("EviewsR")

也可以使用 remotes 包从 GitHub 安装开发版本:

remotes::install_github("sagirumati/EviewsR")

安装后,还需要在系统上安装 EViews 软件。EviewsR 需要 EViews 10 或更高版本。

3. 设置 EviewsR

在 R 中运行 EViews 代码之前,需要设置 EviewsR。加载 EviewsR 包并使用 eviews_path() 函数指向 EViews 可执行文件:

library(EviewsR)
eviews_path("C:/Program Files/EViews 13/EViews13_x64.exe")

此路径只需设置一次,R 会将其保存在选项数据库中。如果路径有误,R 会在下次调用 EViews 引擎时提出警告。

4. 基础 R 函数

4.1 EviewsR 的基础 R 函数

EviewsR 提供了一系列基础 R 函数,允许用户从 R 环境内部执行 EViews 命令。主要函数包括:

  • eviews_command() — 执行单个 EViews 命令
  • eviews_commands() — 批量执行多个 EViews 命令
  • eviews_graph() — 使用 EViews 引擎从 R 数据框创建图形
  • eviews_import() — 将 EViews 数据导入 R
  • eviews_run() — 运行 EViews 程序文件

4.2 eviews_graph() 函数

eviews_graph() 函数允许用户使用 EViews 的丰富图形功能,直接从 R 数据框绘制高质量的图形。该函数接受 R 数据框作为输入,自动将其转换为 EViews 工作文件,生成指定的图形类型,并将图形返回给 R。

例如,要创建包含两个序列的 xy 折线图:

library(EviewsR)
data("mtcars")
eviews_graph(mtcars, start_date = 1970, graph_procs = "line(m)", 
             main = "MTCARS Line Graph")
图 14: EviewsR 架构图——展示 R、EViews 与 knitr 引擎之间的交互流程

4.3 eviews_import() 函数

该函数用于将 EViews 工作文件中的数据导入 R 环境。它支持导入序列(series)、方程(equation)、图形(graph)和表格(table)对象。

# 导入 EViews 工作文件中的所有对象
import_workfile("path/to/workfile.wf1")

4.4 导入方程对象

使用 import_equation() 函数可以将 EViews 中估计的方程导入 R:

import_equation(wf = "example", page = "Page1", equation = "eq01")

4.5 导入序列对象

使用 import_series() 函数导入 EViews 序列:

import_series(wf = "example", page = "Page1", series = "y x1 x2")

4.6 导入表格对象

使用 import_table() 函数导入 EViews 表格:

import_table(wf = "example", page = "Page1", table = "mytable")

5. R Markdown 和 Quarto 中的 EViews 引擎

EviewsR 最强大的功能之一是将 EViews 添加为 knitr 引擎,使用户可以在 R Markdown 和 Quarto 文档中直接嵌入 EViews 代码块。这样,用户就可以创建完全动态的文档,将 EViews 和 R 的计算能力无缝结合起来。

在 R Markdown 中使用 EViews 引擎:

```{r setup, include=FALSE}
library(EviewsR)
```

```{eviews myanalysis, echo=TRUE, eval=TRUE}
' EViews 代码在这里
series y = nrnd
series x = nrnd
equation eq1.ls y c x
freeze(tb1) eq1.results
```

在 Quarto 中使用类似的语法,只需将 {eviews} 用作代码块语言。EViews 引擎会在后台调用 EViews 工作文件,执行代码后将结果传回文档。

6. 函数参考

6.1 eviews_command()

执行单个 EViews 命令字符串。可用于在工作文件中创建或操作对象。

eviews_command("series y = nrnd")

6.2 eviews_commands()

执行多行 EViews 命令。

cmds <- c("series y = nrnd", "series x = nrnd",
           "equation eq1.ls y c x")
eviews_commands(cmds)

6.3 eviews_run()

运行现有的 EViews 程序(.prg)文件。

eviews_run("program.prg")

6.4 import_equation()

将 EViews 方程估计结果导入 R 作为列表对象。

import_equation(wf = "", page = "*", equation = "*")

6.5 import_graph()

将 EViews 图形对象导入 R 作为 ggplot/trellis 对象。

import_graph(wf = "", page = "*", graph = "*")

6.6 import_series()

将 EViews 序列数据导入 R 作为数据框或 xts 对象。

import_series(wf = "", page = "*", series = "*")

6.7 import_table()

将 EViews 表格对象导入 R。

import_table(wf = "", page = "*", table = "*")

6.8 import_workfile()

一次性从现有工作文件导入 EViews 的方程、图形、序列和表格对象。

import_workfile("EviewsR_files/EviewsR")

6.9 rwalk()

使用 EViews 引擎在 R 中模拟一组随机游走序列。随机游走序列对象作为 R 数据框返回,可通过 eviews$seriesNames 在基础 R 中访问。

rwalk(series = "x y z", obs = 100)

7. 重现性和动态文档

EviewsR 的设计围绕三个核心原则:准确性、透明性和可重复性。通过将 EViews 代码嵌入 R Markdown 或 Quarto 文档,研究人员可以:

  • 创建包含 EViews 和 R 输出的完全可重复的报告
  • 自动更新分析结果,当数据或代码发生变化时无需手动复制粘贴
  • 以 HTML、PDF、Word 等多种格式发布包含动态内容的文档
  • 将 EViews 的强大计量经济能力与 R 的图形和数据处理能力相结合

使用 EviewsR,研究人员可以编写包含 EViews 代码块、R 代码块和叙述性文本的单个文档。重新运行文档会自动重新计算所有分析并生成更新的结果。这消除了在 EViews 和 R 之间手动切换所导致的错误和重现性问题。

示例工作流: 研究者撰写一篇 R Markdown 文章,其中包含 EViews 引擎代码块用于模型估计,以及 R 引擎代码块用于绘制结果图。每次重新编译文档时,EViews 自动重新运行所有估计,R 重新生成所有图表,确保结果一致性。

8. 图表自定义

EViews 的一个关键优势是其图形自定义能力。EviewsR 允许用户充分利用这些能力:

  • 黑白/灰度图形: 设置 graph_procs='template monochrome' 或 save_options="t=png,-c" 可生成灰度图像,符合某些期刊的要求。
  • 使用 lwd() 实现线宽和图形大小: EViews 中的 lwd() 函数可与 EviewsR 一起使用,用于控制图形的线条粗细和比例。
  • 导入现有图形: 已保存的 EViews 图形可以通过 import_graph() 函数直接导入 R Markdown 或 Quarto 文档。
  • 从数据框创建图形: eviews_graph() 函数允许直接从 R 数据框创建 EViews 图形,无需手动导入数据。

结论

EviewsR 包成功弥合了 EViews 和 R 之间的鸿沟,实现了双向通信,并允许用户充分利用这两个平台的优势。通过将 EViews 添加为 knitr 引擎,EviewsR 使研究人员能够在 R Markdown 和 Quarto 文档中创建完全动态和可重复的工作流程。该包为使用 EViews 和 R 进行可重复性计量经济研究提供了基础框架,具有重要的方法论意义。

EviewsR 的源代码可在 CRAN 和 GitHub 上获取。

参考文献

  1. Mati, S. (2019b). EviewsR: An R Package for Dynamic and Reproducible Research Using EViews, R, R Markdown and Quarto. R package version 0.1.0. https://CRAN.R-project.org/package=EviewsR
  2. Murrell, P. (2019). hexView: Viewing Binary Files. R package version 0.3-4.
  3. Pretis, F., Reade, J., and Sucarrat, G. (2018). “Automated General-to-Specific (GETS) Regression Modeling and Indicator Saturation for Outliers and Structural Breaks.” Journal of Statistical Software, 86(3), 1–44.
  4. Startz, R. (2019). EViews Illustrated for Version 11. IHS Global Inc.
  5. Xie, Y. (2019). knitr: A General-Purpose Package for Dynamic Report Generation in R. R package version 1.28.
  6. Mati, S., Civcir, I., and Abba, S.I. (2023). “EviewsR: An R Package for Dynamic and Reproducible Research Using EViews, R, R Markdown and Quarto.” The R Journal, 15(2), 169–205.

文章来源: The R Journal, 15(2), 169–205  ·  CC BY 4.0