inst/doc/SSsimple.R

### R code from vignette source 'SSsimple.Snw'

###################################################
### code chunk number 1: SSsimple.Snw:122-123
###################################################
options(width=75)


###################################################
### code chunk number 2: a1
###################################################
library(SSsimple)
F <- 1
H <- matrix(1) ### a 1 x 1 matrix, implying to SS.sim() that n=1 and d=1
Q <- 1
R <- 0
tt <- 1000
set.seed(999)
xss <- SS.sim(F=F, Q=Q, H=H, R=R, length.out=tt, beta0=0)


###################################################
### code chunk number 3: SSsimple.Snw:144-145
###################################################
plot( xss$Z, type="l", main="Random Walk, Sim" )


###################################################
### code chunk number 4: a2
###################################################
F <- matrix( c( 0.65, 0.3, 0.3, 0.65 ), 2, 2 ) ;
H <- matrix( c(0.4, 0.3), 1, 2 ) ### a 1 x 2 matrix, so SS.sim() knows n=1 and d=2 ;
Q <- 0.2 ;
R <- 5 ;
tt <- 180 ;
set.seed(999) ;
xss <- SS.sim(F=F, Q=Q, H=H, R=R, length.out=tt, beta0=0) ;


###################################################
### code chunk number 5: SSsimple.Snw:168-169
###################################################
plot( xss$Z, type="l", main="SPM minus FPM, Sim" )


###################################################
### code chunk number 6: a3
###################################################
P0 <- diag(Q, 2) %*% solve(diag(1, 2) - t(F) %*% F)
xslv <- SS.solve(Z=xss$Z, F=F, Q=Q, H=H, R=R, length.out=tt, P0=P0, beta0=0)
Z.hat <- t(H %*% t(xslv$B.apri))
sqrt( mean( (xss$Z - Z.hat)^2 ) )


###################################################
### code chunk number 7: SSsimple.Snw:185-186
###################################################
options(width=55)


###################################################
### code chunk number 8: SSsimple.Snw:190-199
###################################################
par( mfrow=c(1,2) )
plot(xss$Beta[ , 1], type="l", ylim=range(xss$Beta), col="red", 
   ylab="Humor Index (True is Heavy Line)", 
   main="Humor: True State and Posterior Est State", lwd=4)
points(xslv$B.apos[ , 1], type="l", ylim=range(xslv$B.apos), col="red")
plot(xss$Beta[ , 2], type="l", ylim=range(xss$Beta), col="blue", 
   ylab="Happiness Index (True is Heavy Line)", 
   main="Happiness: True State and Posterior Est State", lwd=4)
points(xslv$B.apos[ , 2], type="l", ylim=range(xslv$B.apos), col="blue")


###################################################
### code chunk number 9: a4
###################################################
xid <- SS.ID( xss$Z, d=2 )
xslv <- SS.solve(Z=xss$Z, F=xid$F, Q=xid$Q, H=xid$H, R=xid$R, 
   length.out=tt, P0=P0, beta0=0)
Z.hat.2 <- t(xid$H %*% t(xslv$B.apri))
sqrt( mean( (xss$Z - Z.hat.2)^2 ) )


###################################################
### code chunk number 10: SSsimple.Snw:216-221
###################################################
par( mfrow=c(1,2) )
plot( xss$Z, type="l", main="SPM - FPM, Prior Est Gold, True Hypers", lwd=3 )
points( Z.hat, type="l", lwd=3, col="gold" )
plot( xss$Z, type="l", main="SPM - FPM, Prior Est Gold, IDed Hypers", lwd=3 )
points( Z.hat.2, type="l", lwd=3, col="gold" )


###################################################
### code chunk number 11: a5
###################################################
d <- 4
n <- 1
F <- matrix(0, d, d)
F[ 1:2, 1:2 ] <- c(0.65, 0.3, 0.3, 0.65)
F[ 3, 3 ] <- 1
F[ 4, 4 ] <- 0.99
eigen(F) #### check stability
tt <- 180

