Nothing
# old implementation
barnard.rubin_old <- function(m, b, t, dfcom = Inf) {
lambda <- (1 + 1 / m) * b / t
lambda[lambda < 1e-04] <- 1e-04
dfold <- (m - 1) / lambda^2
dfobs <- (dfcom + 1) / (dfcom + 3) * dfcom * (1 - lambda)
ifelse(is.infinite(dfcom), dfold, dfold * dfobs / (dfold + dfobs))
}
test_that("new BR matches old for lambda >= 1e-4 and dfcom finite", {
set.seed(1)
M <- 10
df_com <- 100
t <- 1
lambdas <- seq(1, 1e-04, length.out = 100)
for (lambda in lambdas) {
b <- lambda * t / (1 + 1 / M)
old <- barnard.rubin_old(M, b, t, df_com)
new <- barnard.rubin(M, b, t, df_com)
expect_equal(new, old)
}
df_com <- Inf
for (lambda in lambdas) {
b <- lambda * t / (1 + 1 / M)
old <- barnard.rubin_old(M, b, t, df_com)
new <- barnard.rubin(M, b, t, df_com)
expect_equal(new, old)
}
})
test_that("new BR differs from old for lambda < 1e-4 and dfcom finite", {
M <- 10
df_com <- 100
t <- 1
lambdas_small <- seq(1e-04, 0, length.out = 100)
for (lambda in lambdas_small[-1]) {
b <- lambda * t / (1 + 1 / M)
old <- barnard.rubin_old(M, b, t, df_com)
new <- barnard.rubin(M, b, t, df_com)
expect_true(new != old)
}
})
test_that("new BR handles tiny lambda without flooring and approaches correct limit", {
M <- 10
df_com <- 100
t <- 1
lambda <- c(0, 1e-8, 1e-6, 5e-5) # includes values below the old 1e-4 floor
b <- lambda * t / (1 + 1 / M)
old <- barnard.rubin_old(M, b, t, df_com)
new <- barnard.rubin(M, b, t, df_com)
# limit at lambda = 0
limit0 <- df_com * (df_com + 1) / (df_com + 3)
# new is finite and near the limit; old is biased by flooring
expect_true(all(is.finite(new)))
expect_equal(new[1], limit0) # exactly λ = 0
expect_true(all(abs(new - limit0) <= abs(old - limit0)))
})
test_that("dfcom = Inf reduces to nu_old for both when lambda >= 1e-4", {
M <- 8
t <- 2
for (lambda in c(1e-4, 1e-3, 0.2)) {
b <- lambda * t / (1 + 1 / M)
old <- barnard.rubin_old(M, b, t, dfcom = Inf)
new <- barnard.rubin(M, b, t, dfcom = Inf)
nu_old <- (M - 1) / (lambda^2)
# old floors only affects λ < 1e-4, so here they should agree with nu_old
expect_equal(old, nu_old)
expect_equal(new, nu_old)
}
})
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.