R软件 | 了解界面和运行一行代码、了解程序包

    R软件是一个免费软件,且有着强大的统计分析和绘图功能。在这里讲一讲R软件(实际是R-studio,搭载在R软件上的一个操作界面)的基本知识。

        ①   R-studio界面

        ②   运行一行代码

        ③   R软件的开源程序包(用metafor程序包计算平均效应量)

        ④   R软件和R-studio的安装

R-studio界面

如果将R软件比作安卓系统,那么R-studio就是安卓版的微信。微信是我们联系他人的多种工具的一种,因为很少有人用手机短信联系了,微信这种工具成了主流。

运行R-studio之前,我们需要安装R软件和R-studio两个软件。

R软件 | 了解界面和运行一行代码、了解程序包

图1:R-studio的四个界面

R-studio界面具有四个部分,功能上彼此紧密相连。

  • 脚本(script)区与Console区

脚本区和Console区一般设置在R-studio的左边(图1)。

我们写的代码一般保存在脚本区,与Console区的执行代码的功能相比,它的功能在于存储代码,存储我们准备要“说”的“R语言”,实际上还没执行。通过运行代码的方式(下一部分讲),它会在Console区“说”出来,即运行,然后会产生对应的结果。

脚本(Script)区就像一个word,你可以在上面写代码并保存,但是需要保存到一个具体的位置(比如桌面),否则它是个临时文件,R软件关闭之后就找不到了。

Console区也可以写简短的代码执行,不可以保存我们写的R语言,而只会记录我们运行的R语言,在R软件关闭之后,它的记录就消失了。

如果将Script比作我们想说的话(脑海中的剧本),那么console区的代码可以比作是我们已经到嘴边的、准备说的话(直接输的代码,按回车执行)或者已经说出去的话(被执行的代码)。

  • 结果区与沃野区(其实是瞎掰的名字)

R-studio的右边的两个区域内容比较丰富,上面的区域会记录运行代码得到的数据结果。比如你在外部加载了一个excel数据(比如反应时的实验数据)进R-studio,或者运行代码时产生了一些数据结果,会出现在右上角的这个结果区。其他的内容还有你加载的程序包的所有源代码和你运行了的代码记录(history)

如果将代码比作语言(会产生语言的结果),那么结果区的数据内容就是产生的结果。除非被赋值的方式覆盖或者使用代码清空记录,否则它会一直在那里供你“回头看”(关了R软件也不会消失,,但你说的每一句话都可以被后面说的话覆盖)。

右下方的区域内容比较多,其实我也不知道叫什么区,那就叫沃野区。它可以查看制图结果(制图结果也可以出现在一个独立的窗口);沃野区的‘help’,可以输入函数名称查找对应函数的使用方式,包括所有R软件内置的函数和加载的程序包里的函数,这些函数里有examples供你自学,非常有用;沃野区还有其他有待接触的功能。

    R-studio的界面与Matlab的界面(图2)非常相似,大家可以感受一下。事实上,运用广泛的python的界面与此也很类似(有脚本区,和类似console区的执行窗口),但我不是很熟悉python,就不做介绍了。

R软件 | 了解界面和运行一行代码、了解程序包

图2:Matlab的界面

运行一行代码

将R语言称作语言,是因为它与人类语言有着诸多相似之处。R软件运行一行代码,就像人类说出去一句话,可能会产生一系列的结果。

将R软件运行代码的过程比作心理学里的认知过程,S-O-R模式里的S就像代码,O就像R软件本身,R就像输出的结果:给R软件一串代码,它会运算得到一个结果。

代码的运行方式有多种,可以保存到脚本区之后运行,也可以直接在console区运行。

脚本区运行方式①:

R软件 | 了解界面和运行一行代码、了解程序包

图3:鼠标左击脚本区第一行,点击Run,运行第一行代码

在脚本区输入rm(list=ls())到第一行,鼠标左击第一行,并点击Run。Console区会出现

>rm(list=ls())

运行生效,它的功能是清空结果区的数据内容。

脚本区运行方式②:

R软件 | 了解界面和运行一行代码、了解程序包

图4:选中脚本区的代码,点击Run,运行选中代码

选中rm(list=ls()),点击Run。Console区会出现和方法①相同的结果。

注意:这里可以不选中整行的内容。如果选中的不是第一行的所有内容,比如只选中rm()括号里的内容:list=ls(),则只执行list=ls()。

> list=ls()

与rm(list=ls())不同,list=ls()不能清空结果区的数据内容,它产生了一个名叫“list”的字符串空集(见图5右上角的结果区)。

R软件 | 了解界面和运行一行代码、了解程序包

