Jonas Lindeløv - 6 months ago 51

R Question

When generating random numbers in R using

`rnorm`

`runif`

`# 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)`

Answer

Since you asked for a one-liner:

```
rnorm2 <- function(n,mean,sd) { mean+sd*scale(rnorm(n)) }
r <- rnorm2(100,4,1)
mean(r) ## 4
sd(r) ## 1
```