【问题标题】:Contingency table and confidence intervals列联表和置信区间
【发布时间】:2014-10-16 22:45:58
【问题描述】:

让我通过一个简化的例子来描述我的问题

我有一个列联表

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)=4x3 表。现在,我想要一个新的 mxn 数组,其中第 ij 个入口是估计数据表 [i,j] 的置信区间(如果你愿意的话,是一个大小为 2 的列表)。下面是一个函数,它根据参数 a 计算估计 datatable[i,j] 的区间

CIfunction<-function(a,b) c(-1,1)+a*b

希望不要太乱,我想不出更简单的例子。

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

我已经找到了一种方法,分别在 i 上使用双循环。 j,但它确实闻起来像是可以使用 mapply/outer 等以优雅的方式完成的事情。

【问题讨论】:

  • 第一行缺少右括号。更好的解释会有所帮助。如果您有一个执行您期望的 for 循环,您应该编辑您的问题以包含它。 (那个“置信区间函数”看起来很随意,不清楚你打算传递什么参数。)

标签: r confidence-interval contingency


【解决方案1】:

下面的代码涉及一些技巧,因为它依赖于 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 而不存储行和列总计,并且仅在打印时计算它们。

【讨论】:

    【解决方案2】:

    感谢您的 cmets 和回答。我在将 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)
    }
    

    【讨论】:

      猜你喜欢
      • 2011-04-18
      • 2013-07-07
      • 2014-06-30
      • 2018-01-02
      • 2013-09-18
      • 2017-10-23
      • 2023-03-27
      • 1970-01-01
      • 2017-11-03
      相关资源
      最近更新 更多