【问题标题】:Applying t.test by factor按因子应用 t.test
【发布时间】:2019-01-19 12:53:24
【问题描述】:

我的数据如下所示:

Replicate    Group   Value
1            A       1.0
1            A       1.1
1            A       1.1
1            B       2.0
1            B       2.0
1            B       2.2
2            A       1.1
2            A       1.2
2            A       0.9
2            B       2.2
2            B       2.4

我想使用 t.test() 来获得 A 和 B 之间的均值差异、p 值以及每个单独复制的 95% CI。我怎样才能最轻松地做到这一点?

这是将上面的玩具示例放入数据框的代码:

df = data.frame("Replicate"=c(1,1,1,1,1,1,2,2,2,2,2), "Group"=c("A","A","A","B","B","B","A","A","A","B","B"), "Value"= c(1.0, 1.1, 1.1, 2.0, 2.0, 2.2, 1.1, 1.2, 0.9, 2.2, 2.4))

感谢您的帮助!

【问题讨论】:

    标签: r


    【解决方案1】:

    我不完全确定我理解您所说的“对于每个单独的副本”是什么意思。为了表征不同Groups 在Values 之间的均值差异,我们可以将t.test 中的formula 指定为

    ttest <- t.test(Value ~ Group, data = df)
    ttest
    #
    #Welch Two Sample t-test
    #
    #data:  Value by Group
    #t = -12.729, df = 6.4248, p-value = 8.52e-06
    #alternative hypothesis: true difference in means is not equal to 0
    #95 percent confidence interval:
    #-1.3001853 -0.8864814
    #sample estimates:
    #mean in group A mean in group B
    #  1.066667        2.160000
    

    95% CI 由下式给出

    ttest$conf.int
    #[1] -1.3001853 -0.8864814
    #attr(,"conf.level")
    #[1] 0.95
    

    再想一想,如果您真的想对来自Replicate 1 和 2 的测量值执行单独的 t 检验,我们可以 group_by Replicatenest 每个 Replicate 的数据,然后是 @987654333 @a t.test 到嵌套数据。然后我们可以从t.test per Replicate 中提取相关数量:

    library(tidyverse)
    df %>%
        group_by(Replicate) %>%
        nest() %>%
        mutate(ttest = map(data, ~t.test(Value ~ Group, .x))) %>%
        transmute(
            Replicate,
            diff = map_dbl(ttest, ~.x$estimate[1] - .x$estimate[2]),
            pval = map_dbl(ttest, ~.x$p.value),
            CI = map(ttest, ~data.frame(CI.low = .x$conf.int[1], CI.high = .x$conf.int[2]))) %>%
        unnest()
    ## A tibble: 2 x 5
    #  Replicate  diff     pval CI.low CI.high
    #      <dbl> <dbl>    <dbl>  <dbl>   <dbl>
    #1         1 -1.   0.000990  -1.24  -0.760
    #2         2 -1.23 0.00599   -1.72  -0.746
    

    【讨论】:

    • 这是第二个!谢谢!所有%&gt;%s 是什么意思?
    • 这真的很棒。
    • 不客气@BenS。; %&gt;% 是将左侧的值/输出传递给右侧的函数/表达式的 magrittr pipe operator
    猜你喜欢
    • 2019-03-02
    • 1970-01-01
    • 1970-01-01
    • 2023-04-03
    • 2020-08-19
    • 2021-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多