使用 dplyr::mutate 对数据帧进行 Fisher 的测试统计
Posted
技术标签:
【中文标题】使用 dplyr::mutate 对数据帧进行 Fisher 的测试统计【英文标题】:fisher's test stat on data frame using dplyr::mutate 【发布时间】:2015-05-12 01:48:12 【问题描述】:如何从 R 中的测试中获取测试统计信息,例如'fisher.test()' 当使用选定的列应用于整个数据框时。我知道如何手动操作,例如获取 p.value:
fisher.test(matrix(c(9,0,1,1),ncol=2))$p.value
给予:
[1] 0.1818182
我需要在数据框上从 fisher.test()
获取 p.value 和估计值,然后看着 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
完成?
【问题讨论】:
您要对什么进行测试? v1 与 v2? v1 + v2 与 v3 + v4?所有组合? 我猜应该是 v1 + v2 vs. v3 + v4 【参考方案1】:像这样使用“rowwise()”:
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
【讨论】:
以上是关于使用 dplyr::mutate 对数据帧进行 Fisher 的测试统计的主要内容,如果未能解决你的问题,请参考以下文章
在具有包含数据帧的列表列的小标题中,如何使用自定义函数包装 mutate(foo = map2(...))?
使用dplyr :: mutate后,为什么给定的属性会消失?