tags:

views:

226

answers:

1

Hi people,

I have a simple question: given p points (non-collinear) in R^p i find the hyperplane passing by these points (to help clarify i type everything in R):

p<-2
x<-matrix(rnorm(p^2),p,p)
b<-solve(crossprod(cbind(1,x[,-2])))%*%crossprod(cbind(1,x[,-2]),x[,2])

then, given a p+1^th points not collinear with first p points, i find the direction perpendicular to b:

x2<-matrix(rnorm(p),p,1)
b2<-solve(c(-b[-1],1)%*%t(c(-b[-1],1))+x2%*%t(x2))%*%x2

That is, b2 defines a p dimensional hyperplane perpendicular to b and passing by x2. Now, my questions are:

The formula comes from my interpretation of this wikipedia entry ("solve(A)" is the R command for A^-1). Why this doesn't work for p>2 ? What am i doing wrong ?

PS: I have seen this post (on stakeoverflow edit:sorry cannot post more than one link) but somehow it doesn't help me.

Thanks in advance,

i have a problem implementation/understanding of Liu's solution when p>2:

shouldn't the dot product between the qr decomposition of the sweeped matrix and the direction of the hyperplane be 0 ? (i.e. if the qr vectors are perpendicular to the hyperplane)

i.e, when p=2 this

c(-b[2:p],1)%*%c(a1)

gives 0. When p>2 it does not.


Here is my attempt to implement Victor Liu's solution.

a) given p linearly independent observations in R^p:

p<-2;x<-matrix(rnorm(p^2),p,p);x
      [,1]       [,2]
[1,] -0.4634923 -0.2978151
[2,]  1.0284040 -0.3165424

b) stake them in a matrix and subtract the first row:

a0<-sweep(x,2,x[1,],FUN="-");a0
        [,1]        [,2]
[1,] 0.000000  0.00000000
[2,] 1.491896 -0.01872726

c) perform a QR decomposition of the matrix a0. The vector in the nullspace is the direction im looking for:

qr(a0)
          [,1]       [,2]
[1,] -1.491896 0.01872726
[2,]  1.000000 0.00000000

Indeed; this direction is the same as the one given by application of the formula from wikipedia (using x2=(0.4965321,0.6373157)):

       [,1]
[1,]  2.04694853
[2,] -0.02569464

...with the advantage that it works in higher dimensions.

I have one last question: what is the meaning of the other p-1 (i.e. (1,0) here) QR vector when p>2 ? -thanks in advance,

+4  A: 

A p-1 dimensional hyperplane is defined by a normal vector and a point that the plane passes through:

n.(x-x0) = 0

where n is the normal vector of length p, x0 is a point through which the hyperplane passes, . is a dot product, and the equation must be satisfied for any point x on the plane. We can also write this as

n.x = p

where p = n.x0 is just a number. This is a more compact representation of a hyperplane, which is parameterized by (n,p). To find your hyperplane, suppose your points are x1, ..., xp. Form a matrix A with p-1 rows and p columns as follows. The rows of p are xi-x1, laid out as rows vectors, for all i>1 (there are only p-1 of them). If your p points are not "collinear" as you say (they need to be affinely independent), then matrix A will have rank p-1, and a nullspace dimension of 1. The one vector in the nullspace is the normal vector of the hyperplane. Once you find it (call it n), then p = n.x1. In order to find the nullspace of a matrix, you can use a QR decomposition (see here for details).

Victor Liu
Thank you. i will try to rewrite your answer in programing form at the end of the question So a) other people less mathematically enclined can use it b) you make sure its what you meant.
Thanks, i still have a problem with this solution, when p>2.The dot product between