Discrimination between multivariate populations when variables are non-normal? I'm analyzing chemical profiles of amphetamine samples, and each sample has 26 numerical variables describing the relative quantity of some chemical constituent. Only a few of the 26 variables have pretty Gaussian distributions, the rest are amorphous (e.g. one very large "0" bin and a small Gaussian-like hill to the right). 
I'd like to test whether populations differ by geographical origin (or some other ordinal variable), but I'm not sure how to test against this null hypothesis because the underlying assumption of multivariate normality is violated. Can I perform a Hotelling's T-square test via permutation, or am I looking for something like the Kullback-Leibler divergence? 
My training is in biology and most certainly did not prepare me for this, so I apologize in advance for having missed obvious things. Thanks a lot. 
 A: PCA is really designed for (approximately multinormal) data.  When data are not multinormal, it could be helpful to try projection pursuit --- searching for "interesting" projections.  In a sense PCA is a projection pursuit method, searching for linear combinations (projections) with maximal variance, as this is an proper thing to do for multinormal data.  When using projection pursuit proper, one is searching for information which a PCA cannot find, such as non-normality. 
One first does a "sphere transform", transforming the data linearly to have covariance matrix equal to the identity matrix.  Then one can for instance try to find the "least normal" projection.  ¿How define that? One idea is to observe that the normal distribution, among all distributions with zero mean and unit variance, maximizes the entropy, so one common idea is to minimize the entropy.  If the projection minimizing entropy really looks normal (look at its histogram!), the data probably are multinormal.  If not, that histogram could be interesting. Remove this projection from the data, repeat, ...
A: You can do what is called kernel discriminant analysis if your data is smooth and the class distributions can be represented as densities.  This amounts to applying kernel density estimation to the class conditional densities based on the training data.  Then you apply the Bayes rule using these density estimates to get the decision boundary.  In the equal cost for error case for a two class problem it is:
Chose class 1 if f* $^1$(x) /f* $^2$(x) >1 and chose class 2 otherwise.
