(toutes les) directions perpendiculaires à l'hyperplan par p points de données

StackOverflow https://stackoverflow.com/questions/1622419

  •  06-07-2019
  •  | 
  •  

Question

J'ai une question simple: étant donné les points p (non colinéaires) dans R ^ p, je trouve l'hyperplan qui passe par ces points (pour clarifier tout ce que je tape dans R):

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 ^ ème points non colinéaires aux 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

En d’autres termes, b2 définit un hyperplan de dimension p perpendiculaire à b et passant par x2. Maintenant, mes questions sont:

La formule provient de mon interprétation de cette entrée wikipedia (" resol (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 message (sur le programme de modification de bilan: désolé, je ne peux pas publier plus d'un lien), mais cela ne m'aide en quelque sorte.

Merci d'avance,

J'ai un problème de mise en œuvre / de compréhension de la solution de Liu lorsque p> 2:

Le produit scalaire entre la décomposition de la matrice balayée et la direction de l'hyperplan ne doit-il pas être égal à 0? (c.-à-d. si les vecteurs qr sont perpendiculaires à l'hyperplan)

c.-à-d., lorsque p = 2 cela

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

donne 0. Lorsque p> 2, ce n'est pas le cas.

Voici ma tentative d'implémenter la solution de Victor Liu.

a) étant donné p observations linéairement indépendantes dans 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) mettez-les dans une matrice et soustrayez 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) effectuez une décomposition QR de la matrice a0. Le vecteur dans l’espace nul est la direction recherchée:

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 l’application de la formule de wikipedia (utilisant x2 = (0.4965321,0.6373157)):

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

... avec l'avantage qu'il fonctionne dans des dimensions plus élevées.

J'ai une dernière question à poser: que signifie l'autre vecteur p-1 (c'est-à-dire (1,0) ici) QR lorsque p> 2? Merci d'avance,

Était-ce utile?

La solution

Un hyperplan p-1 dimensionnel est défini par un vecteur normal et un point traversé par le plan:

n.(x-x0) = 0

n est le vecteur normal de longueur p, x0 est un point par lequel passe l'hyperplan, . est un produit scalaire, et l'équation doit être satisfaite pour tout point x du plan. Nous pouvons aussi écrire ceci comme

n.x = p

p = n.x0 est simplement 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 rangées de p sont xi-x1, présentées sous la forme de vecteurs de rangées, pour tous les 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 le rang p-1 et la dimension nullspace égale à 1. Le vecteur figurant dans l'espace vide est le vecteur normal de l'hyperplan. Une fois que vous l'avez trouvé (appelez-le n), puis p = n.x1 . Afin de trouver le nullspace d'une matrice, vous pouvez utiliser une décomposition QR (voir ici pour plus de détails).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top