Tag Archives: 可重复性(reproducibility)

准备一些关于可重复危机相关的博客了

引言:可重复危机是自2011年以后心理学界的大事件,心理学界在研究方法上正在进行变革。本人之前也关注过一些相关的内容,但是不太成形。2016年,计划在空闲时间对这些相关的问题写一系列的博客,讲一些相关的问题、讨论、统计方法、新的平台等。可能是收集一些以前自己写过的东西,也可能是介绍或者翻译其他人写过的,还可能是自己重新整理一些。主要的目的,是为了让自己更加透彻地理解这些问题,让自己的研究变得更加靠谱,同时,也与广大的同行们进行交流,讨论,共同学习。

1 什么是可重复危机?
之前写过关于可重复现象:(社会)心理学中的骚动:未能重复!
以及其他学科同行与心理学的争议:心理学的门户清理?

2 可重复危机的原因是什么?
2.1 出版偏见:科学出版之傲慢与偏见
2.2 可疑研究操作:主要的可疑研究操作
2.3 NHST的问题:p值的不稳定性
2.4 研究的统计检验力不够:统计检验力和样本量的讨论如何使用G*power计算统计检验力

3 可重复危机之后
3.1 Pre-rigister
3.2 基于估计的统计:效应量与置信区间
3.2.1 正确地进行t检验:如何使用Lakens的完美t检验代码
3.2 开放科学

Reproducible Research第二周笔记

可再现研究》的第二课,主要是介绍在R中使用何种工具让我们的研究变得可再现,而这里重点介绍的,是R Mark down。

不过在讲R Mark down之前,先提了R代码起码的标准。
1 always use text file / text editor (这一点是为了保证你写的代码不依赖于特定的软件,适用范围大)
2 indent your code (有缩进,让你的代码看起来结构明晰,最少4个字符宽度,8个最好)
3 Limit the width of your code (80 columns,适应人眼以及人的适时记忆的特点,太长了不方便)
4 Limit the length of individual functions (同样是为了整体感强)

讲完R代码的基本标准之后,Roger D. Peng转向了Markdown. 这个语言是为了方便向HTML转换的一种语言特点是easy-to-read,easy-to-write。

举个栗子:如果要使用斜体,Markdown会这么写:

*This text will appear italicized!*

最后的输出是:
This text will appear italicized!

非常直白。后面老师还举了其他的栗子,包括粗体、标题等,总之就是非常直白。所以Markdown是非常友好的一个工具。

不过对于可再现研究来说,最重要的还是R Markdown,这个适合于数据分析语言。R Markdown是将R code与 Markdown结合起来,能够在文本中显示可以执行的R代码。在处理R Markdown文本的过程中,执行其中 的R代码,完成数据分析,而分析的结果又可以呈现的R Markdown的文本里。R Markdown是所谓的Literate statistical programming的核心工具。

R Markdown工作的流程是这样: R Markdown –> mardown –> HTML。这个过程在R Studio中非常容易实现。

话说回到Literate statistical programming,其实就是有一个文本的语言加上一个编码的语言。原先有Sweave的系统将LaTex 和R整合起来,不过由于LaTex用的人少,所以就没有多大的受众。knitr这个由谢益辉开发的工具包,整合了多种文本语言和R,因此流行起来。

Literate的优点是将文本与代码放在一个地方、数据和结果可以自动更新,而且代码是活的,可以直接执行。但是它的缺点是可能会让文本变得难以阅读,而且也可能减慢代码执行的速度。

接下来,老师开始介绍主要的工具:knitr。它支持RMarkdow, LaTeX, HTML,可以输出为PDF、HTML和Word,而且已经内嵌于RStudio了,非常方便。使用起来,其实只要下载最新版本的R和RStudio就可以,但关键是你会用它。

knitr即使能够这么灵活地整合代码与文本,它适用于哪些情境?
最适合的是写R工具包的手册或者教程,这里需要文本与代码的混合;短小的技术支持文档也可以适用 ,数据分析结果报告和预处理过程都适用。
但knitr也不适合一些情境,比如非常长的研究文章,非常复杂的计算或者文档有非常具体的格式要求的。

至于具体如何使用knitr,需要看视频一步一步的介绍,但是可以说一下它可以做如下几个事情:
1 在文本中输出计算的结果;
2 在文本中输出图形;
3 在文本中输出表格(目前是在HTML中输出的,在word中似乎还有点乱。)

在R Markdown中,R代码以“`{r}开头,以“`结尾。这一个代码的chunk可以有名字,但是一个R Markdown中的名字不能重名。后面视频中都是讲如何使用knitr的演示,需要看视频+使用RStudio进行操作。

顺便说一下第二课的作业,是一个小的数据分析的project。需要使用R Markdown完成一个简单的数据分析,然后上传到github上,由同伴进行评分。完成这个作业算是一个练习,对于不太熟悉R和github的人来说(比如我),还是需要花费一些时间的,但是也非常有收获。

