不知道刚接触科研的大伙儿有没有这么一个感觉,别人的研究很大可能你重复不出来,尤其是社科实证研究,到现在我都还觉得所谓的实证是个很玄乎的东西;

如果是刚开始做数据分析,很多时候你会发现自己的分析结果过几天自己都重复不出来。反正我自己是有这样的经历的。有可能是某一步操作忘记了,自己都不知道,尤其是用菜单式的分析软件,比如spss,少点一下按钮结果都可能不一样,这种问题没人摆上来说,但实际上是很普遍的。

细节的无心失误大概率不会影响到结果,但是大家毕竟是在做“科研”!严格来说还是在做比较神圣的工作,这个问题一天不解决,自己不去关心,课题组也不关心,课题负责人不关心,你自己应该感到不安的,应该对所谓的“科研”感到不安,应该对自己正在做的事和自己的前途和科学的发展感到不安。

虽然自己已经脱离学术界,但是仍然认为这个问题确实是一个很大的问题,社会科学想要真正的发展,自己的工作自己都重复不出来,你这不是来搞笑嘛。

Recently, researchers across the health, behavioral, and social sciences have become increasingly concerned with the reproducibility of research. The concern ranges from asserting that “most claimed research findings are false” (Ioannidis 2005, pg. 696) to “we need to make substantial changes to how we conduct research,” (Cumming 2014, abstract). Some have come to refer to the situation as a “reproducibility crisis”

这种情况有一个叫法,叫做科研的可重复危机“reproducibility crisis”,这个东西在国内应该有更多人站出来呼吁才行,至少我读书的时候没接触过,个人感觉这个理念应该作为科研入门第一课来加以强调。

可重复危机

科研的可重复性包括3个大的方面:

  • 方法的可重复:指的是我可以仅仅根据用你文章中描写的操作,如果有相同数据的话就能够重复出来你的分析方法。
  • 结果的可重复:指的是我用和你一样的方法,如果还能拿到你的原始数据,那么我可以做出来和你一样的结果。
  • 结论的可重复:指的是我自己根据你文章的描述去模仿着做你的研究,我能得到和你一样的结论。

方法的可重复强调的是你写文章的时候方法部分要将分析步骤写详细,结果的可重复强调的是你要主动分享已发表文献的原始数据,供同行做可重复检验;结论的可重复强调是你没有选择性报告结果。

这个就是研究真实性的3条硬杠杠。

上面的3点都做到,都大面积推行,那科研作假肯定会少很多,尤其是在社会科学领域,具体怎么样去保证实施,社会科学领域的科研工作者愿不愿意去落地实施,阻力有多大,我这个小屁民就关心不到了,不过还是希望科研管理部门能够积极推动,研究生教育管理部门能够对这方面强调并加以切实落实,杂志发表审稿也应该加以规范。

今天要给大家介绍的是保证大家自己能完全重复自己研究的方法,咱先做好自己,解决自己的可重复危机。就是学会使用Rmarkdown。

Rmarkdown

学了这个Rmarkdown科研就可重复了?就没有危机了?逻辑在哪里?

逻辑就在于Rmarkdown是一个闭环,本身是一个self-contained的东西。中间有任何地方出错就knit不了,你就出不了结果。就意味着你只要这一次knit得出结果,然后将文件保存好,之后你无论将文件放到天荒地老,哪天想起来复现下结果,你都保证可以做得到。逻辑就在这。

The document’s code must be fully self-contained. That means, anything you want it to run has to be in the document, regardless of what you’ve already run outside of knitting. For example, if we are testing our code and running it throughout, when we go to knit. It will re-run everything in the document and forget everything else you’ve done that is not in the document.

这样就相当使用于Rmarkdown就强制性要求你的工作流程是捋的清清楚楚的,不能有任何错误,流程捋通顺后就可以一键复现,并且别的研究者只要拿到你的Rmarkdown文件,也可以一键复现你的整个工作。

In fact, it makes it so another research could reproduce your work by just downloading and running your R Markdown document. This removes all guesswork for others regarding your data analysis and reporting.

大家可以理解为作为一个self-contained的系统,我们喂给Rmarkdown原始数据和代码再将论文文本内容整合进去就可以随时复现或者直接发表。

上面就是Rmarkdown保证你的工作可以随时重复的逻辑。下面就给大家写Rmarkdown的基础实操:

第一次写Rmarkdown,我们还是从最基础的给大家介绍:

Rmarkdown就是在整合在R语言中的markdown,为什么要整合,就是为了把代码运行和文章写作放一起,而不是割裂开。markdown本身是一种文档格式,比如很多的平台都支持markdown写作,简书是吧,CSDN都是支持的,在Pandoc包的加持下,markdown文件又可以很方便地输出成丰富的文档格式,比如PDF,HTML,WORD等。

R Markdown was designed for easier reproducibility, since both the computing code and narratives are in the same document, and results are automatically generated from the source code. R Markdown supports dozens of static and dynamic/interactive output formats.

