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 !!


1 Answer 1


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.

  • $\begingroup$ Thank you very much for this comprehensive answer. I will try out the approach you proposed. I was just wondering if I calculate the overall contribution of each gene to the first n principal components in a PCA, wouldn't that give us a similar answer to what ridge regression coefficients of individual genes would tell us? @EdM $\endgroup$ Nov 29, 2021 at 14:41
  • $\begingroup$ @IsmailEl-Shimy Similar, but not identical. Principal-component regression gives all-or-none weighting of principal components, keeping the first $n$ and discarding the rest. Ridge regression weights principal components according to the sizes of the corresponding eigenvalues. See section 3.5.1 of The Elements of Statistical Learning. $\endgroup$
    – EdM
    Nov 29, 2021 at 14:57
  • $\begingroup$ Sorry for my very late reply. Thank you very much for your great help, I really appreciate it !! $\endgroup$ Dec 22, 2021 at 22:27

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.