From 77d41d4c2d4edd7f4ce7887538e43cd348d2fa44 Mon Sep 17 00:00:00 2001 From: "Michael C. Frank" Date: Tue, 4 Dec 2018 20:41:30 -0800 Subject: [PATCH 1/2] spsp --- SPSP_handout.Rmd | 287 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 287 insertions(+) create mode 100644 SPSP_handout.Rmd diff --git a/SPSP_handout.Rmd b/SPSP_handout.Rmd new file mode 100644 index 0000000..e83f8be --- /dev/null +++ b/SPSP_handout.Rmd @@ -0,0 +1,287 @@ +--- +title: "RMarkdown for writing reproducible scientific papers (SPSP Edition)" +author: '[Mike Frank](mailto:mcfrank@stanford.edu)' +date: '`r Sys.Date()`' +output: + tufte::tufte_html: + toc: yes + toc_depth: 1 + tufte::tufte_handout: + citation_package: natbib + latex_engine: pdflatex + tufte::tufte_book: + citation_package: natbib + latex_engine: pdflatex +link-citations: yes +bibliography: library.bib +--- + +```{r, echo=FALSE} +library(knitr) +opts_chunk$set(echo=TRUE, + warning=FALSE, message=FALSE, + cache=FALSE) +``` + +# Introduction + +This document is a short tutorial on using RMarkdown to mix prose and code together for creating reproducible scientific documents. It is adapted from a tutorial that Mike Frank and Chris Hartgerink gave at SIPS 2017. + +In short: RMarkdown allows you to create documents that are compiled with code, producing your next scientific paper. + +Now we're together trying to help spread the word, because it can make writing manuscripts so much easier! + +## Who is this aimed at? + +We aim this document at anyone writing manuscripts and using R, including those who... + +1. ... collaborate with people who use Word +2. ... want to write complex equations +3. ... want to be able to change bibliography styles with less hassle +4. ... want to spend more time actually doing research! + +## Why write reproducible papers? + +There are three reasons to write reproducible papers. To be right, to be reproducible, and to be efficient. There are more, but these are convincing to us. In more depth: + +1. To avoid errors. Using an automated method for scraping APA-formatted stats out of PDFs, @nuijten2016 found that over 10% of p-values in published papers were inconsistent with the reported details of the statistical test, and 1.6% were what they called "grossly" inconsistent, e.g. difference between the p-value and the test statistic meant that one implied statistical significance and the other did not. Nearly half of all papers had errors in them. + +2. To promote computational reproducibility. Computational reproducibility means that other people can take your data and get the same numbers that are in your paper. Even if you don't have errors, it can still be very hard to recover the numbers from published papers because of ambiguities in analysis. Creating a document that literally specifies where all the numbers come from in terms of code that operates over the data removes all this ambiguity. + +3. To create spiffy documents that can be revised easily. This is actually a really big neglected one. for us. I used to tweak tables and figures by hand constantly in Adobe Illustrator, creating a major incentive *never to rerun analyses* because it would mean re-pasting and re-illustratoring all the numbers and figures in a paper. That's a bad thing! It means you have an incentive to be lazy and to avoid redoing your stuff. And you waste tons of time when you do. In contrast, with a reproducible document, you can just rerun with a tweak to the code. You can even specify what you want the figures and tables to look like before you're done with all the data collection (e.g., for purposes of preregistraion or a registered report). + +# Getting Started + +Before we get started with running everything, make sure to have `R` installed (download [here](https://cran.r-project.org/)) and `Rstudio` (download [here](https://www.rstudio.com/products/rstudio/download/#download)). If you haven't yet, go do that first. + +# Structure of an RMarkdown file + +An RMarkdown file contains several parts. Most essential are the header, the body text, and code chunks. + +## Header + +Headers in RMarkdown files contain some metadata about your document, which you can customize to your liking. Below is a simple example that purely states the title, author name(s), date^[Pro-tip: you can use the `Sys.Date()` function to have that use the current date when creating the document.], and output format. + +```yaml +--- +title: "Untitled" +author: "NAME" +date: "July 28, 2017" +output: html_document +--- +``` + +For now, go ahead and set `html_document` to `word_document`, except if you have strong preferences for `HTML` or `PDF`.^[Note: to create PDF documents you also need a TeX installation. Don't know what that is? You probably don't have it then. More info below.] + +## Body text + +The body of the document is where you actually write your reports. This is primarily written in the Markdown format, which is explained in the [Markdown syntax](#markdown-syntax) section. + +The beauty of RMarkdown is, however, that you can evaluate `R` code right in the text. To do this, you start inline code with \`r, type the code you want to run, and close it again with a \`. Usually, this key is below the escape (`ESC`) key or next to the left SHIFT button. + +For example, if you want to have the result of 48 times 35 in your text, you type \` r 48-35\`, which returns `r 48 - 35`. Please note that if you return a value with many decimals, it will also print these depending on your settings (for example, `r pi`). + +## Code chunks + +In the section above we introduced you to running code inside text, but often you need to take several steps in order to get to the result you need. And you don't want to do data cleaning in the text! This is why there are code chunks. A simple example is a code chunk loading packages. + +First, insert a code chunk by going to `Code->Insert code chunk` or by pressing `CTRL+ALT+I`. Inside this code chunk you can then type for example, `library(ggplot2)` and create an object `x`. + +```{r} +library(ggplot2) + +x <- 1 + 1 +``` + +If you do not want to have the contents of the code chunk to be put into your document, you include `echo=FALSE` at the start of the code chunk. We can now use the contents from the above code chunk to print results (e.g., $x=`r x`$). + +These code chunks can contain whatever you need, including tables, and figures (which we will go into more later). Note that all code chunks regard the location of the RMarkdown as the working directory, so when you try to read in data use the relative path in. + +# Markdown syntax + +Markdown is one of the simplest document languages around, that is an open standard and can be converted into `.tex`, `.docx`, `.html`, `.pdf`, etc. This is the main workhorse of RMarkdown and is very powerful. You can [learn Markdown in five (!) minutes](https://learnxinyminutes.com/docs/markdown/) Other resources include [http://rmarkdown.rstudio.com/authoring_basics.html](), and [this cheat sheet](https://www.rstudio.com/wp-content/uploads/2015/02/rmarkdown-cheatsheet.pdf). + +You can do some pretty cool tricks with Markdown, but these are the basics: + +* It's easy to get `*italic*` or `**bold**`. +* You can get headings using `# heading1` for first level, `## heading2` for second-level, and `### heading3` for third level. +* Lists are delimited with `*` for each entry. +* You can write links by writing `[here's my link](http://foo.com)`. + +If you want a more extensive description of all the potential of Markdown, [this introduction to Markdown](https://daringfireball.net/projects/markdown/) is highly detailed. + +# Headers, Tables, and Graphs + +## Headers + +We're going to want more libraries loaded (for now we're loading them inline). + +```{r} +library(knitr) +library(ggplot2) +library(broom) +library(devtools) +``` + +We often also add `chunk options` to each code chunk so that, for example: + +- code does or doesn't display inline (`echo` setting) +- figures are shown at various sizes (`fig.width` and `fig.height` settings) +- warnings and messages are suppressed (`warning` and `message` settings) +- computations are cached (`cache` setting) + +There are many others available as well. Caching can be very helpful for large files, but can also cause problems when there are external dependencies that change. An example that is useful for manuscripts is: + +```{r eval=FALSE} +opts_chunk$set(fig.width=8, fig.height=5, + echo=TRUE, + warning=FALSE, message=FALSE, + cache=TRUE) +``` + + +## Graphs + +It's really easy to include graphs, like this one. (Using the `mtcars` dataset that comes with `ggplot2`). + +```{r} +qplot(hp, mpg, col = factor(cyl), data = mtcars) +``` + +All you have to do is make the plot and it will render straight into the text. + +External graphics can also be included, as follows: + +```{r eval = FALSE} +knitr::include_graphics("path/to/file") +``` + +## Tables + +There are many ways to make good-looking tables using RMarkdown, depending on your display purpose. + +- The `knitr` package (which powers RMarkdown) comes with the `kable` function. It's versatile and makes perfectly reasonable tables. It also has a `digits` argument for controlling rounding. +- For HTML tables, there is the `DT` package, which provides `datatable` -- these are pretty and interactive javascript-based tables that you can click on and search in. Not great for static documents though. +- For APA manuscripts, it can also be helpful to use the `xtable` package, which creates very flexible LaTeX tables. These can be tricky to get right but they are completely customizable provided you want to google around and learn a bit about tex. + +We recommend starting with `kable`: + +```{r} +kable(head(mtcars), digits = 1) +``` + +## Statistics + +It's also really easy to include statistical tests of various types. + +For this, an option is the `broom` package, which formats the outputs of various tests really nicely. Paired with knitr's `kable` you can make very simple tables in just a few lines of code. + +```{r} +mod <- lm(mpg ~ hp + cyl, data = mtcars) +kable(tidy(mod), digits = 3) +``` + +Of course, cleaning these up can take some work. For example, we'd need to rename a bunch of fields to make this table have the labels we wanted (e.g., to turn `hp` into `Horsepower`). + +We often need APA-formatted statistics. We can compute them first, and then print them inline. + +```{r} +ts <- with(mtcars,t.test(hp[cyl==4], hp[cyl==6])) +``` + +> There's a statistically-significant difference in horsepower for 4- and 6-cylinder cars ($t(`r round(ts$parameter,2)`) = `r round(ts$statistic,2)`$, $p = `r round(ts$p.value,3)`$). + +To insert these stats inline I wrote e.g. `round(ts$parameter, 2)` inside an inline code block.^[APA would require omission of the leading zero. `papaja::printp()` will let you do that, see below.] + +Note that rounding can occasionally get you in trouble here, because it's very easy to have an output of $p = 0$ when in fact $p$ can never be exactly equal to 0. Nonetheless, this can help you prevent rounding errors and the wrath of `statcheck`. + +# Writing APA-format papers + +(Thanks to [Frederick Aust](http://github.com/crsh) for contributing this section!) + +The end-game of reproducible research is to knit your entire paper. We'll focus on APA-style writeups. Managing APA format is a pain in the best of times. Isn't it nice to get it done for you? + +We're going to use the `papaja` package. `papaja` is a R-package including a R Markdown template that can be used to produce documents that adhere to the American Psychological Association (APA) manuscript guidelines (6th Edition). + +## Software requirements + +To use `papaja`, make sure you are using the latest versions of R and RStudio. If you want to create PDF- in addition to DOCX-files you need **[TeX](http://de.wikipedia.org/wiki/TeX) 2013 or later**. Try [MikTeX](http://miktex.org/) for Windows, [MacTeX](https://tug.org/mactex/) for Mac, or [TeX Live](http://www.tug.org/texlive/) for Linux. Some Linux users may need a few additional TeX packages for the LaTeX document class `apa6` to work.^[For Ubuntu, we suggest running: `sudo apt-get install texlive texlive-publishers texlive-fonts-extra texlive-latex-extra texlive-humanities lmodern`.] + + +## Installing `papaja` + +`papaja` has not yet been released on CRAN but you can install it from GitHub. + +```{r install_papapja, eval = FALSE} +# Install devtools package if necessary +if(!"devtools" %in% rownames(installed.packages())) install.packages("devtools") + +# Install papaja +devtools::install_github("crsh/papaja") +``` + +## Creating a document + +The APA manuscript template should now be available through the RStudio menus when creating a new R Markdown file. + +```{r template-selection, echo = FALSE, fig.cap = "papaja's APA6 template is available through the RStudio menues."} +knitr::include_graphics("figures/template_selection.png") +``` + +When you click RStudio's *Knit* button `papaja`, `rmarkdown,` and `knitr` work together to create an APA conform manuscript that includes both your manuscript text and the results of any embedded R code. + +```{r knit-button, echo = FALSE, fig.cap = "The *Knit* button in the RStudio."} +knitr::include_graphics("figures/knitting.png") +``` + +Note, if you don't have TeX installed on your computer, or if you would like to create a Word document replace `output: papaja::apa6_pdf` with `output: papaja::apa6_word` in the document YAML header. + +`papaja` provides some rendering options that only work if you use `output: papaja::apa6_pdf`. +`figsintext` indicates whether figures and tables should be included at the end of the document---as required by APA guidelines---or rendered in the body of the document. +If `figurelist`, `tablelist`, or `footnotelist` are set to `yes` a list of figure captions, table captions, or footnotes is given following the reference section. +`lineno` indicates whether lines should be continuously numbered through out the manuscript. + +## Reporting statistical analyses + +`apa_print()` facilitates reporting of statistical analyses. +The function formats the contents of R objects and produces readily reportable text. + +```{r eval=FALSE} +recall_anova <- afex::aov_car( + Recall ~ (Task * Valence * Dosage) + Error(Subject/(Task * Valence)) + Dosage + , data = mixed_data + , type = 3 +) +recall_anova_results <- apa_print(recall_anova, es = "pes") +recall_anova_results_p <- apa_print(recall_anova, es = "pes", in_paren = TRUE) +``` + +Now, you can report the results of your analyses like so: + +> Item valence (\` r anova_results_p$full$Valence\`) and the task affected recall performance, \` r anova_results$full$Task\`; the dosage, however, had no effect on recall, \` r anova_results$full$Dosage\`. There was no significant interaction. + +`apa_print()` also creates reportable tables---in this case a complete ANOVA table. +You can include the table into the document by passing `recall_anova_results$table` to `apa_table()`. +Remeber to include the `results = "asis"` argument in the chunk options of the chunk that generates the table. + +```{r eval=FALSE} +apa_table( + recall_anova_results$table + , align = c("lrcrrr") + , caption = "ANOVA table for the analyis of the example data set." + , note = "This is a table created using R and papaja." +) +``` + +## Cross-referencing + +`papaja` enables the use of `bookdown` cross-referencing syntax as detailed in the [bookdown documentation](https://bookdown.org/yihui/bookdown/cross-references.html). +Generally, a cross-reference to a figure, table, or document section can be done by using the syntax `\@ref(label)`. +If you set a figure caption in a code chunk via the chunk option `fig.cap = "This is my figure caption."`, the label for that figure is based on the label of the code chunk, e.g., if the chunk label is `foo`, the figure label will be `fig:foo`. +If you used `knitr::kable()` or `apa_table()` to create a table, the label for that table is, again, based on the label of the code chunk, e.g., if the chunk label is `foo`, the figure label will be `tab:foo`. + +## Bibiographic management + +It's also possible to include references using `bibtex`, by using `@ref` syntax. An option for managing references is [bibdesk](http://bibdesk.sourceforge.net/), which integrates with google scholar.^[But many other options are possible.] + +With a bibtex file included, you can refer to papers. As an example, `@nuijten2016` results in the in text citation "@nuijten2016", or cite them parenthetically with `[@nuijten2016]` [@nuijten2016]. Take a look at the `papaja` APA example to see how this works. From 8a3c455564e1c2773a847e7f99b8d40753c43beb Mon Sep 17 00:00:00 2001 From: Michael Frank Date: Tue, 4 Dec 2018 20:43:37 -0800 Subject: [PATCH 2/2] Delete SPSP_handout.Rmd --- SPSP_handout.Rmd | 287 ----------------------------------------------- 1 file changed, 287 deletions(-) delete mode 100644 SPSP_handout.Rmd diff --git a/SPSP_handout.Rmd b/SPSP_handout.Rmd deleted file mode 100644 index e83f8be..0000000 --- a/SPSP_handout.Rmd +++ /dev/null @@ -1,287 +0,0 @@ ---- -title: "RMarkdown for writing reproducible scientific papers (SPSP Edition)" -author: '[Mike Frank](mailto:mcfrank@stanford.edu)' -date: '`r Sys.Date()`' -output: - tufte::tufte_html: - toc: yes - toc_depth: 1 - tufte::tufte_handout: - citation_package: natbib - latex_engine: pdflatex - tufte::tufte_book: - citation_package: natbib - latex_engine: pdflatex -link-citations: yes -bibliography: library.bib ---- - -```{r, echo=FALSE} -library(knitr) -opts_chunk$set(echo=TRUE, - warning=FALSE, message=FALSE, - cache=FALSE) -``` - -# Introduction - -This document is a short tutorial on using RMarkdown to mix prose and code together for creating reproducible scientific documents. It is adapted from a tutorial that Mike Frank and Chris Hartgerink gave at SIPS 2017. - -In short: RMarkdown allows you to create documents that are compiled with code, producing your next scientific paper. - -Now we're together trying to help spread the word, because it can make writing manuscripts so much easier! - -## Who is this aimed at? - -We aim this document at anyone writing manuscripts and using R, including those who... - -1. ... collaborate with people who use Word -2. ... want to write complex equations -3. ... want to be able to change bibliography styles with less hassle -4. ... want to spend more time actually doing research! - -## Why write reproducible papers? - -There are three reasons to write reproducible papers. To be right, to be reproducible, and to be efficient. There are more, but these are convincing to us. In more depth: - -1. To avoid errors. Using an automated method for scraping APA-formatted stats out of PDFs, @nuijten2016 found that over 10% of p-values in published papers were inconsistent with the reported details of the statistical test, and 1.6% were what they called "grossly" inconsistent, e.g. difference between the p-value and the test statistic meant that one implied statistical significance and the other did not. Nearly half of all papers had errors in them. - -2. To promote computational reproducibility. Computational reproducibility means that other people can take your data and get the same numbers that are in your paper. Even if you don't have errors, it can still be very hard to recover the numbers from published papers because of ambiguities in analysis. Creating a document that literally specifies where all the numbers come from in terms of code that operates over the data removes all this ambiguity. - -3. To create spiffy documents that can be revised easily. This is actually a really big neglected one. for us. I used to tweak tables and figures by hand constantly in Adobe Illustrator, creating a major incentive *never to rerun analyses* because it would mean re-pasting and re-illustratoring all the numbers and figures in a paper. That's a bad thing! It means you have an incentive to be lazy and to avoid redoing your stuff. And you waste tons of time when you do. In contrast, with a reproducible document, you can just rerun with a tweak to the code. You can even specify what you want the figures and tables to look like before you're done with all the data collection (e.g., for purposes of preregistraion or a registered report). - -# Getting Started - -Before we get started with running everything, make sure to have `R` installed (download [here](https://cran.r-project.org/)) and `Rstudio` (download [here](https://www.rstudio.com/products/rstudio/download/#download)). If you haven't yet, go do that first. - -# Structure of an RMarkdown file - -An RMarkdown file contains several parts. Most essential are the header, the body text, and code chunks. - -## Header - -Headers in RMarkdown files contain some metadata about your document, which you can customize to your liking. Below is a simple example that purely states the title, author name(s), date^[Pro-tip: you can use the `Sys.Date()` function to have that use the current date when creating the document.], and output format. - -```yaml ---- -title: "Untitled" -author: "NAME" -date: "July 28, 2017" -output: html_document ---- -``` - -For now, go ahead and set `html_document` to `word_document`, except if you have strong preferences for `HTML` or `PDF`.^[Note: to create PDF documents you also need a TeX installation. Don't know what that is? You probably don't have it then. More info below.] - -## Body text - -The body of the document is where you actually write your reports. This is primarily written in the Markdown format, which is explained in the [Markdown syntax](#markdown-syntax) section. - -The beauty of RMarkdown is, however, that you can evaluate `R` code right in the text. To do this, you start inline code with \`r, type the code you want to run, and close it again with a \`. Usually, this key is below the escape (`ESC`) key or next to the left SHIFT button. - -For example, if you want to have the result of 48 times 35 in your text, you type \` r 48-35\`, which returns `r 48 - 35`. Please note that if you return a value with many decimals, it will also print these depending on your settings (for example, `r pi`). - -## Code chunks - -In the section above we introduced you to running code inside text, but often you need to take several steps in order to get to the result you need. And you don't want to do data cleaning in the text! This is why there are code chunks. A simple example is a code chunk loading packages. - -First, insert a code chunk by going to `Code->Insert code chunk` or by pressing `CTRL+ALT+I`. Inside this code chunk you can then type for example, `library(ggplot2)` and create an object `x`. - -```{r} -library(ggplot2) - -x <- 1 + 1 -``` - -If you do not want to have the contents of the code chunk to be put into your document, you include `echo=FALSE` at the start of the code chunk. We can now use the contents from the above code chunk to print results (e.g., $x=`r x`$). - -These code chunks can contain whatever you need, including tables, and figures (which we will go into more later). Note that all code chunks regard the location of the RMarkdown as the working directory, so when you try to read in data use the relative path in. - -# Markdown syntax - -Markdown is one of the simplest document languages around, that is an open standard and can be converted into `.tex`, `.docx`, `.html`, `.pdf`, etc. This is the main workhorse of RMarkdown and is very powerful. You can [learn Markdown in five (!) minutes](https://learnxinyminutes.com/docs/markdown/) Other resources include [http://rmarkdown.rstudio.com/authoring_basics.html](), and [this cheat sheet](https://www.rstudio.com/wp-content/uploads/2015/02/rmarkdown-cheatsheet.pdf). - -You can do some pretty cool tricks with Markdown, but these are the basics: - -* It's easy to get `*italic*` or `**bold**`. -* You can get headings using `# heading1` for first level, `## heading2` for second-level, and `### heading3` for third level. -* Lists are delimited with `*` for each entry. -* You can write links by writing `[here's my link](http://foo.com)`. - -If you want a more extensive description of all the potential of Markdown, [this introduction to Markdown](https://daringfireball.net/projects/markdown/) is highly detailed. - -# Headers, Tables, and Graphs - -## Headers - -We're going to want more libraries loaded (for now we're loading them inline). - -```{r} -library(knitr) -library(ggplot2) -library(broom) -library(devtools) -``` - -We often also add `chunk options` to each code chunk so that, for example: - -- code does or doesn't display inline (`echo` setting) -- figures are shown at various sizes (`fig.width` and `fig.height` settings) -- warnings and messages are suppressed (`warning` and `message` settings) -- computations are cached (`cache` setting) - -There are many others available as well. Caching can be very helpful for large files, but can also cause problems when there are external dependencies that change. An example that is useful for manuscripts is: - -```{r eval=FALSE} -opts_chunk$set(fig.width=8, fig.height=5, - echo=TRUE, - warning=FALSE, message=FALSE, - cache=TRUE) -``` - - -## Graphs - -It's really easy to include graphs, like this one. (Using the `mtcars` dataset that comes with `ggplot2`). - -```{r} -qplot(hp, mpg, col = factor(cyl), data = mtcars) -``` - -All you have to do is make the plot and it will render straight into the text. - -External graphics can also be included, as follows: - -```{r eval = FALSE} -knitr::include_graphics("path/to/file") -``` - -## Tables - -There are many ways to make good-looking tables using RMarkdown, depending on your display purpose. - -- The `knitr` package (which powers RMarkdown) comes with the `kable` function. It's versatile and makes perfectly reasonable tables. It also has a `digits` argument for controlling rounding. -- For HTML tables, there is the `DT` package, which provides `datatable` -- these are pretty and interactive javascript-based tables that you can click on and search in. Not great for static documents though. -- For APA manuscripts, it can also be helpful to use the `xtable` package, which creates very flexible LaTeX tables. These can be tricky to get right but they are completely customizable provided you want to google around and learn a bit about tex. - -We recommend starting with `kable`: - -```{r} -kable(head(mtcars), digits = 1) -``` - -## Statistics - -It's also really easy to include statistical tests of various types. - -For this, an option is the `broom` package, which formats the outputs of various tests really nicely. Paired with knitr's `kable` you can make very simple tables in just a few lines of code. - -```{r} -mod <- lm(mpg ~ hp + cyl, data = mtcars) -kable(tidy(mod), digits = 3) -``` - -Of course, cleaning these up can take some work. For example, we'd need to rename a bunch of fields to make this table have the labels we wanted (e.g., to turn `hp` into `Horsepower`). - -We often need APA-formatted statistics. We can compute them first, and then print them inline. - -```{r} -ts <- with(mtcars,t.test(hp[cyl==4], hp[cyl==6])) -``` - -> There's a statistically-significant difference in horsepower for 4- and 6-cylinder cars ($t(`r round(ts$parameter,2)`) = `r round(ts$statistic,2)`$, $p = `r round(ts$p.value,3)`$). - -To insert these stats inline I wrote e.g. `round(ts$parameter, 2)` inside an inline code block.^[APA would require omission of the leading zero. `papaja::printp()` will let you do that, see below.] - -Note that rounding can occasionally get you in trouble here, because it's very easy to have an output of $p = 0$ when in fact $p$ can never be exactly equal to 0. Nonetheless, this can help you prevent rounding errors and the wrath of `statcheck`. - -# Writing APA-format papers - -(Thanks to [Frederick Aust](http://github.com/crsh) for contributing this section!) - -The end-game of reproducible research is to knit your entire paper. We'll focus on APA-style writeups. Managing APA format is a pain in the best of times. Isn't it nice to get it done for you? - -We're going to use the `papaja` package. `papaja` is a R-package including a R Markdown template that can be used to produce documents that adhere to the American Psychological Association (APA) manuscript guidelines (6th Edition). - -## Software requirements - -To use `papaja`, make sure you are using the latest versions of R and RStudio. If you want to create PDF- in addition to DOCX-files you need **[TeX](http://de.wikipedia.org/wiki/TeX) 2013 or later**. Try [MikTeX](http://miktex.org/) for Windows, [MacTeX](https://tug.org/mactex/) for Mac, or [TeX Live](http://www.tug.org/texlive/) for Linux. Some Linux users may need a few additional TeX packages for the LaTeX document class `apa6` to work.^[For Ubuntu, we suggest running: `sudo apt-get install texlive texlive-publishers texlive-fonts-extra texlive-latex-extra texlive-humanities lmodern`.] - - -## Installing `papaja` - -`papaja` has not yet been released on CRAN but you can install it from GitHub. - -```{r install_papapja, eval = FALSE} -# Install devtools package if necessary -if(!"devtools" %in% rownames(installed.packages())) install.packages("devtools") - -# Install papaja -devtools::install_github("crsh/papaja") -``` - -## Creating a document - -The APA manuscript template should now be available through the RStudio menus when creating a new R Markdown file. - -```{r template-selection, echo = FALSE, fig.cap = "papaja's APA6 template is available through the RStudio menues."} -knitr::include_graphics("figures/template_selection.png") -``` - -When you click RStudio's *Knit* button `papaja`, `rmarkdown,` and `knitr` work together to create an APA conform manuscript that includes both your manuscript text and the results of any embedded R code. - -```{r knit-button, echo = FALSE, fig.cap = "The *Knit* button in the RStudio."} -knitr::include_graphics("figures/knitting.png") -``` - -Note, if you don't have TeX installed on your computer, or if you would like to create a Word document replace `output: papaja::apa6_pdf` with `output: papaja::apa6_word` in the document YAML header. - -`papaja` provides some rendering options that only work if you use `output: papaja::apa6_pdf`. -`figsintext` indicates whether figures and tables should be included at the end of the document---as required by APA guidelines---or rendered in the body of the document. -If `figurelist`, `tablelist`, or `footnotelist` are set to `yes` a list of figure captions, table captions, or footnotes is given following the reference section. -`lineno` indicates whether lines should be continuously numbered through out the manuscript. - -## Reporting statistical analyses - -`apa_print()` facilitates reporting of statistical analyses. -The function formats the contents of R objects and produces readily reportable text. - -```{r eval=FALSE} -recall_anova <- afex::aov_car( - Recall ~ (Task * Valence * Dosage) + Error(Subject/(Task * Valence)) + Dosage - , data = mixed_data - , type = 3 -) -recall_anova_results <- apa_print(recall_anova, es = "pes") -recall_anova_results_p <- apa_print(recall_anova, es = "pes", in_paren = TRUE) -``` - -Now, you can report the results of your analyses like so: - -> Item valence (\` r anova_results_p$full$Valence\`) and the task affected recall performance, \` r anova_results$full$Task\`; the dosage, however, had no effect on recall, \` r anova_results$full$Dosage\`. There was no significant interaction. - -`apa_print()` also creates reportable tables---in this case a complete ANOVA table. -You can include the table into the document by passing `recall_anova_results$table` to `apa_table()`. -Remeber to include the `results = "asis"` argument in the chunk options of the chunk that generates the table. - -```{r eval=FALSE} -apa_table( - recall_anova_results$table - , align = c("lrcrrr") - , caption = "ANOVA table for the analyis of the example data set." - , note = "This is a table created using R and papaja." -) -``` - -## Cross-referencing - -`papaja` enables the use of `bookdown` cross-referencing syntax as detailed in the [bookdown documentation](https://bookdown.org/yihui/bookdown/cross-references.html). -Generally, a cross-reference to a figure, table, or document section can be done by using the syntax `\@ref(label)`. -If you set a figure caption in a code chunk via the chunk option `fig.cap = "This is my figure caption."`, the label for that figure is based on the label of the code chunk, e.g., if the chunk label is `foo`, the figure label will be `fig:foo`. -If you used `knitr::kable()` or `apa_table()` to create a table, the label for that table is, again, based on the label of the code chunk, e.g., if the chunk label is `foo`, the figure label will be `tab:foo`. - -## Bibiographic management - -It's also possible to include references using `bibtex`, by using `@ref` syntax. An option for managing references is [bibdesk](http://bibdesk.sourceforge.net/), which integrates with google scholar.^[But many other options are possible.] - -With a bibtex file included, you can refer to papers. As an example, `@nuijten2016` results in the in text citation "@nuijten2016", or cite them parenthetically with `[@nuijten2016]` [@nuijten2016]. Take a look at the `papaja` APA example to see how this works.