【问题标题】:2-sample independent t-test where each of two columns is in different data frame2 样本独立 t 检验,其中两列中的每一列都在不同的数据框中
【发布时间】:2021-07-04 19:43:57
【问题描述】:

我需要运行 2 个样本的独立 t 检验,比较 Column1 和 Column2。但是 Column1 在 DataframeA 中,而 Column2 在 DataframeB 中。我该怎么做?

以防万一(请随意忽略):我是一个真正的初学者。到目前为止,我对 R 的体验仅限于通过执行以下操作在同一数据框中运行 2 个样本匹配的 t 检验:

t.test(response ~ Column1, 
data = (Dataframe1 %>% 
gather(key = "Column1", value = "response", "Column1", "Column2")),
paired = TRUE)

【问题讨论】:

    标签: r t-test


    【解决方案1】:

    TL;DR


    t_test_result = t.test(DataframeA$Column1, DataframeB$Column2, paired=TRUE)

    说明


    如果数据是成对的,我假设两个数据帧将具有相同数量的观察值(相同的行数)。您可以通过nrow(DataframeA) == nrow(DataframeB) 进行检查。

    您可以将数据框的每一列视为一个向量(值的有序列表)。您使用t.test 的方式是使用公式(y~x),您实际上是在说:给定data 中指定的数据框,执行测试以评估变量均值差异的显着性responseColumn1 中的配对组之间。

    另一种思考方式是获取data 中的数据并将其分成两个向量:具有Column1 第一组观察值的向量和第二组观察值向量。然后,对于每个向量,计算均值和标准差,并应用适当的公式,得到 t 统计量,从而得到 p 值。

    因此,您可以分别提取这两个向量并将它们作为参数提供给t.test() 函数。我希望它对初学者足够友好^^否则请告诉我


    编辑:一些补充 (本来想在cmets里回复,结果发现没空间了嘿嘿)

    关于@Ashish 为将其变成Welch 测试所做的事情,我会说是设置var.equal = FALSEpaired 参数控制 t 检验是否在配对样本上运行,并且由于您的数据框的行数不相等,我怀疑观察结果不匹配。

    至于 Cohen 的 d 效应大小,you can check this stats exchange question,我从中复制代码:

    对于上下文,m1 和 m2 是组的平均值(您可以使用 n1 = mean(DataframeA$Column1) 获得),s1 和 s2 是标准差 (s2 = sd(DataframeB$Column2)),n1 和 n2 是样本大小 (n2 = length(DataframeB$Column2))

    lx <- n1- 1 # Number of observations in group 1
    ly <- n2- 1 # # Number of observations in group 1
    
    md  <- abs(m1-m2)        ## mean difference (numerator)
    csd <- lx * s1^2 + ly * s2^2
    csd <- csd/(lx + ly)
    csd <- sqrt(csd)                     ## common sd computation
    
    cd  <- md/csd                        ## cohen's d
    

    【讨论】:

    • 数据框实际上没有相同数量的观察值。但是它们的方差是相等的。所以我想使用学生的t检验,而不是韦尔奇的。关于如何做到这一点的任何建议? (当我将paired=TRUE 改为paired=FALSE 时,它会运行Welch t 检验,下面Ashish Baid 建议的方法也是如此。)否则,这将非常有用且信息丰富——谢谢!
    • 我还想根据 t 检验的结果计算 Cohen 的 d。有什么建议吗?
    • 我编辑了答案以包含您的新问题 ^^ 如果您将其标记为答案,让其他人知道它已被回答,将会很有帮助
    【解决方案2】:

    这应该适合你

    res = t.test(DataFrameA$Column1, DataFrameB$Column2, alternative = "two.sided", var.equal = FALSE)
    

    【讨论】:

    • 这与发布的其他答案有何不同?
    猜你喜欢
    • 2020-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-09
    • 1970-01-01
    • 1970-01-01
    • 2020-12-29
    • 2020-06-25
    相关资源
    最近更新 更多