RE: [R] Mental Block with PCA of multivariate time series!

From: Ignacio Colonna <iacolonn_at_uiuc.edu>
Date: Tue 17 May 2005 - 03:28:33 EST

Is this along the lines of what you are trying to do?

sim.data<-data.frame(matrix(rnorm(350*10),350,10)) day<-seq(1:350)

```sim.data<-data.frame(day,sim.data)
```

for (i in seq(0,300,by=50)){
sim.data.i<-subset(sim.data,sim.data\$day>i&sim.data\$day<(i+50))
```pc1.load.i<-princomp(sim.data.i[,2:11])\$loadings[,1]
```
}

period<-seq(1:7)

Ignacio

I am wishing to investigate the temporal evolution of the pca: if we assume that every 50 rows of my data frame is representitive of, for instance, 1 day of data, I am hoping to automate a process whereby a pca is performed on every 50 rows of data and the loading for PC1 and PC2 for each variable (i.e. each column) is represented as a point on a plot - so a years' data will be represented as two lines (representing PC1 and PC2) on a time series plot for each variable.

Laura Quinn
Institute of Atmospheric Science
School of Earth and Environment
University of Leeds
Leeds
LS2 9JT

tel: +44 113 343 1596
fax: +44 113 343 6716
mail: laura@env.leeds.ac.uk

On Mon, 16 May 2005, Gavin Simpson wrote:

> Laura Quinn wrote:
> > Please could someone point me in the right direction as I appear to be
> > having a total mental block with fairly basic PCA problem!
> >
> > I have a large dataframe where rows represent independent
> > observations and columns are variables. I am wanting to perform PCA
> > sequentially on blocks of nrows at a time and produce a graphical output
> > of the loadings for the first 2 EOFs for each variable.
> >
> > I'm sure I've performed a very similar routine in the past, but the
method
> > is currently escaping me.
> >
> > Any help gratefully received!
>
> Hi Laura,
>
> data(iris)
> iris.dat <- iris[,1:4]
> pca.1 <- prcomp(iris.dat[1:50, ], scale = TRUE)
> pca.2 <- prcomp(iris.dat[51:100, ], scale = TRUE)
> pca.3 <- prcomp(iris.dat[100:150, ], scale = TRUE)
>
> biplot(pca.1)
> etc...
>
> There is a better way of subsetting this data set as the 5th col of iris
> is a factor and we could use the subset argument to prcomp to do the
> subsetting without having to know that there are 50 rows per species.
> Take a look at that argument if you have a variable that defines the
> blocks for you.
>
> Is this what you were after?
>
> All the best,
>
> Gav
> --
> %~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%
> Gavin Simpson [T] +44 (0)20 7679 5522
> ENSIS Research Fellow [F] +44 (0)20 7679 7565
> ENSIS Ltd. & ECRC [E] gavin.simpsonATNOSPAMucl.ac.uk
> UCL Department of Geography [W] http://www.ucl.ac.uk/~ucfagls/cv/
> 26 Bedford Way [W] http://www.ucl.ac.uk/~ucfagls/
> London. WC1H 0AP.
> %~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%
>

R-help@stat.math.ethz.ch mailing list