H.tv <- list()
for(i in 1:tt) {
   H.tv[[i]] <- matrix( c(0.4, 0.3, 0, 1), n, d )
   if( i >= 60 & i < 90 ) { H.tv[[i]][ , 3] <- 9 }
   if( i >= 120 & i < 150 ) { H.tv[[i]][ , 3] <- -9 }
}
	
Q <- diag( 0.2, d )
Q[ 3, 3 ] <- 0
Q[ 4, 4 ] <- 1/100
R <- 5

beta0 <- c(0, 0, 1, 0)

set.seed(999)
xss <- SS.sim.tv(F=F, Q=Q, H=H.tv, R=R, length.out=tt, beta0=beta0)


###################################################
### code chunk number 12: SSsimple.Snw:261-266
###################################################
plot( xss$Z, type="l", main="SPM minus FPM, with Video, Sim" ) ;
abline(v=60, col="orange", lwd=2) ;
abline(v=91, col="orange", lwd=2) ;
abline(v=120, col="blue", lwd=2) ;
abline(v=151, col="blue", lwd=2)


###################################################
### code chunk number 13: a6
###################################################
x <- I(0:20) / 20
n <- length(x)
H <- H.omega.sincos(x, c(1,2))
F <- 0.999 ; Q <- 0.1
## the following line constructs the matrix of Euclidean distances btwn locations
D <- abs( tcrossprod(x, rep(1, n)) - tcrossprod(rep(1, n), x) )
R <- exp(-3 * D)

set.seed(999)
xss <- SS.sim(F=F, Q=Q, H=H, R=R, length.out=100, beta0=0)

xdom <- I(0:100) / 100
Hdom <- H.omega.sincos(xdom, c(1,2))


###################################################
### code chunk number 14: a7 (eval = FALSE)
###################################################
## for(i in 1:tt) {
##    plot(x, xss$Z[i, ], ylim=range(xss$Z), main=i)
##    points( xdom, Hdom %*% xss$Beta[i,], type="l" )
##    Sys.sleep(0.1)
## }


###################################################
### code chunk number 15: SSsimple.Snw:307-310
###################################################
i <- 100
   plot(x, xss$Z[i, ], ylim=range(xss$Z), main=i)
   points( xdom, Hdom %*% xss$Beta[i,], type="l" )


###################################################
### code chunk number 16: a10
###################################################
x <- rep( 0:10 / 10, 11 )
y <- rep( 0:10 / 10, each=11 )
n <- length(x)

Hx <- H.omega.sincos( x, c(1,2,3)*pi / 2 )
Hy <- H.omega.sincos( y, c(1,2,3)*pi / 2 )

## Construct the tensor bases expansion over Omega
H <- matrix(NA, nrow(Hx), ncol(Hx)*ncol(Hy))
k <- 0
for(i in 1:ncol(Hx)) {
   for(j in 1:ncol(Hy)) {
      k <- k+1
      H[ , k]  <- Hx[ ,i ] * Hy[ , j]
   }
}

Dx <- tcrossprod(x, rep(1, n)) - tcrossprod(rep(1, n), x)
Dy <- tcrossprod(y, rep(1, n)) - tcrossprod(rep(1, n), y)
D <- sqrt( Dx^2 + Dy^2 ) ; ## the Euclidean distance matrix
R <- exp(-3 * D)

xss <- SS.sim( 0.99, H, 1/2, R,   500, rep(0, ncol(H)) )


###################################################
### code chunk number 17: a11 (eval = FALSE)
###################################################
## for(i in 1:nrow(xss$Z)) {
##    plot(x, y, cex=(xss$Z[i ,]-min(xss$Z))/30, main=i)
##    Sys.sleep(0.1)
## }


###################################################
### code chunk number 18: SSsimple.Snw:365-367
###################################################
i <- 100
plot(x, y, cex=(xss$Z[i ,]-min(xss$Z))/30, main=i) ;


###################################################
### code chunk number 19: a12
###################################################
#################### raster map, interpolation to arb locs
x.grid <- 0:100 / 100
y.grid <- 0:100 / 100
xdom <- rep( x.grid, length(y.grid) )
ydom <- rep( y.grid, each=length(x.grid) )

