Nothing
# Copyright 2010-2018 Google LLC. All Rights Reserved.
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation; either
# version 2.1 of the License, or (at your option) any later version.
#
# This library is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with this library; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
library(BoomSpikeSlab)
library(testthat)
seed <- 8675309
set.seed(seed)
cat("test-spike-slab\n")
n <- 200
p <- 10
ngood = 3
niter = 1000
sigma = 8
x <- cbind(1, matrix(rnorm(n * (p - 1)), nrow = n))
beta <- c(rnorm(ngood, sd = 4), rep(0, p - ngood))
y <- rnorm(n, x %*% beta, sigma)
x <- x[, -1]
## 'draws' is fit using a matrix in the parent frame.
draws <- lm.spike(y ~ x, niter = niter, ping = -1, seed = seed)
draws$x <- x
draws$y <- y
draws$true.beta <- beta
draws$true.sigma <- sigma
## 'model.from.data' is fit using a data frame distributed with base R.
model.from.data <- lm.spike(sr ~ ., niter = 100, ping = -1,
data = LifeCycleSavings, seed = seed)
test_that("lm.spike returns basic info", {
expect_true(is.list(draws))
expect_true("prior" %in% names(draws))
expect_true("beta" %in% names(draws))
expect_true("sigma" %in% names(draws))
sigma.lo <- quantile(draws$sigma, .005)
sigma.hi <- quantile(draws$sigma, .995)
expect_true(sigma > sigma.lo & sigma < sigma.hi)
smry <- summary(draws)
expect_equal(ncol(smry$coef), 5)
})
test_that("lm.spike works with student errors", {
y[1] <- 500
model <- lm.spike(y ~ x, niter = niter, ping = -1,
error.distribution = "student", seed = seed)
expect_true("prior" %in% names(model))
expect_true("beta" %in% names(model))
expect_true("sigma" %in% names(model))
expect_true("tail.thickness" %in% names(model))
expect_true(all(model$sigma > 0))
expect_true(CheckMcmcVector(model$sigma, truth = sigma))
expect_true(median(model$tail.thickness) < 7)
expect_true(all(model$tail.thickness > 0))
expect_true(CheckMcmcMatrix(model$beta, beta),
info = McmcMatrixReport(model$beta, beta))
})
TestSpikeSlabPrior <- function() {
## TODO(steve): make a test for SpikeSlabPrior
}
test_that("predict.lm.spike produces prediction", {
model <- lm.spike(Income ~ ., data = as.data.frame(state.x77),
niter = 100, ping = -1)
pred <- predict(model, newdata = as.data.frame(state.x77))
expect_true(is.matrix(pred))
expect_true(nrow(pred) == nrow(state.x77))
})
test_that("lm.spike works with degenerate predictor matrix", {
## In this test, a design matrix containing a vector of all 0's is
## generated. We should be able to run this matrix through lm.spike
## without crashing.
x1 <- sample(c("a", "b"), 100, TRUE)
x1a <- x1 == "a"
x1b <- x1 == "b"
y <- rnorm(100)
df <- data.frame(y, x1a, x1b)
ss.model <- lm.spike("y ~ x1a * x1b", niter = 100, ping = -1, data = df)
})
test_that("plot functions can be called", {
## This function just checks that the generic plot functions can be
## called without falling over.
tmp.file <- tempfile()
png(tmp.file)
plot(draws)
plot(draws, "size")
plot(draws, "residuals")
plot(draws, "coefficients")
plot(draws, "scaled.coefficients")
dev.off()
tmp.file <- tempfile()
png(tmp.file)
plot(model.from.data)
plot(model.from.data, "size")
plot(model.from.data, "residuals")
plot(model.from.data, "coefficients")
plot(model.from.data, "scaled.coefficients")
dev.off()
})
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.