分享

R数据分析:解决科研中的“可重复危机”,理解Rmarkdown

 CodewarCodewar 2023-06-22 发布于山东

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

如果是刚开始做数据分析,很多时候你会发现自己的分析结果过几天自己都重复不出来。反正我自己是有这样的经历的。有可能是某一步操作忘记了,自己都不知道,尤其是用菜单式的分析软件,比如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代码即可。保障了自己工作的可重复性。

小结

今天给大家介绍了科研中的可重复危机,以及用Rmarkdown解决危机的逻辑与实操,鼓励大家点击模板生成自己的第一篇论文,并依照模板进行修改,熟悉以后尝试着用Rmarkdown进行科研论文写作开启崭新的科研姿势。

感谢大家耐心看完,自己的文章都写的很细,重要代码都在原文中,希望大家都可以自己做一做,请转发本文到朋友圈后私信回复“数据链接”获取所有数据和本人收集的学习资料。如果对您有用请先记得收藏,再点赞分享。

也欢迎大家的意见和建议,大家想了解什么统计方法都可以在文章下留言,说不定我看见了就会给你写教程哦,有疑问欢迎私信,有合作意向请直接滴滴我。

如果你是一个大学本科生或研究生,如果你正在因为你的统计作业、数据分析、模型构建,科研统计设计等发愁,如果你在使用SPSS, R,Mplus中遇到任何问题,都可以联系我。因为我可以给您提供最好的,最详细和耐心的数据分析服务。

如果你对Z检验,t检验,方差分析,多元方差分析,回归,卡方检验,相关,多水平模型,结构方程模型,中介调节,量表信效度等等统计技巧有任何问题,请私信我,获取详细和耐心的指导。

如果你或你的团队需要专业的科研数据清洗,建模服务,教学培训需求等等。请联系我。

If you are a student and you are worried about you statistical #Assignments, #Data #Analysis, #Thesis, #Reports, #Composing, #Quizzes, Exams.. And if you are facing problem in #SPSS, #R-Programming, #Excel, Mplus, then contact me. Because I could provide you the best services for your Data Analysis.

Are you confused with statistical Techniques like z-test, t-test, ANOVA, MANOVA, Regression, Logistic Regression, Chi-Square, Correlation, Association, SEM, multilevel model, mediation and moderation etc. for your Data Analysis...??

Then Contact Me. I will solve your Problem...

If You or Your Research Team Need Professional Scientific Data Cleaning, Model Building Services or Statistical Consulting... Please Contact Me.

往期精彩

R数据分析:多项式回归与响应面分析的理解与实操

R数据分析:生存数据的预测模型建立方法与评价(二)

R数据分析:生存数据的预测模型建立方法与评价

R数据分析:生存分析的列线图的理解与绘制详细教程

R数据分析:结合APA格式作图大法讲讲ggplot2和ggsci,请收藏

R数据分析:变量间的非线性关系,多项式,样条回归和可加模型

Mplus数据分析:性别差异gendergap的相关研究如何做?

R机器学习:分类算法之logistics回归分类器的原理和实现

R数据分析:PLS结构方程模型介绍,论文报告方法和实际操作

R数据分析:跟随top期刊手把手教你做一个临床预测模型

R数据分析:Lasso回归筛选变量构建Cox模型并绘制列线图

R数据分析:如何用层次聚类分析做“症状群”,实例操练

R数据分析:工具变量回归与孟德尔随机化,实例解析

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

R文本挖掘:中文词云生成,以2021新年贺词为例

R机器学习:分类算法之判别分析LDA,QDA的原理与实现

R可视化:plot函数基础操作,小白教程

R机器学习:重复抽样在机器学习模型建立过程中的地位理解

R数据分析:用lme4包拟合线性和非线性混合效应模型

R数据分析:如何用mice做多重插补,实例解析

R数据分析:孟德尔随机化中介的原理和实操

R数据分析:生存分析的列线图的理解与绘制详细教程

R数据分析:cox模型如何做预测,高分文章复现

R数据分析:广义估计方程式GEE的做法和解释

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

R数据分析:潜变量与降维方法(主成分分析与因子分析)

R数据分析:如何给结构方程画路径图,tidySEM包详解

R数据分析:自我报告的身高数据的离群值探索

R数据分析:生存分析与有竞争事件的生存分析的做法和解释

R机器学习:朴素贝叶斯与支持向量机的原理与实现

R数据分析:混合效应模型的可视化解释,再不懂就真没办法

R数据分析:如何理解模型中的“控制”,图例展示

R数据分析:tableone包的详细使用介绍

R数据分析:如何用lavaan包做结构方程模型,实例解析

R机器学习:分类算法之K最邻进算法(KNN)的原理与实现

R数据分析:潜增长模型LGM的做法和解释,及其与混合模型对比

R数据分析:论文中的轨迹的做法,潜增长模型和增长混合模型

R数据分析:纵向分类结局的分析-马尔可夫多态模型的理解与实操

R数据分析:临床预测模型实操,校准曲线和DCA曲线做法示例

R数据分析:国产新冠口服药比辉瑞好的文章的统计做法分享

R数据分析:再写潜在类别分析LCA的做法与解释

R数据分析:潜在转化分析LTA的做法和解释(一)

R机器学习:分类算法之K最邻进算法(KNN)的原理与实现

R数据分析:交互作用的简单斜率图做法及解释

R数据分析:双连续变量交互作用的简单斜率图作图及解释

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多