【问题标题】:Making contingency table from from values given by table function根据表函数给出的值制作列联表
【发布时间】:2014-09-15 04:27:00
【问题描述】:

我有一个这样的向量:

> agg$RNAtype
 [1] "HnRn" "HyRy" "HnRn" "HyRn" "HnRn" "HnRn" "HnRn" "HnRn" "HnRy" "HnRn" "HnRy"
[12] "HnRn"

现在当我使用表函数时,它给出了以下内容:

> table(agg$RNAtype)

HnRn HnRy HyRn HyRy 
   8    2    1    1 

但我想制作一个 2x2 列联表(以矩阵的形式),其中第一行的值是 HnRn 和 HyRn。第二行将具有 HnRy 和 HyRy 的值。我该怎么做?

我最终计划进行费希尔精确检验和卡方检验。

【问题讨论】:

  • 参见例如?fisher.test 中的第一个示例和?chisq.test 中的第二个示例关于如何在矩阵中排列计数。

标签: r contingency


【解决方案1】:
vec <- scan(what="")
1: "HnRn" "HyRy" "HnRn" "HyRn" "HnRn" "HnRn" "HnRn" "HnRn" "HnRy" "HnRn" "HnRy"
12:  "HnRn"
13: 
Read 12 items

看起来您想对每个项目中的第二个和第四个字符进行交叉分类:

> table(substr(vec,4,4), substr(vec,2,2))

    n y
  n 8 1
  y 2 1

这有点玄乎,所以使用表格的标注功能来改进注释:

> tbl <- table(`4th`=substr(vec,4,4), `2nd`=substr(vec,2,2))
> tbl
   2nd
4th n y
  n 8 1
  y 2 1

表格对象适合输入fisher.test

> fisher.test(tbl)

    Fisher's Exact Test for Count Data

data:  tbl
p-value = 0.4545
alternative hypothesis: true odds ratio is not equal to 1
95 percent confidence interval:
   0.03405901 351.00812616
sample estimates:
odds ratio 
  3.463796 

【讨论】:

    【解决方案2】:

    我认为@BondedDust 的答案更好,但如果你只是想重新排列你拥有的表格,你大概可以这样做

    matrix(table(agg$RNAtype),nrow=2)
    

    (正如@Henrik 在上面的评论中指出的那样,这与?fisher.test?chisq.test 中的示例非常相似......)

    默认情况下,R 以“列优先”顺序构造矩阵,因此这应该以您想要的方式获得条目的顺序。

    【讨论】:

      猜你喜欢
      • 2019-07-17
      • 1970-01-01
      • 2016-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-02
      • 2015-11-11
      • 1970-01-01
      相关资源
      最近更新 更多