Principal component analysis of RT-qPCR data Greetings to all biostatisticians,
I am analyzing a gene expression data set consisting of around 100 genes that were measured by RT-qPCR and expession values are given as 2^-delta Ct. Expression of these genes was measured in 25 patients belonging to 5 different groups: Group A (7 patients), Group B (5 patients), Group C (4 patients) and Group D (3 patients) and Group E (6 patients).
The question I am trying to answer:
How well can we rely on the expression of this panel of genes to distinguish patients from different groups ?
To answer this question, I tried doing pairwise comparisons of the expression of each gene between each two groups of patients using an unpaired two sample t-test or Wilcoxon test, and then do a multiple testing correction of the P-values.
I also tried reducing the dimensions of the dataset using principal component analysis (PCA) and visualizing how patients from different groups distribute in the PCA space. Here, I would like to see patients from the same group cluster together in the PCA space.
Do you have any better suggestions to address this question? Is there a way to quantify how well patients from a given group are clustered together using PC scores derived from PCA?
Thank you !!

Since you know the group memberships, you can use a supervised approach rather than doing unsupervised clustering. Note that gene-expression data can often be modeled best in log-expression scale, which would be equivalent to $-\Delta C_t$ in your PCR data.
One approach that could accomplish both goals is to use the group membership as the outcome values in a multinomial model and the gene-expression values as ridge-regression predictors. Ridge regression is related to the principal-components regression used for dimension reduction, but with principal components weighted continuously rather than all-or-none.
Multinomial ridge regression is implemented for example by the glmnet() function in the eponymous R package, when called with parameter settings of family = "multinomial" and alpha = 0. You use cross-validation (with cv.glmnet()) to find a penalty value for the ridge regression that lowers the magnitudes of regression coefficients to minimize the chance of over-fitting the data.
Overall fit of the model will tell you whether "expression of this panel of genes [can] distinguish patients from different groups." Coefficients of individual genes will tell you which genes tend to distinguish the groups.
With so few cases in each group it's unlikely that you will have very robust or reliable results, however.
