【R】ランダムなデータ分布と関数
「【R】ランダムなデータの分布をヒストグラムで調べる」で使用したデータを引き続き対象とする。
対象データは「m行6列」の行列に格納されているが、「6行m列」の行列として考えたいから転置する。ここでmは観測数*1である。
Rで行列Aの転置を求めるには関数t()を使用すればよい。
> random.tmatrix<-t(random.matrix)
元の行列random.matrixの行数および列数は、関数nrowおよび関数ncolを使用して次のように求まる。
> nrow(random.matrix) [1] 868 > ncol(random.matrix) [1] 6
転置行列random.tmatrixは次のように求まり、転置されていることが確認できる。
> nrow(random.tmatrix) [1] 6 > ncol(random.tmatrix) [1] 868
転置した6行m列の行列をとする。
ランダムなデータを発生させる元のデータをのベクトルと考えて、n行m列の行列を考える。
行列に、6行n列の行列を左から掛けると次が成り立つ。これは成り立たないw。
このを求めることを考える。
ここで、の要素はの各列ベクトルを求める際に異なるので、この表現は不正確だが簡易的にこのままとする。
行列を作成する。
を各列とするn行m列の行列である。観測数mを868回とすると、次のように求まる。
v.matrix<-cbind(v) for(i in 1:867){ v.matrix<-cbind(v.matrix,v) }
行数、列数を求める。
> nrow(v.matrix) [1] 43 > ncol(v.matrix) [1] 868
これで、43行868列の行列が求まった。
次に、この行列の一般化逆行列を求める。一般化逆行列は関数ginv()で求まる。
ginv(v.matrix) > nrow(ginv(v.matrix)) [1] 868 > ncol(ginv(v.matrix)) [1] 43
これを右から6行868列のデータ行列random.tmatrixに右から掛けて行列を求める。
A.matrix<-random.tmatrix %*% ginv(v.matrix) > nrow(A.matrix) [1] 6 > ncol(A.matrix) [1] 43
さて、行列(random.tmatrix)の第1列ベクトルをとする。
行列との積は次のように求まる。
> A.matrix %*% v [,1] one 6.498848 two 12.843318 three 18.755760 four 25.116359 five 31.516129 six 37.743088
あれ、なにか変だ。というところで、終わり。
→
43次元のベクトルを6次元に変換する関数を無理やり考えていたが、その関数は求めることができない(たぶん)。