一个Rmarkdown文件包括三个基础的部分:metadata、text、code。

There are three basic components of an R Markdown document: the metadata, text, and code.

就是说我们使用Rmarkdown的基本流程就是首先写好metadata,然后写我们的markdown文本(文本中可嵌套R代码,代码块),最后输出成目标文件类型。这个就是一个完整的流程,这个流程跑下来,存好,就不用担心你的工作的重复性问题了。

Rmarkdown能输出的文件类型非常多,帮助你完成的任务非常多,比如下面这一大堆:做个PPT,写个Shiny应用都可以:

这些功能强烈鼓励大家自己去探索一番,我们今天给大家介绍了基础操作。然后重点就放在学术论文的可重复危机角度,重点给大家介绍Rmarkdown学术论文写作和帮助大家理解Rmarkdown能结局科研重复危机的逻辑。

操作基础

花里胡哨的东西没有,直接在Rstudio按照下面代码即可生成一个Rmarkdown文件:

首先是对metadata的也就是YAML Headers的操作,所谓的YAML标题就是Rmarkdown文档的第一块,长这样:

基础有4个参数,可以写标题,作者,时间和输出格式,还可以加目录,代码和对应的输出如下:

还可以通过theme参数设置不同的输出主题。

第二个部分是Rmarkdown中的代码部分,代码部分以```{r}开头,以```结尾,下图就是一个代码块,可以在这块地方写自己的R代码(平时怎么在script中怎么写,这儿就怎么写),通过R代码输出我们的统计结果:

大家可以注意到上图代码块开头有一些参数,比如setup,include,这些都是对该代码块进行显示控制的参数,setup是代码块的名字,include是控制该代码块是否运行的参数,还有echo是显示不显示代码的fig.width, fig.height, and fig.cap是控制输出图片的参数;还有message and warning是控制代码输出信息的参数

具体的语法原则在下图中有可以查阅,重点就是要反复练习,反复尝试才能掌握好:

剩下的部分就是用markdown语法写文本的部分,比如一个示例的Rmarkdown文件(Rstudio自带的)如下:

我们将这个Rmarkdown文件,Knit之后的输出设定为pdf就是下图右侧的样子。

可以看到输出的pdf中有图有表,有文字有结果。左边是分析代码右边是结果呈现,只要拿到左边的Rmarkdown文件右边的结果就可以一键,这个就是Rmarkdown的基本工作流程,保障了自己工作的随时可重复。

基础部分就写到这儿,接下来看利用Rmarkdown写学术论文。

用Rmarkdown写学术论文

我们明白了Rmarkdown解决科研的重复性危机和熟悉其基本工作流程之后,延申的应用就是用Rmarkdown来写科研论文,就是你将Rmarkdown中的text部分都换成你的论文内容,整个就变成了论文一键修改和一键复现,相当于不仅解决了统计结果的可重复,连论文格式本身也做到了可重复。

首先点击file然后找个学术出版社的模板(得安装rticles包):里面有各种系列杂志的模板的,比如IEEE,PLOS,Elsevier, Springer,MDPI等等还有预印本平台arXiv Preprint的模板,反正够你用的。

万一不行,上面还有自定义选项,啧啧啧。

我们依照springer出版社的模板来完成一篇示例论文:具体操作便是点击file-new file-Rmarkdown,然后点击上图中的From Template然后找到Springer journal,然后就会出来一个模板,我将作者标题做了改动(内容你都可以按照你实际论文的内容进行相应改动),如下:

然后点击Knit按钮,即可输出属于我的Springer发表格式的文献,如下图:

直接拿去投稿就行了。如果结果需要改动,直接改原来的Rmarkdown中的R代码即可。保障了自己工作的可重复性。

