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

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 具有以下优势:
- 代码稳定性——EViews 具有标准语法和文档,并提供代码的向后兼容性,使代码不会中断;
- 每个菜单操作都会生成相应的代码,便于用户学习自动化;
- 对计量经济模型有更好的支持,内置大量专用工具;
- 更容易自定义图形——EViews 图形可通过图形用户界面(GUI)编辑,并获取由 EViews 生成的相应代码;
- 对时间序列和面板数据有更强的支持,处理日期和面板结构更简便。
因此,计量经济学教师可以将更多时间用于教授计量经济学,而不是教授软件。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 数据导入 Reviews_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")

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 上获取。
参考文献
- 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
- Murrell, P. (2019). hexView: Viewing Binary Files. R package version 0.3-4.
- 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.
- Startz, R. (2019). EViews Illustrated for Version 11. IHS Global Inc.
- Xie, Y. (2019). knitr: A General-Purpose Package for Dynamic Report Generation in R. R package version 1.28.
- 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