使用一列内的数据进行非配对t检验

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用一列内的数据进行非配对t检验相关的知识,希望对你有一定的参考价值。

我想进行不成对的t检验,以检查在每个type类别中values是否在站点间不同。

所以我的问题是,intypes(AB或CD),values(valueA或valueB)是否不同于站点之间(A或B)?

这是我的数据的示例:

dat <- data.frame(
  "site" = c("A","B","B","A","A","B","B","A"), 
  "type" = c("AB","CD"), 
  "valueA" = c(13,-10,-5,18,-14,12,-17,19), 
  "valueB" = c(-3,20,15,-16,12,15,-11,14)
)
dat

site type valueA valueB
A   AB     13     -3
B   CD    -10     20
B   AB     -5     15
A   CD     18    -16
A   AB    -14     12
B   CD     12     15
B   AB    -17    -11
A   CD     19     14

我正在尝试进行四个unpaired t检验以检查:

  1. 如果为valueA类型AB,则站点A与站点B之间有所不同
  2. 如果为valueB类型AB,则站点A与站点B之间有所不同
  3. 如果为valueA Type CD,则站点A与站点B之间有所不同
  4. 如果为valueB类型CD,则站点A与站点B之间有所不同

为了运行未配对的t检验,我相信我需要重新安排我的数据,以便AB类型和CB类型以及站点A和站点B都为一列(而不是在类型或站点列内) 。

编辑:

在注释中使用建议的代码:

library(dplyr)
d %>% 
  group_by(site, type) %>% 
  summarise(pval = t.test(valueA, valueB)$p.value)

输出是这个:

site  type   pval
A     AB    0.784
A     CD    0.417
B     AB    0.492
B     CD    0.365

据我所知,这里的p值是给我valueA和valueB之差。

例如,我正在寻找:CD类型中valueA的站点A和站点B之间的差异。

因此,如果我想得正确,则t检验的输出应包含一列以表示类型,值A和值B。然后,p值用于表示站点之间的差异。

类似于此:

type  valueA  valueB
AB     0.365   0.784
CD     0.492   0.417

这有意义吗?

答案

我们可以执行group_by'站点','类型'并应用t.test

library(dplyr)
out <- dat %>% 
         group_by(site, type) %>% 
         summarise(pval = t.test(valueA, valueB)$p.value)

默认情况下,paired = FALSE中的t.test

上面的输出可以用pivot_wider整形为'宽'格式>

library(stringr)
library(tidyr)
out %>%
    ungroup %>%
    mutate(site = str_c('value', site)) %>% 
    pivot_wider(names_from = site, values_from = pval)
# A tibble: 2 x 3
#  type  valueA valueB
#  <fct>  <dbl>  <dbl>
#1 AB     0.784  0.492
#2 CD     0.417  0.365

如果我们要比较“ AB”和“ CD”之间的“值”列,则>

dat %>% 
   group_by(site) %>% 
   summarise_at(vars(starts_with('value')), 
          ~ t.test(.[type == 'AB'], .[type == 'CD'])$p.value)
# A tibble: 2 x 3
#  site  valueA valueB
#  <fct>  <dbl>  <dbl>
#1 A      0.393  0.784
#2 B      0.464  0.439

我想我明白您的要求。看看这是否适合您:

另一答案

我想我明白您的要求。看看这是否适合您:

以上是关于使用一列内的数据进行非配对t检验的主要内容,如果未能解决你的问题,请参考以下文章

SPSS中,进行配对样本T检验

如何用MATLAB的SurfStat工具箱对数据进行配对T检验

帮忙看下spss的KS检验正态分布和配对T检验结果

SPSS-非参数检验

配对t检验和成组t检验各适用于啥情况?

python构建配对t检验(Paired Student’s t-test)