【发布时间】:2023-04-11 10:23:01
【问题描述】:
我有一个 R 矩阵,其尺寸约为 20,000,000 行 x 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
然后我可以在draws 上运行apply 来计算方差。
但是,对于我的真实数据维度,至少在 RAM 方面,这将变得令人望而却步。在 R 中是否有更有效的解决方案来解决这个问题?
【问题讨论】:
-
数据表包对你有用。不过,我对它还不够熟悉,无法提供解决方案。