# Package 'broom' needs to be installed to run these examples.
# We check availability before running them to avoid errors.
broom.installed <- requireNamespace("broom", quietly = TRUE)
if (broom.installed)
library(broom)
# data for examples
x <- c(44.4, 45.9, 41.9, 53.3, 44.7, 44.1, 50.7, 45.2, 60.1)
covariate <- sqrt(x) + rnorm(9)
group <- factor(c(rep("A", 4), rep("B", 5)))
my.df <- data.frame(x, group, covariate)
gginnards.installed <- requireNamespace("gginnards", quietly = TRUE)
if (gginnards.installed)
library(gginnards)
## covariate is a numeric or continuous variable
# Linear regression fit summary, all defaults
if (broom.installed)
ggplot(my.df, aes(covariate, x)) +
geom_point() +
stat_fit_tb() +
expand_limits(y = 70)
# we can use geom_debug() and str() to inspect the returned value
# and discover the variables that can be mapped to aesthetics with
# after_stat()
if (broom.installed && gginnards.installed)
ggplot(my.df, aes(covariate, x)) +
geom_point() +
stat_fit_tb(geom = "debug", summary.fun = str) +
expand_limits(y = 70)
# Linear regression fit summary, with default formatting
if (broom.installed)
ggplot(my.df, aes(covariate, x)) +
geom_point() +
stat_fit_tb(tb.type = "fit.summary") +
expand_limits(y = 70)
# Linear regression fit summary, with manual table formatting
if (broom.installed)
ggplot(my.df, aes(covariate, x)) +
geom_point() +
stat_fit_tb(digits = 2,
p.digits = 4,
tb.params = c("intercept" = 1, "covariate" = 2),
tb.vars = c(Term = 1, Estimate = 2,
"italic(s)" = 3, "italic(t)" = 4,
"italic(P)" = 5),
parse = TRUE) +
expand_limits(y = 70)
# Linear regression ANOVA table, with default formatting
if (broom.installed)
ggplot(my.df, aes(covariate, x)) +
geom_point() +
stat_fit_tb(tb.type = "fit.anova") +
expand_limits(y = 70)
# Linear regression ANOVA table, with manual table formatting
if (broom.installed)
ggplot(my.df, aes(covariate, x)) +
geom_point() +
stat_fit_tb(tb.type = "fit.anova",
tb.params = c("Covariate" = 1, 2),
tb.vars = c(Effect = 1, d.f. = 2,
"M.S." = 4, "italic(F)" = 5,
"italic(P)" = 6),
parse = TRUE) +
expand_limits(y = 67)
# Linear regression fit coeficients, with default formatting
if (broom.installed)
ggplot(my.df, aes(covariate, x)) +
geom_point() +
stat_fit_tb(tb.type = "fit.coefs") +
expand_limits(y = 67)
# Linear regression fit coeficients, with manual table formatting
if (broom.installed)
ggplot(my.df, aes(covariate, x)) +
geom_point() +
stat_fit_tb(tb.type = "fit.coefs",
tb.params = c(a = 1, b = 2),
tb.vars = c(Term = 1, Estimate = 2)) +
expand_limits(y = 67)
## x is also a numeric or continuous variable
# Polynomial regression, with default formatting
if (broom.installed)
ggplot(my.df, aes(covariate, x)) +
geom_point() +
stat_fit_tb(method.args = list(formula = y ~ poly(x, 2))) +
expand_limits(y = 70)
# Polynomial regression, with manual table formatting
if (broom.installed)
ggplot(my.df, aes(covariate, x)) +
geom_point() +
stat_fit_tb(method.args = list(formula = y ~ poly(x, 2)),
tb.params = c("x^0" = 1, "x^1" = 2, "x^2" = 3),
tb.vars = c("Term" = 1, "Estimate" = 2, "S.E." = 3,
"italic(t)" = 4, "italic(P)" = 5),
parse = TRUE) +
expand_limits(y = 70)
## group is a factor or discrete variable
# ANOVA summary, with default formatting
if (broom.installed)
ggplot(my.df, aes(group, x)) +
geom_point() +
stat_fit_tb() +
expand_limits(y = 70)
# ANOVA table, with default formatting
if (broom.installed)
ggplot(my.df, aes(group, x)) +
geom_point() +
stat_fit_tb(tb.type = "fit.anova") +
expand_limits(y = 70)
# ANOVA table, with manual table formatting
if (broom.installed)
ggplot(my.df, aes(group, x)) +
geom_point() +
stat_fit_tb(tb.type = "fit.anova",
tb.vars = c(Effect = "term", "df", "italic(F)" = "statistic",
"italic(P)" = "p.value"),
tb.params = c(Group = 1, Error = 2),
parse = TRUE)
# ANOVA table, with manual table formatting
# using column names with partial matching
if (broom.installed)
ggplot(my.df, aes(group, x)) +
geom_point() +
stat_fit_tb(tb.type = "fit.anova",
tb.vars = c(Effect = "term", "df", "italic(F)" = "stat",
"italic(P)" = "p"),
tb.params = c(Group = "x", Error = "Resid"),
parse = TRUE)
# ANOVA summary, with default formatting
if (broom.installed)
ggplot(my.df, aes(group, x)) +
geom_point() +
stat_fit_tb() +
expand_limits(y = 70)
## covariate is a numeric variable and group is a factor
# ANCOVA (covariate not plotted) ANOVA table, with default formatting
if (broom.installed)
ggplot(my.df, aes(group, x, z = covariate)) +
geom_point() +
stat_fit_tb(tb.type = "fit.anova",
method.args = list(formula = y ~ x + z))
# ANCOVA (covariate not plotted) ANOVA table, with manual table formatting
if (broom.installed)
ggplot(my.df, aes(group, x, z = covariate)) +
geom_point() +
stat_fit_tb(tb.type = "fit.anova",
method.args = list(formula = y ~ x + z),
tb.vars = c(Effect = 1, d.f. = 2,
"M.S." = 4, "italic(F)" = 5,
"italic(P)" = 6),
tb.params = c(Group = 1,
Covariate = 2,
Error = 3),
parse = TRUE)
## group is a factor or discrete variable
# t-test, minimal output, with manual table formatting
if (broom.installed)
ggplot(my.df, aes(group, x)) +
geom_point() +
stat_fit_tb(method = "t.test",
tb.vars = c("italic(t)" = "statistic", "italic(P)" = "p.value"),
parse = TRUE)
# t-test, more detailed output, with manual table formatting
if (broom.installed)
ggplot(my.df, aes(group, x)) +
geom_point() +
stat_fit_tb(method = "t.test",
tb.vars = c("\"Delta \"*italic(x)" = "estimate",
"CI low" = "conf.low", "CI high" = "conf.high",
"italic(t)" = "statistic", "italic(P)" = "p.value"),
parse = TRUE) +
expand_limits(y = 67)
# t-test (equal variances assumed), minimal output, with manual table formatting
if (broom.installed)
ggplot(my.df, aes(group, x)) +
geom_point() +
stat_fit_tb(method = "t.test",
method.args = list(formula = y ~ x, var.equal = TRUE),
tb.vars = c("italic(t)" = "statistic", "italic(P)" = "p.value"),
parse = TRUE)
## covariate is a numeric or continuous variable
# Linear regression using a table theme and non-default position
if (broom.installed)
ggplot(my.df, aes(covariate, x)) +
geom_point() +
stat_fit_tb(table.theme = ttheme_gtlight,
npcx = "left", npcy = "bottom") +
expand_limits(y = 35)
Run the code above in your browser using DataLab