2009-10-25 3 views
4

J'ai une question simple: donné p points (non colinéaires) dans R^pi trouver l'hyperplan passant par ces points (pour aider à clarifier je tape tout dans R):(toutes les) directions perpendiculaires à l'hyperplan à travers p points de données

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

alors, étant donné un p + 1^point e pas colinéaires avec les premiers p points, je trouve la direction perpendiculaire à b:

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

Autrement dit, b2 définit hyperplan ap dimensions perpendiculaires à b et en passant par x2. Maintenant, mes questions sont:

La formule vient de my interpretation of this wikipedia entry ("solve (A)" est la commande R pour A^-1). Pourquoi cela ne fonctionne pas pour p> 2? Qu'est-ce que je fais mal ? PS: J'ai vu ce post (sur stakeoverflow edit: désolé, je ne peux pas poster plus d'un lien) mais de toute façon cela ne m'aide pas.

Merci à l'avance,

i ont une implémentation problème/compréhension de la solution de Liu lorsque p> 2:

ne devrait pas le produit scalaire entre la décomposition qr de la matrice sweeped et la direction du hyperplan être 0? (À savoir si les vecteurs qr sont perpendiculaires à l'hyperplan)

i.e., lorsque p = 2 ce

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

donne 0. Lorsque p> 2, il ne le fait pas.


Voici ma tentative de mettre en œuvre la solution de Victor Liu.

a) étant donné les observations p linéairement indépendantes par 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) jeu entre eux dans une matrice et soustraire la première ligne:

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

c) effectuer une décomposition QR de la matrice a0. Le vecteur dans l'espace nul est la direction im recherchant:

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

En effet; cette direction est la même que celle donnée par application de la formule de wikipedia (en utilisant x2 = (0.4965321,0.6373157)):

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

... avec l'avantage que cela fonctionne dans des dimensions supérieures.

J'ai une dernière question: quelle est la signification de l'autre p-1 (c'est-à-dire (1,0) ici) vecteur QR lorsque p> 2? -Merci à l'avance,

+0

@Moderator: marqué comme "delete-me". PAS de contexte de programmation. –

+0

@Xencor: Il a été marqué comme géométrie. http://stackoverflow.com/questions/tagged/math @Modo: je l'ai étiqueté comme géométrie et vecteurs ... peut-être que je devrais ajouter une balise comme "math" ... je ne sais pas comment ajouter un tag au-dessus de "delete-me" – user189035

+0

@Xencor: serait heureux de fournir plus de "contexte de programmation" à condition d'expliquer ce que vous entendez exactement par là (tant que je peux garder le poste court et non obstrué). – user189035

Répondre

5

A p-1 hyperplan de dimension est définie par un vecteur normal et un point que le plan passe par:

n.(x-x0) = 0 

n est le vecteur normal de longueur p, est-x0 un point à travers lequel passe l'hyperplan, . est un produit scalaire, et l'équation doit être satisfaite pour tout point x sur le plan. On peut aussi écrire ce que

n.x = p 

p = n.x0 est juste un nombre. C'est une représentation plus compacte d'un hyperplan, qui est paramétré par (n, p). Pour trouver votre hyperplan, supposons que vos points soient x1, ..., xp. Formez une matrice A avec p-1 lignes et p colonnes comme suit. Les lignes de p sont xi-x1, disposées comme des lignes de vecteurs, pour tout i> 1 (il n'y en a que p-1). Si vos points p ne sont pas "colinéaires" comme vous le dites (ils doivent être affinément indépendants), alors la matrice A aura un rang p-1, et une dimension nulle de 1. Le vecteur unique dans l'espace nul est le vecteur normal du hyperplan. Une fois que vous le trouvez (appelez le n), puis p = n.x1. Pour trouver l'espace nul d'une matrice, vous pouvez utiliser une décomposition QR (voir here pour plus de détails).

+0

Merci. Je vais essayer de réécrire votre réponse sous forme de programmation à la fin de la question Donc a) d'autres personnes moins enclins mathématiquement peuvent l'utiliser b) vous vous assurez que c'est ce que vous vouliez dire. – user189035

+0

Merci, j'ai toujours un problème avec cette solution, quand p> 2. Le produit scalaire entre – user189035

Questions connexes