Hx.dom <- H.omega.sincos( xdom, c(1,2,3)*pi / 2 )
Hy.dom <- H.omega.sincos( ydom, c(1,2,3)*pi / 2 )

Hdom <- matrix(NA, nrow(Hx.dom), ncol(Hx.dom)*ncol(Hy.dom))
k <- 0
for(i in 1:ncol(Hx.dom)) {
   for(j in 1:ncol(Hy.dom)) {
      k <- k+1
      Hdom[ , k]  <- Hx.dom[ ,i ] * Hy.dom[ , j]
   }
}

Dx.dom <- tcrossprod(x, rep(1, length(xdom))) - tcrossprod(rep(1, n), xdom)
Dy.dom <- tcrossprod(y, rep(1, length(ydom))) - tcrossprod(rep(1, n), ydom)
D.dom <- sqrt( Dx.dom^2 + Dy.dom^2 )
R0 <- exp(-3 * D.dom)
bb <- solve(R) %*% R0


###################################################
### code chunk number 20: a13 (eval = FALSE)
###################################################
## for(i in 1:nrow(xss$Z)) {
##    z.hat <- H %*% xss$Beta[i, ]
##    z.0 <- Hdom %*% xss$Beta[i, ]
##    z.tilde <- z.0 + t( t(xss$Z[i, ] - z.hat) %*% bb )
##    Z.mx <- matrix( z.tilde, length(y.grid), length(x.grid) )
##    image(x.grid, y.grid, Z.mx, zlim=range(xss$Z), main=i, col=heat.colors(10000))
##    points(x, y, cex=(xss$Z[i ,]-min(xss$Z))/30)
##    Sys.sleep(0.1)
## }


###################################################
### code chunk number 21: myFigX3
###################################################
png("myFigX3.png")
i <- 100
z.hat <- H %*% xss$Beta[i, ]
z.0 <- Hdom %*% xss$Beta[i, ]
z.tilde <- z.0 + t( t(xss$Z[i, ] - z.hat) %*% bb )
Z.mx <- matrix( z.tilde, length(y.grid), length(x.grid) )
image(x.grid, y.grid, Z.mx, zlim=range(xss$Z), main=i, col=heat.colors(10000))
points(x, y, cex=(xss$Z[i ,]-min(xss$Z))/30)
dev.off()


###################################################
### code chunk number 22: SSsimple.Snw:440-441
###################################################
library(maps)


###################################################
### code chunk number 23: a14
###################################################
## library(maps)
data(SS_O3) #### two dataframes, Z and locs
Z <- SS_O3$Z
locs <- SS_O3$locs
xdate <- row.names(Z)
x <- locs[ ,1]
y <- locs[ ,2]
Z <- as.matrix(Z)
tt <- nrow(Z)
n <- ncol(Z)
Dx <- tcrossprod(x, rep(1, n)) - tcrossprod(rep(1, n), x)
Dy <- tcrossprod(y, rep(1, n)) - tcrossprod(rep(1, n), y)
D <- sqrt( Dx^2 + Dy^2 )


###################################################
### code chunk number 24: a15 (eval = FALSE)
###################################################
## for(i in 1:tt) {
## 	plot(x, y, cex=(Z[i ,]-min(Z))/30, main=xdate[i])
## ##	map("state", "california", add=TRUE)
## 	Sys.sleep(1/5)
## }


###################################################
### code chunk number 25: SSsimple.Snw:468-471
###################################################
i <- 600
plot(x, y, cex=(Z[i ,]-min(Z))/30, main=xdate[i])
map("state", "california", add=TRUE)


###################################################
### code chunk number 26: a16
###################################################
Q <- 1
F <- 1
R <- 1
H <- matrix( 1, n, 1 )

xslv <- SS.solve(Z=Z, F=F, Q=Q, H=H, R=R, length.out=tt, P0=10^5, beta0=0)

Z.hat <- t(H %*% t(xslv$B.apri))
sqrt( mean( ( Z - Z.hat )[10:tt, ]^2 ) )


