【发布时间】:2015-02-16 17:07:37
【问题描述】:
我有一个 26 列的矩阵。每行的值总和为1:
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11]
[1,] 0.02105263 0.01052632 0.01052632 0.04210526 0.01052632 0.06315789 0.03157895 0.1789474 0.07368421 0.07368421 0.02105263
[2,] 0.00000000 0.01176471 0.01176471 0.00000000 0.01176471 0.18823529 0.09411765 0.1764706 0.15294118 0.07058824 0.01176471
[3,] 0.00000000 0.00000000 0.02941176 0.01470588 0.04411765 0.11764706 0.05882353 0.2058824 0.07352941 0.08823529 0.00000000
[,12] [,13] [,14] [,15] [,16] [,17] [,18] [,19] [,20] [,21] [,22]
[1,] 0.04210526 0.04210526 0.05263158 0 0.03157895 0.02105263 0.00000000 0.04210526 0.01052632 0.05263158 0.02105263
[2,] 0.00000000 0.01176471 0.00000000 0 0.03529412 0.01176471 0.04705882 0.04705882 0.02352941 0.01176471 0.00000000
[3,] 0.02941176 0.02941176 0.02941176 0 0.05882353 0.01470588 0.02941176 0.02941176 0.02941176 0.01470588 0.00000000
[,23] [,24] [,25] [,26]
[1,] 0.06315789 0.03157895 0.03157895 0.02105263
[2,] 0.05882353 0.02352941 0.00000000 0.00000000
[3,] 0.02941176 0.01470588 0.00000000 0.05882353
我想替换这些值以组成一些新数据。这意味着将一行中的每个值随机更改为 +- 5% 范围内的值,同时仍将行和加起来为 1。
因此,在第 2 列中,第 6 个值当前为 0.18,而在新数据中,它应该介于 0.171 和 0.189 之间(加上 5%)。
或者,列中的值应仅从正态分布中提取,但不应与原始值相差太大。对于像 0.18 这样的大值以及较小的值,可能更多。
如果值为 0,最好随机决定它应该保持在 0 还是增加 5% 或 10% 之间的范围(以 0.0001 之类的初始值作为初始值)。
有没有简单的方法可以做到这一点?
【问题讨论】:
标签: r random normal-distribution