Stata的版本兼容性问题:可重复研究

文摘   教育   2024-10-02 22:00   山西  

👇 连享会 · 推文导航 | www.lianxh.cn

🍓 课程推荐:2024 机器学习与因果推断专题
主讲老师:司继春 (上海对外经贸大学) ;张宏亮(浙江大学)
课程时间:2024 年 11 月 9-10 日 ;16-17日
课程咨询:王老师 18903405450(微信)

 课程特色 · 2024机器学习与因果推断

  • 懂原理、会应用。本次课程邀请了两位老师合作讲授,目的在于最大限度地实现理论与应用的有机结合。为期四天的课程,分成两个部分:第一部分讲解常用的机器学习算法和适用条件,以及文本分析和大语言模型;第二部分通过精讲 4-6 篇发表于 Top 期刊的论文,帮助大家理解各类机器学习算法的应用场景,以及它们与传统因果推断方法的巧妙结合。
  • 以 Top 期刊论文为范例。目前多数人的困惑是不清楚如何将传统因果推断方法与机器学习结合起来。事实上,即便是 MIT 和 Harvard 的大牛们也都在「摸着石头过河」。为此,通过论文精讲和复现来学习这部分内容或许是目前最有效的方式了。张宏亮老师此前在浙江大学按照这一模式教授了「因果推断和机器学习」课程,效果甚佳:学生们能够逐渐建立起研究设计的理念,并在构造识别策略时适当地嵌入机器学习方法。

作者: 全禹澄 (复旦大学)
邮箱: eli-quan@outlook.com

编者按:本文主要摘译自下文,特此致谢!
Source:Alan Riley, Stata Blog, 2019, Compatibility and reproducibility. -Link-


目录

  • 1. 问题背景

  • 2. Stata 的兼容性实现

    • 2.1 do 文档的后向兼容:标注版本号

    • 2.2 do 文档的乱码问题:中文转码

    • 2.3 dta 数据集文件的兼容性

  • 3. 博客原文翻译

  • 4. 参考资料

  • 5. 相关推文



温馨提示: 文中链接在微信中无法生效。请点击底部「阅读原文」

1. 问题背景

大家可能遇到过这样的场景:当我们运行从熟人或网站上得到的 Stata 数据和代码时,发现全是乱码,或者运行过程中报错。在这种情况下,我们不必慌张。因为这些文件内容本身并没有错,问题主要是由 Stata 版本更新带来的。

实际上,为了满足使用者对软件新功能的需求,软件的升级换代不可避免,Stata 亦如此。由此带来的问题是,一些 Stata 旧版本环境下的代码或数据集不会被 Stata 新版本所兼容,概括为「后向兼容」能力。与之对应的是「前向兼容」,即新版本环境下的代码和数据集不能被旧版本正确识别和运行。

为了回应用户关于「兼容性」的问题,Stata 公司总裁 Alan Riley 专门撰写了一篇博客,来解释 Stata 开发者在实现 do 文档和数据兼容性上所做的努力。在下文中,我们将跟随 Alan Riley 的脚步,为大家提供现有 Stata 兼容性问题的解决方案,并介绍一些 do 文档编写过程中的好习惯。

2. Stata 的兼容性实现

2.1 do 文档的后向兼容:标注版本号

do 文档的后向兼容做得很好。Alan Riley 在博客中写道:“无论是商业的还是开源的,Stata 是唯一一个拥有强大内置版本控制系统的统计软件,这使得多年前编写的老脚本也仍能在 Stata 的新版本中运行。”

具体来看,如果打开一个 do 文档后没有乱码,则可以通过标记版本号来指定特定版本的编译方式运行代码。例如,一个 30 年前用 Stata 3 编写的 do 文档,只要在文档顶部标记 version 3,它就可以在 Stata 16 中原样运行。

version 3 // 标记版本号

因此,当撰写一个新的 do 文档时,文档开头标注 Stata 版本号是一个好的习惯。这也意味着,如果 Stata 公司依旧秉持后向兼容的理念,那么多年以后,我们仍可以通过点击 “运行” 按钮,得到完全一样的结果。

除标注版本号外,还有一些好习惯推荐给大家,例如,写好文档信息、设定文件路径、编写日志文件、以及添加目录等。在这里,我们提供一个 do 文档的开头模板,并希望大家能够在每次创建 do 文档时用上。

/* 
Project Name

Data: **
Purpose: **
Date: **
Editor: **
*/

* Environmental setting
version 16
clear
set linesize 80
macro drop _all


* Directory in someone's laptop
glo raw_data ""
glo dodir ""
glo results ""
glo process ""

cd "$process"
cap log close
log using "$dodir\**.log", append

/*
Contents
1.
1.1.
2.
3.
*/

do 文档撰写的规范总是与可复现性这个目的分不开。关于可复现性的讨论,详见推文「可重复性研究:如何保证你的研究结果可重现?」。

2.2 do 文档的乱码问题:中文转码

