【发布时间】:2018-04-17 08:48:09
【问题描述】:
我有一个数字向量,我想对向量中给定位置与其邻居之间的数字进行采样,以使两个最近的邻居影响最大,并且这种影响随着距离而减小从参考点。
例如,假设我有以下向量:
vec = c(15, 16, 18, 21, 24, 30, 31)
我的参考是位置 #2 的数字 16。我想对一个很有可能在 15 到 16 之间或(具有相同高概率)在 16 到 18 之间的数字进行采样。采样的数字可以是浮点数。然后,以递减的概率对 16 到 21 之间的数字进行采样,在 16 到 24 之间以更低的概率进行采样,以此类推。
参考的位置是事先不知道的,它可以在向量中的任何位置。
我尝试使用 runif 和 quantiles,但我不确定如何设计邻居的分数。
具体来说,我编写了以下函数,但我怀疑可能有更好/更有效的方法:
GenerateNumbers <- function(Ind,N){
dist <- 1/abs(Ind- 1:length(N))
dist <- dist[!is.infinite(dist)]
dist <- dist/sum(dist)
sum(dist) #sanity check --> 1
V = numeric(length(N) - 1)
for (i in 1:(length(N)-1)) {
V[i] = runif(1, N[i], N[i+1])
}
sample(V,1,prob = dist)
}
其中 Ind 是参考编号的位置(在本例中为 16),N 是向量。 “Dist”是一种权衡概率的方式,以便更近的邻居产生更大的影响。
非常感谢您对此代码的改进!
【问题讨论】:
-
你能扩展一下你目前尝试过的内容吗?
-
@Vincent Guillemot,请查看我的问题的编辑
-
我认为没有太多需要改进的地方,它看起来已经很好了。也许有人会有想法。您想改进什么?
-
另外,请参阅此处获取一些有用的信息stats.stackexchange.com/questions/171592/…