Tell me more ×
Cross Validated is a question and answer site for statisticians, data analysts, data miners and data visualization experts. It's 100% free, no registration required.

I would like to run a 1000 simulations of $X-Y$ where $X$ is the average of 100 random observations with mean of 69.5 and SD 2.9 and $Y$ is the average of 100 random observations with mean of 63.9 and SD 2.7.

I did the following:

x <- rnorm(100, 69.5, 2.9)
y <- rnorm(100, 63.9, 2.7)

And now I would like to somehow run a 1000 simulations of $X-Y$.

share|improve this question

3 Answers

up vote 11 down vote accepted

Let's go for the one-line solution:

replicate(1000, mean(rnorm(100, 69.5, 2.9)) - mean(rnorm(100, 63.9, 2.7)))
share|improve this answer
Yes, your solution is clearly more aesthetic than mine (+1). I just wanted to keep it simple ;-) – ocram Nov 10 '11 at 11:00
sorry chi... not thinking in R... feel free to roll that back. – John Nov 10 '11 at 15:18
Much clean R code, thanks @John. – chl Nov 10 '11 at 16:12
yes, it looks better but now '-' is replicated instead of vectorized... I suppose the performance shouldn't matter much... you're welcome? :) – John Nov 10 '11 at 16:14
What about rnorm(1000,mean=69.5-63.9,sd=sqrt((2.9)^2/100+(2.7)^2/100)) ? – Xi'an Nov 11 '11 at 6:52
show 1 more comment

To say something about the math of it rather than the programming: it would be useful to think about whether you can actually avoid the repeated simulations altogether in this case by using elementary properties of the Gaussian normal distribution. In this toy example it doesn't matter, but in general it's vastly more efficient to exploit an analytic solution if it exists. In this case here, the code for the solution becomes much shorter than even chl's example.

Hint 1: What is the distribution of the average of 100 normal random variables with a mean of 69.5 and SD 2.9?

Hint 2: Apply hint 1 to the average of 1000 instantiations of random variable X - Y, for which the closed form is also elementary (if X and Y are normal).

share|improve this answer
1  
(+1) Those are good comments, indeed. (I was thinking in terms of bootstrap when replying, even if this is not the question nor did I resample the same dataset.) – chl Nov 10 '11 at 13:46

Do you mean something like that?

x <- numeric(1000)
y <- numeric(1000)
for(i in 1:1000)
{
  x[i] <- mean(rnorm(n=100, mean=69.5, sd=2.9))
  y[i] <- mean(rnorm(n=100, mean=63.9, sd=2.7))
}

My trial gives enter image description here

Of note, the normal distribution was used... but it was an arbitrary choice... Following this assumption, I've superimposed the density of $\bar{X}$ and that of $\bar{Y}$ on the histograms. Can you find these densities? In particular, they show that the simulations work pretty well :-)

share|improve this answer
i would like to substract y from x – Dbr Nov 10 '11 at 10:53
Oh, the minus sign was not clear (before @chl's edit). Well, this is a simple adaptation now.... – ocram Nov 10 '11 at 10:59
(+1) Keeping it simple has several merits, especially from a pedagogical point of view. – chl Nov 10 '11 at 12:05

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.