R Markdown Workshop
背景
这对我来说是一个不寻常的帖子,我之前试图避开写关于R Markdown的文章,因为这个主题已经有很多资源可用(例如RMarkdown, RMarkdown, RMarkdown)。 然而,最近我为社会问题研究中心的同事们开了一个关于使用RMarkdown的会议。这样做的目的是证明R Markdown的有用性(并希望转换为少数人)。 在本次会议中,我创建了一组资源,旨在使从SPSS到R Markdown的过渡更加容易。 这些资源的统计内容主要是教授心理学本科生的一些较简单的标准测试。
OSF上的此项目页面上提供了完整的资源。该练习的主要目的是为人们提供使用此R Markdown模板创建此pdf的工具。 我希望通过使用这个模板,SPSS用户可以转型成为R和R Markdown(在精彩的papaja包Aust(2017)的帮助下)。
R Markdown基础知识
我从研讨会开始,介绍了一些R Markdown的基础知识。使用R Markdown时,有三种类型的文本需要关注。
纯文本:这是您用来撰写稿件的内容。这个纯文本的格式是相当直接的(见这个备忘单)
代码块:这些在顶部和底部用三个后面的刻度表示```,在标题中用大括号括起来的命令(与第一组后面刻度相同的行)。代码块允许您在不离开文档的情况下运行分析。可以在主输出文档中包含或省略代码块的输出。
单行代码:这由一个单一的反冒号表示,以开始一段代码。单个反冒号关闭这段代码。例如
每次打开一段代码(一个块或内联代码)时,您必须确定要编码的语言。这可以通过在大括号中包含字母“r”或在后面打开后立即打勾来完成。
与R合作
为了展示R的一些基本功能,我使用R中内置的数据集进行了一些分析。这意味着任何人都应该能够重现使用我提供的模板进行的分析(无需担心加载来自其他文件的数据)。我还提供了另一个带有附带模板的文档,详细说明了将数据输入到R中的步骤。但是这个过程更容易出错,如果你不熟悉R,它可能有点不直观。
使用数据框
数据框的结构与SPSS文件非常相似。有行和列,列是命名的,通常表示变量。行(也可以命名)通常表示案例。您可以使用不同的名称加载多个数据框,尽管它们通常保存为df
(并且这些数据可以编号为df1
df2
df3
。如果您的文档/代码组织良好,那么您可以使用数据框的通用名称这意味着您的大部分代码都可以被重复使用(特别是如果变量名称相同 - 如果您重复进行研究,或只进行微小的更改,您会发现代码有很大重复使用的余地 – 对于代码块和单行代码都是如此)
一些基础知识:
可以通过运行数据框的名称将整个数据框打印到命令行
美元符号可用于从数据框调用特定变量,即df $ variable_name
函数具有“函数名称”形式,后跟括号:function_name()
。
要运行该函数的对象位于括号中。例如,如果我们的数据框被称为df
,而年龄被称为年龄,我们想要得到平均年龄,我们将运行平均值(df $ age
)。
有时由NA表示的缺失数据可能会混淆某些函数,为此,在函数中包含参数na.rm = TRUE
是有帮助的,例如,mean(df $ age,na.rm = TRUE)
mtcars
数据集附带R.有关它的信息,只需键入help(mtcars)
。这里感兴趣的变量是am(传输; 0 =自动,1 =手动)
,mpg(每加仑英里数)
,qsec(1/4英里时间)
。下面我们练习一些简单的函数来查找有关数据集的信息。
示例代码和输出:
使用命令df < - mtcars
将mtcars
数据集加载到名为df的对象中
通过运行variable.names(df)
查看与df关联的变量名称
[1]
mpg
cyl
disp
hp
drat
wt
qsec
vs
am
gear
[11]``carb
每加仑的平均英里数可以用平均值计算(df $ mpg)
[1]
20.09062
使用sd(df $ mpg)
计算同一变量的标准差
[1]
6.026948
或者,如果您想查看基本描述,请使用descriptives(df $ mpg)
mean sd min max len
1 20.09062 6.026948 10.4 33.9 32
要通过变量进行索引,我们使用方括号[]
和which()
函数。
以下命令获取所有带手动变速器的汽车的每加仑平均英里数:mean(df$mpg[which(df$am==1)])
## [1] 24.39231
统计检验
现在我们已经了解了一些基础知识,我们将尝试运行一些统计检验。
t检验
我将使用mtcars数据集来说明如何运行和编写t检验,其方式如下:
报告值中没有复制/粘贴错误;你可以直接使用代码和文本。
除了mpg(每加仑英里数),我感兴趣的另一个变量是am(传输; 0 =自动,1 =手动).
我要研究的问题是:
根据传输情况,每加仑英里数有差异吗?
T检验:传输和MPG
使用·df < - mtcars·加载·mtcars·并将其保存在您的环境中
使用以下命令创建一个具有通用名称的新数据框,例如赋值x:x < - df
这个命令运行t-test,你可以在控制台t.test中看到输出(x $ mpg~x $ am
)
##
## Welch Two Sample t-test
##
## data: x$mpg by x$am
## t = -3.7671, df = 18.332, p-value = 0.001374
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
## -11.280194 -3.209684
## sample estimates:
## mean in group 0 mean in group 1
## 17.14737 24.39231
以下代码运行t-test但将输出保存为列表t,方便以后调用:t < - t.test(x $ mpg~x $ am)
与数据框一样,可以使用美元符号调用列表中的特定变量
要调用p值,只需键入t $ p.value
## [1] 0.001373638
要调用t统计量,请键入t $ statistic
## t
## -3.767123
并调用自由度,键入t $parameter
## df
## 18.33225
最后,计算效果大小并将其保存到对象类型td < - cohensD(mpg~am,data = x)
从上面得知,我们可以使用单行代码调用我们需要的每个值来编写我们的结果部分,如下所示
这是您的Rmd文档中的段落的写法 :
An independent samples t-test revealed a significant difference in miles per gallon between cars with automatic transmission
(*M* = `r mean(x$mpg[which(x$am==0)])`, *SD* = `r sd(x$mpg[which(x$am==0)])`), and cars with manual transmission, (*M* = `r mean(x$mpg[which(x$am==1)])`, *SD* = `r sd(x$mpg[which(x$am==1)])`), *t*(`r t$parameter`) = `r t$statistic`, *p* `r paste(p_report(t$p.value))`, *d* = `r td.
上面的语法将返回以下内容:
An independent samples t-test revealed a significant difference in miles per gallon between cars with automatic transmission (M = 17.15, SD = 3.83), and cars with manual transmission, (M = 24.39, SD = 3.83), t(18.33) = -3.767, p = .001, d = 1.48.
如果您想稍后在文档中运行另一个t检验,只需在代码块中运行它并创建与以前名称相同的新对象(t和td),您可以使用与上面相同的写入来报告它。
卡方
为了说明卡方检验,我将测试发动机类型与(0 = V-shaped, 1 = straight)和传动类型(0 = automatic, 1 = manual)之间是否存在关联。这也是为了说明code/write up - 而不是真正的检验。
首先使用命令表创建一个表(x $ am,x $ vs)
使用chisq.test(table(x $ am,x $ vs))
运行卡方检验返回:
##
## Pearson's Chi-squared test with Yates' continuity correction
##
## data: table(x$am, x$vs)
## X-squared = 0.34754, df = 1, p-value = 0.5555
与t检验一样,为了使用单行代码报告,您需要将检验保存为对象,例如, 使用c < - chisq.test(table(x vs))
使用 w <- sqrt(cmpg)*cmpg),df=(c$parameter),sig.level = .05)
使用以下报告
A chi-squared test for independence revealed no significant association between engine type and transmission type, χ^2^(`r c$parameter`, *N* = `r length(x$mpg)`) = `r c$statistic`, *p* `r paste(p_report(t$p.value))`, *V* = `r w, the observed power was `r pw$power`.
以上返回以下内容:
A chi-squared test for independence revealed no significant association between engine type and transmission type, χ2(1, *N* = 32) = 0.348, *p* = .556 *V* = 0.1, the observed power was 0.09.
(see this resource for effect size calculations for chi-squared tests).
ANOVA方差分析和相关性检验
有关ANOVA的详细信息,请使用OSF页面上的 R Markdown template
模板查看 pdf
。
表
再次使用mtcars数据集,我将创建几个表。请记住,这些表的代码被设计为与papaja包一起使用并呈现为pdf,因此这篇文章中的html表格的格式不正确(请参考OSF上的资源)看看它应该是什么样的)。
首先使用x < - mtcars将mtcars保存为对象
我们将使用表格(x $ vs,x $ gear)
制作一个包含发动机类型 (V-shaped vs Straight)与 表齿轮数(3,4或5)两个变量的表,返回:
##
## 3 4 5
## 0 12 2 4
## 1 3 10 1
这个表对我们很有用,但它并不适合我们的文档
我们可以使用apa_tab
解决这个问题
在使用这个函数之前,我们需要使用命令test < - as.data.frame.matrix(table(x $ vs,x $ gear))
创建一个可以通过函数传递的矩阵。
我们可以使用test <-rownames < - (test,c(“V-shaped”,“Straight”))
为行命名
我们可以使用test <-colnames < - (test,c(“3 gear”,“4 gear”,“5 gear”))
为列命名
最后,我们通过apa_table()
函数传递我们的对象(矩阵)测试,以呈现将嵌入到我们的文档中的表
下面的代码将生成表1:
apa_table(
test
, align = c("l", "c", "c", "c")
, caption = "Engine type and number of gears"
, added_stub_head = "Engine Type"
#, col_spanners = makespanners()
)
Table 1:
Engine type and number of gears
ENGINE TYPE 3 GEARS 4 GEARS 5 GEARS
V-shaped 12 2 4
Straight 3 10 1
有关更复杂的表和示例图,请参阅OSF页面上pdf and R Markdown template
的相关部分。
使用引文
可以使用citr
来引用,就像使用Word使用endnote一样。我已将Zotero库(使用BetterBibTex)导出到我正在工作的目录中的.bib“My Library.bib”文件中。引用我只是使用@和引文键,例如@ haidt_emotional_2001
返回Haidt(2001)
。要将整个引文括在括号中,使用方括号[@ haidt_emotional_2001]
给出:(Haidt 2001)
。完整参考将自动添加到参考列表中(参见下文)。
引用您在分析中使用的R和R软件包通常也是一种好习惯。在目前的帖子中,我使用了R(版本3.6.1; R核心团队2017)和R-packages blogdown(版本0.12;谢,希尔和托马斯2017),bookdown(版本0.10;谢2016),citr(版本0.3) .0; Aust 2016),desnum(版本0.1.1; McHugh 2017),extrafont(版本0.17; Chang 2014),ggplot2(版本3.2.0; Wickham 2009),knitr(版本1.23; Xie 2015),lsr(版本0.5; Navarro 2015),MASS(版本7.3.51.4; Venables和Ripley 2002),papaja(版本0.1.0.9842; Aust和Barth 2017),pwr(版本1.2.2; Champely 2018)和scale(版本1.0.0) ;威克姆2016)。
References
Aust, Frederik. 2016. Citr: ’RStudio’ Add-in to Insert Markdown Citations. https://CRAN.R-project.org/package=citr.
———. 2017. “Papaja (Preparing APA Journal Articles) Is an R Package That Provides Document Formats and Helper Functions to Produce Complete APA Manscripts from RMarkdown-Files (PDF and Word Documents).” https://github.com/crsh/papaja.
Aust, Frederik, and Marius Barth. 2017. Papaja: Create APA Manuscripts with R Markdown. https://github.com/crsh/papaja.
Champely, Stephane. 2018. Pwr: Basic Functions for Power Analysis. https://CRAN.R-project.org/package=pwr.
Chang, Winston. 2014. Extrafont: Tools for Using Fonts. https://CRAN.R-project.org/package=extrafont.
Haidt, Jonathan. 2001. “The Emotional Dog and Its Rational Tail: A Social Intuitionist Approach to Moral Judgment.” Psychological Review 108 (4): 814–34. https://doi.org/10.1037/0033-295X.108.4.814.
McHugh, Cillian. 2017. “Desnum: Creates Some Useful Functions.” https://github.com/cillianmiltown/R_desnum.
Navarro, Daniel. 2015. Learning Statistics with R: A Tutorial for Psychology Students and Other Beginners. (Version 0.5). Adelaide, Australia. http://ua.edu.au/ccs/teaching/lsr.
R Core Team. 2017. R: A Language and Environment for Statistical Computing. Vienna, Austria: R Foundation for Statistical Computing. https://www.R-project.org/.
Venables, W. N., and B. D. Ripley. 2002. Modern Applied Statistics with S. Fourth. New York: Springer. http://www.stats.ox.ac.uk/pub/MASS4.
Wickham, Hadley. 2009. Ggplot2: Elegant Graphics for Data Analysis. Springer-Verlag New York. http://ggplot2.org.
———. 2016. Scales: Scale Functions for Visualization. https://CRAN.R-project.org/package=scales.
Xie, Yihui. 2015. Dynamic Documents with R and Knitr. 2nd ed. Boca Raton, Florida: Chapman; Hall/CRC. http://yihui.name/knitr/.
———. 2016. Bookdown: Authoring Books and Technical Documents with R Markdown. Boca Raton, Florida: Chapman; Hall/CRC. https://github.com/rstudio/bookdown.
Xie, Yihui, Alison Presmanes Hill, and Amber Thomas. 2017. Blogdown: Creating Websites with R Markdown. Boca Raton, Florida: Chapman; Hall/CRC. https://github.com/rstudio/blogdown.
这篇文章的目的是帮助使这些资源更容易获取。 因此,这篇文章与OSF上的资源之间可能会有很多重复
斜体是通过在你想要斜体的文本的任一侧放置一个星形来实现的斜体 =斜体; 通过在您希望斜体的文本的任意一侧放置一个双星粗体 =粗体来实现粗体
来自desnum包↩
此测试以及随后的所有测试仅用于说明目的,我没有检查任何假设以确定我是否可以运行测试,我只想提供可用于您自己的分析的示例代码。