pairwise_t_test() doesn't return statistic and estimate

294 views Asked by At

I am a beginner in R and do not understand why pairwise_t_test() from the rstatix package does not show the t-value and cohen's d.

pairwise_t_test(data = filtered_normdata, BZO_RWgesamt ~ Alter, p.adjust.method = "none")
# A tibble: 36 × 9
   .y.       group1 group2    n1    n2        p p.signif    p.adj p.adj.signif
 * <chr>     <chr>  <chr>  <int> <int>    <dbl> <chr>       <dbl> <chr>       
 1 BZO_RWge… 11     12        95    90 4.26e- 2 *        4.26e- 2 *           
 2 BZO_RWge… 11     13        95    90 6.17e- 5 ****     6.17e- 5 ****        
 3 BZO_RWge… 12     13        90    90 4.85e- 2 *        4.85e- 2 *           
 4 BZO_RWge… 11     14        95    74 4.85e- 9 ****     4.85e- 9 ****        
 5 BZO_RWge… 12     14        90    74 8.21e- 5 ****     8.21e- 5 ****        
 6 BZO_RWge… 13     14        90    74 3.72e- 2 *        3.72e- 2 *           
 7 BZO_RWge… 11     15        95    68 8.39e-18 ****     8.39e-18 ****        
 8 BZO_RWge… 12     15        90    68 1.22e-11 ****     1.22e-11 ****        
 9 BZO_RWge… 13     15        90    68 5   e- 7 ****     5   e- 7 ****        
10 BZO_RWge… 14     15        74    68 3.73e- 3 **       3.73e- 3 **          
# ℹ 26 more rows
# ℹ Use `print(n = ...)` to see more rows

I already tried to get the statistic and estimate like this:

BZO_H2_w <- pairwise_t_test(data = filtered_normdata, BZO_RWgesamt ~ Alter, p.adjust.method = "none")

BZO_H2_w$estimate and BZO_H2_w$statistic

but it didn't work. I would be really thankful if someone can help me :)

1

There are 1 answers

2
George Savva On BEST ANSWER

If it's the function from rstatix that you are asking about then it only seems to return the full detail of the tests if you request not to use a pooled standard deviation for the t-tests (pool.sd=FALSE).

If you look at the code, pairwise_t_test calls the R function stats::pairwise.t.test when you use a pooled SD, but uses a repeated application of stats::t.test when pool.sd=FALSE. It then uses broom::tidy to collate the statistics into a table.

So I don't think there's a good statistical reason for the difference in reporting, it just relies on different base functions, and while the R function t.test does return the t-statistic etc, pairwise.t.test only returns a matrix of p-values.

You can get the detail of the pairwise t-tests with pooled SD if you use lm to get a linear model (ANOVA) then emmeans to get the pairwise contrasts. Note the p-values from emmeans are the same as from pairwise.t.test with the pooled SD, but it returns the estimate and statistic as well.

So, with some toy data:

> dat <- data.frame(x=rep(1:10,10), y=rnorm(100))
> 
> rstatix::pairwise_t_test(dat, y~x, detailed=TRUE)

# A tibble: 45 × 10
   .y.   group1 group2    n1    n2     p method p.adj p.signif p.adj.signif
 * <chr> <chr>  <chr>  <int> <int> <dbl> <chr>  <dbl> <chr>    <chr>       
 1 y     1      2         10    10 0.536 T-test     1 ns       ns          
 2 y     1      3         10    10 0.453 T-test     1 ns       ns          
 3 y     2      3         10    10 0.896 T-test     1 ns       ns          
 4 y     1      4         10    10 0.427 T-test     1 ns       ns          
 5 y     2      4         10    10 0.86  T-test     1 ns       ns          
 6 y     3      4         10    10 0.964 T-test     1 ns       ns          
 7 y     1      5         10    10 0.781 T-test     1 ns       ns          
 8 y     2      5         10    10 0.733 T-test     1 ns       ns          
 9 y     3      5         10    10 0.636 T-test     1 ns       ns          
10 y     4      5         10    10 0.605 T-test     1 ns       ns          
# ℹ 35 more rows
# ℹ Use `print(n = ...)` to see more rows

> rstatix::pairwise_t_test(dat, y~x, pool.sd=FALSE, detailed = TRUE)

# A tibble: 45 × 17
   estimate estimate1 estimate2 .y.   group1 group2    n1    n2 statistic     p    df conf.low conf.high method alternative p.adj p.adj.signif
 *    <dbl>     <dbl>     <dbl> <chr> <chr>  <chr>  <int> <int>     <dbl> <dbl> <dbl>    <dbl>     <dbl> <chr>  <chr>       <dbl> <chr>       
 1  -0.276    -0.318   -0.0417  y     1      2         10    10   -0.725  0.479  15.6   -1.08      0.533 T-test two.sided       1 ns          
 2  -0.334    -0.318    0.0166  y     1      3         10    10   -0.760  0.457  18.0   -1.26      0.590 T-test two.sided       1 ns          
 3  -0.354    -0.318    0.0367  y     1      4         10    10   -0.782  0.445  18.0   -1.31      0.598 T-test two.sided       1 ns          
 4  -0.124    -0.318   -0.194   y     1      5         10    10   -0.306  0.763  17.0   -0.977     0.729 T-test two.sided       1 ns          
 5  -0.209    -0.318   -0.109   y     1      6         10    10   -0.458  0.653  18.0   -1.17      0.749 T-test two.sided       1 ns          
 6  -0.0428   -0.318   -0.275   y     1      7         10    10   -0.104  0.918  17.3   -0.909     0.823 T-test two.sided       1 ns          
 7   0.0437   -0.318   -0.361   y     1      8         10    10    0.0933 0.927  17.9   -0.940     1.03  T-test two.sided       1 ns          
 8  -0.150    -0.318   -0.167   y     1      9         10    10   -0.320  0.752  17.9   -1.14      0.835 T-test two.sided       1 ns          
 9  -0.321    -0.318    0.00292 y     1      10        10    10   -0.616  0.546  16.9   -1.42      0.778 T-test two.sided       1 ns          
