JADE 実行

jade.mで複素行列を扱うようなこと・・・Fourier変換やWavelet変換したデータか何かに使うんでしょうか? よくわかりません。 実数行列を扱うjadeR.mに絞って話を進めます。

jadeR.mはシンプルで
B=jadeR(X,m)
という関数です。Xに脳磁図データをいれ、mを独立成分の個数を指定します。 出力されるBは復元行列です。早速試してみます。
下記の変数があるとします。

megは脳磁図データで、timeは時間です。以下のようなグラフになります。

%% for topography
load('.../vv_lout');
W=120;x=vv_mag(:,2);y=vv_mag(:,3);
xlin=linspace(min(x),max(x),W);
ylin=linspace(min(y),max(y),W);
[X,Y]=meshgrid(xlin,ylin);
tic;B=jadeR(meg,8);toc

Fast ICAより速そうです。
IC=B*meg;
AA=pinv(B);
A=sum(AA.^2,1);
P=diag(A)*IC;
V=AA./(ones(size(AA,1),1)*A);
figure;set(gcf,'color',[1,1,1]);
set(gcf,'renderer','zbuffer');
nn=8;
for n=1:nn;...
subplot('position',[0,1-n/nn,0.2,1/nn]);...
z=(V(1:2:204,n).^2+V(2:2:204,n).^2).^0.5;...
Z=griddata(x,y,z,X,Y,'linear');...
h=surf(X,Y,Z);axis off;set(h,'edgecolor','none');...
axis tight;daspect([1,1,0.01]);view([0,90]);...
subplot('position',[0.25,1-n/nn+0.02,0.7,1/nn-0.06]);...
plot(time,P(n,:));axis tight;grid on;end;


jadeR.mのparameterは独立成分の個数mだけ。simpleでいいですね。 jadeR.m内部にゼロ平均、白色化の過程があるので、m以外いじるところはありません。

独立成分3・4を雑音として、除去します。
k=1:8;k([3,4])=[];
MEG=AA(:,k)*IC(k,:);
figure;plot(time,MEG,'k');axis tight;
set(gcf,'color',[1,1,1]);grid on;

波形がすっきり表示され、雑音が除去されています。
因みに
rank(MEG)
ans=6
でした。