limma - Error in chol.default(Zinfo)
2
0
Entering edit mode
venu • 0
@venu-9606
Last seen 4.8 years ago

Hello all,

I was using limma for assessing the deferentially expressed genes in my microarray experiment. However, during the analysis process I've encountered the following error

Error in chol.default(Zinfo) : 
  the leading minor of order 11 is not positive definite
Calls: arrayWeights -> chol -> chol.default
Execution halted

I guess this error is due to a larger design matrix. Here it is

design = model.matrix(~0+factor(c(1,2,3,1,2,3,7,8,9,10,11,12)))
colnames(design) = c("CDH", "CDN", "CDP", "CDPCIS", "CDPFU", "CDPUN", "CDNCIS", "CDNFU", "CDNUN")
aw = arrayWeights(data.filt,design)
fit = lmFit(data.filt,design,weights=aw) 

I would be grateful for your help.

Thank you.

 

limma • 1.2k views
ADD COMMENT
1
Entering edit mode
Aaron Lun ★ 28k
@alun
Last seen 7 hours ago
The city by the bay

This error is caused by the presence of several groups that contain only a single array. arrayWeights works by identifying noisy arrays with large residuals from the linear model, and downweighting them accordingly. However, for the groups with only one array, the residual for that array will always be zero, i.e., the linear model fits it perfectly for all genes. I would guess that this results in too many zeroes in whatever matrix is being used in the Cholesky decomposition, resulting in the observed error about the matrix not being positive definite.

There's no point computing weights for the arrays in single-array groups, as the choice of weight won't affect the fit. Each of these arrays is always fitted perfectly and doesn't contribute to the variance estimate. So, the simplest workaround would be to estimate weights for only the arrays in groups 1-3, where the choice of weight does affect the variance estimate; and set the other weights to unity (or whatever non-zero value you desire).

Perhaps arrayWeights could also do this automatically, i.e., return unity weights for arrays that don't contribute to the residual d.f. of the fit. This might be more elegant than dropping an error, as it would not impede progress through to the rest of the analysis.

ADD COMMENT
0
Entering edit mode

Thanks for the reply. What if I assess the Differential expression of genes from groups of single arrays skipping `arrayWeights` step? Would results make sense? How much confidence do we have on these kind of results? 

ADD REPLY
1
Entering edit mode

The issue is not so much whether or not you use array weights. Rather, it's the fact that, for many groups, you only have one replicate. Would you trust a result from an experiment where n = 1? (I wouldn't, not without lots of validation.)

ADD REPLY
1
Entering edit mode
@gordon-smyth
Last seen 2 hours ago
WEHI, Melbourne, Australia

There's no point in using arrayWeights() unless you have groups with at least 3 replicates. With fewer than 3 replicates, it is impossible to identify unusual cases because it is impossible for any single case to stand out.

Just omit the arrayWeights() step and proceed with the analysis as normal. As Aaron says, groups with just n=1 replicate are not ideal, but limma will do the best that can be done, which is to use the replicates that are available.

ADD COMMENT
0
Entering edit mode

Thanks a lot for reply. I would suggest my boss to use replicates for future experiments.

ADD REPLY

Login before adding your answer.

Traffic: 346 users visited in the last hour
Help About
FAQ
Access RSS
API
Stats

Use of this site constitutes acceptance of our User Agreement and Privacy Policy.

Powered by the version 2.3.6