gpt4 book ai didi

r - 根据 2 个条件从采样创建向量

转载 作者:行者123 更新时间:2023-12-02 00:21:24 25 4
gpt4 key购买 nike

我想从向量中采样值 s<-0:1440创建矢量 u使sum(u)=xlength(u)<k , 对于给定的 kx .显然k*max(s)>sum(u) .

有没有办法蛮力模拟无数这样的u向量?我想避免弄乱概率分布(用于采样),我不在乎是否有一些 u向量将被丢弃。

编辑:关于 P Lapointe 对 length(u) 的好评.重要的是 length(u)不应固定( length(u)<k ),以便向量 u是可变长度的。另一种方法是修复 length(u)=k ,但该算法应该能够在 u 向量中随机插入(模拟)零。这将导致通过添加零,sum(u)保持不变,但 length(u)增加一(直到 length(u)=k )。零点随机出现很重要(不仅仅是在模拟向量的末尾,只是为了满足 length(u)=k )

最佳答案

好的,这是一个可以回答您问题的算法。基本上,我们正在做两个随机样本。第一个找到满足length(u)<k的k约束。使用那个 k,我们然后使用另一个样本来找到 k-1数字。这叫做initial在算法中。当我们找到样本时 k-1低于 x ,所需的总和,我们加上 x-sum(initial) 的差值来完成这个系列。

#Inputs
x <-2500 # desired sum
s1<-0:min(1440,x) #universe
max.k <-10

k <-sample(3:(max.k-1),1) #length(u)<k, starts at 3 because low k can be problematic
#with current inputs
initial <-x+1 #deliberately above limit to initialize the while
u <-s1+1 #deliberately above limit to initialize the while

while (sum(initial)>x | max(u)>max(s1)) {
initial <-sample(s1,k-1,replace=TRUE) #Find k-1 samples
u <-c(initial,x-sum(initial)) #add number that makes sum == x
}
#example
> k
[1] 4
> x
[1] 2500
> u
[1] 282 1337 876 5
> sum(u)
[1] 2500

另外,如果您有一个大 max.k ,添加一个概率向量可能是一件好事,为样本中的低数字提供更多概率。否则,在当前示例中,如果您有多个大于 1000 的数字,则很难得到 sum==2500。
prob1 <-1/((s1+1)*max.k ) #gives more probality to low numbers

while (sum(initial)>x | max(u)>max(s1)) {
initial <-sample(s1,k-1,replace=TRUE,prob=prob1) #Find k-1 samples
u <-c(initial,x-sum(initial)) #add number that makes sum == x
}

关于r - 根据 2 个条件从采样创建向量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10775017/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com