查看原文
其他

常用R作图代码示例

荷兰心理统计联盟 荷兰心理统计联盟 2021-07-07

本文由Utrecht University在读博士覃恺洋供稿。


全文导读:用R中的ggplot2包进行作图


-如何进行数据汇总

-如何画图并标明统计细节

-如何美化图片并准备为APA格式

-如何绘制不同分析方法、不同类型变量的交互作用图





引言


越来越多的研究者开始使用R中的ggplot 2包进行作图。一方面ggplot 2真的很强大,能够在满足各种作图需求的同时,还能进行各种定制和美化。另一方面是ggplot2 命令比较直观易学且可读性很高,对新手相对友好。


然而,很多人在使用ggplot作图的时候会遇到各种奇怪的报错,即使google 也总是无法得到合理的解答。本人在自学ggplot2的时候就曾在这个过程当中挣扎很久,故在这里谈一点点人生的经验希望给为正在自学ggplot2的朋友们一点启发。涵盖内容为:交互作用图,添加error bar, 图的美化(一键生成APA格式), 以及回归分析中的交互作用图(连续变量*连续变量;类别变量*连续变量;类别变量*类别变量)。如果所提有误也请批评指正,共同进步!


先从数据框(data.frame)讲起


1.1 画图前的数据汇总


在进行画图工作之前,最重要的一步是将画图用的数据转化为合适的数据类型,以及相应的数据框形式。就前者而言,一般我们需要在画图之前就将分类变量转化为factor(因子类),否则ggplot2可能将它识别为连续变量。此外,我们通常使用ggplot(……)+geom_xxxx命令的形式来进行作图。


但是这种形式的作图有一个大前提,即要用来画图的数据框已经是经过分组汇总之后的数据 (比如常见的按照自变量分组求因变量的均值,标准差等等)。因为geom_xxx等命令并没有统计功能。如果要使用未分组汇总的数据画图,则需要使用stat_summary功能。


而说到相应的数据框形式,研究者需要注意自己收集到的原始数据是长型数据(long formatdata) 还是宽型数据(wide format data),二者直观的区别如下图


Wideformat data


Longformat data



可以看出二者的关键区别在于对于重复测量的变量,宽型数据用不同的行来表征不同的时间点,而长型数据用不同的列来表征。由于R语言默认对长型数据进行分析,故在画图之前,如果待作图的数据是宽型数据,则需要将其转化为长型数据。下列图片将具体阐述数据类型和数据框形式在R作图当中的作用:


2:检查数据变量类型并将分类变量转化为因子




3:将宽型数据转化为长型数据 



ps: 使用reshape2中的melt命令,id.var 意思是不需要转化的变量,measure.vars 表示需要转为长型数据的变量,注意添加向量符号c


4 stat_summary命令作图及效果 



效果如下:




5:  geom_xxxx 命令作图及效果




作图效果:



ps: 可以看出两个图得出了一样的结果,另,数据汇总使用了plyr包中的ddply命令,按‘sex’和‘age’为分组变量求因变量的平均数)

 

1.2 被试内和被试间变量


当用R画有被试内变量的errorbar图时, 需要对原始数据进行校正(Baguley, T. 2012),否则R会把同一个被试的数据识别为不同被试的数据,因为R默认每一行是一个“独立的”数据。图6就是用R代码画出的被室内和被试间变量Error bar 图的对比,可以看到两图完全没有区别。这里推荐大家使用Rmisc 包中的summarySEwithin命令进行校正,该命令使用的方法见图7


6(摘自Field, A., Miles, J., & Field, Z. (2012). Discovering statisticsusing Rchapter 9.3.1)


 


7:被试内变量校正



ps: 使用Rmisc包中的summarySEwithin命令进行校正,measurevar 指因变量,withinvar指被试内变量,idvar指确认被试身份的变量(被试编号),betweenvars 为被试间变量)

 

作图后的微调


2.1坐标轴的范围


画完图之后,我们需要检查输出的图片数据的范围是否在坐标轴的标注范围之内,否则就要修改坐标轴的范围,具体的代码如下:


