Skip to contents

A simple interface to lower-level statistics functions, including stats::wilcox.test(), stats::kruskal.test(), emmeans::emmeans(), and emmeans::emtrends().

Usage

stats_table(
  df,
  regr = NULL,
  resp = attr(df, "response"),
  stat.by = NULL,
  split.by = NULL,
  test = "emmeans",
  fit = "gam",
  at = NULL,
  level = 0.95,
  alt = "!=",
  mu = 0,
  p.adj = "fdr"
)

Arguments

df

The dataset (data.frame or tibble object). "Dataset fields" mentioned below should match column names in df. Required.

regr

Dataset field with the x-axis (independent; predictive) values. Must be numeric. Default: NULL

resp

Dataset field with the y-axis (dependent; response) values, such as taxa abundance or alpha diversity. Default: attr(df, 'response')

stat.by

Dataset field with the statistical groups. Must be categorical. Default: NULL

split.by

Dataset field(s) that the data should be split by prior to any calculations. Must be categorical. Default: NULL

test

Method for computing p-values: 'wilcox', 'kruskal', 'emmeans', or 'emtrends'. Default: 'emmeans'

fit

How to fit the trendline. 'lm', 'log', or 'gam'. Default: 'gam'

at

Position(s) along the x-axis where the means or slopes should be evaluated. Default: NULL, which samples 100 evenly spaced positions and selects the position where the p-value is most significant.

level

The confidence level for calculating a confidence interval. Default: 0.95

alt

Alternative hypothesis direction. Options are '!=' (two-sided; not equal to mu), '<' (less than mu), or '>' (greater than mu). Default: '!='

mu

Reference value to test against. Default: 0

p.adj

Method to use for multiple comparisons adjustment of p-values. Run p.adjust.methods for a list of available options. Default: "fdr"

Value

A tibble data.frame with fields from the table below. This tibble object provides the $code operator to print the R code used to generate the statistics.

FieldDescription
.meanEstimated marginal mean. See emmeans::emmeans().
.mean.diffDifference in means.
.slopeTrendline slope. See emmeans::emtrends().
.slope.diffDifference in slopes.
.h1Alternate hypothesis.
.p.valProbability that null hypothesis is correct.
.adj.p.p.val after adjusting for multiple comparisons.
.effect.sizeEffect size. See emmeans::eff_size().
.lowerConfidence interval lower bound.
.upperConfidence interval upper bound.
.seStandard error.
.nNumber of samples.
.dfDegrees of freedom.
.statWilcoxon or Kruskal-Wallis rank sum statistic.
.t.ratio.mean / .se
.r.sqrPercent of variation explained by the model.
.adj.r.r.sqr, taking degrees of freedom into account.
.aicAkaike Information Criterion (predictive models).
.bicBayesian Information Criterion (descriptive models).
.loglikLog-likelihood goodness-of-fit score.
.fit.pP-value for observing this fit by chance.

See also

Other stats_tables: adiv_stats(), bdiv_stats(), distmat_stats(), taxa_stats()

Examples

    library(rbiom)
    
    biom <- rarefy(hmp50)
    
    df <- taxa_table(biom, rank = "Family")
    stats_table(df, stat.by = "Body Site")[,1:6]
#> # Model:    gam(.abundance ~ `Body Site`, method = "REML")
#> # A tibble: 10 × 6
#>    `Body Site`                    .mean.diff .h1   .p.val .adj.p .effect.size
#>    <chr>                               <dbl> <fct>  <dbl>  <dbl>        <dbl>
#>  1 Mid vagina - Saliva                84.1   != 0   0.136  0.510      0.274  
#>  2 Buccal mucosa - Saliva             60.4   != 0   0.160  0.510      0.258  
#>  3 Anterior nares - Mid vagina       -84.6   != 0   0.167  0.510     -0.254  
#>  4 Anterior nares - Buccal mucosa    -60.9   != 0   0.214  0.510     -0.228  
#>  5 Mid vagina - Stool                 73.8   != 0   0.255  0.510      0.215  
#>  6 Buccal mucosa - Stool              50.1   != 0   0.336  0.560      0.181  
#>  7 Buccal mucosa - Mid vagina        -23.7   != 0   0.724  0.889     -0.0646 
#>  8 Saliva - Stool                    -10.3   != 0   0.766  0.889     -0.0560 
#>  9 Anterior nares - Stool            -10.8   != 0   0.800  0.889     -0.0476 
#> 10 Anterior nares - Saliva            -0.500 != 0   0.988  0.988     -0.00284
    
    df <- adiv_table(biom)
    stats_table(df, stat.by = "Sex", split.by = "Body Site")[,1:7]
#> # Model:    gam(.diversity ~ Sex, method = "REML")
#> # A tibble: 5 × 7
#>   `Body Site`    Sex           .mean.diff .h1   .p.val .adj.p .effect.size
#>   <fct>          <chr>              <dbl> <fct>  <dbl>  <dbl>        <dbl>
#> 1 Buccal mucosa  Female - Male    -0.560  != 0   0.230  0.441       -0.822
#> 2 Saliva         Female - Male    -0.242  != 0   0.231  0.441       -0.820
#> 3 Stool          Female - Male    -0.192  != 0   0.331  0.441       -0.701
#> 4 Anterior nares Female - Male    -0.0686 != 0   0.739  0.739       -0.218
#> 5 Mid vagina     NA               NA      NA    NA     NA           NA