###################################################
### code chunk number 27: a17
###################################################
ux <- I(1:3)*pi / 20
uy <- I(1:3)*pi / 20
Hx <- H.omega.sincos( x, ux )
Hy <- H.omega.sincos( y, uy )
H <- cbind( rep(1,n), Hx, Hy )
R <- exp( -0.11 * D )
Q <- 1
F <- 1

xslv <- SS.solve(Z=Z, F=F, Q=Q, H=H, R=R, length.out=tt, P0=10^5, beta0=0)

Z.hat <- t(H %*% t(xslv$B.apri))
sqrt( mean( ( Z - Z.hat )[10:tt, ]^2 ) )


###################################################
### code chunk number 28: a18
###################################################
x.grid <- seq( min(x)-0.5, max(x)+0.5, length=100 )
y.grid <- seq( min(y)-0.5, max(y)+0.5, length=100 )
xdom <- rep( x.grid, length(y.grid) )
ydom <- rep( y.grid, each=length(x.grid) )
Hx.dom <- H.omega.sincos( xdom, ux )
Hy.dom <- H.omega.sincos( ydom, uy )
Hdom <- cbind( rep(1, length(xdom)), Hx.dom, Hy.dom )


###################################################
### code chunk number 29: a19 (eval = FALSE)
###################################################
## for(i in 1:nrow(Z)) {
##    Z.mx <- matrix( Hdom %*% xslv$B.apri[i, ], length(y.grid), length(x.grid) )
##    image(x.grid, y.grid, Z.mx, zlim=range(Z), main=xdate[i], col=heat.colors(10000))
##    points(x, y, cex=(Z[i ,]-min(Z))/30)
##    map("state", "california", add=TRUE)
##    Sys.sleep(0.1)
## }


###################################################
### code chunk number 30: myFigX4
###################################################
png("myFigX4.png")
i=600
Z.mx <- matrix( Hdom %*% xslv$B.apri[i, ], length(y.grid), length(x.grid) )
image(x.grid, y.grid, Z.mx, zlim=range(Z), main=xdate[i], col=heat.colors(10000))
points(x, y, cex=(Z[i ,]-min(Z))/30)
map("state", "california", add=TRUE)
dev.off()


###################################################
### code chunk number 31: a20
###################################################
####################### tensor bases
H <- matrix(NA, nrow(Hx), ncol(Hx)*ncol(Hy))
k <- 0
for(i in 1:ncol(Hx)) {
   for(j in 1:ncol(Hy)) {
      k <- k+1
      H[ , k]  <- Hx[ ,i ] * Hy[ , j]
   }
}
H <- cbind( rep(1,n), H ) ### add intercept
R <- exp( -0.11 * D )
Q <- 1
F <- 1

xslv <- SS.solve(Z=Z, F=F, Q=Q, H=H, R=R, length.out=tt, P0=10^5, beta0=0)

Z.hat <- t(H %*% t(xslv$B.apri))
sqrt( mean( ( Z - Z.hat )[10:tt, ]^2 ) )

####### new sites
Hdom <- matrix(NA, nrow(Hx.dom), ncol(Hx.dom)*ncol(Hy.dom))
k <- 0
for(i in 1:ncol(Hx.dom)) {
   for(j in 1:ncol(Hy.dom)) {
      k <- k+1
      Hdom[ , k]  <- Hx.dom[ ,i ] * Hy.dom[ , j]
   }
}
Hdom <- cbind( rep(1, length(xdom)), Hdom )


###################################################
### code chunk number 32: a21 (eval = FALSE)
###################################################
## for(i in 1:nrow(Z)) { ;
##    Z.mx <- matrix( Hdom %*% xslv$B.apri[i, ], length(y.grid), length(x.grid) ) ;
##    image(x.grid, y.grid, Z.mx, zlim=range(Z), main=xdate[i], col=heat.colors(10000)) ;
##    points(x, y, cex=(Z[i ,]-min(Z))/30) ;
##    map("state", "california", add=TRUE) ;
##    Sys.sleep(0.1) ;
## }


