Principal Components for matrices with NA

classic Classic list List threaded Threaded
4 messages Options
Reply | Threaded
Open this post in threaded view
|

Principal Components for matrices with NA

Joyous Fisher
Hello,

I have a matrix with 267 columns, all rows of which have at least one
column missing (NA).
All three methods i've tried (pcs, princomp, and prcomp) fail with either

"Error in svd(zsmall) : infinite or missing values in 'x'" (latter two)

or

"Error in cov.wt(z) : 'x' must contain finite values only"

The last one happens because of the check

if (!all(is.finite(x)))

in cov.wt

Q: is there a way to do princomp or another method where every row has at
least one missing column?

I guess if missing values are thrown out, that leaves me with a zero row
matrix.
I could find the maximal set of columns such that there exists a subset of
rows with non NA values for every column in the set  - what is an efficient
way to do that?

Kind Regards
JS

        [[alternative HTML version deleted]]

______________________________________________
[hidden email] mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.
Reply | Threaded
Open this post in threaded view
|

Re: Principal Components for matrices with NA

Rui Barradas
Hello,

> I could find the maximal set of columns such that there exists a subset of
> rows with non NA values for every column in the set  - what is an efficient
> way to do that?

Try 'na.exclude' on the transpose matrix.
Example:

set.seed(1)
x <- matrix(1:200, ncol=25)

f <- function(x){x[sample(length(x), 1)] <- NA; x}
x <- t(apply(x, 1, f))
x

x.without.NA <- t(na.exclude(t(x)))

Hope this helps,

Rui Barradas

Reply | Threaded
Open this post in threaded view
|

Re: Principal Components for matrices with NA

Rui Barradas
In reply to this post by Joyous Fisher
Hello again,

> Q: is there a way to do princomp or another method where every row has at
> least one missing column?

See also package 'psych', function 'principal'. You can impute mean or median to NAs.

Rui Barradas
Reply | Threaded
Open this post in threaded view
|

Re: Principal Components for matrices with NA

Mark Difford
In reply to this post by Joyous Fisher
On Feb 27, 2012 at 9:30pm Joyous Fisher wrote:

> Q: is there a way to do princomp or another method where every row has at
> least one missing column?

You have several options. Try function nipals in packages ade4 and plspm. Also look at package pcaMethods (on Bioconductor), where you will find a full range of options for carrying out principal component analysis using matrices with missing values.

Regards, Mark.
Mark Difford (Ph.D.)
Research Associate
Botany Department
Nelson Mandela Metropolitan University
Port Elizabeth, South Africa