天天看點

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資料分析:解決科研中的“可重複危機”,了解Rmarkdown
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應用都可以:

R資料分析:解決科研中的“可重複危機”,了解Rmarkdown

這些功能強烈鼓勵大家自己去探索一番,我們今天給大家介紹了基礎操作。然後重點就放在學術論文的可重複危機角度,重點給大家介紹Rmarkdown學術論文寫作和幫助大家了解Rmarkdown能結局科研重複危機的邏輯。

操作基礎

花裡胡哨的東西沒有,直接在Rstudio按照下面代碼即可生成一個Rmarkdown檔案:

R資料分析:解決科研中的“可重複危機”,了解Rmarkdown

首先是對metadata的也就是YAML Headers的操作,所謂的YAML标題就是Rmarkdown文檔的第一塊,長這樣:

R資料分析:解決科研中的“可重複危機”,了解Rmarkdown

基礎有4個參數,可以寫标題,作者,時間和輸出格式,還可以加目錄,代碼和對應的輸出如下:

R資料分析:解決科研中的“可重複危機”,了解Rmarkdown

還可以通過theme參數設定不同的輸出主題。

第二個部分是Rmarkdown中的代碼部分,代碼部分以```{r}開頭,以```結尾,下圖就是一個代碼塊,可以在這塊地方寫自己的R代碼(平時怎麼在script中怎麼寫,這兒就怎麼寫),通過R代碼輸出我們的統計結果:

R資料分析:解決科研中的“可重複危機”,了解Rmarkdown

大家可以注意到上圖代碼塊開頭有一些參數,比如setup,include,這些都是對該代碼塊進行顯示控制的參數,setup是代碼塊的名字,include是控制該代碼塊是否運作的參數,還有echo是顯示不顯示代碼的fig.width, fig.height, and fig.cap是控制輸出圖檔的參數;還有message and warning是控制代碼輸出資訊的參數

具體的文法原則在下圖中有可以查閱,重點就是要反複練習,反複嘗試才能掌握好:

R資料分析:解決科研中的“可重複危機”,了解Rmarkdown

剩下的部分就是用markdown文法寫文本的部分,比如一個示例的Rmarkdown檔案(Rstudio自帶的)如下:

R資料分析:解決科研中的“可重複危機”,了解Rmarkdown

我們将這個Rmarkdown檔案,Knit之後的輸出設定為pdf就是下圖右側的樣子。

R資料分析:解決科研中的“可重複危機”,了解Rmarkdown

可以看到輸出的pdf中有圖有表,有文字有結果。左邊是分析代碼右邊是結果呈現,隻要拿到左邊的Rmarkdown檔案右邊的結果就可以一鍵,這個就是Rmarkdown的基本工作流程,保障了自己工作的随時可重複。

基礎部分就寫到這兒,接下來看利用Rmarkdown寫學術論文。

用Rmarkdown寫學術論文

我們明白了Rmarkdown解決科研的重複性危機和熟悉其基本工作流程之後,延申的應用就是用Rmarkdown來寫科研論文,就是你将Rmarkdown中的text部分都換成你的論文内容,整個就變成了論文一鍵修改和一鍵複現,相當于不僅解決了統計結果的可重複,連論文格式本身也做到了可重複。

首先點選file然後找個學術出版社的模闆(得安裝rticles包):裡面有各種系列雜志的模闆的,比如IEEE,PLOS,Elsevier, Springer,MDPI等等還有預印本平台arXiv Preprint的模闆,反正夠你用的。

R資料分析:解決科研中的“可重複危機”,了解Rmarkdown

萬一不行,上面還有自定義選項,啧啧啧。

我們依照springer出版社的模闆來完成一篇示例論文:具體操作便是點選file-new file-Rmarkdown,然後點選上圖中的From Template然後找到Springer journal,然後就會出來一個模闆,我将作者标題做了改動(内容你都可以按照你實際論文的内容進行相應改動),如下:

R資料分析:解決科研中的“可重複危機”,了解Rmarkdown

然後點選Knit按鈕,即可輸出屬于我的Springer發表格式的文獻,如下圖:

R資料分析:解決科研中的“可重複危機”,了解Rmarkdown

直接拿去投稿就行了。如果結果需要改動,直接改原來的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資料分析:雙連續變量互動作用的簡單斜率圖作圖及解釋

繼續閱讀