数组操作:计算3向表中图层的优势比

时间:2015-06-11 19:49:43

标签: r multidimensional-array

这是关于数组和数据帧操作和计算的问题 列联表中对数赔率模型的上下文。我发现的最接近的问题是How can i calculate odds ratio in many table,但我的更普遍。

我有一个表示3路频率表的数据帧,大小为5(litter)x 2(治疗)x 3(死亡)。 “Freq”是每个细胞的频率,死亡是反应变量。

Mice <-
structure(list(litter = c(7L, 7L, 8L, 8L, 9L, 9L, 10L, 10L, 11L, 
11L, 7L, 7L, 8L, 8L, 9L, 9L, 10L, 10L, 11L, 11L, 7L, 7L, 8L, 
8L, 9L, 9L, 10L, 10L, 11L, 11L), treatment = structure(c(1L, 
2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 
2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L), .Label = c("A", 
"B"), class = "factor"), deaths = structure(c(1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L), .Label = c("0", "1", 
"2+"), class = "factor"), Freq = c(58L, 75L, 49L, 58L, 33L, 45L, 
15L, 39L, 4L, 5L, 11L, 19L, 14L, 17L, 18L, 22L, 13L, 22L, 12L, 
15L, 5L, 7L, 10L, 8L, 15L, 10L, 15L, 18L, 17L, 8L)), .Names = c("litter", 
"treatment", "deaths", "Freq"), row.names = c(NA, 30L), class = "data.frame")

由此,我想计算最后一个变量(死亡)的相邻类别的对数赔率 并在具有因子垃圾(5),处理(2)和对比度(2)的数据框中具有此值,如下所述。

数据可以用xtabs()形式看到:

mice.tab <- xtabs(Freq ~ litter + treatment + deaths, data=Mice)
ftable(mice.tab)

                 deaths  0  1 2+
litter treatment                
7      A                58 11  5
       B                75 19  7
8      A                49 14 10
       B                58 17  8
9      A                33 18 15
       B                45 22 10
10     A                15 13 15
       B                39 22 18
11     A                 4 12 17
       B                 5 15  8
> 

由此,我想计算(相邻)对数赔率为0对1和1 vs.2 +死亡,这很容易 数组格式,

odds1 <- log(mice.tab[,,1]/mice.tab[,,2])  # contrast 0:1
odds2 <- log(mice.tab[,,2]/mice.tab[,,3])  # contrast 1:2+

odds1
      treatment
litter          A          B
    7   1.6625477  1.3730491
    8   1.2527630  1.2272297
    9   0.6061358  0.7156200
    10  0.1431008  0.5725192
    11 -1.0986123 -1.0986123
> 

但是,为了进行分析,我希望在数据框中包含这些因素,包括垃圾,处理和对比度 和一个包含odds1和odds2表中条目的'logodds',大小合适。

更一般地说,对于I x J x K表,最后一个因素是响应,我想要的结果 是IJ(K-1)行的数据框,在“logodds”列中具有相邻的对数几率,理想情况下,我喜欢 具有执行此操作的一般功能。

注意,如果T是ftable()所示的10 x 3频率矩阵,则计算基本上是

log(T) %*% matrix(c(1, -1, 0,
                    0,  1, -1))

然后重塑和标记。

任何人都可以帮忙吗?

0 个答案:

没有答案