Tidy summarizes information about the components of a model. A model component might be a single term in a regression, a single hypothesis, a cluster, or a class. Exactly what tidy considers to be a model component varies across models but is usually self-evident. If a model has several distinct types of components, you will need to specify which components to return.
# S3 method for class 'summary_emm'
tidy(x, null.value = NULL, ...)
A summary_emm
object.
Value to which estimate is compared.
Additional arguments passed to emmeans::summary.emmGrid()
or
lsmeans::summary.ref.grid()
. Cautionary note: misspecified arguments
may be silently ignored!
Returns a data frame with one observation for each estimated marginal mean, and one column for each combination of factors. When the input is a contrast, each row will contain one estimated contrast.
There are a large number of arguments that can be
passed on to emmeans::summary.emmGrid()
or lsmeans::summary.ref.grid()
.
tidy()
, emmeans::ref_grid()
, emmeans::emmeans()
,
emmeans::contrast()
Other emmeans tidiers:
tidy.emmGrid()
,
tidy.lsmobj()
,
tidy.ref.grid()
A tibble::tibble()
with columns:
Upper bound on the confidence interval for the estimate.
Lower bound on the confidence interval for the estimate.
Levels being compared.
Degrees of freedom of the denominator.
Degrees of freedom used by this term in the model.
Value to which the estimate is compared.
Degrees of freedom.
The two-sided p-value associated with the observed statistic.
The standard error of the regression term.
One level of the factor being contrasted
The other level of the factor being contrasted
Model term in joint tests
Expected marginal mean
T-ratio statistic or F-ratio statistic
# load libraries for models and data
library(emmeans)
# linear model for sales of oranges per day
oranges_lm1 <- lm(sales1 ~ price1 + price2 + day + store, data = oranges)
# reference grid; see vignette("basics", package = "emmeans")
oranges_rg1 <- ref_grid(oranges_lm1)
td <- tidy(oranges_rg1)
td
#> # A tibble: 36 × 9
#> price1 price2 day store estimate std.error df statistic p.value
#> <dbl> <dbl> <chr> <chr> <dbl> <dbl> <dbl> <dbl> <dbl>
#> 1 51.2 48.6 1 1 2.92 2.72 23 1.07 0.294
#> 2 51.2 48.6 2 1 3.85 2.70 23 1.42 0.168
#> 3 51.2 48.6 3 1 11.0 2.53 23 4.35 0.000237
#> 4 51.2 48.6 4 1 6.10 2.65 23 2.30 0.0309
#> 5 51.2 48.6 5 1 12.8 3.16 23 4.04 0.000505
#> 6 51.2 48.6 6 1 8.75 3.59 23 2.44 0.0229
#> 7 51.2 48.6 1 2 4.96 3.12 23 1.59 0.125
#> 8 51.2 48.6 2 2 5.89 2.76 23 2.13 0.0438
#> 9 51.2 48.6 3 2 13.1 2.74 23 4.77 0.0000823
#> 10 51.2 48.6 4 2 8.14 2.74 23 2.97 0.00692
#> # ℹ 26 more rows
# marginal averages
marginal <- emmeans(oranges_rg1, "day")
tidy(marginal)
#> # A tibble: 6 × 6
#> day estimate std.error df statistic p.value
#> <chr> <dbl> <dbl> <dbl> <dbl> <dbl>
#> 1 1 5.56 2.03 23 2.75 0.0115
#> 2 2 6.49 1.76 23 3.68 0.00123
#> 3 3 13.7 1.75 23 7.79 0.0000000676
#> 4 4 8.74 1.76 23 4.98 0.0000490
#> 5 5 15.4 2.86 23 5.39 0.0000178
#> 6 6 11.4 3.04 23 3.75 0.00103
# contrasts
tidy(contrast(marginal))
#> # A tibble: 6 × 8
#> term contrast null.value estimate std.error df statistic adj.p.value
#> <chr> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#> 1 day day1 effect 0 -4.65 1.35 23 -3.45 0.0132
#> 2 day day2 effect 0 -3.72 1.82 23 -2.04 0.105
#> 3 day day3 effect 0 3.45 1.81 23 1.90 0.105
#> 4 day day4 effect 0 -1.47 1.85 23 -0.799 0.519
#> 5 day day5 effect 0 5.22 1.88 23 2.78 0.0321
#> 6 day day6 effect 0 1.18 2.24 23 0.525 0.605
tidy(contrast(marginal, method = "pairwise"))
#> # A tibble: 15 × 8
#> term contrast null.value estimate std.error df statistic adj.p.value
#> <chr> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#> 1 day day1 - day2 0 -0.930 2.47 23 -0.377 0.999
#> 2 day day1 - day3 0 -8.10 2.47 23 -3.29 0.0337
#> 3 day day1 - day4 0 -3.18 2.51 23 -1.27 0.799
#> 4 day day1 - day5 0 -9.88 2.56 23 -3.86 0.00913
#> 5 day day1 - day6 0 -5.83 2.52 23 -2.31 0.229
#> 6 day day2 - day3 0 -7.17 2.48 23 -2.89 0.0777
#> 7 day day2 - day4 0 -2.25 2.44 23 -0.920 0.937
#> 8 day day2 - day5 0 -8.95 3.09 23 -2.89 0.0776
#> 9 day day2 - day6 0 -4.90 3.54 23 -1.38 0.737
#> 10 day day3 - day4 0 4.92 2.49 23 1.98 0.385
#> 11 day day3 - day5 0 -1.78 3.05 23 -0.583 0.991
#> 12 day day3 - day6 0 2.27 3.52 23 0.644 0.986
#> 13 day day4 - day5 0 -6.70 3.11 23 -2.15 0.296
#> 14 day day4 - day6 0 -2.65 3.57 23 -0.744 0.974
#> 15 day day5 - day6 0 4.05 2.56 23 1.58 0.617
# plot confidence intervals
library(ggplot2)
ggplot(tidy(marginal, conf.int = TRUE), aes(day, estimate)) +
geom_point() +
geom_errorbar(aes(ymin = conf.low, ymax = conf.high))
# by multiple prices
by_price <- emmeans(oranges_lm1, "day",
by = "price2",
at = list(
price1 = 50, price2 = c(40, 60, 80),
day = c("2", "3", "4")
)
)
by_price
#> price2 = 40:
#> day emmean SE df lower.CL upper.CL
#> 2 6.24 1.87 23 2.36 10.1
#> 3 13.41 2.08 23 9.10 17.7
#> 4 8.48 1.84 23 4.68 12.3
#>
#> price2 = 60:
#> day emmean SE df lower.CL upper.CL
#> 2 9.21 2.15 23 4.76 13.7
#> 3 16.38 1.93 23 12.40 20.4
#> 4 11.46 2.21 23 6.88 16.0
#>
#> price2 = 80:
#> day emmean SE df lower.CL upper.CL
#> 2 12.19 3.71 23 4.52 19.9
#> 3 19.36 3.33 23 12.48 26.2
#> 4 14.44 3.79 23 6.60 22.3
#>
#> Results are averaged over the levels of: store
#> Confidence level used: 0.95
tidy(by_price)
#> # A tibble: 9 × 7
#> day price2 estimate std.error df statistic p.value
#> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#> 1 2 40 6.24 1.87 23 3.33 0.00291
#> 2 3 40 13.4 2.08 23 6.44 0.00000142
#> 3 4 40 8.48 1.84 23 4.61 0.000123
#> 4 2 60 9.21 2.15 23 4.28 0.000283
#> 5 3 60 16.4 1.93 23 8.50 0.0000000149
#> 6 4 60 11.5 2.21 23 5.18 0.0000299
#> 7 2 80 12.2 3.71 23 3.29 0.00321
#> 8 3 80 19.4 3.33 23 5.82 0.00000622
#> 9 4 80 14.4 3.79 23 3.81 0.000900
ggplot(tidy(by_price, conf.int = TRUE), aes(price2, estimate, color = day)) +
geom_line() +
geom_errorbar(aes(ymin = conf.low, ymax = conf.high))
# joint_tests
tidy(joint_tests(oranges_lm1))
#> # A tibble: 4 × 5
#> term num.df den.df statistic p.value
#> <chr> <dbl> <dbl> <dbl> <dbl>
#> 1 price1 1 23 30.3 0.0000134
#> 2 price2 1 23 2.23 0.149
#> 3 day 5 23 4.88 0.00346
#> 4 store 5 23 2.52 0.0583