首页 文章

fisher使用dplyr :: mutate对数据框架进行测试

提问于
浏览
0

如何从R中的测试中获得测试统计数据,例如当使用所选列应用于整个数据框时,'fisher.test()' . 我知道如何手动完成,例如抓取p.value:

fisher.test(matrix(c(9,0,1,1),ncol=2))$p.value

得到:

[1] 0.1818182

我需要在一个数据框上得到p.value并从 fisher.test() 估计,并且看着this SE question我受到启发来制作这样的函数:

fisher <- function(a,b,c,d){
  data <- matrix(c(a,b,c,d),ncol=2)
  c(p = fisher.test(data)$p.value,
    OR = fisher.test(data)$estimate)
}

这也像:

fisher(9,0,1,1)[[1]]

并给我与上述相同 . 但是,如何将其用于data.frame,例如使用mutate添加名为'p'的列?

require(plyr)
require(dplyr)
data <- 
  data.frame(v1=c(9,10,2,2),
             v2=c(0,8,0,0),
             v3=c(1,1,0,9),
             v4=c(1,2,3,4))
data %>%
mutate(p=fisher(v1,v2,v3,v4)[[1]])

不起作用(它为所有行提供相同的值) . 我是否需要以某种方式'应用'或者可以用 dplyr::do 完成?

1 回答

  • 2

    像这样使用'hrwise()':

    fisher <- function(a,b,c,d){
      data <- matrix(c(a,b,c,d),ncol=2)
      c(p = fisher.test(data)$p.value,
        OR = fisher.test(data)$estimate)
    }
    data %>%
      rowwise()%>%
      mutate(p=fisher(v1,v2,v3,v4)[[1]],
             OR=fisher(v1,v2,v3,v4)[[2]])
    

    并且 - 从上面的数据 - 我们得到:

    v1 v2 v3 v4         p       OR
    1  9  0  1  1 0.1818182      Inf
    2 10  8  1  2 0.5864662 2.394164
    3  2  0  0  3 0.1000000      Inf
    4  2  0  9  4 1.0000000      Inf
    

相关问题