inst/doc/SNS.R

### R code from vignette source 'SNS.Rnw'

###################################################
### code chunk number 1: SNS.Rnw:111-112
###################################################
options(prompt = "R> ", continue = "+  ", width = 80, useFancyQuotes = FALSE)


###################################################
### code chunk number 2: SNS.Rnw:315-318
###################################################
library("sns")
library("mvtnorm")
my.seed <- 0


###################################################
### code chunk number 3: SNS.Rnw:321-328
###################################################
logdensity.mvg <- function(x, mu, isigsq) {
  f <- dmvnorm(x = as.numeric(x),
    mean = mu, sigma = solve(isigsq), log = TRUE)
  g <- - isigsq %*% (x - mu)
  h <- -isigsq
  return (list(f = f, g = g, h = h))
}


###################################################
### code chunk number 4: SNS.Rnw:331-340
###################################################
set.seed(my.seed)
K <- 3
mu <- runif(K, min = -0.5, max = +0.5)
isigsq <- matrix(runif(K*K, min = 0.1, max = 0.2), ncol = K)
isigsq <- 0.5*(isigsq + t(isigsq))
diag(isigsq) <- rep(0.5, K)
x.init <- rep(0.0, K)
x.smp <- sns.run(x.init, logdensity.mvg, niter = 500,
  mh.diag = TRUE, mu = mu, isigsq = isigsq)


###################################################
### code chunk number 5: SNS.Rnw:343-344
###################################################
summary(x.smp)


###################################################
### code chunk number 6: SNS.Rnw:354-361
###################################################
have_regression_factory <- require("RegressionFactory")
if (have_regression_factory) {
  loglike.poisson <- function(beta, X, y) {
    regfac.expand.1par(beta, X = X, y = y,
      fbase1 = fbase1.poisson.log)
  }
}


###################################################
### code chunk number 7: SNS.Rnw:363-367 (eval = FALSE)
###################################################
## loglike.poisson <- function(beta, X, y) {
##   regfac.expand.1par(beta, X = X, y = y,
##     fbase1 = fbase1.poisson.log)
## }


###################################################
### code chunk number 8: SNS.Rnw:370-376
###################################################
set.seed(my.seed)
K <- 5
N <- 1000
X <- matrix(runif(N * K, -0.5, +0.5), ncol = K)
beta <- runif(K, -0.5, +0.5)
y <- rpois(N, exp(X %*% beta))


###################################################
### code chunk number 9: SNS.Rnw:379-382
###################################################
beta.init <- rep(0.0, K)
beta.glm <- glm(y ~ X - 1, family = "poisson",
  start = beta.init)$coefficients


###################################################
### code chunk number 10: SNS.Rnw:385-391
###################################################
if (have_regression_factory) {
  beta.sns <- sns.run(beta.init, fghEval = loglike.poisson,
    niter = 20, nnr = 20, X = X, y = y)
  beta.nr <- beta.sns[20, ]
  cbind(beta.glm, beta.nr)
}


###################################################
### code chunk number 11: SNS.Rnw:393-397 (eval = FALSE)
###################################################
## beta.sns <- sns.run(beta.init, fghEval = loglike.poisson,
##   niter = 20, nnr = 20, X = X, y = y)
## beta.nr <- beta.sns[20, ]
## cbind(beta.glm, beta.nr)


###################################################
### code chunk number 12: SNS.Rnw:400-404
###################################################
if (have_regression_factory) {
  beta.smp <- sns.run(beta.init, loglike.poisson
    , niter = 200, nnr = 20, mh.diag = TRUE, X = X, y = y)
}


###################################################
### code chunk number 13: SNS.Rnw:406-408 (eval = FALSE)
###################################################
## beta.smp <- sns.run(beta.init, loglike.poisson
##   , niter = 200, nnr = 20, mh.diag = TRUE, X = X, y = y)


###################################################
### code chunk number 14: lp_plot
###################################################
if (have_regression_factory) {
  plot(beta.smp, select = 1)
} else {
  plot(1:10)
}


