Search code examples
rrandomnormal-distribution

Generate samples from data following normal distribution but with new mean


I have a vector of numbers that is

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

Essentially, I want to randomly sample 2000 numbers from x such that mean of this sample is lower.

The key is I don't want to generate new random numbers but only sample from x, without replacement, such that I get a subset with a different mean.

Can anyone help me?

Thanks!


Solution

  • How about doing rejection sampling, i.e. sampling 2000 numbers from your vector until you hit one sample that fulfills the desired properties?

    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
    

    Created on 2019-06-18 by the reprex package (v0.3.0)

    This should be quite fast since there is an (roughly) even chance for the new mean to be greater or smaller than the old one.