Added source Matlab code for reference
This commit is contained in:
parent
b8af977117
commit
b5d99903d2
186 changed files with 61405 additions and 1 deletions
254
matlab/graph/view_admixture.m
Normal file
254
matlab/graph/view_admixture.m
Normal file
|
|
@ -0,0 +1,254 @@
|
|||
function view_admixture(proportionsIt,npops,admixnpops,...
|
||||
popnames,partition,pvalue,source)
|
||||
|
||||
% Find the outlier individuals
|
||||
% removed_inds = find(~any(proportionsIt,2));
|
||||
removed_inds = logical(~any(proportionsIt,2));
|
||||
outliers = unique(partition(removed_inds));
|
||||
if ~isempty(outliers)
|
||||
fprintf('Outlier clusters: ');
|
||||
for i = 1:length(outliers)
|
||||
fprintf(['%s' blanks(2)], num2str(outliers(i)));
|
||||
end
|
||||
fprintf('\n');
|
||||
end
|
||||
|
||||
% total_clusters = [1:max(partition)];
|
||||
total_clusters = [1:npops];
|
||||
inliers = setdiff(total_clusters, outliers);
|
||||
if length(inliers)~=admixnpops
|
||||
disp('*** ERROR: in view linkage admixture.');
|
||||
return
|
||||
end
|
||||
|
||||
if isempty(popnames) || size(popnames,1)==size(partition,1)
|
||||
|
||||
groupnames = cell(1,admixnpops);
|
||||
for i=1:admixnpops
|
||||
groupnames{i} = sprintf('Cluster %d',inliers(i));
|
||||
end
|
||||
waitALittle;
|
||||
[s,v] = listdlg('PromptString',[sprintf('%d ',admixnpops) 'Clusters available:'],...
|
||||
'SelectionMode','multiple',...
|
||||
'Name','Select Clusters',...
|
||||
'ListString',groupnames);
|
||||
if isempty(s) || ~v
|
||||
disp('*** WARNING: Viewing admixture cancelled.');
|
||||
return
|
||||
else
|
||||
fprintf('Viewing admixture in cluster(s): %s\n',num2str(inliers(s)));
|
||||
end
|
||||
|
||||
waitALittle;
|
||||
answer = inputdlg( ['Input the p value for the strain admixture. Strains with '...
|
||||
'nonsignificant admixture will be displayed as a single color bar'],...
|
||||
'Input the upper bound p value',1,{'0.05'});
|
||||
if isempty(answer) % cancel has been pressed
|
||||
return
|
||||
else
|
||||
maxp = str2num(answer{1});
|
||||
fprintf('P value: %4.2f\n', maxp);
|
||||
|
||||
% nonsignificant strains are forced to be single color bar.
|
||||
nonsignificant_ix = find( (pvalue>maxp & pvalue <=1) );
|
||||
if ~isempty(nonsignificant_ix)
|
||||
for i = nonsignificant_ix'
|
||||
% incluster = find(proportionsIt(i,:)==max(proportionsIt(i,:)));
|
||||
incluster = logical(proportionsIt(i,:)==max(proportionsIt(i,:)) & proportionsIt(i,:)~=0);
|
||||
proportionsIt(i,:) = zeros(1, admixnpops);
|
||||
proportionsIt(i,incluster) = 1;
|
||||
end
|
||||
end
|
||||
|
||||
ix = find(ismember(partition(:),inliers(s)));
|
||||
% if isempty(ix)
|
||||
% disp('*** ERROR: No significant data. Try again with a higher p value.');
|
||||
% return
|
||||
% end
|
||||
proportionsIt_raw = proportionsIt;
|
||||
partition_raw = partition;
|
||||
proportionsIt = proportionsIt(ix,:);
|
||||
if isempty(popnames) || size(popnames,1)==size(partition,1)
|
||||
popnames = popnames(ix,:);
|
||||
end
|
||||
partition = partition(ix);
|
||||
pvalue = pvalue(ix);
|
||||
end
|
||||
else
|
||||
waitALittle;
|
||||
answer = inputdlg( ['Input the p value for the strain admixture. Strains with '...
|
||||
'nonsignificant admixture will be displayed as a single color bar'],...
|
||||
'Input the upper bound p value',1,{'0.05'});
|
||||
if isempty(answer) % cancel has been pressed
|
||||
return
|
||||
else
|
||||
maxp = str2num(answer{1});
|
||||
fprintf('P value: %4.2f\n', maxp);
|
||||
|
||||
% nonsignificant strains are forced to be single color bar.
|
||||
nonsignificant_ix = find( (pvalue>maxp & pvalue <=1) );
|
||||
if ~isempty(nonsignificant_ix)
|
||||
for i = nonsignificant_ix'
|
||||
% incluster = find(proportionsIt(i,:)==max(proportionsIt(i,:)));
|
||||
incluster = logical(proportionsIt(i,:)==max(proportionsIt(i,:)) & proportionsIt(i,:)~=0);
|
||||
proportionsIt(i,:) = zeros(1, admixnpops);
|
||||
proportionsIt(i,incluster) = 1;
|
||||
end
|
||||
end
|
||||
|
||||
% ix = find(ismember(partition(:),inliers(s)));
|
||||
% if isempty(ix)
|
||||
% disp('*** ERROR: No significant data. Try again with a higher p value.');
|
||||
% return
|
||||
% end
|
||||
% proportionsIt_raw = proportionsIt;
|
||||
% partition_raw = partition;
|
||||
% proportionsIt = proportionsIt(ix,:);
|
||||
% if isempty(popnames) || size(popnames,1)==size(partition,1)
|
||||
% popnames = popnames(ix,:);
|
||||
% end
|
||||
% partition = partition(ix);
|
||||
% pvalue = pvalue(ix);
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
|
||||
|
||||
talle = questdlg(['Do you want names to be visible in the admixture ' ...
|
||||
'result graphics?'], 'Names visible?', 'Yes', 'No', 'Yes');
|
||||
|
||||
if isequal(talle,'No')
|
||||
if isempty(popnames) || size(popnames,1)==size(partition,1)
|
||||
viewPartition4(proportionsIt, [], npops, ...
|
||||
admixnpops, inliers, partition, source);
|
||||
else
|
||||
viewPartition2(proportionsIt, [], admixnpops, partition, source);
|
||||
end
|
||||
else
|
||||
if isempty(popnames) || size(popnames,1)==size(partition,1)
|
||||
viewPartition4(proportionsIt, popnames, npops, ...
|
||||
admixnpops, inliers, partition, source);
|
||||
else
|
||||
viewPartition2(proportionsIt, popnames, admixnpops, partition, source);
|
||||
end
|
||||
end
|
||||
|
||||
if isempty(popnames) || size(popnames,1)==size(partition,1)
|
||||
talle = questdlg(['Permutate the labelling orders to get a more structured graphics? '], 'Reorder the sample?', 'Yes', 'No', 'Yes');
|
||||
|
||||
if isequal(talle,'Yes')
|
||||
h0 = findobj('Tag','admixture_result');
|
||||
if ~isempty(h0)
|
||||
close(h0);
|
||||
% drawnow;
|
||||
waitALittle;
|
||||
[partition_ordered, proportionsIt,popnames,pvalue] = ...
|
||||
viewPartition3(proportionsIt, popnames, npops, admixnpops, ...
|
||||
inliers, partition, pvalue, source);
|
||||
% c.mixtureType = 'linkage_mix';
|
||||
% c.npops = npops;
|
||||
talle = questdlg('Save the ordered admixture result in text?', ...
|
||||
'Save results?','Yes','No','Yes');
|
||||
if isequal(talle,'Yes')
|
||||
waitALittle;
|
||||
[filename, pathname] = uiputfile('*.txt','Save results as');
|
||||
if isempty(filename) && isempty(pathname)
|
||||
% Cancel was pressed
|
||||
return
|
||||
else
|
||||
fprintf(1,'Saving the admixture result...\n');
|
||||
dest = [pathname filename];
|
||||
clusters = inliers(s);
|
||||
tulostaAdmixtureTiedot(popnames, proportionsIt, pvalue, source, dest,...
|
||||
maxp,clusters);
|
||||
end
|
||||
end
|
||||
|
||||
else
|
||||
disp('***ERROR: In plotting the admixture results.');
|
||||
return;
|
||||
end
|
||||
drawnow;
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
%--------------------------------------------------------------------------
|
||||
|
||||
|
||||
function tulostaAdmixtureTiedot(popnames, proportions, uskottavuus, ...
|
||||
source, dest, maxp,clusters)
|
||||
|
||||
fid = fopen(dest,'w');
|
||||
ninds = length(uskottavuus);
|
||||
npops = size(proportions,2);
|
||||
|
||||
if fid ~= -1
|
||||
fprintf(fid, '\n');
|
||||
fprintf(fid,'%s \n', ['--------------------------------------------']); fprintf(fid, '\n');
|
||||
fprintf(fid,'%s \n', ['RESULTS OF ADMIXTURE ANALYSIS BASED']); fprintf(fid, '\n');
|
||||
fprintf(fid,'%s \n', ['ON MIXTURE CLUSTERING OF INDIVIDUALS']); fprintf(fid, '\n');
|
||||
fprintf(fid,'%s \n', ['Source file: ' source]); fprintf(fid, '\n');
|
||||
fprintf(fid,'%s \n', ['Total number of clusters: ' npops]); fprintf(fid, '\n');
|
||||
fprintf(fid,'%s \n', ['Viewing admixture in cluster(s): ',num2str(clusters)]);fprintf(fid, '\n');
|
||||
fprintf(fid,'%s \n', ['Number of individuals in selection: ' num2str(ninds)]); fprintf(fid, '\n');
|
||||
fprintf(fid,'P value: %4.2f \n', maxp); fprintf(fid, '\n');
|
||||
fprintf(fid, '\n');
|
||||
end
|
||||
|
||||
namelength = zeros(1,ninds);
|
||||
for ind = 1:ninds
|
||||
namelength(ind) = length(popnames{ind,1}{1});
|
||||
end
|
||||
maxlength = max(namelength);
|
||||
ekaRivi = ['Index' blanks(2) blanks(maxlength-4) 'Name' blanks(2)];
|
||||
for pop = 1:npops
|
||||
ekaRivi = [ekaRivi blanks(3-floor(log10(pop))) num2str(pop) blanks(2)];
|
||||
end
|
||||
ekaRivi = [ekaRivi blanks(2) 'p']; % Added on 29.08.06
|
||||
disp(ekaRivi);
|
||||
fprintf(fid, '%s \n',ekaRivi); fprintf(fid,'\n');
|
||||
for ind = 1:ninds
|
||||
index = num2str(popnames{ind,2});
|
||||
namelength=['%' num2str(2+maxlength) 's'];
|
||||
rivi = [sprintf('%5s',index) sprintf(namelength,popnames{ind,1}{1})...
|
||||
blanks(2)];
|
||||
if any(proportions(ind,:)>0)
|
||||
for pop = 1:npops-1
|
||||
rivi = [rivi proportion2str(proportions(ind,pop)) blanks(2)];
|
||||
end
|
||||
rivi = [rivi proportion2str(proportions(ind,npops))];
|
||||
rivi = [rivi blanks(2) ownNum2Str(uskottavuus(ind))];
|
||||
end
|
||||
disp(rivi);
|
||||
if fid ~= -1
|
||||
fprintf(fid,'%s \n',rivi); fprintf(fid,'\n');
|
||||
end
|
||||
end
|
||||
fclose(fid);
|
||||
fprintf(1,'finished.\n');
|
||||
|
||||
%--------------------------------------------------------------------------
|
||||
% function dispLine
|
||||
% disp('---------------------------------------------------');
|
||||
|
||||
%--------------------------------------------------------------------------
|
||||
function str = proportion2str(prob)
|
||||
%prob belongs to [0.00, 0.01, ... ,1].
|
||||
%str is a 4-mark presentation of proportion.
|
||||
|
||||
if abs(prob)<1e-3
|
||||
str = '0.00';
|
||||
elseif abs(prob-1) < 1e-3;
|
||||
str = '1.00';
|
||||
else
|
||||
prob = round(100*prob);
|
||||
if prob<10
|
||||
str = ['0.0' num2str(prob)];
|
||||
else
|
||||
str = ['0.' num2str(prob)];
|
||||
end;
|
||||
end;
|
||||
|
||||
|
||||
Loading…
Add table
Add a link
Reference in a new issue