这是表格格式。 每行包含意外事件2X2表的信息。 我想通过费希尔的精确检验来计算比值比和相应的p值。 之后,需要将优势比和p值作为表中的另一列添加。
输入表如下所示:
A B C D
1 1 10 77
2 6 9 72
例如:
A|C
---
B|D
等于
1|10
----
1|77
输出表应该是这样的:
A B C D OR 95CI Pvalue
1 1 10 77 7.39 0.09;608.46 0.23
2 6 9 72 2.62 0.23;17.97 0.26
答案 0 :(得分:1)
好好利用这个:创建新列并获取行数,以便在每一行上应用function(x)
。
df <- data.frame(A = 1:2, B=c(1,6), C=c(10,9), D=c(77,72))
df$OR <- NA
df$`95CI` <- NA
df$Palue <- NA
N <- nrow(df)
sapply(1:N, function(x) {
tmp <- fisher.test(matrix(unlist(df[x, 1:4]), nrow=2, ncol=2, byrow=T))
df[x,5:7] <<- c(round(tmp$estimate, 2), paste(round(tmp$conf.int,2), collapse = ";"), round(tmp$p.value, 2))
})
> df
A B C D OR 95CI Palue
1 1 1 10 77 7.39 0.09;608.46 0.23
2 2 6 9 72 2.63 0.23;17.97 0.26
答案 1 :(得分:1)
循环遍历行,转换为矩阵,将其传递给fisher,然后美化输出:
cbind(df1,
do.call(rbind,
apply(df1, 1, function(i) {
ft <- fisher.test(matrix(i, nrow = 2, ncol = 2))
cbind.data.frame(
OR = round(ft$estimate, 2),
CI95 = paste(round(ft$conf[1], 2),
round(ft$conf[2], 2), sep = ";"),
Pvalue = ft$p.value)
}))
)
# A B C D OR CI95 Pvalue
# odds ratio 1 1 10 77 7.39 0.09;608.46 0.2331461
# odds ratio1 2 6 9 72 2.63 0.23;17.97 0.2565293