We are implementing the joint continuous and ordinal piece for the FIML objective function. There was a long discussion at this week's developers meeting on how to match expected means/covariances and thresholds to the observed dataset. First, here is some background.
Currently, FIML applied to continuous data requires row and column names for the expected covariance matrix, and row names for the expected means vector. The row names of the covariance matrix, the column names of the covariance matrix, and the row names of the expected means vector must all be identical. These names must be a subset of the column names in the raw dataset. The order of the expected names does not need to match the order of the column names in the dataset. The 'dimnames' argument to the mxFIMLObjective() function is a shortcut for specifying the three vectors.
Currently, FIML applied to ordinal data has the same requirements as the continuous case. In addition, the thresholds matrix must have column names defined. The column names of the thresholds matrix are not assigned by the 'dimnames' argument of the mxFIMLObjective() function. The column names of the thresholds matrix do not need to match the 'dimnames' argument of the mxFIMLObjective() function.
There were four proposal discussed at the meeting today:
1) Keep the current system. The column names of the thresholds matrix must be specified explicitly.
2) Allow the 'dimnames' argument to apply to the expected covariance, expected means, and thresholds matrices.
2a) require the thresholds matrix to contain dummy columns for the continuous data
2b) use a filtering procedure on the 'dimnames' argument to select the ordinal data when applying the names on the columns of the thresholds matrix
3) Change the signature of the FIML objective function to
mxFIMLObjective(covariance, means, dimnames = NA, thresholds = NA, vector = FALSE, threshnames = dimnames)