Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.
The problem with puzzles is that you keep it in your head for days, until you find an answer. Or at least some ideas about a possible answer. This is what happened to me a few weeks ago, when a colleague of mine asked me the following question : Consider
Again, I could not find a simple answer. But there is a simple technique.
- Draw
points on the unit sphere, which simply means generate random variables - Try to find
such that, after a rotation (with angle ) all the points lie in the upper part (the North hemisphere, for instance)
So the question here is simply : is
equal to
n=5 Theta=runif(n)*2*pi top=Vectorize(function(theta) sum(sin(Theta+theta)>=0))
So a simple strategy can be to compute those values on a finite grid, and to check if, for some
max(top(seq(0,2*pi,length=6001)))==n
Hence, with the following sample, all the points cannot be on a common hemisphere
set.seed(2) Theta=runif(5)*2*pi
while, for another sample of points, it was possible
set.seed(7) Theta=runif(5)*2*pi
With this simple code, we get get the probability, but only in dimension 2 (so far)
SIM=Vectorize(function(n) simul(n,1000)) plot(3:10,SIM(3:10))
In
But there is a simple technique.
- Draw
points on the unit sphere, which simply means generate random variables and - Try to find
and such that, after a rotation (with angles and ) all the points lie in some given part (say )
As mentioned by Dominque, using this technique, points are not uniformly distributed on the sphere. Instead we can use
- Draw
points on points from a trivaraite Gaussian distribution, and normalize it - Get the polar coordinates, and try to find
and such that, after a “rotation” (with angles and ) all the points lie in some given part (say )
So the question here is simply : is
(I am not sure about the set of angles for the rotations, so I tried a larger one, just in case). Again, it would be complex, or more complex than before, because we need here a joint grid. For instance
MZ=matrix(rnorm(n*3),n,3) d=apply(MZ,1,function(z) sqrt(sum(z^2))) X=MZ[,1]/d; Y=MZ[,2]/d; Z=MZ[,3]/d; Theta=acos(Z) Phi=acos(X/sqrt(X^2+Y^2))*(Y>=0)+(2*pi-acos(X/sqrt(X^2+Y^2)))*(Y<0) top=function(theta,phi) sum(sin(Theta+theta)*cos(Phi+phi)>=0) TOP=mapply(top,rep(seq(0,2*pi,length=1001),1001),rep(seq(-pi,pi,length=1001),each=1001)) max(TOP)==n
As we can see with the red curve, there might be some problems here. Because, (as mention in kmath327), this problem was solved in any dimension in Wendel (1962) with the following simple expression : in dimension
p=function(d,n) .5^(n-1) * sum(choose(n-1,0:(d-1)))
Note that Leonard Savage proved (a few years before) that
(which can be obtained easily actually). I do not see what’s wrong with my Monte Carlo simulations… and if anyone has a nice Monte Carlo strategy to get that probability, I’d be glad to hear it !
R-bloggers.com offers daily e-mail updates about R news and tutorials about learning R and many other topics. Click here if you're looking to post or find an R/data-science job.
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.