一点感想是:R Markdown对于分析心理学实验的数据来说,虽然有点小提大作的感觉。但你一旦掌握了这个方法,能够用R Markdown完成一次数据分析,也不用担心后面再Check这个数据时的问题,只要代码和数据是原来的,结果就是一致的,直接输出结果部分,也省去了从SPSS输出中摘录结果的痛苦。要用要用要用!

Reproducible research 第一周笔记(2):数据分析的结构与数据组织

Reproducible research第一周的视频中,还简单地介绍了两个内容,数据分析的大致流程与数据组织的一些tips。

数据分析的流程在Data science这个specialization的其他课程中应该是重点,这里只是提了一下,也值得一说。

Image1
红色和灰色部分是分两次来讲解的,采用的例子是使用分类器来对邮件中的垃圾邮件进行分类。这里讲了许多如何去找好的数据来源,如何处理这些数据等问题,但与心理学研究的现实差别太大。

不过总体来讲,思路还是有一致之处的。从Define the question 到obtain the data,就大致对应从确定研究问题以及收集数据的过程。Define the ideal data set有点类似于我们决定使用什么研究手段来进行探索,问卷、访谈、行为实验、神经成像或者是分析历史数据。如何确定ideal的数据,需要有经验指导,也需要有现实的资源。Obtain data这一步基本上是体力活,要去做实验收数据。Clean the data在我们的研究中问题要看情况,一般通过实验或者问卷得来的数据是比较干净的,但是神经成像或者ERP的就不好说了,pre-process上花的时间惊人。

灰色部分步骤,在课程视频中主要是讲如何训练和测试分类器,与心理学中的统计分析也不太一致,不多说。值得注意的是,我们对数据的分析一般到interpret results为止,就开始write up results了;但这里多了一个challenge results,这一步挺有意思,也是在研究中需要注意,对于得到的结果需要多讨论。

当然,最后一步就是这个课程的核心,如何整理出可再现的代码来。可以说,目前在心理学的研究中,极少有人干这个,但实际上是很有必要的。今年psychological science的审稿规则变了,可能会有一些代码公开。

最后一个视频中,Roger Peng提到了数据分析的组织(organizing a data analysis),是非常好的经验分享,主要是下面这个图。

Image2

对于我而言,这个图确实很有提示作用,因为自己的数据其实是一片混乱(到目前为止仍然是)。除了raw data与processed data有区分之外,后面的基本上都是混杂的(其实后面的只在figures和少量的r code, spss code)。也就是说,做完一次分析以及对结果进行讨论之后,需要将final的东西与中途做过的许多东西区分开来,方便最后整理出来一个reproducible的数据和代码。

到这里,这个课程的引言部分就结束了,接下来的,是正文部分了:如何来进行reproducible的 research。慢慢来听课学习以及做笔记。

Reproducible research 第一周笔记(1):什么是reproducible research

Reproducible research 是John Hopkins在coursera上开设的一门课程,由Roger D. Peng, Jeff Leek, & Brian Caffo三人一起讲授。实际上这门课是John Hopkins在Coursera上“Data Science”这个specialization中的一部分,其证书需要花29美元才能得到。这个specialization还包括了”the data scientists’ toolbox”、”R programming”等课程,每门都需要29美元才能得到证书。不过不花钱也可以学习这门课以及完成作业,这是coursera最值得夸赞的优点。

第一周主要讲的问题,什么是reproducible research(可再现研究)? 我理解的可再现研究指的是,研究者A使用B软件对其数据结果X进行分析后,研究者A本人或者其他人再次使用B软件对X进行分析时,得到的结果与A报告的结果一致。这里其实涉及到一个非常重要而且许多研究者不愿意去做的问题:公开数据和分析代码。这个开放性的问题以后可以讨论。那么用这门课里的原话说,可再现研究是这样:
“ Reproducible Research: Make analytic data and code available so that others may reproduce findings ”

听起来很简单的事情,似乎没有必须去强调,但事实并非如此。

我们理想中的科学研究,是非常可靠能够经得起重复验证的。但现实中大部分的科学研究,却因为各种原因而从来没有被重复验证过。可再现研究就是想做一点点的工作,将目前我们完成无所作为到重复验证之间的空白填补起来,保证研究结果至少在数据分析上没有问题。这个工作也并不简单,因为随着数据量的增加,数据分析过程变得复杂而繁琐,非常容易出错。如果没有合适工具的辅助,我们就难以保证自己分析的结果确实是可再现的。

Image

可再现研究将大大提升读者对研究背后过程的了解程度,从而增加了读者对原研究进行判断的把握,减少重复验证难度。下图是课程中提到的一个图,非常好地展现了研究者与读者与数据进行互动的过程。从这个图中可以看到,如果没有公开原始数据和相应的分析过程代码,读者对最后展现出现的结果其实所知甚少。

Image2

