Как выбрать случайное подмножество вектора numeri c, чтобы иметь определенную c дисперсию? - PullRequest
0 голосов
/ 11 июля 2020

У меня есть вектор чисел длины 10000. Общая дисперсия 0,90. Я хотел бы выбрать случайное подмножество этого вектора, которое может иметь любую длину, но должна иметь дисперсию 0,85. Конечно, я могу сделать это, отсортировав вектор в порядке возрастания и постепенно удаляя элементы с любого конца распределения, пока не получу желаемую дисперсию. Но это не будет случайный выбор. Я хотел бы выбрать людей случайным образом.

Обновление: как указал G5W, выбор подмножества для определения c дисперсии не является случайным. Я хотел бы знать, существует ли метод неслучайной выборки для выбора подмножества с определенной c дисперсией.

1 Ответ

3 голосов
/ 12 июля 2020

Мы могли бы использовать итерационный метод для достижения этого (вроде) случайным образом.

Давайте возьмем начальный вектор с 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)

...