# Generate random numbers

Hi All,

I have two known numbers and I want to simulate another two numbers so that the standard deviation of the 4 numbers is fixed. How can I do that in R?

Thanks!

Just because it's possible to calculate the `sd` of four numbers doesn't mean that one should.

``````set.seed(137)
my_two <- c(123,456)
the_four <- c(my_two,new_two)
sd(the_four)
#>  230.626
``````

Created on 2020-08-16 by the reprex package (v0.3.0)

Not sure there is a unique solution. You might be able to derive it analytically with additional constraints. And as technocrat points, it might not make sense to compute the sd on 4 points.

Anyway, you can do it by numerical optimization:

``````fn_to_minimize <- function(new_x, x1, x2, target_sd){
abs(sd(c(x1,x2,new_x,new_x)) - target_sd)
}

optim(c(1,2), fn_to_minimize, x1 = 1, x2 = 2, target_sd = 10)\$par
#  -11.92944  12.48387
sd(c(1, 2, -11.92944, 12.48387))
#  10
``````

See the documentation of `optim()` for how it works. Also note that it may be slow if you're trying to do that a lot of times.

2 Likes

This topic was automatically closed 21 days after the last reply. New replies are no longer allowed.

If you have a query related to it or one of the replies, start a new topic and refer back with a link.