【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列の行列をCとする。
ランダムなデータを発生させる元のデータをR^{n}のベクトル\vec{v}=(v_1,v_2,\dots,v_n)^{t}と考えて、n行m列の行列V=(\vec{v},\vec{v},\dots,\vec{v})を考える。
行列Vに、6行n列の行列Aを左から掛けると次が成り立つ。これは成り立たないw

AV=C

このAを求めることを考える。
ここで、Aの要素はCの各列ベクトルを求める際に異なるので、この表現は不正確だが簡易的にこのままとする。

行列Vを作成する。
\vec{v}を各列とする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列の行列\vec{v}が求まった。
次に、この行列の一般化逆行列を求める。一般化逆行列は関数ginv()で求まる。

ginv(v.matrix)
> nrow(ginv(v.matrix))
[1] 868
> ncol(ginv(v.matrix))
[1] 43

これを右から6行868列のデータ行列random.tmatrixに右から掛けて行列Aを求める。

 A.matrix<-random.tmatrix %*% ginv(v.matrix)
> nrow(A.matrix)
[1] 6
> ncol(A.matrix)
[1] 43

さて、行列V(random.tmatrix)の第1列ベクトルを\vec{v}_1とする。
行列Aとの積A\vec{v}_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次元に変換する関数を無理やり考えていたが、その関数は求めることができない(たぶん)。

*1:6次元ベクトルを1つのデータセットと考えた時に、そのデータセットをm回観測したという意味。