Генерация выборок из данных после нормального распределения, но с новым средним - PullRequest
2 голосов
/ 16 июня 2019

У меня есть вектор чисел, который

set.seed(1)
x <- rnorm(8334, 1.456977, 0.3552899)
mean(x)
[1] 1.454307

По сути, я хочу случайным образом выбрать 2000 чисел из x, чтобы среднее значение этого образца было ниже.

Ключя не хочу генерировать новые случайные числа, а только выборку из x, без замены, так что я получаю подмножество с другим средним значением.

Кто-нибудь может мне помочь?

Спасибо!

Ответы [ 3 ]

2 голосов
/ 16 июня 2019

Этот метод не является истинным "случайным" , так как он выбирает только из значений, которые меньше mean(x).Дайте мне знать, если это достаточно хорошо для вас -

set.seed(1)

x <- rnorm(8334, 1.456977, 0.3552899)

mean(x)
[1] 1.454307

y <- sample(x, 2000, prob = x <= mean(x)) # x > mean(x) has 0 chance of getting sampled

all(y %in% x)
[1] TRUE

mean(y)
[1] 1.170856

Это практически то же самое, что и -

z <- sample(x[x <= mean(x)], 2000)

all(z %in% x)
[1] TRUE

mean(z)
[1] 1.172033

Кроме того, для значений 2000 самое низкое из возможных mean это-

mean(sort(x)[1:2000])
[1] 0.9847526

ОБНОВЛЕНИЕ -

Вот один способ получить случайную выборку с обеих сторон mean(x), хотя это произвольно, и я не знаю, если этобудет гарантировать выборочное значение меньше чем mean(x).-

z <- sample(x, 2000, prob = (x <= mean(x)) + 0.1)

mean(z)
[1] 1.225991

table(z <= mean(x))

FALSE  TRUE 
  202  1798
1 голос
/ 18 июня 2019

Как насчет выборочной выборки отклонения, то есть выборки 2000 чисел из вашего вектора, пока вы не выберете одну выборку, которая удовлетворяет требуемым свойствам?

set.seed(1)
x <- rnorm(8334, 1.456977, 0.3552899)
m_x <-mean(x)

y <- sample(x, 2000)
while(mean(y) >= m_x)
    y <- sample(x, 2000)

mean(y)
#> [1] 1.4477

Создано в 2019-06-18 пакетом представ. (v0.3.0)

Это должно быть довольно быстро, поскольку есть (приблизительно) даже шанс, что новое среднее значение будет больше или меньше старого.

0 голосов
/ 16 июня 2019

рандомизировать нормальное распределение для примера

x= rnorm(8334,1.45,0.355)

выберите образец 2000 чисел

y= sample(x,2000)

ниже у среднего на 0,5

y=y-05

увеличить у.д. на 1,5

y= y*1.5

Теперь SD и среднее значение Y будет около

mean(y)# ~0.9325603
sd(y)# ~0.5348885

надеюсь, что это ответ, который вы ищете

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...