寻找一种有效的方法来计算R中多项分布的方差

时间:2013-12-02 18:17:23

标签: r matrix

我有一个R矩阵,其尺寸为~20,000,000行乘1,000列。第一列表示计数,其余列表示这些计数的多项分布的概率。换句话说,在每一行中,第一列是 n k 列的其余部分是 k 类别的概率。另一点是矩阵是稀疏的,这意味着在每一行中都有许多值为0的列。

这是我创建的玩具矩阵:

mat=rbind(c(5,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1),c(2,0.2,0.2,0.2,0.2,0.2,0,0,0,0,0),c(22,0.4,0.6,0,0,0,0,0,0,0,0),c(5,0.5,0.2,0,0.1,0.2,0,0,0,0,0),c(4,0.4,0.15,0.15,0.15,0.15,0,0,0,0,0),c(10,0.6,0.1,0.1,0.1,0.1,0,0,0,0,0))

我想做的是获得每个类别的计数方差的经验测量。想到的自然事物是获取随机抽取,然后计算它们之间的差异。类似的东西:

draws = apply(mat,1,function(x) rmultinom(samples,x[1],x[2:ncol(mat)]))

samples=100000

然后我可以在apply上运行draws来计算差异。

但是,对于我的实际数据维度,这至少在RAM方面会变得过高。是否是一个更有效的解决方案来解决这个问题?

1 个答案:

答案 0 :(得分:1)

如果您需要的只是计数的方差,只需立即计算,而不是返回中间模拟绘图。

draws = apply(mat,1,function(x) var(rmultinom(samples,x[1],x[2:ncol(mat)])))