2 min read

Reporting Regression Results in R Markdown

I recently wrote an R markdown document that incorporated results from a simple linear regression. I wanted the report to be reproducible (should the data change), so I included references to the summary statistics in the text. I was unsure at first how to put the numerator and denominator degrees of freedom for the F statistic as subscripts. But I found a handy page on math notation in R markdown that provided the solution I needed. The R markdown text and its result are shown below.

A few things to note. I defined a function, myprint(), to ensure that the numbers I reported in the text had the specified number of decimal places. Simply using round() won’t always do this. I calculated the P value from the summary of the fitted model object. I defined a character scalar, statement, to insert the appropriate verbiage in the text regarding significance. I used math notation to incorporate the numerator and denominator degrees of freedom for the F statistic as subscripts. Finally, I noted that the subscripts appeared as expected when viewed in Word or in Firefox, but not in Chrome. Not sure why. —

# define function to easily paste numbers into text
myprint <- function(x, d=2) {
  sprintf(paste0("%.", d, "f"), round(x, d))
}

# fake data for simple linear regression
n <- 100
x <- 1:n
y <- rnorm(n)

# fit the regression, save the F statistic and P value
fit <- lm(y ~ x)
fstat <- summary(fit)$fstatistic
pval <- pf(fstat[1], fstat[2], fstat[3], lower.tail=FALSE)

# text regarding significance
statement <- ifelse(pval < 0.05, "was", "was not")

Now I can use this text (outside of the code chunks) in the R markdown document to create the output below.

We conducted a simple linear regression of y on x; 
y `r statement` significantly related to x 
($F_{`r fstat[2]`,`r fstat[3]`}$ = `r myprint(fstat[1])`, 
*P* = `r myprint(pval)`).

We conducted a simple linear regression of y on x; y was not significantly related to x (\(F_{1,98}\) = 0.17, P = 0.68).