Nothing
context("Measurement error component")
set.seed(1, kind="Mersenne-Twister", normal.kind="Inversion")
m <- 50
X <- rnorm(m, mean=5, sd=3) # true covariate values
theta <- 1 + 3*X # true values
psi <- rgamma(m, shape=4.5, scale=2)
e <- rnorm(m, sd=sqrt(psi)) # sampling error
y <- theta + e # direct estimates
C <- c(rep(3, 10), rep(0, 40)) # measurement error for first 10 values
W <- X + rnorm(m, sd=sqrt(C)) # covariate subject to measurement error
test_that("measurement error component in linear regression works", {
sampler <- create_sampler(
y ~ 1 + mec(~ 0 + W, V=C, name="ME"),
family=f_gaussian(var.prior=pr_fixed(1), var.vec=~psi),
linpred="fitted"
)
sim <- MCMCsim(sampler, burnin=200, n.iter=700, n.chain=2, store.all=TRUE, verbose=FALSE)
summ <- summary(sim)
#plot(X, W, xlab="true X", ylab="inferred X")
#points(X, summ$ME_X[, "Mean"], col="green"); abline(0, 1, col="red")
#legend("topleft", legend=c("prior mean", "posterior mean"), col=c("black", "green"), pch=c(1,1))
expect_lt(mean(abs(summ$ME_X[, "Mean"] - X)), mean(abs(W - X)))
})
test_that("measurement error component in linear regression with proper priors works", {
sampler <- create_sampler(
y ~ 1 + mec(~ 0 + W, V=C, name="ME", prior=pr_normal(precision=1)),
family=f_gaussian(var.prior=pr_fixed(1), var.vec=~psi),
linpred="fitted"
)
sim <- MCMCsim(sampler, burnin=200, n.iter=700, n.chain=2, store.all=TRUE, verbose=FALSE)
summ <- summary(sim)
expect_lt(summ$ME[, "Mean"], 3)
#plot(X, W, xlab="true X", ylab="inferred X")
#points(X, summ$ME_X[, "Mean"], col="green"); abline(0, 1, col="red")
#legend("topleft", legend=c("prior mean", "posterior mean"), col=c("black", "green"), pch=c(1,1))
expect_lt(mean(abs(summ$ME_X[, "Mean"] - X)), mean(abs(W - X)))
})
# modeled variances
m <- 400
X <- rnorm(m, mean=1, sd=3) # true covariate values
z <- rnorm(m)
eta <- -1 + 3*X # true values
y <- rnorm(m, mean=eta, sd = exp(0.5*(1 + z)))
C <- c(rep(3, 100), rep(0, 300)) # measurement error for first 100 values
W <- X + rnorm(m, sd=sqrt(C)) # covariate subject to measurement error
test_that("measurement error component in linear regression with modeled variances works", {
sampler <- create_sampler(
y ~ 1 + mec(~ 0 + W, V=C, name="ME"),
family=f_gaussian(var.prior=pr_fixed(1), var.model = ~ reg(~ z)),
linpred="fitted"
)
expect_true(sampler$modeled.Q)
sim <- MCMCsim(sampler, burnin=150, n.iter=400, n.chain=2, store.all=TRUE, verbose=FALSE)
summ <- summary(sim)
expect_between(summ$reg1[, "Mean"], 2*(-1), 0.5*(-1))
expect_between(summ$vreg1[, "Mean"], 0.5*c(1, 1), 2*c(1, 1))
expect_between(summ$ME[, "Mean"], 0.5*(3), 2*(3))
#plot(X, W, xlab="true X", ylab="inferred X")
#points(X, summ$ME_X[, "Mean"], col="green"); abline(0, 1, col="red")
#legend("topleft", legend=c("prior mean", "posterior mean"), col=c("black", "green"), pch=c(1,1))
expect_lt(mean(abs(summ$ME_X[, "Mean"] - X)), mean(abs(W - X)))
})
# generate binomial data
m <- 400
X <- rnorm(m, mean=1, sd=3) # true covariate values
eta <- -1 + 3*X # true values
y <- rbinom(m, 100, 1/(1 + exp(-eta)))
C <- c(rep(3, 100), rep(0, 300)) # measurement error for first 100 values
W <- X + rnorm(m, sd=sqrt(C)) # covariate subject to measurement error
test_that("measurement error component in non-gaussian models works", {
expect_error(
sampler <- create_sampler(
y ~ 1 + mec(~ 0 + W, V=C, name="ME"),
family=f_gaussian(var.model = ~ reg(~ 1) + mec(~ 0 + W, V=C)),
linpred="fitted"
), "mean model"
)
sampler <- create_sampler(
y ~ reg(~1, prior=pr_normal(mean=-1, precision=100)) +
mec(~ 0 + W, V=C, name="ME", debug=FALSE),
family=f_binomial(n.trial = 100),
linpred="fitted",
control=sampler_control(block=FALSE)
)
sim <- MCMCsim(sampler, burnin=150, n.iter=400, n.chain=2, store.all=TRUE, verbose=FALSE)
summ <- summary(sim)
expect_between(summ$reg1[, "Mean"], 2*(-1), 0.5*(-1))
expect_between(summ$ME[, "Mean"], 0.5*(3), 2*(3))
#plot(X, W, xlab="true X", ylab="inferred X")
#points(X, summ$ME_X[, "Mean"], col="green"); abline(0, 1, col="red")
#legend("topleft", legend=c("prior mean", "posterior mean"), col=c("black", "green"), pch=c(1,1))
expect_lt(mean(abs(summ$ME_X[, "Mean"] - X)), mean(abs(W - X)))
# fully blocked Gibbs sampler:
sampler <- create_sampler(
y ~ reg(~1, prior=pr_normal(mean=-1, precision=100)) +
mec(~ 0 + W, V=C, name="ME", debug=FALSE),
family=f_binomial(n.trial = 100),
linpred="fitted",
control=sampler_control(block=TRUE)
)
sim <- MCMCsim(sampler, burnin=150, n.iter=400, n.chain=2, store.all=TRUE, verbose=FALSE)
summ <- summary(sim)
expect_between(summ$reg1[, "Mean"], 2*(-1), 0.5*(-1))
expect_between(summ$ME[, "Mean"], 0.5*(3), 2*(3))
#plot(X, W, xlab="true X", ylab="inferred X")
#points(X, summ$ME_X[, "Mean"], col="green"); abline(0, 1, col="red")
#legend("topleft", legend=c("prior mean", "posterior mean"), col=c("black", "green"), pch=c(1,1))
expect_lt(mean(abs(summ$ME_X[, "Mean"] - X)), mean(abs(W - X)))
})
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.