MATLAB: Do I receive a warning from FACTORAN saying that some unique variances are near zero, in the Statistics Toolbox R2011a (Statistics Toolbox Version 7.5)

Statistics and Machine Learning Toolbox

I tried using FACTORAN with 4 factors, using the following command (my data is in a matrix called M15):
[lambda, psi, T, stats, F] = factoran(M15, 4, 'rotate', 'none')
The result I received is quite different from the result obtained in R, and in MATLAB I received the following warning:
Warning: Some unique variances are zero: cannot compute significance.
> In factoran at 401
What is it about the data that causes this warning, and what can be done to obtain a good model?

Best Answer

The warning you are receiving, which says that some unique variances are zero, occurs when at least one of the specific variance (‘psi’) outputs is close to zero. ‘Psi’ cannot logically have a value less than zero, and values close to zero indicate that, at best, the estimation problem is very sensitive. In that case, interpretation of the resulting estimates is problematic; in particular, there can be multiple local maxima of the likelihood, each with different estimates of the loadings and the specific variances.
For your data, one of your ‘Psi’ output values is 0.005, which is the same as the default value of the ‘delta’ parameter used by FACTORAN, and this is why MATLAB throws the warning you are seeing. This corresponds to the Heywood case. The Heywood case can occur when the input is small compared to the number of factors you are trying to fit, or it may cast doubt on whether the model is valid with the associated data. More information about the ‘delta’ parameter and the Heywood case is available on the documentation page for FACTORAN, which is available by typing the following in the MATLAB Command Window:
web([docroot,'/toolbox/stats/factoran.html'])
You may access the same information on the following webpage:
We cannot comment officially about R, however the R function ‘factanal’ appears to observe a similar though not identical vigilance vis-a-vis the boundary. The R equivalent of the output ‘psi’ is the field ‘Uniquenesses’ and it has a parameter ‘lower’ that is analogous to ‘delta’ in MATLAB, and which also has a default value of 0.005. With your example data and a default function call of R's ‘factanal’, one of the ‘Uniquenesses’ values is 0.005, to three digits. R does not issue a warning with this default call, but a very slight change -- setting ‘lower’ to 0.006 instead of 0.005 -- does cause ‘factanal’ to error out. Also, changes in the stopping criteria for convergence cause R to error out.
Conversely, you can keep MATLAB's FACTORAN from issuing a warning with your specific data, by asking it to optimize less: pass an 'OptimOpts' parameter along with your FACTORAN call, setting 'TolFun' and 'TolX' to 1.e-4, which is lower than the default.
The differences between R's ‘factanal’ and MATLAB's FACTORAN are characteristic of edge case nonlinear optimizations. In this case, we warn where R does not, but we do so because we think the warning is useful information.