I have a series of physicians' claims submissions. I would like to perform cluster analysis as an exploratory tool to find patterns in how physicians bill based on things like Revenue Codes, Procedure Codes, etc. The data are all polytomous, and from my basic understanding, a latent class algorithm is appropriate for this kind of data. I am trying my hand at some of R's cluster packages, & specifically poLCA & mclust for this analysis. I'm getting alerts after running a test model on a sample of the data using poLCA.

> library(poLCA)
> # Example data structure - actual test data has 200 rows:
> df <- structure(list(RevCd = c(274L, 320L, 320L, 450L, 450L, 450L, 
636L, 636L, 636L, 450L, 450L, 450L, 301L, 305L, 450L, 450L, 352L, 
301L, 300L, 636L, 301L, 450L, 636L, 636L, 307L, 450L, 300L, 300L, 
301L, 301L), PlaceofSvc = c(23L, 23L, 23L, 23L, 23L, 23L, 23L, 
23L, 23L, 23L, 23L, 23L, 23L, 23L, 23L, 23L, 23L, 23L, 23L, 23L, 
23L, 23L, 23L, 23L, 23L, 23L, 23L, 23L, 23L, 23L), TypOfSvc = c(51L, 
51L, 51L, 51L, 51L, 51L, 51L, 51L, 51L, 51L, 51L, 51L, 51L, 51L, 
51L, 51L, 51L, 51L, 51L, 51L, 51L, 51L, 51L, 51L, 51L, 51L, 51L, 
51L, 51L, 51L), FundType = c(3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
3L, 3L, 3L, 3L, 3L, 3L), ProcCd2 = c(1747L, 656L, 656L, 1375L, 
1376L, 1439L, 1623L, 1645L, 1662L, 176L, 1374L, 1376L, 958L, 
1032L, 1368L, 1374L, 707L, 960L, 347L, 1662L, 859L, 1375L, 1654L, 
1783L, 882L, 1440L, 332L, 332L, 946L, 946L)), .Names = c("RevCd", 
"PlaceofSvc", "TypOfSvc", "FundType", "ProcCd2"), row.names = c(1137L, 
1138L, 1139L, 1140L, 1141L, 1142L, 1143L, 1144L, 1145L, 1146L, 
1147L, 1945L, 1946L, 1947L, 1948L, 1949L, 1950L, 1951L, 1952L, 
1953L, 1954L, 1955L, 1956L, 1957L, 1958L, 1959L, 2265L, 2266L, 
2267L, 2268L), class = "data.frame")

> clust <- poLCA(cbind(RevCd, PlaceofSvc, TypOfSvc, FundType, ProcCd2)~1, df, nclass = 3)

========================================================= 
Fit for 3 latent classes: 
========================================================= 
number of observations: 200 
number of estimated parameters: 7769 
residual degrees of freedom: -7569 
maximum log-likelihood: -1060.778 

AIC(3): 17659.56
BIC(3): 43284.18
G^2(3): 559.9219 (Likelihood ratio/deviance statistic) 
X^2(3): 33852.85 (Chi-square goodness of fit) 

ALERT: number of parameters estimated ( 7769 ) exceeds number of observations ( 200 ) 

ALERT: negative degrees of freedom; respecify model 


My novice assumption is that I need to run a greater number of iterations before I can get results that are robust? e.g.  "...it is essential to run poLCA multiple times until you can
be reasonably certain that you have found the parameter estimates that produce the global
maximum likelihood solution." (http://www.sscnet.ucla.edu/polisci/faculty/lewis/pdf/poLCA-JSS-final.pdf). Alternatively, perhaps certain variables, particularly CPT & Revenue Codes, have too many unique values, and that I need to aggregate these variables into higher level categories to reduce the number of parameters?

When I run the model using package mclust, which optimizes the model based on BIC, I don't get any such alert.

> library(mclust)
> clustBIC <- mclustBIC(df)
> summary(clustBIC, data = df)

classification table:
      1   2 
     141  59 

 best BIC values:
        VEV,2     VEV,3     EEV,3 
      -4562.286 -4706.190 -5655.783


If anyone can shed a bit of light on the above alerts, it would be much appreciated. I was also planning on using the script found in the poLCA documentation to run multiple iterations of the model until the log-likelihood is maximized. However it's computationally intensive and I'm afraid the process will crash before I have a chance to post this. Sorry in advance if I've missed something obvious here; I'm new to cluster analysis.

It depends on what sense of a correlation you want.  When you run the prototypical Pearson's product moment correlation, you get a measure of the strength of association and you get a test of the significance of that association.  More typically however, the significance test and the measure of effect size differ.  

Significance tests:  


Continuous vs. Nominal:  run an ANOVA.  In R, you can use ?aov.  
Nominal vs. Nominal: run a chi-squared test.  In R, you use ?chisq.test.  


Effect size (strength of association):  


Continuous vs. Nominal:  calculate the intraclass correlation.  In R, you can use ?ICC in the psych package; there is also an ICC package.  
Nominal vs. Nominal: calculate Cramer's V.  In R, you can use ?assocstats in the vcd package.  

