Jonas Lindel&#248;v - 1 year ago 168
R Question

# Generate random numbers with fixed mean and sd

When generating random numbers in R using

`rnorm`
(or
`runif`
etc.), they seldom have the exact mean and SD as the distribution they are sampled from. Is there any simple one-or-two-liner that does this for me? As a preliminary solution, I've created this function but it seems like something that should be native to R or some package.

``````# Draw sample from normal distribution with guaranteed fixed mean and sd
rnorm_fixed = function(n, mu=0, sigma=1) {
x = rnorm(n)  # from standard normal distribution
x = sigma * x / sd(x)  # scale to desired SD
x = x - mean(x) + mu  # center around desired mean
return(x)
}
``````

To illustrate:

``````x = rnorm(n=20, mean=5, sd=10)
mean(x)  # is e.g. 6.813...
sd(x)  # is e.g. 10.222...

x = rnorm_fixed(n=20, mean=5, sd=10)
mean(x)  # is 5
sd(x)  # is 10
``````

The reason I want this is that I adjust my analysis on simulated data before applying it to real data. This is nice because with simulated data I know the exact properties (means, SDs etc.) and I avoid p-value inflation because I'm doing inferential statistics. I am asking if there exist anything simple like e.g.

``````rnorm(n=20, mean=5, sd=10, fixed=TRUE)
``````

``````rnorm2 <- function(n,mean,sd) { mean+sd*scale(rnorm(n)) }