图5:注意与图4的轻微区别,选中第一行的部分代码,点击Run,运行选中代码

Console区直接运行的方式:直接在Console区输入要运行的代码,如

>a=1

然后按回车键Enter。结果区会出现 a=1 的数据内容,在R软件里面 一个等号 是赋值的功能,这里阿拉伯数字1被赋予了a(见图6右上角的结果区)。

R软件 | 了解界面和运行一行代码、了解程序包

图 6:直接在Console区输入代码执行

一个等号“=”与两个等号“==”

一个等号表示赋值,建立了对应关系,如上述a=1的例子(一个等号的另一种形式:<-)。

两个等号用于判断两者是否完全一致。在前面例子的基础上,继续在console区输入 a==2,是判断a与2是否一致(图7)。

>a==2

得到FALSE(图7),因为a=1(已赋值),所以a==2(判断)是错的

[1] FALSE

如果输入a==1,是判断a与1是否一致。

>a==1

得到TRUE(图7),因为a=1(已赋值),所以a==1(判断)是对的

[1] TRUE

R软件 | 了解界面和运行一行代码、了解程序包

图7:两个等号“==”表示判断两者是否一致

R软件的开源程序包(用metafor程序包计算平均效应量)

R软件作为一款开源软件,拥有众多程序猿为它开发免费的程序包。如果将R-studio比作微信,那么程序包就像微信上的小程序,方便快捷又功能强大。

程序包的作用在于复杂的算法打包到一个package里,用一句代码取代(调用)冗长的代码,实现复杂的功能。

事实上,R软件自身有很多内置的函数(比如方差分析的函数),也是用一句代码调用函数,而开源程序包则是基于各领域的统计学被开发出来的,更具针对性。

加载metafor程序包需要先安装程序包到指定文件夹。安装程序包与加载程序包的区别在于,安装程序包只需要完成一次就可以无数次加载程序包,加载则是在开启R软件之后需要用到程序包的功能时才有的步骤。加载程序包到R软件之后,它会缓存”在R软件里面,通过简单的代码可以调用其中的函数,在R软件被关闭之后,这种缓存”就消失了,下一次开启R软件要用时,需要重新加载

可以通过libaray()加载到R-studio中,比如加载做meta分析(meta-analysis)的程序包“metafor”。

>library(metafor)

加载成功之后,右上角结果区(Global Environment)会记录加载的程序包(见图8右上角),加载metafor程序包时同时加载了Matrix程序包,说明它是与Matrix包一起工作的。

R软件 | 了解界面和运行一行代码、了解程序包

图8:加载程序包。程序包需要下载到指定的文件夹才能被调用,有机会我们再讲安装程序包的N种方式。(或者您先百度:R语言安装程序包,自学一下)。

metafor程序包可以方便地进行meta分析,有中文文献详细地介绍如何用metafor程序包做meta分析(董圣杰,曾宪涛,郭毅,2012),metafor程序包可以但不仅限于:对发表偏倚的 Begg’s 检验和 Egger’s 检验、绘制森林图、漏斗图、meta 回归。

这里介绍如何利用metafor程序包的函数计算标准化均数差(SMD:Standardized MeanDifference),结合metafor程序包带的数据演示。由于篇幅问题,SMD的含义这里不作详解。只需知道SMD是meta分析里面计算效应量的一种指标。

先建立一个新的脚本用于存储自学代码。

    1.首先可以新建一个New Script:File > New File > R Script

    2.保存(Ctrl+S)到桌面(或你喜欢的位置),命名为MetaStudy(或你喜欢的名字)

    3.得到一个空的脚本

一个直接用R-studio指令安装指定网站的程序包的代码如下:

