Code covered by the BSD License  

Highlights from
Discriminant Analysis Programme

image thumbnail
from Discriminant Analysis Programme by Bartolomeu Rabacal
Discrimination and Classification of data to and from groups with classical/robust estimation

InputInfo(samples, preDefInputVal)
function [trainingSampleInfo, classifySampleSize, preDefInputVal] = InputInfo(samples, preDefInputVal)

minNumVar = 2; % At least two dimensions are required 
minNumGrp = 2; % At least two groups are required 

trainingSampleInfo.numGrp = 0;
trainingSampleInfo.numVar = 0;
trainingSampleInfo.numElemPerGrp = 0;
classifySampleSize = 0;

Quest={'Number of Groups (2..)', 'Number of Variables (2..)'};
Title=sprintf('Input information for %s data import',samples{1});
numLines=[1 ; 1];
preDefVal={preDefInputVal.numGrp, preDefInputVal.numVar};

numVar = 0;
while (numVar < minNumVar) || (numGrp < minNumGrp)
 	inputValue = inputdlg(Quest, Title, numLines, preDefVal);
    if ~isempty(inputValue)
        numGrp = str2num(inputValue{1});
        if isempty(numGrp)
            warndlg('No valid number of Groups inputted','ATTENTION')
            return
        else
            preDefInputVal.numGrp = int2str(numGrp);
        end
		numVar = str2num(inputValue{2});        
        if isempty(numVar)
            warndlg('No valid number of Variables inputted','ATTENTION')
            return
        else
            preDefInputVal.numVar = int2str(numVar);
        end
    else
        warndlg('No valid data info inputted','ATTENTION')
        return
    end
end

numDifGrp = 0;

EqNumElemPerGrp=questdlg('Is the number of observations the same for all groups?', Title, 'Yes', 'No', 'Yes');
switch EqNumElemPerGrp
    case 'Yes'
        numDifGrp = 1;
    case 'No'
        numDifGrp = numGrp;
    otherwise
        warndlg('No option selected', 'ATTENTION')
end

numElemPerGrp = zeros(1, numDifGrp);

numElemPerGrp_temp = [];
[nrows, dummy] = size(preDefInputVal.numElemPerGrp);
for i = 1:numDifGrp
    if numDifGrp ~= 1
        Quest = {['Number of Observations in Group ', num2str(i)]};
    else
        Quest = {'Number of Observations in the Groups'};
    end    
    Title = 'Please input the number of Observations per Group';
    numLines = 1;
    
    if i <= nrows 
        preDefVal = {preDefInputVal.numElemPerGrp(i,:)};
    else
        preDefVal = {preDefInputVal.numElemPerGrp(end,:)};
    end
    
    inputValue = inputdlg(Quest, Title, numLines, preDefVal);
    if ~isempty(inputValue)
        if isempty(str2num(inputValue{1}))
             warndlg('No valid number of Observations Per Group inputted', 'ATTENTION')
             return
         else
             numElemPerGrp(i) = str2num(inputValue{1});
             numElemPerGrp_temp = strvcat(numElemPerGrp_temp, int2str(numElemPerGrp(i)));
        end
    else
        warndlg('No data info inputted', 'ATTENTION')
        return
    end
end
preDefInputVal.numElemPerGrp = numElemPerGrp_temp;

if numDifGrp == 1
    numElemPerGrp = numElemPerGrp(1) * ones(1, numGrp);
end

trainingSampleInfo.numGrp = numGrp;
trainingSampleInfo.numVar = numVar;
trainingSampleInfo.numElemPerGrp = numElemPerGrp;

if ~strcmp(samples{2}, '')
	Quest = {'Number of observations in Classify Sample'};
	Title = sprintf('Input information for %s data import', samples{2});
	numLines = 1;
	preDefVal = {preDefInputVal.classifySampleSize};
	inputValue = inputdlg(Quest, Title, numLines, preDefVal);
	if ~isempty(inputValue)
        classifySampleSize=str2num(inputValue{1});
        if isempty(classifySampleSize)
            warndlg('No valid number of Observations in Classify Sample inputted', 'ATTENTION')
            return
        else
            preDefInputVal.classifySampleSize = int2str(classifySampleSize);
        end
    else
        warndlg('No data info inputted', 'ATTENTION')
        return
    end
end

Contact us at files@mathworks.com