-
Notifications
You must be signed in to change notification settings - Fork 3
/
DEMO_JointEmbedding.m
95 lines (70 loc) · 3.28 KB
/
DEMO_JointEmbedding.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
load('data_demo.mat','REF_FC','FC_A','FC_B','ndata')
n_perc = 90;
n_grads = 3;
% average connectivity to span reference space
% map from stored triu vector back to matrix
TEMPLATE = zeros(ndata);
TEMPLATE(triu(true(ndata),1)) = REF_FC;
TEMPLATE = TEMPLATE + TEMPLATE' + eye(ndata);
n_template = size(TEMPLATE,1);
DATA_A = zeros(ndata);
DATA_A(triu(true(ndata),1)) = FC_A;
DATA_A = DATA_A + DATA_A' + eye(ndata);
DATA_B = zeros(ndata);
DATA_B(triu(true(ndata),1)) = FC_B;
DATA_B = DATA_B + DATA_B' + eye(ndata);
% -------------------------------------------------------------------------
fprintf('create embedding of reference\n')
W_template = generate_SingleMatrix(TEMPLATE,n_perc);
embed_template = doDiffusionMap(W_template,n_template,n_grads);
fprintf('joint embedding between reference and indiviuduals\n')
W_TA = generate_JointMatrix(TEMPLATE,DATA_A,n_perc);
embed_TA = doDiffusionMap(W_TA,n_template,n_grads);
W_TB = generate_JointMatrix(TEMPLATE,DATA_B,n_perc);
embed_TB = doDiffusionMap(W_TB,n_template,n_grads);
fprintf('indiviudual embeddings\n')
W_A = generate_SingleMatrix(DATA_A,n_perc);
embed_A = doDiffusionMap(W_A,0,n_grads);
W_B = generate_SingleMatrix(DATA_B,n_perc);
embed_B = doDiffusionMap(W_B,0,n_grads);
% -------------------------------------------------------------------------
fprintf('align embeddings to reference space\n')
X = embed_template.template;
fprintf('align joint embeddings via the group component\n')
Y = embed_TA.template;
[d,Z,tr] = procrustes(X,Y,'scaling',false);
embed_TA.template_to_template = Z;
embed_TA.individual_to_template = tr.b * embed_TA.individual * tr.T + repmat(tr.c(1,:),size(Y,1),1);
Y = embed_TB.template;
[d,Z,tr] = procrustes(X,Y,'scaling',false);
embed_TB.template_to_template = Z;
embed_TB.individual_to_template = tr.b * embed_TB.individual * tr.T + repmat(tr.c(1,:),size(Y,1),1);
fprintf('align individual embeddings directly\n')
Y = embed_A.individual;
[d,Z,tr] = procrustes(X,Y,'scaling',false);
embed_A.individual_to_template = Z;
Y = embed_B.individual;
[d,Z,tr] = procrustes(X,Y,'scaling',false);
embed_B.individual_to_template = Z;
% -------------------------------------------------------------------------
fprintf('- visualize\n')
cm = lines(4);
fig = figure('Visible','on','Units','Normalized','Position',[.1 .1 .6 .4]);
subplot(1,2,1); hold on;
plot(embed_template.template(:,1),embed_template.template(:,2),'k.')
plot(embed_TA.individual_to_template(:,1),embed_TA.individual_to_template(:,2),'.')
plot(embed_TB.individual_to_template(:,1),embed_TB.individual_to_template(:,2),'.')
xlabel('Component 1'); ylabel('Component 2'); zlabel('Component 3');
legend({'REFERENCE','DATA-A','DATA-B'},'location','best')
legend boxoff
title('JOINT EMBEDDING')
subplot(1,2,2); hold on;
plot(embed_template.template(:,1),embed_template.template(:,2),'k.')
plot(embed_A.individual_to_template(:,1),embed_A.individual_to_template(:,2),'.')
plot(embed_B.individual_to_template(:,1),embed_B.individual_to_template(:,2),'.')
xlabel('Component 1'); ylabel('Component 2'); zlabel('Component 3');
legend({'REFERENCE','DATA-A','DATA-B'},'location','best')
legend boxoff
title('INDIVIDUAL EMBEDDING')
% -------------------------------------------------------------------------
return;