我之所以要选择学习Reproducible Research这个课,是因为个人感觉在心理学研究实践,reproducible的问题也比较严重。一方面,最近心理学领域的可重复性(replicatibility)问题受到关注 ,另一方面,最近自己在实验结果的分析中,也发现了即使想reproduce自己先前的分析,也是颇费周折,因此想寻找合适的方法能够简易地重现结果,希望能够在这个课程中获得帮助。数据分析过程混乱的一个问题是:研究者可能会知道并且使用了正确的方法,但却因为各种原因导致他们的结果报告中在一些简单的复制粘贴过程中犯错。这一点上,最近的一个研究可以为我作证,Nuijten等(2015)发现
“half of all published psychology papers that use NHST contained at least one p-value that was inconsistent with its test statistic and degrees of freedom.”
由此可见问题的严重性。

在这一周的课程中,还提到了最近几年来可再现研究的发展状况,其实主要就是开设这门课程的几位老师在呼吁这个问题。当然,这个努力是非常有价值的,而且他们的呼吁出现在了science上:

Image3

最后,课程还提到了一些进行reproducible的工具,包括sweave这些工具。主要提到的是knitr,这个由谢益辉开发的R工具包,目前已经非常流行了。

第一周课程里,除了简介可再现性的概念之外,还介绍了数据分析的结构和数据组织的tips,明天写。

参考文献:
Nuijten, M., Hartgerink, C. J., van Assen, M. L. M., Epskamp, S., & Wicherts, J. (2015). The prevalence of statistical reporting errors in psychology (1985–2013). Behavior Research Methods, 1-22. doi: 10.3758/s13428-015-0664-2

 

 

 

 

如何使用Lakens的完美t检验代码

引子:在最近心理学研究中的重复危机之下,原本分散在各个领域的研究者开始集中起来探讨方法学上的问题,比如R-index这个博客的博主Uli Schimmack,原先是研究主观幸福感的;Dan Lakens主要的兴趣点似乎是在心理距离相关的问题上;而组织起了大规模重复实验的Nosek则做内隐态度研究的。他们集中地批判NHST的问题中,并且试图整理出一些方便易用的小工具来帮助研究者更好使用原本就应该使用的统计方法,比如效应量及其置信区间。

在这个背景之下,Lakens同学写了一段R代码,把t检验非常完整地整合起来。在这个代码中,包括了剔除极端值、正态检验、方差齐性检验、三种t检验的取向(Frequentis, Bayesian, & Robust),以及相应的图(QQplot,直方图,带有置信区间的结果图)。这段代码可能是目前比较方便而全面地进行t检验的小工具,而且其输出是word文档,可以直接放到实验的结果部分去。

这么好的代码,你该如何使用呢?
首先你需要有一个下载R软件以及R-studio(可以自行搜索下载安装);
其次你需要先去下载Lakens的代码及相关文件:https://github.com/Lakens/perfect-t-test。
下载完成之后应该是perfect-t-test-master.zip的压缩包,里面包括了7个文件:两个demo数据(.txt),两个R的markdown文件(.Rmd)、两个PDF文件和一个README文件。

其中,两个Rmd文件分别对应的是独立样本t检验和配对样本t检验。

在R-studio中打开任何一个Rmd文件之后,可以从开始的几行代码中看到一些需要做的准备工作,即安装一些相应的R工具包。基本上只需要按照这段代码前的说明进行操作就行。但是有两个外部的工具需要自己安装:Rtools和JAGS。其中JAGS安装3.0的版本,不要贪图最新的4.0版,这个无法使用。分别下载安装了Rtools和JAGS之后,就可以把Rmd文件中的前几行安装工具包的代码前的#去掉、运行,大约需要一小段时间来安装各种工具包。

安装好了之后,可以直接使用R-studio里面的“Knit Word”来运行这个Rmd文件,试试效果。

点击了knit Word之后,R就开始执行这Rmd文件。如果工具包安装全了的话,最后会出现一个word文档,内包含了前面提到的各种检验。

就我们最常用的Frequentist统计来说,它报告了目前APA第六版中要求的一些统计量:每种条件下的均值、标准差以及两种条件下的相关系数、带原始单位的差异量的均值和标准差、t检验结果、效应及其95%的置信区间(Cohen’s dz、Hedges’ g)。

如果需要对自己的数据进行分析,也并不难,只需在 “Define variables names below” 下面,将变量名进行重新定义即可。主要包括读取自己的数据、定义两种实验条件下的名字。

按照这个Rmd文件给的demo数据,数据的组织也非常直观:

第一列:被试编号;

第二列:条件1下的数据;

第三列:条件2下的数据;

其他列可以忽略,因为在处理的过程中都会被代码忽略掉的。

 

把自己的数据组织好了之后,保存为tab delimited的文本格式(.txt/.dat),如果你喜欢使用csv文件,只需要把读取数据的行代码使用read.csv()替代即可。

定义完变量之后,再按”Knit Word”,输出的就是对你自己数据的t检验了。可以根据自己的需要,取用里面的结果。