译者按
本文转载自 Jeff Leek 在 BMC Blog 发表的客座文章 How to Share Data with a Statistician,详细指南内容源自其 GitHub 仓库。
这是一份写给所有需要与统计学家合作的科研人员、学生和数据整理者的实用指南。它清晰地界定了在将数据交给统计分析师之前,你应该将数据整理成什么样子,以最大程度地减少沟通成本,加速分析进程。
本文内容遵循 CC BY 4.0 协议许可。
如何与统计学家分享数据
这是一份为所有需要与统计学家分享数据的人准备的指南。无论是需要统计学家协助分析数据的科研合作者,寻求咨询建议的学生或博士后,还是负责整理/清洗数据的初级统计学学生,这份指南都将为你提供帮助。
本指南的目标是提供关于分享数据的最佳实践,以避免从数据收集到数据分析过渡过程中最常见的陷阱和延误。Leek 团队与众多合作者共事,我们发现,导致结果产出速度差异的第一大因素,就是数据到达我们手中时的状态。根据我与其他统计学家的交流,这几乎是一个普遍真理。
我强烈认为,统计学家应该有能力处理任何状态的数据。查看原始数据、理解处理流程的每一步、并能够在数据分析中纳入隐含的变异来源,这些都是至关重要的。但另一方面,对于许多数据类型,处理步骤已经文档化且标准化。因此,将数据从原始形式转换为可直接分析的形式,这项工作完全可以在寻求统计学家帮助之前完成。这可以显著加快周转时间,因为统计学家不需要先处理所有的预处理步骤。
你应该向统计学家提供什么
为了最大程度地加快分析速度,你应该向统计学家提供以下信息:
- 原始数据 (The raw data)
- 整洁数据集 (A tidy data set)
- 代码本 (A code book):描述整洁数据集中的每个变量及其值。
- 处理记录:一份明确且精确的“食谱”,记录你是如何从第 1 步走到第 2、3 步的。
接下来我们将详细介绍数据包中的每一部分。
1. 原始数据 (The raw data)
向统计学家提供你所能获取的最原始形式的数据是至关重要的。这确保了数据溯源可以贯穿整个工作流。
以下是一些原始数据形式的例子:
- 测量机器吐出的奇怪的二进制文件。
- 签约公司发给你的、包含 10 个工作表的未格式化 Excel 文件。
- 从 Twitter API 抓取的复杂的 JSON 数据。
- 通过显微镜观察并手工录入的数字。
你可以通过以下标准来判断原始数据是否格式正确:
- 没有对数据运行过任何软件。
- 没有修改过任何数据值。
- 没有删除数据集中的任何数据。
- 没有以任何方式汇总数据。
如果你对原始数据做了任何修改,它就不再是原始形式的数据了。将修改后的数据作为原始数据报告,是导致分析过程变慢的一个非常常见的原因,因为分析师通常不得不对你的数据进行“取证研究”,以弄清楚为什么原始数据看起来很奇怪。(同时也请想象一下,如果新数据到了会发生什么?)
2. 整洁数据集 (A tidy data set)
整洁数据 (Tidy Data) 的一般原则由 Hadley Wickham 在这篇论文中提出。虽然通过 R 语言描述,如同所有真理一样,这些原则是通用的:
- 每个变量你应该测量一列。
- 每个不同的观察应在该变量下占一行。
- 每种类型的变量应有一张表格。
- 如果你有多张表格,它们应该包含一个允许它们被连接或合并的列。
虽然这些是硬性规定,但还有一些其他事情会让你的数据集更容易处理:
- 在每个数据表/电子表格的第一行包含完整的行名称。例如,如果你测量患者诊断时的年龄,请将该列命名为
AgeAtDiagnosis,而不是像ADx这样其他人可能难以理解的缩写。
基因组学的例子
假设你有 20 个人的 RNA-Seq 基因表达测量数据。你还收集了关于患者的人口统计学和临床信息,包括年龄、治疗和诊断。
- 你应该有一个表格/电子表格包含临床/人口统计信息。它将有 4 列(患者ID、年龄、治疗、诊断)和 21 行(一行变量名,然后每个患者一行)。
- 你应该还有一份总结性的基因组数据电子表格。通常这种数据在每个外显子的计数级别上进行汇总。假设你有 100,000 个外显子,那么你应该有一个表格/电子表格,包含 21 行(一行基因名,每个患者一行)和 100,001 列(一列患者ID,每个数据类型一列)。
格式建议
如果你在 Excel 中与合作者分享数据,整洁数据应该在每个表格一个 Excel 文件中。它们不应该有多个工作表,不应该对数据应用宏,也不应该高亮显示任何列/单元格。 或者,使用 CSV 或 TAB 分隔的文本文件分享数据。(但在将 CSV 文件读入 Excel 时要小心,这有时会导致日期和时间变量的处理不可复现。)
3. 代码本 (A code book)
对于几乎任何数据集,你计算的测量值都需要比你在电子表格中能塞进的更详细的描述。代码本就是用来包含这些信息的。这就好比是给你的数据的一本“说明书”。
至少,通过这本说明书应当能让统计学家能够了解:
- 整洁数据中未包含的关于变量的信息(包括单位!)。
- 关于你所做的汇总选择的信息。
- 关于你使用的实验研究设计的信息。
在我们的基因组学例子中,分析师会想知道每个临床/人口统计变量的测量单位是什么(年龄是年?治疗是名称还是剂量?诊断级别及其异质性如何?)。他们也会想知道你是如何选择用于总结基因组数据的外显子的(UCSC/Ensembl 等)。他们还会想知道关于你如何进行数据收集/研究设计的任何其他信息。例如,这些是走进诊所的前 20 名患者吗?他们是按某些特征(如年龄)精心挑选的 20 名患者吗?他们是被随机分配治疗的吗?
这种文档的常见格式是 Word 文件(在本Repost的2026年,或许.md已经成为了一种接近主流的格式)。应该有一个名为“研究设计”的章节,详细描述你如何收集数据。还有一个名为“代码本”的章节,描述每个变量及其单位。
变量编码建议
当你将变量放入电子表格时,你会遇到几种主要类型:
- 连续变量 (Continuous):在定量尺度上测量的任何东西,可以是任何分数值(如体重kg)。
- 有序变量 (Ordinal):具有固定、少量(<100)级别但有顺序的数据(如调查回复:差、一般、好)。
- 分类变量 (Categorical):有多个类别但没有顺序的数据(如性别:男、女)。
- 缺失数据 (Missing):未观察到的数据。应编码为
NA。 - 删失数据 (Censored):你知道某种程度上缺失机理的数据(如测量值低于检测限或患者失访)。
避免将分类或有序变量编码为数字。在整洁数据中,性别的值应为 “male” 或 “female”,而不是 1 或 2。有序值应为 “poor”, “fair”, “good”,而不是 1, 2, 3。这可以避免关于效应方向的潜在混淆,并有助于识别编码错误。
4. 处理记录 (The instruction list/script)
你可能听说过,可重复性在计算科学中是一件大事。这意味着,当你提交论文时,审稿人和世界上的其他人应该能够从原始数据一直到最终结果完全复现分析。
如果你试图提高效率,你很可能会在数据被认为是“整洁”之前执行一些汇总/数据分析步骤。 最理想的做法是创建一个计算机脚本(在 R、Python 或其他语言中),该脚本以原始数据为输入,并输出你共享的整洁数据。你可以尝试运行脚本几次,看看代码是否产生相同的输出。
如果你不会写代码,你应该向统计学家提供一种称为伪代码的东西。它应该看起来像这样:
- 步骤 1 - 获取原始文件,运行版本 3.1.2 的汇总软件,参数为 a=1, b=2, c=3。
- 步骤 2 - 为每个样本单独运行软件。
- 步骤 3 - 获取每个样本的 outputfile.out 的第三列,这就是输出数据集中的对应行。
你还应该包含有关你使用的系统(Mac/Windows/Linux)以及软件版本的信息。
你应该从分析师那里确期待什么
当你移交一个正确整理的数据集时,它会显著减少统计学家的工作量。所以希望他们能更快地回复你。但大多数谨慎的统计学家会检查你的处理记录,询问你执行步骤的问题,并尝试确认他们能否通过抽查获得与你相同的整洁数据。
然后,你应该期待从统计学家那里得到:
- 执行每个分析的分析脚本(不仅仅是说明)。
- 他们用于运行分析的确切计算机代码。
- 他们生成的所有输出文件/图表。
这些是你将用于补充材料以建立结果的可重复性和精确性的信息。分析中的每一步都应清楚地解释,如果你不理解分析师做了什么,你应该提问。理解统计分析是统计学家和科学家的共同责任。你可能无法在没有统计学家代码的情况下执行确切的分析,但你应该能够向实验室伙伴/你的首席研究员解释统计学家为什么执行每一步。
原文链接:
- 博客文章:How to Share Data with a Statistician
- 详细指南 (GitHub):jtleek/datasharing