1
function res=mrses_software(A,B,k,Niter,Ncycle,distmod,block)
18
error('As minimum two matrixes needed for MRSES');
21
error('Too much parameters');
24
sa=size(A);sb=size(B);
28
error('Features dimension mismatch');
33
%optki=zeros(Ncycle,k);
36
% mrses_cl(ctx, 1, block, A, B, k);
40
mdiff = mean_a - mean_b;
42
dA = (A - ones([nA,1]) * mean_a) / sqrt(nA);
43
dB = (B - ones([nB,1]) * mean_b) / sqrt(nB);
45
for icycle=0:block:(Ncycle-1)
46
block_size = min(block, Ncycle - icycle);
47
% SELECT k GENES {ki} FOR TEST AND EXCLUDE THEM FROM ALL GENES {ke}
51
tt=randperm(genes); % randomizing genes
53
ki(:,i)=tt(1:k); % selecting first k
54
ke(:,i)=tt(k+1:end); % the rest unuzed
57
cur_dist = multi_bmc(dA, dB, mdiff, ki, distmod);
59
% check_dist(i) = bmc(A(:,ki(:,i)),B(:,ki(:,i)), distmod);
61
% find(cur_dist ~= check_dist)
64
xki=ceil(rand(1,block_size)*k); % selecting random gen from selected
65
xke=ceil(rand(1,block_size)*(genes-k)); % selected random gen from non-selected
67
idx_i = sub2ind(size(ki), xki, 1:block_size);
68
idx_e = sub2ind(size(ke), xke, 1:block_size);
74
dist = multi_bmc(dA, dB, mdiff, ki, distmod);
76
% check_dist(i)=bmc(A(:,ki(:,i)),B(:,ki(:,i)),distmod); % compute distance between A and B with currently selected genes
78
%find(dist ~= check_dist)
79
% dist_diff = abs(dist - check_dist);
80
% allowed = abs(dist)/1000000;
81
% find ( dist_diff > allowed)
84
bad = find(dist < cur_dist);
92
cur_dist = max(dist, cur_dist);
94
optki(:,(icycle+1):(icycle+block_size))=ki; % save finally selected genes
98
optki=reshape(optki,1,[]);
99
[n,g]=hist(optki,1:genes);
101
res=flipud(sortrows(H'));
104
% DISTANCE CALCULATOR
105
% ifs are taking to much time, do a separate functions for each distance
106
function dist=multi_bmc(dA, dB, mean_diff, ki, distmod)
107
block_size = size(ki,2);
109
%ki(:,1) = [5,7,9,11,13];
119
%detc = prod(diag(L,0))^2;
128
% rcorr(i)=log((detc.*detc)./(det(c1).*det(c2)));
129
rcorr(i)=2.*log(detc./sqrt(det(c1).*det(c2)));
130
% rcorr(i)=2.*log(detc./sqrt(det(c1*c2)));
133
mdiff = mean_diff(ki(:,i));
134
rmahal(i)=(mdiff*pinv(c))*mdiff';
136
% rmahal(i)=(mdiff/c)*mdiff';
137
% rmahal(i)=((mdiff/L)/L')*mdiff';
138
% rmahal(i) = prod(mdiff/L)^2;
139
tmp = mean_diff(ki(:,i))/L;
140
rmahal(i) = tmp * tmp';
145
dist = rmahal./8 + rcorr./4;
152
function dist=bmc(x1,x2,distmod)
158
rcorr=2.*log(det(c)./sqrt(det(c1).*det(c2)));
164
rmahal=((m2-m1)/c)*(m2-m1)';
168
dist = rmahal./8+rcorr./4;
176
function c = cov1(x, m)
177
[rows, cols] = size(x);
181
nX = x - ones([rows,1]) * mean(x);
183
nX = x - ones([rows,1]) * m';