MATLAB: ANOVAN: Undefined function or variable “denommat”

anovaerrorstatisticsStatistics and Machine Learning Toolbox

Hi, I'm getting this error in ANOVAN: Undefined function or variable "denommat". I have 3 factors, one is a random effect (which individual), the others are predictors.
Y = randn(100,1);
subject = repmat([1:10]', 10,1);
traits = randn(100,2);
[p,T,stats] = anovan(Y, [subject, traits], ...
'varnames', {'Subject','Trait1', 'Trait2'} , ...
'random', 1, ...
'continuous', [2 3], ...
'model', [0 1 0; 0 0 1; 0 1 1] ...
);
  • I'm looking for the effects of the predictors and their interaction.
  • But it's a mixed effects design, in that, I have repeated measures of the traits for each subject. I've therefore specified 'Subject' as a random effect. What I intend here is to account for the fact that repeated trait measures on an individual may correlated.
  • I think the problem is that the "subject" factor is not used in the design matrix: I've used a column of zeros to specify that the subject is not a categorical regressor (if it were, it would eat up all the between-subject variability, right?)

Best Answer

I agree this looks like a bug where if you specify a variable as random but it doesn't actually appear in any terms, the code gets confused. The work-around in your case is not to specify the 'random' argument when no terms use it. I'll report this as a bug to be fixed.
But I don't understand the statement about how including subject in the model would eat up all the between-subject variability. The example doesn't show any between-subject factors. The following code introduces a between-subject factor and specifies that subject is nested in it. Perhaps you want something like this.
Y = randn(100,1);
subject = repmat([1:10]', 10,1);
traits = randn(100,2);
between = repmat([1 1 1 1 1 2 2 2 2 2]',10,1);
[p,T,stats] = anovan(Y, [subject, traits, between], ...
'varnames', {'Subject','Trait1', 'Trait2' 'Between'} , ...
'random', 1, ...
'continuous', [2 3], ...
'nested', [0 0 0 1;0 0 0 0;0 0 0 0;0 0 0 0], ...
'model', [0 0 0 1;1 0 0 0; 0 1 0 0; 0 0 1 0; 0 1 1 0] ...
);
Related Question