###################################################
### code chunk number 33: myFigX2
###################################################
png("myFigX2.png")
i=600
Z.mx <- matrix( Hdom %*% xslv$B.apri[i, ], length(y.grid), length(x.grid) )
image(x.grid, y.grid, Z.mx, zlim=range(Z), main=xdate[i], col=heat.colors(10000))
points(x, y, cex=(Z[i ,]-min(Z))/30)
map("state", "california", add=TRUE)
dev.off()


###################################################
### code chunk number 34: a22
###################################################
H <- diag(1, n)
R <- diag(1, n)
d <- ncol(H)
F <- diag(1, d)
Q <- 1

xslv <- SS.solve(Z=Z, F=F, Q=Q, H=H, R=R, length.out=tt, P0=10^5, beta0=0)

Z.hat <- t(H %*% t(xslv$B.apri))
sqrt( mean( ( Z - Z.hat )[10:tt, ]^2 ) )

x.grid <- seq( min(x)-0.5, max(x)+0.5, length=300 )
y.grid <- seq( min(y)-0.5, max(y)+0.5, length=300 )
xdom <- rep( x.grid, length(y.grid) )
ydom <- rep( y.grid, each=length(x.grid) )

Dx.dom <- tcrossprod(x, rep(1, length(xdom))) - tcrossprod(rep(1, n), xdom)
Dy.dom <- tcrossprod(y, rep(1, length(ydom))) - tcrossprod(rep(1, n), ydom)
D.dom <- t(  sqrt( Dx.dom^2 + Dy.dom^2 )  )
xmin <- apply(D.dom, 1, min)
xmin.mx <- matrix( xmin, nrow(D.dom), ncol(D.dom) )
Hdom <- matrix( as.integer( D.dom == xmin.mx ), nrow(D.dom), ncol(D.dom) )
rm( Dx.dom, Dy.dom, D.dom )


###################################################
### code chunk number 35: a23 (eval = FALSE)
###################################################
## for(i in 1:nrow(Z)) {
##    Z.mx <- matrix( Hdom %*% xslv$B.apri[i, ], length(y.grid), length(x.grid) )
##    image(x.grid, y.grid, Z.mx, zlim=range(Z), main=xdate[i], col=heat.colors(10000))
##    points(x, y, cex=(Z[i ,]-min(Z))/30)
##    map("state", "california", add=TRUE)
##    Sys.sleep(0.1)
## }


###################################################
### code chunk number 36: myFigX1
###################################################
png("myFigX1.png")
i <- 600
Z.mx <- matrix( Hdom %*% xslv$B.apri[i, ], length(y.grid), length(x.grid) )
image(x.grid, y.grid, Z.mx, zlim=range(Z), main=xdate[i], col=heat.colors(10000))
points(x, y, cex=(Z[i ,]-min(Z))/30)
map("state", "california", add=TRUE)
dev.off()


###################################################
### code chunk number 37: a24
###################################################
xid <- SS.ID( Z + rnorm(tt*ncol(Z), 0, 0.1) , d=7, rsN <- c(3, 3, 350) ) ;
xslv <- SS.solve(Z=Z, F=xid$F, Q=xid$Q, H=xid$H, R=xid$R, length.out=tt, 
   P0=10^5, beta0=0) ;
Z.hat <- t(xid$H %*% t(xslv$B.apri)) ;
sqrt( mean( ( Z - Z.hat )[10:tt, ]^2 ) )


###################################################
### code chunk number 38: a25
###################################################
data(SS_O3) #### two dataframes, Z and locs
Z <- SS_O3$Z
locs <- SS_O3$locs
xdate <- row.names(Z)
x <- locs[ ,1]
y <- locs[ ,2]
Z <- as.matrix(Z)
tt <- nrow(Z)
n <- ncol(Z)
Dx <- tcrossprod(x, rep(1, n)) - tcrossprod(rep(1, n), x)
Dy <- tcrossprod(y, rep(1, n)) - tcrossprod(rep(1, n), y)
D <- sqrt( Dx^2 + Dy^2 )