###################################################
### code chunk number 15: SNS.Rnw:418-419 (eval = FALSE)
###################################################
## plot(beta.smp, select = 1)


###################################################
### code chunk number 16: fig1
###################################################
if (have_regression_factory) {
  plot(beta.smp, select = 1)
} else {
  plot(1:10)
}


###################################################
### code chunk number 17: SNS.Rnw:429-432
###################################################
if (have_regression_factory) {
  summary(beta.smp)
}


###################################################
### code chunk number 18: SNS.Rnw:434-435 (eval = FALSE)
###################################################
## summary(beta.smp)


###################################################
### code chunk number 19: SNS.Rnw:440-445
###################################################
if (have_regression_factory) {
  beta.smp <- sns.run(beta.init, loglike.poisson,
    niter = 1000, nnr = 20, mh.diag = TRUE, X = X, y = y)
  predmean.poisson <- function(beta, Xnew) exp(Xnew %*% beta)
}


###################################################
### code chunk number 20: SNS.Rnw:447-450 (eval = FALSE)
###################################################
## beta.smp <- sns.run(beta.init, loglike.poisson,
##   niter = 1000, nnr = 20, mh.diag = TRUE, X = X, y = y)
## predmean.poisson <- function(beta, Xnew) exp(Xnew %*% beta)


###################################################
### code chunk number 21: SNS.Rnw:453-457
###################################################
if (have_regression_factory) {
  ymean.new <- predict(beta.smp, predmean.poisson,
    nburnin = 100, Xnew = X)
}


###################################################
### code chunk number 22: SNS.Rnw:459-461 (eval = FALSE)
###################################################
## ymean.new <- predict(beta.smp, predmean.poisson,
##   nburnin = 100, Xnew = X)


###################################################
### code chunk number 23: SNS.Rnw:466-472
###################################################
if (have_regression_factory) {
  predsmp.poisson <- function(beta, Xnew)
    rpois(nrow(Xnew), exp(Xnew %*% beta))
  ysmp.new <- predict(beta.smp, predsmp.poisson
    , nburnin = 100, Xnew = X)
}


###################################################
### code chunk number 24: SNS.Rnw:474-478 (eval = FALSE)
###################################################
## predsmp.poisson <- function(beta, Xnew)
##   rpois(nrow(Xnew), exp(Xnew %*% beta))
## ysmp.new <- predict(beta.smp, predsmp.poisson
##   , nburnin = 100, Xnew = X)


###################################################
### code chunk number 25: SNS.Rnw:481-484
###################################################
if (have_regression_factory) {
  summary(ymean.new)
}


###################################################
### code chunk number 26: SNS.Rnw:486-487 (eval = FALSE)
###################################################
## summary(ymean.new)


###################################################
### code chunk number 27: SNS.Rnw:493-496
###################################################
if (have_regression_factory) {
  summary(ysmp.new)
}


###################################################
### code chunk number 28: SNS.Rnw:498-499 (eval = FALSE)
###################################################
## summary(ysmp.new)


###################################################
### code chunk number 29: SNS.Rnw:511-522
###################################################
if (have_regression_factory) {
  set.seed(my.seed)
  K <- 100
  X <- matrix(runif(N * K, -0.5, +0.5), ncol = K)
  beta <- runif(K, -0.5, +0.5)
  y <- rpois(N, exp(X %*% beta))
  beta.init <- glm(y ~ X - 1, family = "poisson")$coefficients
  beta.smp <- sns.run(beta.init, loglike.poisson,
    niter = 100, nnr = 10, mh.diag = TRUE, X = X, y = y)
  summary(beta.smp)
}


###################################################
### code chunk number 30: SNS.Rnw:524-533 (eval = FALSE)
###################################################
## set.seed(my.seed)
## K <- 100
## X <- matrix(runif(N * K, -0.5, +0.5), ncol = K)
## beta <- runif(K, -0.5, +0.5)
## y <- rpois(N, exp(X %*% beta))
## beta.init <- glm(y ~ X - 1, family = "poisson")$coefficients
## beta.smp <- sns.run(beta.init, loglike.poisson,
##   niter = 100, nnr = 10, mh.diag = TRUE, X = X, y = y)
## summary(beta.smp)


