如何选择组合总和服从特定分布的样本组合?
Posted
技术标签:
【中文标题】如何选择组合总和服从特定分布的样本组合?【英文标题】:How to select the combination of samples that sum of combination follows a specific distribution? 【发布时间】:2017-01-02 20:05:48 【问题描述】:我有两个 30 个样本数据集。
A1 <- c(368.4777, 387.9693, 403.7576, 417.4397, 429.7728, 441.1835, 451.9409, 462.2286, 472.1809, 481.9012, 491.4738, 500.9705, 510.4558, 519.9902, 529.6330, 539.4454, 549.4926, 559.8473, 570.5931, 581.8296, 593.6794, 606.2988, 619.8938, 634.7472, 651.2666, 670.0744, 692.1994, 719.5452, 756.3235, 815.7298)
B1 <- c(414.2523, 471.8087, 519.1119, 560.4502, 597.9043, 632.6668, 665.5000, 696.9308, 727.3477, 757.0533, 786.2953, 815.2867, 844.2194, 873.2745, 902.6306, 932.4719, 962.9959, 994.4228, 1027.0068, 1061.0519, 1096.9331, 1135.1297, 1176.2765, 1221.2488, 1271.3134, 1328.4178, 1395.8053, 1479.5340, 1593.1899, 1780.2717)
如果我想对两个分布求和,
A1+B1
会给我一个绿色的虚线密度图。
rowSums(expand.grid(A1, B1))
会给我蓝色实线密度图。 (30*30=900 种可能的组合)
但是,我想让 sum 的分布类似于红线 (Target
)。换句话说,我想从A1
和B1
中选择组合,使组合的总和遵循红线密度分布(每个值只能选择一次)。我该怎么做?
Target <- c(1691.60, 1041.01, 1581.92, 1392.43, 1806.88, 1788.24, 1838.67, 1953.35, 1253.21, 1791.36, 1644.61, 1425.05, 1218.66, 1596.36, 1305.67, 1031.98, 828.52, 1375.77, 1475.28, 1718.25)
【问题讨论】:
为什么绿色分布比蓝色宽很多? @SeverinPappadeux 因为它的计算方式类似于(A1 的最大值 + B1 的最大值)和(A1 的最小值 + B1 的最小值)。expand.grid
中应该存在相同的值(max+max 和 min+min),不是吗?为什么蓝线像他们不在这里一样被绘制?
@SeverinPappadeux 是的,你是对的。那是因为这些是使用不同带宽的密度图。如果我使用相同的bw
,密度图将类似于this。
好的,知道了!我没有得到的是你问题的最后一部分。这可能是不适定问题。例如,对于某些 bin,它无法完成(1 个事件的总和为 X,因此您无法将其删除,或者由于您的 quanta 太大而无法将某些应用添加到红色曲线)
【参考方案1】:
我不太了解您问题的最后一部分,因此可能需要调整答案。
如果您想对A1
和B1
的组合进行采样,那么您可以使用示例函数。所以
s1 = sample(A1) + sample(B1)
plot(density(s1))
这是没有替换的采样。如果要替换,只需在sample
函数中添加replace=TRUE
。
【讨论】:
@csfillespie 感谢您的编辑和回答!我的直觉是's1'的密度分布更接近蓝线,而不是红线。我们怎样才能使's1'类似于红线?? 是的。我尝试过这个。基本上,当我尝试时,您的方法会显示不同的结果,因为它是随机样本。但它仍然更像蓝线,而不是红线。 link> 你的方法是一条紫线。以上是关于如何选择组合总和服从特定分布的样本组合?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Spark .NET 中执行分布式组合(N 选择 K)?