(すべて)p個のデータポイントを通る超平面に垂直な方向
質問
簡単な質問があります: R ^ pでp点(非共線)が与えられると、これらの点を通る超平面を見つけます(Rにすべてを入力するのを明確にするため):
p<-2
x<-matrix(rnorm(p^2),p,p)
b<-solve(crossprod(cbind(1,x[,-2])))%*%crossprod(cbind(1,x[,-2]),x[,2])
その後、最初のp点と同一直線上にないp + 1 ^番目の点が与えられると、bに垂直な方向を見つけます:
x2<-matrix(rnorm(p),p,1)
b2<-solve(c(-b[-1],1)%*%t(c(-b[-1],1))+x2%*%t(x2))%*%x2
つまり、b2はbに垂直でx2を通るp次元の超平面を定義します。 さて、私の質問は次のとおりです。
式は、このウィキペディアエントリの私の解釈(&quot; solve(A) &quot;はA ^ -1のRコマンドです)。なぜこれがp&gt; 2で機能しないのですか?私は何を間違えていますか?
PS:私はこの投稿を見ました(stakeoverflow edit:sorryでは複数のリンクを投稿できません)が、どういうわけか私を助けません。
事前に感謝、
i p&gt; 2の場合、Liuのソリューションの実装/理解に問題があります:
掃引行列のqr分解と超平面の方向の間の内積は0にならないのですか? (つまり、qrベクトルが超平面に垂直である場合)
i.e、p = 2の場合
c(-b[2:p],1)%*%c(a1)
0を返します。p&gt; 2の場合は返しません。
Victor Liuのソリューションを実装するための私の試みです。
a)R ^ pでp個の線形独立な観測値が与えられた場合:
p<-2;x<-matrix(rnorm(p^2),p,p);x
[,1] [,2]
[1,] -0.4634923 -0.2978151
[2,] 1.0284040 -0.3165424
b)行列にそれらを杭打ちし、最初の行を引きます:
a0<-sweep(x,2,x[1,],FUN="-");a0
[,1] [,2]
[1,] 0.000000 0.00000000
[2,] 1.491896 -0.01872726
c)行列a0のQR分解を実行します。ヌルスペース内のベクトルは、探している方向です:
qr(a0)
[,1] [,2]
[1,] -1.491896 0.01872726
[2,] 1.000000 0.00000000
確かに。この方向は、ウィキペディアの式を適用した場合と同じです(x2 =(0.4965321,0.6373157)を使用):
[,1]
[1,] 2.04694853
[2,] -0.02569464
...高次元で機能するという利点があります。
最後にもう1つ質問があります。p&gt; 2の場合、他のp-1(つまり、(1,0))QRベクトルの意味は何ですか? -よろしくお願いします、
解決
p-1次元超平面は、法線ベクトルと平面が通過する点によって定義されます:
n.(x-x0) = 0
n
は長さpの法線ベクトル、 x0
は超平面が通過する点、。
は内積、方程式は、平面上の任意のポイント x
を満たす必要があります。これを次のように書くこともできます
n.x = p
where p = n.x0
は単なる数字です。これは、(n、p)でパラメーター化された超平面のよりコンパクトな表現です。超平面を見つけるために、ポイントがx1、...、xpであるとします。
次のように、p-1行とp列で行列Aを形成します。 pの行はxi-x1で、すべてのi&gt; 1に対して行ベクトルとしてレイアウトされています(p-1のみです)。 p点が「共線」でない場合あなたが言うように(それらはアフィン独立である必要があります)、行列Aはランクp-1、1のヌル空間次元を持ちます。ヌル空間の1つのベクトルは超平面の法線ベクトルです。見つかったら(nと呼ぶ)、 p = n.x1
になります。マトリックスのヌルスペースを見つけるには、QR分解を使用できます(こちらをご覧ください) )。