###################################################
### code chunk number 39: a26a
###################################################
options(width=75)


###################################################
### code chunk number 40: a26
###################################################
d <- 1
H <- matrix(1, n, d)
F <- 1
Q <- 1


###################################################
### code chunk number 41: a27 (eval = FALSE)
###################################################
## for( alpha in I(2^(-5:4)) ) { ; #### this will take a while ...
##    Z.tilde <- matrix(NA, tt, n)
##    R <- exp( -alpha*D )
##    for( ii in 1:n ) {
##       cat(ii, " ")
##       bb <- solve( R[ -ii, -ii] ) %*% R[ -ii, ii]
##       xslv <- SS.solve(Z[ , -ii], F=F, Q=Q, H=H[-ii, , drop=FALSE], 
##          R=R[ -ii, -ii], length.out=tt, P0=10^5, beta0=0)
##       Z.hat <- t(  H[-ii, , drop=FALSE] %*% t(xslv$B.apos)  )
##       z.0 <- H[ ii, , drop=FALSE ] %*% t(xslv$B.apos)
##       cov.adj <- (Z[ , -ii] - Z.hat) %*% bb
##       z.tilde <- t(z.0) + cov.adj
##       Z.tilde[ , ii] <- z.tilde[ , 1]
##    } ;
##    rmse <- sqrt( mean( ( Z - Z.tilde )[10:tt, ]^2 ) )
##    cat( alpha, rmse, "\n" )
## }


###################################################
### code chunk number 42: a28
###################################################
alpha <- 1
R <- exp( -alpha*D )

xslv <- SS.solve(Z=Z, F=F, Q=Q, H=H, R=R, length.out=tt, P0=10^5, beta0=0)

x.grid <- seq( min(x)-0.5, max(x)+0.5, length=100 )
y.grid <- seq( min(y)-0.5, max(y)+0.5, length=100 )
xdom <- rep( x.grid, length(y.grid) )
ydom <- rep( y.grid, each=length(x.grid) )

Dx.dom <- tcrossprod(x, rep(1, length(xdom))) - tcrossprod(rep(1, n), xdom)
Dy.dom <- tcrossprod(y, rep(1, length(ydom))) - tcrossprod(rep(1, n), ydom)
D.dom <- t(  sqrt( Dx.dom^2 + Dy.dom^2 )  )

R0 <- exp(-alpha*D.dom)
bb <- solve(R) %*% t(R0)

Hdom <- matrix(1, length(xdom), 1)


###################################################
### code chunk number 43: a29 (eval = FALSE)
###################################################
## for(i in 1:nrow(Z)) {
##    z.hat <- H %*% xslv$B.apos[i, ]
##    z.0 <- Hdom %*% xslv$B.apos[i, ]
##    z.tilde <- z.0 + t( t(Z[i, ] - z.hat) %*% bb )
##    Z.mx <- matrix( z.tilde, length(y.grid), length(x.grid) )
##    image(x.grid, y.grid, Z.mx, zlim=range(Z), main=xdate[i], col=heat.colors(10000))
##    points(x, y, cex=(Z[i ,]-min(Z))/30)
##    map("state", "california", add=TRUE)
##    Sys.sleep(0.1)
## }


###################################################
### code chunk number 44: myFigX
###################################################
png("myFigX.png")
i <- 600
z.hat <- H %*% xslv$B.apos[i, ]
z.0 <- Hdom %*% xslv$B.apos[i, ]
z.tilde <- z.0 + t( t(Z[i, ] - z.hat) %*% bb )
Z.mx <- matrix( z.tilde, length(y.grid), length(x.grid) )
image(x.grid, y.grid, Z.mx, zlim=range(Z), main=xdate[i], col=heat.colors(10000))
points(x, y, cex=(Z[i ,]-min(Z))/30)
map("state", "california", add=TRUE)
dev.off()

Try the SSsimple package in your browser

Any scripts or data that you put into this service are public.

SSsimple documentation built on Dec. 7, 2019, 9:06 a.m.