Поскольку значения bin
равны либо 0, либо 1, для данного значения ges
мы действительно просто подсчитываем количество элементов в buys
, которые находятся в интервале [ges-10,ges+10]
. Визуально можно представить «скольжение» интервала [ges-10,ges+10]
, начинающегося с ges=min(buys)
и заканчивающегося ges=max(buys)
, и подсчет количества записей в buys
, находящихся в интервале, в качестве значения функции. В частности:
num_buys=function(x)
{
return(length(buys[buys>=x-10 & buys<=x+10]))
}
С этим мы можем использовать optimize
, чтобы найти максимум:
optimize(f=num_buys,interval=c(min(buys),max(buys)),maximum=TRUE)
Как пример:
> buys=rnorm(10000,mean=50,sd=10)
> summary(buys)
Min. 1st Qu. Median Mean 3rd Qu. Max.
11.38 43.22 50.01 50.06 56.93 92.76
> num_buys=function(x){return(length(buys[buys<=x+10 & buys>=x-10]))}
> optimize(f=num_buys,interval=c(min(buys),max(buys)),maximum=TRUE)
$maximum
[1] 50.16788
$objective
[1] 6808
Таким образом, в этом случае максимальное значение sum(bin)
будет равно 6808, и этот максимум наступит при ges=50.16788
. Конечно, это имеет смысл, так как около 68% значений должно быть в пределах 10 единиц от 50 (нормальное распределение и все такое). : D