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



>我有一个数字向量

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

本质上讲,我想从x中随机抽取 2000 个数字,以便该样本的平均值较低。

关键是我不想生成新的随机数,而只想从x中抽样,而不进行替换,这样我就会得到一个具有不同平均值的子集。

谁能帮我?

谢谢!

此方法不是真正的"随机">,因为它仅从小于 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

如何进行拒绝采样,即从向量中采样 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 由 reprex 软件包 (v0.3.0(

这应该非常快,因为新均值(大致(均匀地比旧均值大或小。

随机化示例的正态分布

x= rnorm(8334,1.45,0.355)

选择 2000 num 的样本

y= sample(x,2000)

将 y 平均值降低 0.5

y=y-05

将 Y 的标清提高 1.5

y= y*1.5

现在 sd 和 Y 的平均值大约

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

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

最新更新