8更改坐标轴的数值范围 


效果如下 



ps: ggplot2中加入scale_y_continuous命令,limits参数控制y轴的长度范围,breaks参数控制y轴间隔)


2.2  图例及注释


除了坐标轴的显示范围,还应当注意如果画了Error bar 需要说明Error bar的含义,是95% CIconfidence interval),SD(standard deviation) 还是SE (standard error)。具体可以通过在所做图下添加注释的方式解决这一问题。


图画完了,然后呢?


3.1图片的美化


         如果你想一键完成APA格式图片的修改以适应学术文章的发表要求,可以尝试使用papaja这个包,然后再ggplot2的画图命令中加入theme_apa()即可完成一键apa格式的效果。当然,如果是人工添加的图片标题而不是用画图命令生成的标题,则需要再修改图片标题。具体的例子如下:


         8:生成APA 格式图片 



效果如下图:



3.2交互作用图的制作


         在澄清了画error-bar的一些注意事项之后,我们可以来进行交互作用图的制作。就方差分析的交互作用图而言,只需要在error-bar 图基础上加一个line图的图层即可,具体代码见下图:


9:方差分析交互作用图 


画图效果如下:

 

 

 


若需要作回归分析的交互作用图(注:这时的x轴是个连续变量,同时将before作为自变量,after作为因变量,仅供演示之用),可参考如下代码:




效果如下:



ps: 在这段代码当中,除了前文讲述的相关内容,还加入了自定义的线段颜色,选择了标准黑色和白色(16进制代码分别为#000000#cccccc),这也更符合大多数期刊论文要求。)


3.3回归分析中的交互作用图


三种:连续变量*连续变量;类别变量*连续变量;类别变量*类别变量


(1)连续变量* 连续变量

例子:智商和伦理对于GPA的影响

 第一步:数据中心化


第二步:回归分析


第三步:根据交互作用加减1SD求出YGPA 


第四步:做交互作用图

 

(2)类别变量*连续变量


求性别与ethic对于GPA的影响


第一步:dummycoding


第二步:创建交互作用的同连续变量(见代码)


第三步:作图


 

(3)类别变量*类别变量

 

大同小异,具体感兴趣的转发此文并在公众号回复截图和关键词【Rplot】即可获得代码


元分析中的作图


Forestplot 等参考以前文章

元分析所用R全部代码及详细解释


结语


         这篇短文简要介绍了一下作者在用ggplot2中画图的一些经验,你有哪些自己的心得呢?欢迎留言讨论!另,本文所用数据及代码可在公众号主页获得转发此文至心理学相关微信群或朋友圈并在公众号回复截图和关键词【Rplot】即可获得代码


参考文献

Baguley, T. (2012). Calculating and graphing within-subjectconfidence intervals for ANOVA. Behavior Research Methods, 44, 158–175

         Wickham,H., & Grolemund, G. (2016). R for data science: import, tidy, transform,visualize, and model data. " O'Reilly Media, Inc.".

Field, A.,Miles, J., & Field, Z. (2012). Discovering statistics using R. Sagepublications.

 

数据来源:http://www.cookbook-r.com/Statistical_analysis/ANOVA/



有问有答


Q:您好,请问可否分享一下,自变量和调节变量为分类变量 中介变量和因变量为连续变量 如何验证模型?


A:可以参考这篇文章

Hayes, A. F., & Preacher, K. J. (2014). Statistical mediation analysis with a multicategorical independent variable. British Journal of Mathematical and Statistical Psychology67(3), 451-470.

 

最近特别开心收到小伙伴在后台的留言,但是超过48小时就无法进行回复。对推送文章有疑问或者希望交流的小伙伴请直接在文章下留言,或者留下您的常用邮箱,我们会尽快跟您取得联系。感谢大家的关注和支持!



往期精选 

Latent Transition Analysis(潜在群组转变): Mplus分析详解

元分析所用R全部代码及详细解释

Academic writing: Literature review (sentence bank)


共享让科研变的更有趣。




    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存