10  -0.0583   -0.0417   0.0166  y     2      3         10    10   -0.158  0.876  16.0   -0.840     0.724 T-test two.sided       1 ns          
# ℹ 35 more rows
# ℹ Use `print(n = ...)` to see more rows

> mod1 <- lm(data=dat , y~factor(x)) 
> emmeans::emmeans(mod1, pairwise ~ x, adjust="none", infer=c(TRUE, TRUE))$contrast

 contrast estimate    SE df lower.CL upper.CL t.ratio p.value
 x1 - x2   -0.2759 0.444 90   -1.158    0.606  -0.622  0.5357
 x1 - x3   -0.3343 0.444 90   -1.216    0.547  -0.753  0.4533
 x1 - x4   -0.3543 0.444 90   -1.236    0.527  -0.798  0.4268
 x1 - x5   -0.1238 0.444 90   -1.006    0.758  -0.279  0.7809
 x1 - x6   -0.2086 0.444 90   -1.090    0.673  -0.470  0.6395
 x1 - x7   -0.0428 0.444 90   -0.925    0.839  -0.096  0.9234
 x1 - x8    0.0437 0.444 90   -0.838    0.925   0.098  0.9218
 x1 - x9   -0.1503 0.444 90   -1.032    0.731  -0.339  0.7357
 x1 - x10  -0.3206 0.444 90   -1.202    0.561  -0.722  0.4720
 x2 - x3   -0.0583 0.444 90   -0.940    0.823  -0.131  0.8957
 x2 - x4   -0.0784 0.444 90   -0.960    0.803  -0.177  0.8602
 x2 - x5    0.1521 0.444 90   -0.730    1.034   0.343  0.7326
 x2 - x6    0.0673 0.444 90   -0.814    0.949   0.152  0.8798
 x2 - x7    0.2331 0.444 90   -0.649    1.115   0.525  0.6007
 x2 - x8    0.3196 0.444 90   -0.562    1.201   0.720  0.4733
 x2 - x9    0.1257 0.444 90   -0.756    1.007   0.283  0.7777
 x2 - x10  -0.0446 0.444 90   -0.926    0.837  -0.101  0.9201
 x3 - x4   -0.0201 0.444 90   -0.902    0.862  -0.045  0.9640
 x3 - x5    0.2105 0.444 90   -0.671    1.092   0.474  0.6365
 x3 - x6    0.1257 0.444 90   -0.756    1.007   0.283  0.7777
 x3 - x7    0.2915 0.444 90   -0.590    1.173   0.657  0.5130
 x3 - x8    0.3779 0.444 90   -0.504    1.260   0.852  0.3967
 x3 - x9    0.1840 0.444 90   -0.698    1.066   0.415  0.6794
 x3 - x10   0.0137 0.444 90   -0.868    0.895   0.031  0.9754
 x4 - x5    0.2305 0.444 90   -0.651    1.112   0.519  0.6047
 x4 - x6    0.1457 0.444 90   -0.736    1.027   0.328  0.7434
 x4 - x7    0.3116 0.444 90   -0.570    1.193   0.702  0.4845
 x4 - x8    0.3980 0.444 90   -0.484    1.280   0.897  0.3722
 x4 - x9    0.2041 0.444 90   -0.678    1.086   0.460  0.6468
 x4 - x10   0.0338 0.444 90   -0.848    0.915   0.076  0.9395
 x5 - x6   -0.0848 0.444 90   -0.967    0.797  -0.191  0.8489
 x5 - x7    0.0810 0.444 90   -0.801    0.963   0.183  0.8556
 x5 - x8    0.1675 0.444 90   -0.714    1.049   0.377  0.7068
 x5 - x9   -0.0265 0.444 90   -0.908    0.855  -0.060  0.9526
 x5 - x10  -0.1968 0.444 90   -1.078    0.685  -0.443  0.6586
 x6 - x7    0.1658 0.444 90   -0.716    1.048   0.374  0.7096
 x6 - x8    0.2523 0.444 90   -0.629    1.134   0.568  0.5712
 x6 - x9    0.0583 0.444 90   -0.823    0.940   0.131  0.8957
 x6 - x10  -0.1120 0.444 90   -0.994    0.770  -0.252  0.8014
 x7 - x8    0.0865 0.444 90   -0.795    0.968   0.195  0.8460
 x7 - x9   -0.1075 0.444 90   -0.989    0.774  -0.242  0.8092
 x7 - x10  -0.2778 0.444 90   -1.160    0.604  -0.626  0.5330
 x8 - x9   -0.1939 0.444 90   -1.076    0.688  -0.437  0.6632
 x8 - x10  -0.3642 0.444 90   -1.246    0.517  -0.821  0.4140
 x9 - x10  -0.1703 0.444 90   -1.052    0.711  -0.384  0.7021