我有一个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方面会变得过高。是否是一个更有效的解决方案来解决这个问题?
答案 0 :(得分:1)
如果您需要的只是计数的方差,只需立即计算,而不是返回中间模拟绘图。
draws = apply(mat,1,function(x) var(rmultinom(samples,x[1],x[2:ncol(mat)])))