###################################################
### code chunk number 31: SNS.Rnw:541-547
###################################################
if (have_regression_factory) {
  beta.smp.part <- sns.run(beta.init, loglike.poisson,
    niter = 100, nnr = 10, mh.diag = TRUE,
    part = sns.make.part(K, 10), X = X, y = y)
  summary(beta.smp.part)
}


###################################################
### code chunk number 32: SNS.Rnw:549-553 (eval = FALSE)
###################################################
## beta.smp.part <- sns.run(beta.init, loglike.poisson,
##   niter = 100, nnr = 10, mh.diag = TRUE,
##   part = sns.make.part(K, 10), X = X, y = y)
## summary(beta.smp.part)


###################################################
### code chunk number 33: ssp_plot
###################################################
if (have_regression_factory) {
  par(mfrow = c(1,2))
  plot(beta.smp, select = 1)
  plot(beta.smp.part, select = 1)
} else {
  plot(1:10)
}


###################################################
### code chunk number 34: SNS.Rnw:570-573 (eval = FALSE)
###################################################
## par(mfrow = c(1,2))
## plot(beta.smp, select = 1)
## plot(beta.smp.part, select = 1)


###################################################
### code chunk number 35: fig1
###################################################
if (have_regression_factory) {
  par(mfrow = c(1,2))
  plot(beta.smp, select = 1)
  plot(beta.smp.part, select = 1)
} else {
  plot(1:10)
}


###################################################
### code chunk number 36: SNS.Rnw:591-603
###################################################
loglike.linreg.het <- function(coeff, X, Z, y) {
  K1 <- ncol(X)
  K2 <- ncol(Z)
  beta <- coeff[1:K1]
  gamma <- coeff[K1 + 1:K2]
  
  mu <- X %*% beta
  sigma <- sqrt(exp(Z %*% gamma))
  f <- sum(dnorm(y, mu, sigma, log = TRUE))
  
  return (f)
}


###################################################
### code chunk number 37: SNS.Rnw:606-617
###################################################
set.seed(my.seed)
K1 <- 5
K2 <- 5
N <- 1000
X <- matrix(runif(N * K1, -0.5, +0.5), ncol = K1)
Z <- matrix(runif(N * K2, -0.5, +0.5), ncol = K2)
beta <- runif(K1, -0.5, +0.5)
gamma <- runif(K1, -0.5, +0.5)
mu <- X %*% beta
var <- exp(Z %*% gamma)
y <- rnorm(N, X %*% beta, sd = sqrt(var))


###################################################
### code chunk number 38: SNS.Rnw:620-625
###################################################
coeff.init <- rep(0.0, K1 + K2)
check.logdensity <- sns.check.logdensity(coeff.init, loglike.linreg.het
  , X = X, Z = Z, y = y, dx = 1, nevals = 10
  , blocks = list(1:(K1+K2), 1:K1, K1 + 1:K2))
check.logdensity


###################################################
### code chunk number 39: SNS.Rnw:649-665
###################################################
if (have_regression_factory) {
  loglike.linreg.het.beta <- function(beta, gamma, X, Z, y) {
    K1 <- length(beta)
    ret <- regfac.expand.2par(c(beta, gamma), X, Z, y
      , fbase2 = fbase2.gaussian.identity.log)
    return (list(f = ret$f, g = ret$g[1:K1], h = ret$h[1:K1, 1:K1]))
  }
  loglike.linreg.het.gamma <- function(gamma, beta, X, Z, y) {
    K1 <- length(beta)
    K2 <- length(gamma)
    ret <- regfac.expand.2par(c(beta, gamma), X, Z, y
      , fbase2 = fbase2.gaussian.identity.log)
    return (list(f = ret$f, g = ret$g[K1 + 1:K2]
             , h = ret$h[K1 + 1:K2, K1 + 1:K2]))
  }
}


