SVDmiss {SpatioTemporal} | R Documentation

## Missing Data SVD

### Description

Function that completes a data matrix using iterative svd as described in Fuentes et. al. (2006). The function iterates between computing the svd for the matrix and replacing the missing values by linear regression of the columns onto the first `ncomp` svd components. As initial replacement for the missing values regression on the column averages are used. The function will fail if entire rows and/or columns are missing from the data matrix.

### Usage

    SVDmiss(X, niter = 25, ncomp = min(4, dim(X)[2]), conv.reldiff = 0.001)

### Arguments

`X` | Data matrix, with missing values marked by `NA`.
`niter` | Maximum number of iterations to run before exiting, `Inf` will run until the `conv.reldiff` criteria is met.
`ncomp` | Number of SVD components to use in the reconstruction (>0).
`conv.reldiff` | Assume the iterative procedure has converged when the relative difference between two consecutive iterations is less than `conv.reldiff`.

### Value

A list with the following components:

`Xfill` | The completed data matrix with missing values replaced by fitting the data to the `ncomp` most important svd components
`svd` | The result of svd on the completed data matrix, i.e. `svd(Xfill)`
`status` | A vector of status variables: `diff`, the absolute difference between the two last iterations; `rel.diff`, the relative difference; `n.iter`, the number of iterations; and `max.iter`, the requested maximum number of iterations.

### Author(s)

Paul D. Sampson and Johan Lindstrom

### References

M. Fuentes, P. Guttorp, and P. D. Sampson. (2006) Using Transforms to Analyze Space-Time Processes in Statistical methods for spatio-temporal systems (B. Finkenstadt, L. Held, V. Isham eds.) 77-150

### See Also

Other SVD for missing data: `SVDsmooth`, `calcSmoothTrends`, `plot.SVDcv`, `print.SVDcv`, `updateTrend.STdata`

Other data matrix: `SVDsmooth`, `createDataMatrix`, `estimateBetaFields`, `mesa.data.raw`

### Examples

    ##create a data matrix
    t <- seq(0,4*pi,len=50)
    X.org <- cbind(cos(t),sin(2*t)) %*% matrix(rnorm(20),2,10)

    ##add some normal errors
    X <- X.org + .25*rnorm(length(X.org))
    ##and mark some data as missing
    X[runif(length(X))<.25] <- NA

    ##Ensure that we have complet columns/rows
    while( any(rowSums(is.na(X))==dim(X)[2]) || any(colSums(is.na(X))==dim(X)[1]) ){
      X <- X.org + .25*rnorm(length(X.org))
      X[runif(length(X))<.25] <- NA
    }

    #run the missing data svd
    res <- SVDmiss(X, niter=100, ncomp=2)
    #look at the status
    res$status
    #plot the first four columns of the data matrix
    par(mfrow=c(2,2))
    for(i in 1:4){
      plot(t, X[,i])
      lines(t, res$Xfill[,i])
      lines(t, X.org[,i], col=2)
    }

[Package SpatioTemporal version 1.1.9.1 Index]