列联表和置信区间

时间:2014-10-14 14:33:41

标签: r confidence-interval contingency

让我用简化的例子来描述我的问题

我有一张列联表

datatable<-array(c(1,2,3,4,5,6,dim=c(3,2))
datatable<-cbind(datatable,rowSums(datatable))
datatable<-rbind(datatable,colSums(datatable))

这里,m = 3,n = 2这是(m + 1)x(n + 1)= 4×3表。现在,我想要一个新的mxn数组,其中第i个入口是估计数据表[i,j]的置信区间(大小为2的列表,如果你愿意)。下面是一个函数,它根据参数a&lt; -datatable [i,j]和b&lt; -datatable [i,n + 1]

计算估计数据表[i,j]的间隔
CIfunction<-function(a,b) c(-1,1)+a*b

我希望它不会太乱,我想不出一个更容易的例子。

如何以优雅的方式创建这样的表格?在实际示例中,这是一个应该采用任意列联表并返回相应CI表的函数。

我已经找到了一种方法,在i resp上使用双循环。 j,但它真的闻起来像是可以用优雅的方式使用mapply / outer或者类似的东西。

2 个答案:

答案 0 :(得分:0)

下面的代码涉及一些技巧,因为它依赖于R如何回收向量(under what circumstances does R recycle?)。 arraymatrix个对象只是折叠向量(按列存储)。一旦理解了行为,就不难想出这样的技巧

datatable <- array (1:6, dim=c(3,2))
datatable <-cbind(datatable,rowSums(datatable))
datatable <-rbind(datatable,colSums(datatable))

# last column recycled as necessary
lower <- -datatable[1:3, 1:2] * datatable[1:3, 3]  
upper <- -lower
CIlist <- list(lower, upper)

但我确实建议您在没有行和列总计的情况下存储datatable,并仅在打印时计算它们。

答案 1 :(得分:0)

感谢您的意见和解答。我很容易将ilir提供的(优雅)方法概括为任意CI函数。我最后只是做了上面提到的双循环。我对上述问题的解决方案就像是

CItable<-function(datatable,CIfunction)
{
 m<-dim(datatable)[1]-1
 n<-dim(datatable)[2]-1

 CItable<-array(NA,dim=c(m,2*n))
 for(i in 1:m)
   {
    for(j in 1:n)
     {
      tempint<-CIfunction(datatable[i,j],datatable[i,n+1])
      CItable[i,2*j]<-tempint[2]
      CItable[i,2*j-1]<-tempint[1]
     }

   }
return(CItable)
}