###################################################
### code chunk number 40: SNS.Rnw:667-681 (eval = FALSE)
###################################################
## loglike.linreg.het.beta <- function(beta, gamma, X, Z, y) {
##   K1 <- length(beta)
##   ret <- regfac.expand.2par(c(beta, gamma), X, Z, y
##     , fbase2 = fbase2.gaussian.identity.log)
##   return (list(f = ret$f, g = ret$g[1:K1], h = ret$h[1:K1, 1:K1]))
## }
## loglike.linreg.het.gamma <- function(gamma, beta, X, Z, y) {
##   K1 <- length(beta)
##   K2 <- length(gamma)
##   ret <- regfac.expand.2par(c(beta, gamma), X, Z, y
##     , fbase2 = fbase2.gaussian.identity.log)
##   return (list(f = ret$f, g = ret$g[K1 + 1:K2]
##            , h = ret$h[K1 + 1:K2, K1 + 1:K2]))
## }


###################################################
### code chunk number 41: SNS.Rnw:684-703
###################################################
if (have_regression_factory) {
  nsmp <- 100
  beta.iter <- rep(0.0, K1)
  gamma.iter <- rep(0.0, K2)
  beta.smp <- array(NA, dim = c(nsmp, K1))
  gamma.smp <- array(NA, dim = c(nsmp, K1))
  for (n in 1:nsmp) {
    beta.iter <- sns(beta.iter, loglike.linreg.het.beta
      , gamma = gamma.iter, X = X, Z = Z, y = y, rnd = nsmp>10)
    gamma.iter <- sns(gamma.iter, loglike.linreg.het.gamma
      , beta = beta.iter, X = X, Z = Z, y = y, rnd = nsmp>10)
    beta.smp[n, ] <- beta.iter
    gamma.smp [n, ] <- gamma.iter
  }
  beta.est <- colMeans(beta.smp[(nsmp/2+1):nsmp, ])
  gamma.est <- colMeans(gamma.smp[(nsmp/2+1):nsmp, ])
  print(cbind(beta, beta.est))
  print(cbind(gamma, gamma.est))
}


###################################################
### code chunk number 42: SNS.Rnw:705-722 (eval = FALSE)
###################################################
## nsmp <- 100
## beta.iter <- rep(0.0, K1)
## gamma.iter <- rep(0.0, K2)
## beta.smp <- array(NA, dim = c(nsmp, K1))
## gamma.smp <- array(NA, dim = c(nsmp, K1))
## for (n in 1:nsmp) {
##   beta.iter <- sns(beta.iter, loglike.linreg.het.beta
##     , gamma = gamma.iter, X = X, Z = Z, y = y, rnd = nsmp>10)
##   gamma.iter <- sns(gamma.iter, loglike.linreg.het.gamma
##     , beta = beta.iter, X = X, Z = Z, y = y, rnd = nsmp>10)
##   beta.smp[n, ] <- beta.iter
##   gamma.smp [n, ] <- gamma.iter
## }
## beta.est <- colMeans(beta.smp[(nsmp/2+1):nsmp, ])
## gamma.est <- colMeans(gamma.smp[(nsmp/2+1):nsmp, ])
## cbind(beta, beta.est)
## cbind(gamma, gamma.est)


###################################################
### code chunk number 43: SNS.Rnw:725-746
###################################################
have_mfu <- require("MfUSampler")
if (have_mfu && have_regression_factory) {
  loglike.linreg.het.gamma.fonly <- function(gamma, beta, X, Z, y) {
    return (regfac.expand.2par(c(beta, gamma), X, Z, y
      , fbase2 = fbase2.gaussian.identity.log, fgh = 0))
  }
  beta.iter <- rep(0.0, K1)
  gamma.iter <- rep(0.0, K2)
  for (n in 1:nsmp) {
    beta.iter <- sns(beta.iter, loglike.linreg.het.beta
      , gamma = gamma.iter, X = X, Z = Z, y = y, rnd = nsmp>10)
    gamma.iter <- MfU.Sample(gamma.iter, loglike.linreg.het.gamma.fonly
      , beta = beta.iter, X = X, Z = Z, y = y)
    beta.smp[n, ] <- beta.iter
    gamma.smp [n, ] <- gamma.iter
  }
  beta.est.mix <- colMeans(beta.smp[(nsmp/2+1):nsmp, ])
  gamma.est.mix <- colMeans(gamma.smp[(nsmp/2+1):nsmp, ])
  print(cbind(beta, beta.est.mix))
  print(cbind(gamma, gamma.est.mix))
}