Alan Riley 的自信更多源于英文环境,对于中文环境,Stata 并不是太友好。如果打开一个 do 文档后发生乱码,正如本文开头描述的那样,那么这个 do 文档很大可能是包含中文,而且还是用 Stata 13 或更早版本编写。实际上,在 Stata 13 版本之后,Stata 发生了较大的更新,并导致了中文后向兼容的问题。关于 do 文档乱码,目前有两种解决办法:

  • 第一种办法:当发生这种情况的 do 文档数量不多时,可以用 Windows 系统自带的记事本打开的 do 文档,然后 Ctrl+A 全选内容,Ctrl+C 复制全部文本,并粘贴到 Stata 的 do 文档编辑器中。这种方式之所以可以解决乱码问题,是因为记事本可以自动识别各种编码方式的纯文本;
  • 第二种办法相对复杂,但操作步骤更少。这种办法主要用到了 Stata 自带的命令 unicode。具体转换代码如下:
unicode analyze * //任何文件类型皆可
unicode encoding set gb18030 //获取 Stata 的提示信息
unicode translate * //这行代码需要根据 Stata 的提示信息来撰写,并不一定与这里列出的代码一模一样

如果上述代码没有效果,可以参考推文「Stata15-Unicode:一次性转码解决中文乱码问题」获得更多解决方法。另外,上述命令只能转换当前工作路径下的文件,对于子孙文件夹下的文件无能为力了。此时可以使用连玉君老师编写的 uauall 命令,一次性转换当前工作路径下的所有文件、以及子孙文件夹中的文件。

2.3 dta 数据集文件的兼容性

关于 dta 数据集文件的兼容性,Alan Riley 认为 Stata 开发者团队一直遵循着三个重要原则:

  1. 除非必须,永远不改数据集格式;
  2. 始终保持完备的向后兼容和跨平台兼容能力。当 Stata 16 出现时,它必须能够读取所有 Stata 历史版本产生的数据集格式。与此同时,无论是 Windows,还是 Mac,抑或是 Linux 等操作系统上的 Stata,其创建的数据集必须能被其他任一操作系统的 Stata 所打开。当然,也包括不同位数的系统 (在这里,中文环境再一次乱码,解决方法请参考前文);
  3. 如果可能,至少为最近的一个旧版本 Stata 提供前向兼容。

此外,Stata 有大量的外部命令,并且一些命令可能在版本更迭中失效。那些对 Stata 旧版本命令仍然钟情的研究者,希望保存一个 dta 数据集文件后,可以在 Stata 旧版本中运行,此时可以使用 saveold 命令。在 Stata 14、15 和 16 中,saveold 命令保存的数据集文件可以让一直到 Stata 11 都能读取。

saveold filename [, saveold_options]


3. 博客原文翻译

原文: Alan Riley, Stata Blog, 2019, Compatibility and reproducibility. -Link-

下面展示这篇英文博文的中文翻译,希望对正在使用 Stata 的你有所启发。

前几天我看到一条推特,有人抱怨 Stata 公司让每个 Stata 新版本的数据集格式都不同于上一个版本。

这让我想起几年前写给一个用户的一封电子邮件,他对后向兼容性和可复现性有疑问。我将在这篇博文中分享这封邮件的大部分内容,来说明我对这个话题的看法。

我理解用户在遇到软件版本不兼容问题时的挫败感。我想解释我们在这方面的努力,虽然这对已经出现的问题可能于事无补。

推特上关于数据集格式的说法非常离谱。事实上,Stata 16、Stata 15 和 Stata 14 共享相同的数据集格式,因此在三个最新版本的 Stata 之间的数据集兼容性应该没有问题。此外,尽管更改数据集格式对用户来说很痛苦,但我相信,它给我们的开发人员和测试人员带来的痛苦更大。除非必须,我们不会去改格式。这既是为了你们用户,也是为了我们自己。

虽然我的理解是有偏差的,但我还是相信,Stata 在所有统计软件中的后向兼容状况是最好的。据我所知,无论是商业的还是开源的,Stata 是唯一一个拥有强大内置版本控制系统的统计软件包,这使得多年前编写的老脚本也还能在Stata 的新版本中运行。

你可以拿一个 30 年前用 Stata 3 编写的 do 文档,只要这个 do 文档在顶部标记为 "version 3",它就可以在 Stata 16 中原样运行,不需要任何修改。没有坏脚本,也没有坏程序,不需要额外努力。Stata 在最初设计时就考虑到了可重复性,我们希望用户相信,多年以后,即使他们更改了操作系统或计算机架构,或者迁移到一个更新的 Stata 版本,他们用来生成特定分析结果的文档仍然可以运行。

