R数据分析:解决科研中的“可重复危机”,理解Rmarkdown
不知道刚接触科研的大伙儿有没有这么一个感觉,别人的研究很大可能你重复不出来,尤其是社科实证研究,到现在我都还觉得所谓的实证是个很玄乎的东西;
如果是刚开始做数据分析,很多时候你会发现自己的分析结果过几天自己都重复不出来。反正我自己是有这样的经历的。有可能是某一步操作忘记了,自己都不知道,尤其是用菜单式的分析软件,比如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的更多相关文章
- Android解决Intent中的数据重复问题
转载地址:http://www.cnblogs.com/anrainie/articles/2383941.html 最近在研究Android,遇到了一些Notification(通知)的问题: .N ...
- 使用mysql的SUBSTRING_INDEX函数解决项目中编码非重复问题的实现方案!
一 SUBSTRING_INDEX函数介绍 作用:按关键字截取字符串 substring_index(str,delim,count) 说明:substring_index(被截取字段,关键字,关键字 ...
- R数据分析:二分类因变量的混合效应,多水平logistics模型介绍
今天给大家写广义混合效应模型Generalised Linear Random Intercept Model的第一部分 ,混合效应logistics回归模型,这个和线性混合效应模型一样也有好几个叫法 ...
- 解决VS2010中winsock.h与winsock2.h冲突(重复定义)——转载
解决VS2010中winsock.h与winsock2.h冲突(重复定义)——转载 当这两个头文件顺序颠倒时,编译会出现许多莫名其妙的错误,错误如下: 1>…\include\ws2def.h( ...
- 大幅度改变celery日志外观,修改成日志可点击跳转和鲜艳五彩日志,解决脚本中已添加handler的logger和框架日志重复记录问题。
大幅度改变celery日志外观,修改成日志可点击跳转和鲜艳五彩日志,解决脚本中已添加handler的logger和框架日志重复记录问题.打猴子补丁. 先把脚本中的所有logger的handlers全部 ...
- 【转】利用匿名namespace解决C++中重复定义的问题
目录 利用匿名namespace解决C++中重复定义的问题 原文:https://blog.csdn.net/pi9nc/article/details/11267031 利用匿名namespace解 ...
- R数据分析:潜类别轨迹模型LCTM的做法,实例解析
最近看了好多潜类别轨迹latent class trajectory models的文章,发现这个方法和我之前常用的横断面数据的潜类别和潜剖面分析完全不是一个东西,做纵向轨迹的正宗流派还是这个方法,当 ...
- Android ListView滑动过程中图片显示重复错乱闪烁问题解决
最新内容建议直接访问原文:Android ListView滑动过程中图片显示重复错乱闪烁问题解决 主要分析Android ListView滚动过程中图片显示重复.错乱.闪烁的原因及解决方法,顺带提及L ...
- R数据分析:如何简洁高效地展示统计结果
之前给大家写过一篇数据清洗的文章,解决的问题是你拿到原始数据后如何快速地对数据进行处理,处理到你基本上可以拿来分析的地步,其中介绍了如何选变量如何筛选个案,变量重新编码,如何去重,如何替换缺失值,如何 ...
- R语言作为BI中ETL的工具
R语言作为BI中ETL的工具,增删改 R语言提供了强大的R_package与各种数据库进行数据交互. 外加其强大数据变换清洗函数,为ETL提供一条方便快捷的道路. RODBC ROracal RMys ...
随机推荐
- Django笔记二十一之使用原生SQL查询数据库
本文首发于公众号:Hunter后端 原文链接:Django笔记二十一之使用原生SQL查询数据库 Django 提供了两种方式来执行原生 SQL 代码. 一种是使用 raw() 函数,一种是 使用 co ...
- pandas技巧
1. 计算月初.2022-05-03 得到2022-05-01 df['month']=df['purchase_date'].apply(lambda x : x.replace(day=1))
- RDIFramework.NET开发框架在线表单设计整合工作流程的使用
1.概述 在RDIFramework.NET开发框架在线表单设计助力可视化快速开发文章中,我们介绍了不使用编码的方式进行表单的在线设计并挂接在对应的模块下,加速应用的落地与实现.同样,通过在线设计的表 ...
- KMeans算法与GMM混合高斯聚类
一.K-Means K-Means是GMM的特例(硬聚类,基于原型的聚类).假设多元高斯分布的协方差为0,方差相同. K-Means算法思想 对于给定的样本集,按照样本之间的距离大小,将样本集划分 ...
- 15-js语法检查eslint
const { resolve } = require('path'); const HtmlWebpackPlugin = require('html-webpack-plugin'); modul ...
- Portainer安装
个人博客地址: https://note.raokun.top 拥抱ChatGPT,国内访问网站:https://www.playchat.top Portainer是一个可视化的容器镜像的图形管理工 ...
- TENGSHE-OS-渗透测试系统-win11版
下载ISO文件 创建新的虚拟机 VM17 已支持直接创建 win11 x64 稍后安装系统 选中win11 修改路径 win11需要设置8位加密密码 勾选安全引导 根据自身情况选择 默认即可 150G ...
- Linux 根据名称自动kill掉当前相关进程
ps aux | grep app | grep -v "grep" | awk '{print $2}' | xargs -r kill
- 2023-04-15:ffmpeg的filter_audio.c的功能是生成一个正弦波音频,然后通过简单的滤镜链,最后输出数据的MD5校验和。请用go语言改写。
2023-04-15:ffmpeg的filter_audio.c的功能是生成一个正弦波音频,然后通过简单的滤镜链,最后输出数据的MD5校验和.请用go语言改写. 答案2023-04-15: 代码见gi ...
- 2023-02-11:给你两个整数 m 和 n 。构造一个 m x n 的网格,其中每个单元格最开始是白色, 请你用 红、绿、蓝 三种颜色为每个单元格涂色。所有单元格都需要被涂色, 涂色方案需要满足:
2023-02-11:给你两个整数 m 和 n .构造一个 m x n 的网格,其中每个单元格最开始是白色, 请你用 红.绿.蓝 三种颜色为每个单元格涂色.所有单元格都需要被涂色, 涂色方案需要满足: ...