###################################################
### code chunk number 44: SNS.Rnw:748-766 (eval = FALSE)
###################################################
## loglike.linreg.het.gamma.fonly <- function(gamma, beta, X, Z, y) {
##   return (regfac.expand.2par(c(beta, gamma), X, Z, y
##     , fbase2 = fbase2.gaussian.identity.log, fgh = 0))
## }
## beta.iter <- rep(0.0, K1)
## gamma.iter <- rep(0.0, K2)
## for (n in 1:nsmp) {
##   beta.iter <- sns(beta.iter, loglike.linreg.het.beta
##     , gamma = gamma.iter, X = X, Z = Z, y = y, rnd = nsmp>10)
##   gamma.iter <- MfU.Sample(gamma.iter, loglike.linreg.het.gamma.fonly
##     , beta = beta.iter, X = X, Z = Z, y = y)
##   beta.smp[n, ] <- beta.iter
##   gamma.smp [n, ] <- gamma.iter
## }
## beta.est.mix <- colMeans(beta.smp[(nsmp/2+1):nsmp, ])
## gamma.est.mix <- colMeans(gamma.smp[(nsmp/2+1):nsmp, ])
## cbind(beta, beta.est.mix)
## cbind(gamma, gamma.est.mix)


###################################################
### code chunk number 45: SNS.Rnw:770-788
###################################################
if (have_regression_factory && have_mfu) {
  loglike.linreg.het.gamma.numaug <- 
    sns.fghEval.numaug(loglike.linreg.het.gamma.fonly, numderiv = 2)
  beta.iter <- rep(0.0, K1)
  gamma.iter <- rep(0.0, K2)
  for (n in 1:nsmp) {
    beta.iter <- sns(beta.iter, loglike.linreg.het.beta
      , gamma = gamma.iter, X = X, Z = Z, y = y, rnd = nsmp>10)
    gamma.iter <- sns(gamma.iter, loglike.linreg.het.gamma
      , beta = beta.iter, X = X, Z = Z, y = y, rnd = nsmp>10)
    beta.smp[n, ] <- beta.iter
    gamma.smp [n, ] <- gamma.iter
  }
  beta.est.num <- colMeans(beta.smp[(nsmp/2+1):nsmp, ])
  gamma.est.num <- colMeans(gamma.smp[(nsmp/2+1):nsmp, ])
  print(cbind(beta, beta.est.num))
  print(cbind(gamma, gamma.est.num))
}


###################################################
### code chunk number 46: SNS.Rnw:790-806 (eval = FALSE)
###################################################
## loglike.linreg.het.gamma.numaug <- 
##   sns.fghEval.numaug(loglike.linreg.het.gamma.fonly, numderiv = 2)
## beta.iter <- rep(0.0, K1)
## gamma.iter <- rep(0.0, K2)
## for (n in 1:nsmp) {
##   beta.iter <- sns(beta.iter, loglike.linreg.het.beta
##     , gamma = gamma.iter, X = X, Z = Z, y = y, rnd = nsmp>10)
##   gamma.iter <- sns(gamma.iter, loglike.linreg.het.gamma
##     , beta = beta.iter, X = X, Z = Z, y = y, rnd = nsmp>10)
##   beta.smp[n, ] <- beta.iter
##   gamma.smp [n, ] <- gamma.iter
## }
## beta.est.num <- colMeans(beta.smp[(nsmp/2+1):nsmp, ])
## gamma.est.num <- colMeans(gamma.smp[(nsmp/2+1):nsmp, ])
## cbind(beta, beta.est.num)
## cbind(gamma, gamma.est.num)


###################################################
### code chunk number 47: SNS.Rnw:875-876
###################################################
sessionInfo()

Try the sns package in your browser

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

sns documentation built on Nov. 2, 2022, 5:15 p.m.