【问题标题】:R Fisher's exact calculationR Fisher 的精确计算
【发布时间】:2016-12-01 05:57:43
【问题描述】:

这是表格格式。 每行包含列联 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

【问题讨论】:

    标签: r


    【解决方案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
    

    【讨论】:

      【解决方案2】:

      遍历行,转换为矩阵,传递给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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-07-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-09-17
        • 2021-11-11
        相关资源
        最近更新 更多