Fisher对数据框中行的精确测试-R

时间:2018-10-12 17:27:16

标签: r statistics

我有一个类似于以下内容的n行数据框(某些额外的列包含未列出的其他信息):

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

对于每一行,我想进行一次费舍尔的精确测试,以确定R1比率是否与R2比率显着不同(并最终获得调整后的p值)

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

           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.

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

1 个答案:

答案 0 :(得分:3)

对于数据集的每一行,您需要构建一个矩阵(即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