-
Notifications
You must be signed in to change notification settings - Fork 0
/
svd_on_mouse_genes_selection.m
106 lines (88 loc) · 2.65 KB
/
svd_on_mouse_genes_selection.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
96
97
98
99
100
101
102
103
104
105
106
%% Perform svd on mouse gene data
clear variables
close all
addpath('../bh-tsne');
%% Load data (currently for a single brain)
outdir = 'results_mouse_highConf_coronal_SVD/';
datadir = '/home/mvandegiessen/data/tSNE_ABA/AllenMouseBrain_coronal/';
expressionlevels = load([datadir 'expressionMatrix']);
ngenes = size(expressionlevels.expressionMatrix,2);
%% Load gene selection
selection = load([datadir 'highConfGenesInd_coronal']);
% Load gene coordinates
coordsdata = load([datadir 'voxels']);
[cx,cy,cz] = ind2sub([67 41 58],coordsdata.voxel.brain_idx);
coords = [cx cy cz];
%% Perform t-SNE
X = expressionlevels.expressionMatrix;
ss = 1;
X = X(1:ss:end,selection.highConfGenes_coronal);
X = X-repmat(mean(X),[size(X,1) 1]);
coords = coords(1:ss:end,:);
covX = X' * X;
[M, lambda] = eig(covX);
[~, ind] = sort(diag(lambda), 'descend');
% if initial_dims > size(M, 2)
% initial_dims = size(M, 2);
% end
M = M(:,ind);
mappedXc = X * M;
mappedX = mappedXc(:,1:3);
%% Save mapped data
save([outdir 'SVDMouseGenesSelectionMeanSub'],'X','mappedXc','mappedX','coords',...
'M','lambda');
%% Visualize mapped data
% Colorspace
crange = max(coords)-min(coords);
mincoords = min(coords);
nsamples = size(X,1);
%
figure(1)
clf
hold on
if size(mappedX,2) == 2
for snr = 1:nsamples
c = (coords(snr,:)-mincoords)./crange;
plot(mappedX(snr,1),mappedX(snr,2),'.','Color',c);
end
else
for snr = 1:nsamples
c = (coords(snr,:)-mincoords)./crange;
plot3(mappedX(snr,1),mappedX(snr,2),mappedX(snr,3),'.','Color',c);
end
view(3)
axis equal
end
saveas(1,[outdir 'SVDMouseGeneCoordsSelectionMeanSub']);
%% Visualize mapped data based on t-SNE coordinates
xrange = max(mappedX)-min(mappedX);
minx = min(mappedX);
figure(2)
clf
hold on
for snr = 1:nsamples
c = (mappedX(snr,:)-minx)./xrange;
cc = zeros(1,3);
cc(1:length(c)) = c;
plot3(coords(snr,1),coords(snr,2),coords(snr,3),'.','Color',cc);
end
view(3)
axis equal
saveas(2,[outdir 'SVDMouseGenesSelectionMeanSub']);
%% Image volume
isz = [67 41 58];
imgr = zeros(isz);
imgg = zeros(isz);
imgb = zeros(isz);
imgr(coordsdata.voxel.brain_idx) = (mappedX(:,1)-minx(1))./xrange(1);
imgg(coordsdata.voxel.brain_idx) = (mappedX(:,2)-minx(2))./xrange(2);
imgb(coordsdata.voxel.brain_idx) = (mappedX(:,3)-minx(3))./xrange(3);
save([outdir 'SVDMouseGeneVolumeSelectionMeanSub'],'imgr','imgg','imgb');
%% Image with all components
cimg = zeros([isz size(mappedXc,2)]);
for cnr = 1:size(mappedXc,2)
tmpimg = zeros(isz);
tmpimg(coordsdata.voxel.brain_idx) = mappedXc(:,cnr);
cimg(:,:,:,cnr) = tmpimg;
end
save([outdir 'SVDMouseGeneVolumeSelectionMeanSubAllcomponents'],'-v7.3','cimg');