>install.packages(“metafor”,repos=”http://cran.rstudio.com/”, dependencies=TRUE)

>library(metafor)

首先对提供这个代码的范亚同学表示感谢,这个代码在我的电脑(联网的情况下)里面可以直接安装metafor包。非常方便。因为只需要安装一次,之后就可以直接加载程序包,所以上述代码第一句可以在第一次使用后加 # 标注(R软件不会运行 # 后面的代码,并将后面的内容标绿,见图10)。有需要安装程序包时再拿出来用(去掉 #)。

>#install.packages(“metafor”,repos=”http://cran.rstudio.com/”, dependencies=TRUE)

如何利用metafor程序包自带的数据和代码进行练习呢?最好的方式是从metafor的指导教程里面找例子(Examples)。

  1. 在浏览器输入:https://mirrors.tuna.tsinghua.edu.cn/CRAN/
  2. 点击Packages
  3. 点击Table of available packages,sorted by name
  4. 用Ctrl+F找到网页中的metafor,并点进去
  5. 点击metafor.pdf

你找到了metafor的指导教程。

可以看到里面有很多参考文献、代码、参数说明和其他乱七八糟的信息。作为初学者,我们只需要看Examples下的代码。

在pdf里用 Ctrl+F 查找SMD。被找到的第一个SMD(图9)在Examples下。可直接复制Examples下的代码到Script中尝试运行(记得从头开始复制代码,见图10)

R软件 | 了解界面和运行一行代码、了解程序包

图9:第一个SMD所在位置刚好是Examples

R软件 | 了解界面和运行一行代码、了解程序包

图10:复制Examples下的代码到Script,尝试运行

       运行之后得到的结果(图11,12)如下:

R软件 | 了解界面和运行一行代码、了解程序包

图11:图10最后一行代码的运行结果

R软件 | 了解界面和运行一行代码、了解程序包

 图12:图10最后一行代码的运行结果

计算平均效应量(或说总效应量:overall effect size)时,会出现许多附带的信息,这些信息是非常必要的。我们需要报告里面的哪些关于meta分析结果的信息呢?参考一篇最近发表的文献(Jiajin Yuan, et al. 2019)(图13)

R软件 | 了解界面和运行一行代码、了解程序包

图13:overall effect size中需报告的信息

       我们需要结果中的:总效应量,置信区间,Z检验值及其显著性,Q检验值及其显著性,以及异质性比例I方。我们可以用上面运行的数据,仿造着上文写一段自己的数据结果:

The overall effect size was statistically significant, g = -0.18,CI: -0.28 to -0.09, Z = -3.77,p < 0.01. Heterogeneity analysis showed a moderate heterogeneity across theincluded studies, Q(12) = 26.88, p < 0.01.

我们的运行结果里面没有报告I2(异质性比例),因为在rma()函数中,用的method是FE(fixed-effects),使用固定效应模型(基于低异质性假设)计算总效应量,不会报告I2,因被认为是低异质性,这里可以不报告。

我们回头看数据的内容,点击右上角结果区的dat(非蓝圈部分),会在脚本区产生一个类似Excel表格的数据集(见图14)。包含了13项研究的基本信息。里面的n1i、m1i、sd1i、n2i、m2i、sd2i分别表示实验组和对照组的数据:样本量、均值、标准差。这六个数据是计算效应量的充分条件,意味着文章有这些数据就可以纳入meta分析的范围中。

R软件 | 了解界面和运行一行代码、了解程序包

图14:meta分析研究所需的基本信息

    为什么两组样本量、均值、标准差不是计算效应量必要的条件,留个悬念下次讲。

我们回头看代码:

>dat= escalc(measure=”SMD”, m1i = m1i, sd1i = sd1i, n1i = n1i, m2i = m2i,sd2i = sd2i, n2i = n2i, data = dat)

它实现的功能是通过n1i、m1i、sd1i、n2i、m2i、sd2i等数据,计算每个研究的效应量和权重,在dat数据集中,产生了两列原本没有的数据yi(效应量)、vi(权重)。这两列数据在下一句代码中用到:

>res = rma(yi,vi, data=dat, method=”FE”)

它实现的功能是利用固定效应模型(FE),通过dat数据集中的yi、vi计算总效应量。最后用:

>print(res,digits=2)

输出结果。其实也可以直接用

>res

两者在保留小数的位数上有区别。

细心的人可以注意到上面的代码颜色不全是黑色的,还有亮蓝色红色的。为了方便告诉大家里面规律,我将不可以更换的部分维持黑色,这些部分是程序包或R软件的开发者提前规定好的,修改则很可能无法被识别。

我将可以更换的部分变为亮蓝色红色

亮蓝色部分,可以在某些范围里更换名称,这个范围可以比作一个成员有限的家庭,比如:

        >print(res,digits=2)

里面的2表示保留的2位小数,可以改成大于零的其他整数,比如:1、3、4;必须是大于零的整数。

比如:

        >res = rma(yi,vi, data=dat, method=”FE”)

里面的FE表示采用固定效应模型(fixed-effect)计算总效应量,在它的家庭里,它的兄弟还有:ML、REML……,不同情况下用的成员不同(这里由异质性的高低决定FE、ML谁上)。放在method=””里面的只能是这些内容之一,不是的话会出错。

SMD是另一个家庭的成员之一,放在measure=””里面。

红色部分表示可以在更大程度上更改,除了已经被开发者用掉的名称或运算符号,可以改成任意内容,比如:

        >dat= escalc(measure=”SMD”, m1i = m1i, sd1i = sd1i, n1i = n1i, m2i                     = m2i,sd2i = sd2i, n2i = n2i, data = dat)

红色的m1i、sd1i、n1i、m2i、sd2i、n2i是数据dat(数据内容见图14)的列名称,可以通过一定的方式(用代码实现或者在原始的excel表格中)修改成任意名称。虽然可以修改,但是内涵还是固定的,它们分别表示实验组的均值、标准差、样本量对照组的均值、标准差、样本量。dat表示数据集的名称,也是可以修改的,只是在最开始取了名之后,一直沿用,所以取个好看又容易记住的名称很重要的。

一个被广泛运用的程序包是优秀的程序猿们(还精通统计学)开发出来的,指导教程里有丰富的Examples供自学者学习,对掌握一个程序包的运用及对掌握某种分析(如meta分析)的流程非常有帮助。利用程序包的指导教程自学是学习R语言非常重要的一种手段,想入门并精通R语言的同学千万不能错过了!

R软件和R-studio的安装

R软件是完全免费的,可以在其官网https://www.r-project.org/ 找到相应版本下载使用。R-studio好像是收费的,不过在中国有“汉化”版,能在百度或者一些学习R软件的QQ群里找到“汉化”版。也可以使用我的版本R-studio-1.0.136,百度云:

https://pan.baidu.com/s/1erPydvBAU7dssNGfsXiVtw

提取码3oa6

建议将R软件和R-studio安装到一个文件夹下。

R软件 | 了解界面和运行一行代码、了解程序包

参考文献:

董圣杰,曾宪涛,郭毅. R软件Metafor程序包在Meta分析中的应用[J]. 中国循证医学杂志,2012,12(9):1141-7.

Jiajin Yuan, YuTian, Xiting Huang, Huiyong Fan, Xuemei Wei. (2019). Emotional bias varies withstimulus type, arousal and task setting: Metaanalyticevidences. Neuroscience& Biobehavioral Reviews, 107, 461-472.

以下这些流水账本来想放在本文开头的,后来感觉有点罗嗦,就放到最后了。

在正式写本文的主题之前,先讲讲我自己学R语言的经历。在中心,我可能是最早接触R语言的学生之一。来中心学习的时候(2018年5月),南老师给了一个数据分析的R代码,里面的代码是他读博时分析实验数据和画图用的。然而,我一脸懵逼地摸索了2个星期,终于能做简单的方差分析和折线图了。现在回过头去看,当时的我对代码的含义是不甚理解的,对图片的审美是直男的,对数据分析的过程是不讲究的。在这两年里(如今已2020年4月底),这些情况随着对R软件的熟悉,慢慢得到了改善。R软件的掌握不是一蹴而就的。

R软件 | 了解界面和运行一行代码、了解程序包

图15:男神南老师

    再说说学习R软件的一些好处。事实上,学习R软件对于一个心理学研究生来说不是必要的,在数据分析和绘图方面,它可以被SPSS取代。为什么众多学者和老师同学都强烈推荐学习R软件而不是SPSS呢?这是个值得探讨的问题。

    我推荐R软件的原因(不是洗脑,根本不是):

学习R语言得到一种复利的结果。学习R软件可以提升自学和思考能力,将自己的语言转化为R语言是一个思维转化的过程,编程语言的一个特点是逻辑性,学习R语言可以提升逻辑思维能力(有四种途径帮助我们自学R语言,在你需要编程的时候:1.百度寻找别人写的代码作参考;2.根据自己的经验写代码;3.在R软件内置的自学工具‘help’里面寻找;4.用程序包提供的教程自学;),如果有机会,我会详细讲讲括号里的内容。

    ②R软件使用灵活而且功能强大,专业对口心理学。R软件本是统计学家为方便统计分析而发明创造的,强大的数据分析和绘图功能是SPSS无法企及的。相对于Matlab,它不需要很强的编程能力,相对于SPSS,它更加灵活。在你学会编R语言之后,它甚至比SPSS方便得多。

    ③R软件的迁移性强。当你学会了R软件,学习python/Matlab或者其他编程语言都会变得简单,因为它们用的是相似的编程语言,写法有很多相似之处,操作界面也很像。我好几年没有接触Matlab了,一天有个朋友想让我帮他编一段Matlab程序,我也能很快给他编出来,这得益于编R语言的经验。另一方面,毕业之后即便不从事心理学研究,依然可以迁移到工作上的数据分析和数据可视化。可以说学习R软件对现在的学习和未来可能的工作都有很大的帮助。

最后祝大家在学习R语言的路上光速前进!

如果有下一篇推文,你希望我写点啥?可在下方留言,尽可能采纳。

发表评论

登录后才能评论
联系客服
联系客服
分享本页
返回顶部