从遵循正态分布但具有新均值的数据生成样本

时间:2019-06-16 13:47:05

标签: r random normal-distribution

我有一个数字向量

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

基本上,我想从x中随机抽取2000个数字,以使该样本的均值更低。

关键是我不想生成新的随机数,而只是从x中采样而无需替换,因此我得到了一个均值不同的子集。

有人可以帮助我吗?

谢谢!

3 个答案:

答案 0 :(得分:2)

此方法并不是真正的“随机” ,因为它仅从小于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 :(得分:1)

如何进行拒绝采样,即从向量中采样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

reprex package(v0.3.0)于2019-06-18创建

这应该相当快,因为​​新均值可能(大约)比旧均值更大或更小。

答案 2 :(得分:0)

示例随机化正态分布

x= rnorm(8334,1.45,0.355)

选择2000个样本

y= sample(x,2000)

将y均值降低0.5

y=y-05

将y的标准差提高1.5

y= y*1.5

现在,标准差和Y的平均值将约为

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

希望这是您正在寻找的答案