https://github.com/cran/sns
Raw File
Tip revision: 075be1a8012f72bb2248bac416ce04bddff192ac authored by Alireza Mahani on 29 July 2015, 00:00:00 UTC
version 1.1.0
Tip revision: 075be1a
SNS.R
### R code from vignette source 'SNS.Rnw'
### Encoding: UTF-8

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


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


###################################################
### code chunk number 3: SNS.Rnw:319-326
###################################################
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:329-338
###################################################
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:341-342
###################################################
summary(x.smp)


###################################################
### code chunk number 6: SNS.Rnw:352-357
###################################################
library("RegressionFactory")
loglike.poisson <- function(beta, X, y) {
  regfac.expand.1par(beta, X = X, y = y,
    fbase1 = fbase1.poisson.log)
}


###################################################
### code chunk number 7: SNS.Rnw:360-366
###################################################
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 8: SNS.Rnw:369-372
###################################################
beta.init <- rep(0.0, K)
beta.glm <- glm(y ~ X - 1, family = "poisson",
  start = beta.init)$coefficients


###################################################
### code chunk number 9: SNS.Rnw:375-379
###################################################
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 10: SNS.Rnw:382-384
###################################################
beta.smp <- sns.run(beta.init, loglike.poisson
  , niter = 200, nnr = 20, mh.diag = TRUE, X = X, y = y)


###################################################
### code chunk number 11: lp_plot
###################################################
plot(beta.smp, select = 1)


###################################################
### code chunk number 12: fig1
###################################################
plot(beta.smp, select = 1)


###################################################
### code chunk number 13: SNS.Rnw:398-399
###################################################
summary(beta.smp)


###################################################
### code chunk number 14: SNS.Rnw:404-407
###################################################
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 15: SNS.Rnw:410-412
###################################################
ymean.new <- predict(beta.smp, predmean.poisson,
  nburnin = 100, Xnew = X)


###################################################
### code chunk number 16: SNS.Rnw:417-421
###################################################
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 17: SNS.Rnw:424-425
###################################################
summary(ymean.new)


###################################################
### code chunk number 18: SNS.Rnw:431-432
###################################################
summary(ysmp.new)


###################################################
### code chunk number 19: SNS.Rnw:444-453
###################################################
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 20: SNS.Rnw:461-465
###################################################
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 21: ssp_plot
###################################################
par(mfrow = c(1,2))
plot(beta.smp, select = 1)
plot(beta.smp.part, select = 1)


###################################################
### code chunk number 22: fig1
###################################################
par(mfrow = c(1,2))
plot(beta.smp, select = 1)
plot(beta.smp.part, select = 1)


###################################################
### code chunk number 23: SNS.Rnw:494-506
###################################################
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 24: SNS.Rnw:509-520
###################################################
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 25: SNS.Rnw:523-528
###################################################
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 26: SNS.Rnw:552-566
###################################################
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 27: SNS.Rnw:569-586
###################################################
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 28: SNS.Rnw:589-608
###################################################
library(MfUSampler)
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 29: SNS.Rnw:612-628
###################################################
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 30: SNS.Rnw:697-698
###################################################
sessionInfo()


back to top