R数据分析:解决科研中的“可重复危机”,理解Rmarkdown的更多相关文章

  1. Android解决Intent中的数据重复问题

    转载地址:http://www.cnblogs.com/anrainie/articles/2383941.html 最近在研究Android,遇到了一些Notification(通知)的问题: .N ...

  2. 使用mysql的SUBSTRING_INDEX函数解决项目中编码非重复问题的实现方案!

    一 SUBSTRING_INDEX函数介绍 作用:按关键字截取字符串 substring_index(str,delim,count) 说明:substring_index(被截取字段,关键字,关键字 ...

  3. R数据分析:二分类因变量的混合效应,多水平logistics模型介绍

    今天给大家写广义混合效应模型Generalised Linear Random Intercept Model的第一部分 ,混合效应logistics回归模型,这个和线性混合效应模型一样也有好几个叫法 ...

  4. 解决VS2010中winsock.h与winsock2.h冲突(重复定义)——转载

    解决VS2010中winsock.h与winsock2.h冲突(重复定义)——转载 当这两个头文件顺序颠倒时,编译会出现许多莫名其妙的错误,错误如下: 1>…\include\ws2def.h( ...

  5. 大幅度改变celery日志外观,修改成日志可点击跳转和鲜艳五彩日志,解决脚本中已添加handler的logger和框架日志重复记录问题。

    大幅度改变celery日志外观,修改成日志可点击跳转和鲜艳五彩日志,解决脚本中已添加handler的logger和框架日志重复记录问题.打猴子补丁. 先把脚本中的所有logger的handlers全部 ...

  6. 【转】利用匿名namespace解决C++中重复定义的问题

    目录 利用匿名namespace解决C++中重复定义的问题 原文:https://blog.csdn.net/pi9nc/article/details/11267031 利用匿名namespace解 ...

  7. R数据分析:潜类别轨迹模型LCTM的做法,实例解析

    最近看了好多潜类别轨迹latent class trajectory models的文章,发现这个方法和我之前常用的横断面数据的潜类别和潜剖面分析完全不是一个东西,做纵向轨迹的正宗流派还是这个方法,当 ...

  8. Android ListView滑动过程中图片显示重复错乱闪烁问题解决

    最新内容建议直接访问原文:Android ListView滑动过程中图片显示重复错乱闪烁问题解决 主要分析Android ListView滚动过程中图片显示重复.错乱.闪烁的原因及解决方法,顺带提及L ...

  9. R数据分析:如何简洁高效地展示统计结果

    之前给大家写过一篇数据清洗的文章,解决的问题是你拿到原始数据后如何快速地对数据进行处理,处理到你基本上可以拿来分析的地步,其中介绍了如何选变量如何筛选个案,变量重新编码,如何去重,如何替换缺失值,如何 ...

  10. R语言作为BI中ETL的工具

    R语言作为BI中ETL的工具,增删改 R语言提供了强大的R_package与各种数据库进行数据交互. 外加其强大数据变换清洗函数,为ETL提供一条方便快捷的道路. RODBC ROracal RMys ...

随机推荐

  1. [Linux]Linux发展历程

    古人云,知其然知其所以然.马哲思想指导着我们,任何事物.问题,离不开:为什么(Why,事物从哪里来?).是什么(What,事物的定位?).怎么做(How,到哪里去?)的哲学3问. 继上个月算是相对彻底 ...

  2. 10.CAS实现单点登录

    1.总结: 昨天主要是了解和编写了CAS实现单点登录的代码: CAS实现单点登录的流程:用户访问资源服务器,先跳转到验证服务器验证身份通过后,认证服务器发送一个ticket给用户,用户拿着ticket ...

  3. React+Antd在使用form表单提交DatePicker日期框的时候会出现少八小时的情况

    在使用antd做form表单提交的时候,突然发现了一个很有意思的bug.就是在使用datepicker组件日期框的时候会出现提交后少一天的问题 我在网上搜索了许多解决办法,也是困扰了我一天的时间,下面 ...

  4. day31:socketserver&hashlib&hmac&TCP登录

    目录 1.socketserver:实现TCP协议下Server端的并发 2.hashlib模块 3.hashlib应用:文件校验 4.hmac应用:服务器的合法性校验 5.TCP登录程序 1.soc ...

  5. MySQL MHA信息的收集【Filebeat+logstash+MySQL】

    一.项目背景 随着集团MHA集群的日渐增长,MHA管理平台话越来越迫切.而MHA平台的建设第一步就是将这些成百上千套的MHA集群信息收集起来,便于查询和管理. MHA主要信息如下: (1)基础配置信息 ...

  6. Kurator v0.3.0版本发布

    摘要:2023年4月8日,Kurator正式发布v0.3.0版本. 本文分享自华为云社区<华为云 Kurator v0.3.0 版本发布!集群舰队助力分布式云统一管理>,作者:云容器大未来 ...

  7. 一个.Net版本的ChatGPT SDK

    ChatGPT大火,用它来写代码.写表白书.写文章.写对联.写报告.写周边...... 啥都会! 个人.小公司没有能力开发大模型,但基于开放平台,根据特定的场景开发应用,却是非常火热的. 为了避免重复 ...

  8. Linux驱动开发环境-Kernel源码安装

    开如学习LDD3这本书. 我是在Fedora18上学习的,但我安装的这个版本,/usr/src/下面没有相应的源代码. 自己从KERNEL网站下载相应版本源码(安装驱动有问题) 于是从kernel的网 ...

  9. 微服务 - Nginx网关 · 进程机制 · 限流熔断 · 性能优化 · 动态负载 · 高可用

    系列目录: 微服务 - 概念 · 应用 · 通讯 · 授权 · 跨域 · 限流 微服务 - 集群化 · 服务注册 · 健康检测 · 服务发现 · 负载均衡 微服务 - Redis缓存 · 数据结构 · ...

  10. 完美的背景图全屏css代码 – background-size:cover?

    写主题样式的时候经常会碰到用背景图铺满整个背景的需求,这里分享下使用方法 需要的效果 图片以背景的形式铺满整个屏幕,不留空白区域 保持图像的纵横比(图片不变形) 图片居中 不出现滚动条 多浏览器支持 ...