function [loss] = myMMRE(actuals,predictions,algorithms,preprocessors,datasetName) % MRE = abs(actual - predicted)/actual and MMRE is the mean of all MREs % define a variable to keep the MMRE results for each algorithm MREResults = -1 * ones(size(algorithms,1),size(actuals,1)); % below two variables are used for plotting purposes later in the algorithm minSumMRE = inf; % first define miminum sum of MRE as plus infinity minSumMREIndex = 0; % index is the row number % process each algorithm's results to find the MRE values for i = 1:size(algorithms,1) MREResults(i,:) = abs(actuals' - predictions(i,:))./actuals'; if sum(MREResults(i,:)) < minSumMRE minSumMRE = sum(MREResults(i,:)); minSumMREIndex = i; end end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%% this part is for plotting purposes only % MREResultsToPlot = MREResults; % copy the MRE results to protect from changes % % get the indices of the sorted MRE's for the method that had the lowest % % sum MRE % [C sortedIndex] = sort(MREResultsToPlot(minSumMREIndex,:)); % % then apply this indexing to all the methods % toSave = figure('units','normalized','outerposition',[0 0 1 1]);; % hold all; % % axis([0 size(predictions,2) 0 10]); % set(gca,'FontSize', 6,'FontName','Times New Roman'); % title(char(datasetName)); % for i = 1:size(algorithms,1) % MREResultsToPlot(i,:) = MREResultsToPlot(i,sortedIndex); % subplot(3,3,i); % eval(['h' num2str(i) ' = semilogy(MREResultsToPlot(i,:));']); % eval(['set(h' num2str(i) ', ''LineStyle'', ''-'', ''LineWidth'', 1.0, ''Color'', ''Black'');']); % eval(['set(h' num2str(i) ', ''Marker'', ''o'', ''MarkerFaceColor'', [0 0 0], ''MarkerEdgeColor'', [0 0 0], ''MarkerSize'', 2);']); % legendStr = [ char(preprocessors(i)) '-' char(algorithms(i))]; % legend(legendStr); % end % hold off; % saveas(toSave, [char(datasetName) '.png']); % close(toSave); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % define win tie loss variables win = zeros(size(algorithms,1),1); tie = zeros(size(algorithms,1),1); loss = zeros(size(algorithms,1),1); % start calculating win tie loss values for i = 1:size(algorithms,1) for j = (i+1):size(algorithms,1) if i ~= j % if i and j are different eval(['[P,H] = ranksum(MREResults(',num2str(i),',:),MREResults(',num2str(j),',:));']); if H == 0 % if they are the same eval(['tie(',num2str(i),') = tie(',num2str(i),') +1;']); eval(['tie(',num2str(j),') = tie(',num2str(j),') +1;']); else % calculate mean values eval(['mmrei = mean(MREResults(',num2str(i),',:));']); eval(['mmrej = mean(MREResults(',num2str(j),',:));']); if mmrei < mmrej eval(['win(',num2str(i),') = win(',num2str(i),') +1;']); eval(['loss(',num2str(j),') = loss(',num2str(j),') +1;']); else eval(['win(',num2str(j),') = win(',num2str(j),') +1;']); eval(['loss(',num2str(i),') = loss(',num2str(i),') +1;']); end end end end end % and now write the loss values to the file fid=fopen('RUN_RESULTS.txt','a' ); for i = 1:size(algorithms,1) fprintf(fid, [num2str(loss(i)) ',']); end fprintf(fid, ['\n']); % append a new line at the end of the line % close file fclose(fid); end