【问题标题】:Fisher's exact test on rows in data frame - RFisher对数据框中行的精确检验 - R
【发布时间】:2018-10-12 17:27:16
【问题描述】:

我有一个包含 n 行的数据框,如下所示(一些额外的列包含未列出的其他信息):

           R1counti    R1counto     R2counti    R2counto    R1    R2
sample1    100         100          1000        1000        1     1
smaple2    50          100          50           50         0.5   1

对于每一行,我想进行 Fisher 精确检验,以确定 R1 比率是否与 R2 比率显着不同(最终得到调整后的 p-val)

所需的输出(计数列仍包含在输出中):

           R1    R2      pval
 sample1   1     1       1
 sample2   0.5   1       0.05

我想我可以这样做:

dataframe$p-val <- with(dataframe, p-val <- fisher.test(R1, R2, alternative= "two.sided"))

但我得到一个错误:

FEXACT error 40.
Out of workspace.

也许我没有正确处理这种情况。有什么建议吗?建议?我可以进行这样的渔民测试吗?

【问题讨论】:

  • 看看?fisher.test,它期望计数而不是预先计算的比率。比率本身并不能提供足够的信息来运行 Fisher 的精确检验,因为它们不能传达样本量。 2/4 = 0.5 的比率和 500/1000 = 0.5 的比率之间存在很大差异。
  • @Gregor 我在文件中也有 R1 和 R2 的计数数据。我只是不确定如何使用此数据框执行测试。
  • 进行了编辑以显示帖子中的计数

标签: r statistics


【解决方案1】:

您需要为数据集的每一行构建一个矩阵(即 2 x 2 列联表)并将该矩阵传递给 fisher.test 命令。

df <- read.table(text="
          R1counti    R1counto     R2counti    R2counto    R1    R2
sample1    100         100          1000        1000        1     1
sample2    50          100          50           50         0.5   1
", header=T, row.names=1)


apply(df, 1, 
      function(x) {
          tbl <- matrix(as.numeric(x[1:4]), ncol=2, byrow=T)
          fisher.test(tbl, alternative="two.sided")$p.value
      })

#    sample1    sample2 
# 1.00000000 0.01209383

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-11
    • 2017-07-29
    • 1970-01-01
    • 1970-01-01
    • 2023-03-22
    • 2021-05-18
    • 1970-01-01
    相关资源
    最近更新 更多