I have Affymetrix gene level expression matrix (genes in the rows and sample ID on the columns), and I have annotation data of microarray experiment observation where sample ID in the rows and description identification on the columns.

example data

here is Affymetrix gene level expression matix:

> dim(exprs_mat)
[1] 112830   735
> exprs_mat[1:4, 1:3]
        Tarca_001_P1A01 Tarca_003_P1A03 Tarca_004_P1A04
1_at           6.062215        6.125023        5.875502
10_at          3.796484        3.805305        3.450245
100_at         5.849338        6.191562        6.550525
1000_at        3.567779        3.452524        3.316134

here is annotation data which contain experiment observation:

> dim(ano)
[1] 735   6
> head(ano)
                       SampleID   GA Batch     Set Train Platform
Tarca_001_P1A01 Tarca_001_P1A01 11.0     1 PRB_HTA     1    HTA20
Tarca_013_P1B01 Tarca_013_P1B01 15.3     1 PRB_HTA     1    HTA20
Tarca_025_P1C01 Tarca_025_P1C01 21.7     1 PRB_HTA     1    HTA20
Tarca_037_P1D01 Tarca_037_P1D01 26.7     1 PRB_HTA     1    HTA20
Tarca_049_P1E01 Tarca_049_P1E01 31.3     1 PRB_HTA     1    HTA20
Tarca_061_P1F01 Tarca_061_P1F01 32.1     1 PRB_HTA     1    HTA20

I intend to see how the genes in each sample are correlated with GA value of corresponding samples in the annotation data. How can I get my expected correlation matrix and filter out the genes by correlation value? any idea to make this happen correctly?

my attempt

fit <- limma::lmFit(exprs_mat, design = model.matrix( ~ 0 + t(ano$GA))
fit <- eBayes(fit)
topTable(fit, coef=2)

but this attempt gave me dimension error and I still didn't get highly correlated genes from exprs_mat with each ano$GAin anodata. I just removed 0+ and ran the code, then I got this error:

row dimension of design doesn't match column dimension of data object

I am pretty sure I did df[!is.na(df$GA), ], removed NA in both exprs_mat and ano metadata already, but the same error still persists. I also tried df[complete.cases(df),] to make sure I removed all NA values in my data.

How can I get those highly correlated genes correctly? any possible way to make this happen in R? any thought?

How can I cut down exprs_mat with the shortlist of genes? any idea?

desired output

I intend to filter out genes in the gene expression matrix expr_mat by using correlation value (only keep highly correlated genes), expected sub expression matrix should have same data structure as expr_mat. any way to get this done?

  • $\begingroup$ Have a look at the dimensions of what model.matrix() is returning, that should be telling. $\endgroup$
    – Devon Ryan
    Jun 25, 2019 at 18:16

1 Answer 1


The problem is that you are transposing the vector of GA values with t(ano$GA). Why would you do that? It produces a row matrix that is inappropriate for input to model.matrix.

All you need is

design <- model.matrix(~ano$GA)

and everything will work fine.


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.