(todas las) direcciones perpendiculares al hiperplano a través de p puntos de datos

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

  •  06-07-2019
  •  | 
  •  

Pregunta

Tengo una pregunta simple: dados p puntos (no colineales) en R ^ p encuentro el hiperplano que pasa por estos puntos (para ayudar a aclarar, escribo todo en R):

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

entonces, dado un p + 1 ^ th puntos no colineales con los primeros p puntos, encuentro la dirección perpendicular a b:

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

Es decir, b2 define un hiperplano dimensional p perpendicular a b y que pasa por x2. Ahora, mis preguntas son:

La fórmula proviene de mi interpretación de esta entrada de wikipedia (" resolver (A) " es el comando R para A ^ -1). ¿Por qué esto no funciona para p > 2? ¿Qué estoy haciendo mal?

PD: He visto esta publicación (en la edición del desbordamiento de estaca: lo siento, no puedo publicar más de un enlace), pero de alguna manera no me ayuda.

Gracias de antemano,

Tengo un problema de implementación / comprensión de la solución de Liu cuando p > 2:

¿no debería ser 0 el producto escalar entre la descomposición qr de la matriz barrida y la dirección del hiperplano? (es decir, si los vectores qr son perpendiculares al hiperplano)

es decir, cuando p = 2 esto

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

da 0. Cuando p > 2 no lo hace.


Aquí está mi intento de implementar la solución de Victor Liu.

a) dadas p observaciones linealmente independientes en 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) replantearlos en una matriz y restar la primera fila:

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

c) realiza una descomposición QR de la matriz a0. El vector en el espacio nulo es la dirección que estoy buscando:

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

De hecho; esta dirección es la misma que la dada por la aplicación de la fórmula de wikipedia (usando x2 = (0.4965321,0.6373157)):

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

... con la ventaja de que funciona en dimensiones superiores.

Tengo una última pregunta: ¿cuál es el significado del otro vector QR p-1 (es decir, (1,0) aquí) cuando p > 2? -gracias de antemano,

¿Fue útil?

Solución

Un hiperplano dimensional p-1 se define por un vector normal y un punto por el que pasa el plano:

n.(x-x0) = 0

donde n es el vector normal de longitud p, x0 es un punto a través del cual pasa el hiperplano, . es un producto escalar, y la ecuación debe cumplirse para cualquier punto x en el plano. También podemos escribir esto como

n.x = p

donde p = n.x0 es solo un número. Esta es una representación más compacta de un hiperplano, que se parametriza por (n, p). Para encontrar su hiperplano, suponga que sus puntos son x1, ..., xp. Forme una matriz A con p-1 filas y p columnas de la siguiente manera. Las filas de p son xi-x1, establecidas como vectores de filas, para todos i > 1 (solo hay p-1 de ellos). Si sus puntos p no son "colineales" como usted dice (deben ser afines independientes), la matriz A tendrá un rango p-1 y una dimensión de espacio nulo de 1. El único vector en el espacio nulo es el vector normal del hiperplano. Una vez que lo encuentre (llámelo n), entonces p = n.x1 . Para encontrar el espacio nulo de una matriz, puede usar una descomposición QR (consulte aquí para más detalles).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top