R 中的两个成对 T 检验给出不同的 P 值

问题描述

我在 R 中使用 Pairwise T-test 和以下数据

xdata = read.table(text="
2.77E-06    6.89E-06    4.81E-05    2.52E-06    1.13E-05    3.19E-06    3.14E-06    2.02E-04    6.05E-05    8.06E-05    7.39E-06    2.73E-06    2.67E-06    1.13E-05    2.70E-06 
4.20E-06    6.68E-06    7.21E-05    2.71E-06    1.44E-05    3.98E-06    3.94E-06    2.38E-04    5.09E-05    6.19E-05    7.63E-06    4.16E-06    4.16E-06    1.45E-05    3.91E-06 
4.20E-06    9.63E-06    5.51E-05    2.84E-06    1.47E-05    4.46E-06    4.46E-06    1.59E-04    5.20E-05    9.82E-05    1.07E-05    4.19E-06    5.06E-06    1.90E-05    4.03E-06 
4.40E-06    8.40E-06    5.15E-05    3.61E-06    1.27E-05    4.32E-06    4.19E-06    1.42E-04    2.84E-05    7.15E-05    1.07E-05    4.49E-06    4.89E-06    1.59E-05    3.97E-06 
5.04E-06    9.64E-06    3.76E-05    3.27E-06    1.39E-05    5.15E-06    4.96E-06    2.15E-04    7.21E-05    9.13E-05    1.05E-05    4.88E-06    5.25E-06    1.60E-05    4.44E-06 
4.09E-06    8.37E-06    5.65E-05    2.71E-06    1.31E-05    3.88E-06    3.82E-06    2.32E-04    4.37E-05    8.77E-05    8.05E-06    3.93E-06    3.70E-06    1.58E-05    3.71E-06 
3.98E-06    9.51E-06    5.24E-05    3.50E-06    1.41E-05    4.49E-06    4.57E-06    1.95E-04    5.90E-05    8.26E-05    7.31E-06    3.81E-06    4.05E-06    1.53E-05    3.85E-06 
3.01E-06    7.20E-06    5.62E-05    2.43E-06    1.51E-05    3.58E-06    3.70E-06    2.08E-04    6.08E-05    9.00E-05    1.05E-05    3.01E-06    3.34E-06    1.54E-05    3.13E-06 
2.88E-06    7.07E-06    5.42E-05    2.02E-06    1.07E-05    2.86E-06    2.92E-06    1.94E-04    3.48E-05    8.07E-05    6.31E-06    2.89E-06    2.89E-06    1.11E-05    2.62E-06 
3.33E-06    5.75E-06    5.64E-05    2.36E-06    1.51E-05    3.45E-06    3.52E-06    1.78E-04    8.32E-05    9.69E-05    7.58E-06    3.48E-06    3.49E-06    1.28E-05    3.55E-06 
4.20E-06    8.36E-06    4.82E-05    3.14E-06    1.32E-05    3.93E-06    3.73E-06    1.52E-04    3.38E-05    5.34E-05    6.78E-06    4.02E-06    3.27E-06    1.21E-05    3.74E-06 
4.80E-06    8.00E-06    4.24E-05    2.43E-06    1.79E-05    4.76E-06    4.68E-06    2.11E-04    1.18E-04    8.94E-05    1.67E-05    4.65E-06    6.53E-06    2.88E-05    4.37E-06 
4.18E-06    9.90E-06    5.21E-05    2.80E-06    1.26E-05    4.41E-06    4.41E-06    2.00E-04    6.02E-05    9.61E-05    1.09E-05    4.17E-06    4.88E-06    1.85E-05    4.24E-06 
4.33E-06    8.89E-06    4.37E-05    3.02E-06    1.32E-05    4.09E-06    3.94E-06    1.48E-04    3.81E-05    6.99E-05    9.07E-06    4.31E-06    4.44E-06    1.49E-05    4.08E-06 
3.18E-06    6.27E-06    4.98E-05    3.37E-06    1.09E-05    3.42E-06    3.43E-06    1.77E-04    5.49E-05    8.02E-05    7.09E-06    3.16E-06    3.10E-06    1.11E-05    3.30E-06 
4.25E-06    7.49E-06    3.72E-05    2.77E-06    1.34E-05    4.33E-06    4.23E-06    1.94E-04    5.24E-05    7.06E-05    8.37E-06    4.21E-06    3.78E-06    1.23E-05    3.65E-06 
4.14E-06    8.01E-06    3.82E-05    2.43E-06    1.57E-05    4.06E-06    4.03E-06    1.88E-04    5.02E-05    7.67E-05    9.24E-06    4.10E-06    3.86E-06    1.67E-05    3.84E-06 
4.79E-06    6.83E-06    4.76E-05    3.03E-06    1.57E-05    4.70E-06    4.65E-06    2.14E-04    5.36E-05    7.23E-05    8.34E-06    4.59E-06    4.09E-06    1.34E-05    4.50E-06 
4.16E-06    7.14E-06    5.33E-05    2.69E-06    1.32E-05    3.59E-06    3.43E-06    1.76E-04    5.63E-05    9.50E-05    8.13E-06    4.06E-06    3.95E-06    1.50E-05    3.55E-06 
3.12E-06    6.04E-06    3.96E-05    3.16E-06    8.78E-06    3.28E-06    3.20E-06    2.05E-04    4.29E-05    5.82E-05    7.08E-06    3.02E-06    2.94E-06    9.79E-06    2.92E-06 
3.68E-06    6.67E-06    4.15E-05    2.77E-06    1.01E-05    3.48E-06    3.34E-06    1.87E-04    5.13E-05    8.06E-05    1.06E-05    3.59E-06    3.66E-06    1.50E-05    3.30E-06 
5.53E-06    1.13E-05    5.70E-05    3.48E-06    1.47E-05    5.76E-06    5.61E-06    2.02E-04    7.24E-05    1.07E-04    1.22E-05    5.48E-06    5.92E-06    1.96E-05    5.17E-06 
5.11E-06    7.31E-06    5.11E-05    3.45E-06    1.40E-05    4.78E-06    4.76E-06    2.46E-04    6.82E-05    9.45E-05    1.03E-05    5.07E-06    5.29E-06    1.20E-05    4.61E-06 
5.64E-06    1.14E-05    4.97E-05    3.98E-06    1.66E-05    5.89E-06    5.66E-06    1.89E-04    7.36E-05    8.45E-05    1.25E-05    5.45E-06    5.29E-06    1.90E-05    5.11E-06 
3.27E-06    8.04E-06    4.06E-05    2.45E-06    1.29E-05    3.53E-06    3.55E-06    2.29E-04    6.09E-05    8.48E-05    1.02E-05    3.28E-06    3.74E-06    1.73E-05    3.51E-06 
3.56E-06    5.06E-06    5.19E-05    2.05E-06    1.49E-05    2.97E-06    2.88E-06    1.26E-04    2.75E-05    8.23E-05    6.94E-06    3.55E-06    2.90E-06    1.09E-05    3.02E-06 
4.81E-06    7.89E-06    4.01E-05    3.36E-06    1.67E-05    5.12E-06    5.00E-06    2.01E-04    5.87E-05    7.83E-05    6.75E-06    4.80E-06    4.38E-06    1.47E-05    4.79E-06 
3.51E-06    7.00E-06    3.81E-05    2.86E-06    1.15E-05    3.14E-06    3.05E-06    1.85E-04    5.92E-05    7.00E-05    8.66E-06    3.37E-06    3.38E-06    1.53E-05    3.12E-06 
4.09E-06    7.60E-06    4.27E-05    1.93E-06    1.63E-05    4.07E-06    4.02E-06    1.80E-04    4.47E-05    6.05E-05    6.95E-06    4.07E-06    3.65E-06    1.36E-05    4.00E-06 
3.31E-06    6.49E-06    7.91E-05    3.30E-06    1.70E-05    3.88E-06    4.01E-06    1.99E-04    4.52E-05    6.62E-05    6.55E-06    3.31E-06    3.11E-06    1.05E-05    3.34E-06 
                   
                   ",header=F)

colnames(xdata) = c("Ordinary least Reg","Least absolute Reg-BR","Least absolute Reg-IRLS","Quantile 0.25 Reg","Quantile 0.75 Reg","Huber Reg","MM-estimation Reg","PQSQ L0.01","PQSQ L0.1","PQSQ L0.5","PQSQ L1","PQSQ L2","PQSQ L1_5","PQsqlog","PQSQHuber")

我在 R 中使用了两个函数,它们都用于成对 T 检验,如下所示。

1-

library(tidyr)
long <- xdata %>% gather(Model,value)
pwc <- long %>% rstatix::pairwise_t_test(value~Model,pool.sd = FALSE,p.adjust.method = "bonferroni",paired = TRUE,alternative = "two.sided")

2-

stats::pairwise.t.test(long$value,long$Model,alternative = "two.sided")

普通最小 Reg AND PQSQ L2 在函数编号 1 中显着不同 (0.000715)。

然而,普通最小 Reg 和 PQSQ L2 在功能编号 2 中没有显着差异 (7.504406e-02)。

为什么会这样?我做错了什么吗?

解决方法

pairwise.t.test 仅提供调整后的 p 值,因此如果查看结果:

subset(pwc,group2 == "PQSQ L2" & group1 == "Ordinary least Reg")
# A tibble: 1 x 10
  .y.   group1     group2    n1    n2 statistic    df       p p.adj p.adj.signif
  <chr> <chr>      <chr>  <int> <int>     <dbl> <dbl>   <dbl> <dbl> <chr>       
1 value Ordinary … PQSQ …    30    30      3.79    29 7.15e-4 0.075 ns

我们使pairwise.t.test的结果很长:

pwt = stats::pairwise.t.test(long$value,long$Model,p.adjust.method = "bonferroni",pool.sd = FALSE,paired = TRUE,alternative = "two.sided")

pwt = data.frame(pwt$p.value) %>% tibble::rownames_to_column("id") %>% pivot_longer(-id) %>% filter(!is.na(value))  

subset(pwt,id == "PQSQ L2" & name == "Ordinary.least.Reg")
# A tibble: 1 x 3
  id      name                value
  <chr>   <chr>               <dbl>
1 PQSQ L2 Ordinary.least.Reg 0.0750

您可以看到这与 rstatix 结果中调整后的 p 值列匹配。由于您正在进行多重比较,因此您很可能应该只查看调整后的 p 值。