关于数据集格式,Alan Riley 认为自己一直遵循着三个重要原则:

  • 其一,  除非必须,否则永远不改数据集的格式。一个新的 Stata 版本的出现并不意味着我们更改了数据集的格式。我们只在迫不得已需要支持新版本的一些新特性时,才会选择更改数据集格式。这就是为什么 Stata 16 与 Stata 15、Stata 14 共享相同的数据集格式;

  • 其二, 始终具有完全的向后兼容和跨平台兼容能力。当 Stata 16 出现时,它必须能够读取所有历史版本的 Stata 产生的数据集格式,直到 Stata 1。此外,Windows 上的 Stata、Mac 上的 Stata、Linux 上的 Stata (前的最新版都是支持 64 位系统的),以及任何其他硬件平台或操作系统上的 Stata 都必须能够读取在任何其他硬件平台或操作系统上创建的数据集,包括旧的 32 位系统。我们希望,在 Windows 3.1 的 Stata 4 中对一篇期刊论文进行初始分析的研究员,能够在 64 位的 Mac OS 上用最新的 Stata 16 加载出数据集;

  • 其三, 如果可能的话,至少为最近的一个旧版本 Stata 提供前向兼容。我们有两种方法来做到这一点。第一种方法是,如果某个版本的 Stata 需要更改数据集格式,例如在 Stata 14 中更改数据集格式以增强其 Unicode 的能力,那么我们会确保该版本的 Stata 至少能将内存中的数据集保存为以前的格式。我们使用 saveold 命令来做到这一点。在 Stata 14、15 和 16 中,我们更进一步地,让 saveold 命令不仅向前兼容一个版本到 Stata 13,还可以让一直到 Stata 11 的旧版本都能读取。第二种方法是,让上一个 Stata 版本的最后更新能够读取最新版本 Stata 创建的数据集。例如,我们最近发布的 Stata 11 的免费更新,就包含了读取 Stata 12 创建的数据集格式的能力。

总之,我们非常重视可重复性和前向、后向、跨平台的兼容性。

4. 参考资料

温馨提示: 文中链接在微信中无法生效。请点击底部「阅读原文」

  • Alan Riley, Stata Blog, 2019, Compatibility and reproducibility. -Link-
  • Enrique Pinzon, Stata Blog, 2020, Revealed preference: Stata for reproducible research, -Link-
  • Vilhuber, L., J. Turrito, and K. Welch. 2020. Report by the AEA Data Editor. AEA Papers and Proceedings 110: 764–775. -Link-

5. 相关推文

Note:产生如下推文列表的 Stata 命令为:
lianxh 乱码 重现 重复, m
安装最新版 lianxh 命令:
ssc install lianxh, replace

温馨提示: 文中链接在微信中无法生效。请点击底部「阅读原文」

  • 专题:论文写作
    • 连享会:论文重现网站大全
    • 可重复性研究:如何保证你的研究结果可重现?
  • 专题:Stata入门
    • Stata15-Unicode:一次性转码解决中文乱码问题
  • 专题:Stata资源
    • 可重复研究:Stata一马当先
    • 会计期刊论文的结果可重现吗?
  • 专题:数据处理
    • Stata数据处理:统计组内非重复值个数
    • Stata中文乱码顽疾解决方法
    • 赶尽杀绝:Stata中文乱码之转码
  • 专题:结果输出
    • Stata 可重复性报告系列 B: 导出命令 (put*)
    • Stata 可重复性报告系列A:动态文档命令 (dyn*)

🍓 课程推荐:2024 机器学习与因果推断专题
主讲老师:司继春 (上海对外经贸大学) ;张宏亮(浙江大学)
课程时间:2024 年 11 月 9-10 日 ;16-17日
课程咨询:王老师 18903405450(微信)

尊敬的老师 / 亲爱的同学们:

连享会致力于不断优化和丰富课程内容,以确保每位学员都能获得最有价值的学习体验。为了更精准地满足您的学习需求,我们诚挚地邀请您参与到我们的课程规划中来。请您在下面的问卷中,分享您 感兴趣的学习主题或您希望深入了解的知识领域 。您的每一条建议都是我们宝贵的资源,将直接影响到我们课程的改进和创新。我们期待您的反馈,因为您的参与和支持是我们不断前进的动力。感谢您抽出宝贵时间,与我们共同塑造更加精彩的学习旅程!https://www.wjx.cn/vm/YgPfdsJ.aspx# 再次感谢大家宝贵的意见!

New! Stata 搜索神器:lianxh 和 songbl  GIF 动图介绍
搜: 推文、数据分享、期刊论文、重现代码 ……
👉 安装:
  . ssc install lianxh
  . ssc install songbl
👉  使用:
  . lianxh DID 倍分法
  . songbl all

🍏 关于我们

  • 连享会 ( www.lianxh.cn,推文列表) 由中山大学连玉君老师团队创办,定期分享实证分析经验。
  • 直通车: 👉【百度一下: 连享会】即可直达连享会主页。亦可进一步添加 「知乎」,「b 站」,「面板数据」,「公开课」 等关键词细化搜索。

连享会
连玉君老师团队分享,主页:lianxh.cn。白话计量,代码实操;学术路上,与君同行。
 最新文章