Мы могли бы использовать итерационный метод для достижения этого (вроде) случайным образом.
Давайте возьмем начальный вектор с 10000 элементами и дисперсией ровно 0,9:
set.seed(123)
vec <- rnorm(10000, 0, sqrt(0.9024591))
var(vec)
#> [1] 0.9
Теперь, если мы хотим случайным образом разбить вектор на подмножество, чтобы он имел дисперсию 0,85, мы можем выбрать значение случайным образом и проверить, падает ли дисперсия, когда мы его удаляем. Если нет, мы сохраняем его в нашем векторе и снова делаем выборку. Если дисперсия падает, мы удаляем элемент из вектора. Мы продолжаем повторять это до тех пор, пока дисперсия не упадет до 0,85:
v <- vec
while(var(v) > 0.85)
{
var_v <- var(v)
i <- sample(length(v), 1)
if(var(v[-i] < var_v)) v <- v[-1]
}
var(v)
#> [1] 0.8476715
length(v)
#> [1] 343
Мы могли бы приблизить это значение к 0,85, сделав резервную копию, когда дисперсия упадет ниже порога, и удалив любое отдельное значение, при котором дисперсия будет ближе всего к 0,85. Все сводится к тому, является ли случайность или близость к 0,85 вашим приоритетом
Создано 11.07.2020 с помощью пакета реплекс (v0.3.0)