从遵循正态分布但具有新均值的数据生成样本
Generate samples from data following normal distribution but with new mean
我有一个数字向量
set.seed(1)
x <- rnorm(8334, 1.456977, 0.3552899)
mean(x)
[1] 1.454307
本质上,我想从 x
中随机抽取 2000 个数字,使该样本的平均值较低。
关键是我不想生成新的随机数,而是只从 x
中采样而不进行替换,这样我就得到了一个具有不同均值的子集。
谁能帮帮我?
谢谢!
为示例随机化正态分布
x= rnorm(8334,1.45,0.355)
选择一个 2000 nums 的样本
y= sample(x,2000)
将 y 均值降低 0.5
y=y-05
将 y 的 sd 增加 1.5
y= y*1.5
现在 Y 的 sd 和平均值约为
mean(y)# ~0.9325603
sd(y)# ~0.5348885
希望这是您正在寻找的答案
此方法并非真正的 "random",因为它仅从小于 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
由 reprex package (v0.3.0)
于 2019-06-18 创建
这应该相当快,因为新均值有(大致)均匀的机会大于或小于旧均值。
我有一个数字向量
set.seed(1)
x <- rnorm(8334, 1.456977, 0.3552899)
mean(x)
[1] 1.454307
本质上,我想从 x
中随机抽取 2000 个数字,使该样本的平均值较低。
关键是我不想生成新的随机数,而是只从 x
中采样而不进行替换,这样我就得到了一个具有不同均值的子集。
谁能帮帮我?
谢谢!
为示例随机化正态分布
x= rnorm(8334,1.45,0.355)
选择一个 2000 nums 的样本
y= sample(x,2000)
将 y 均值降低 0.5
y=y-05
将 y 的 sd 增加 1.5
y= y*1.5
现在 Y 的 sd 和平均值约为
mean(y)# ~0.9325603
sd(y)# ~0.5348885
希望这是您正在寻找的答案
此方法并非真正的 "random",因为它仅从小于 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
由 reprex package (v0.3.0)
于 2019-06-18 创建这应该相当快,因为新均值有(大致)均匀的机会大于或小于旧均值。