Nothing
# set seed to fix sign in gnm
suppressWarnings(RNGversion("3.0.0"))
set.seed(1)
# Gabriel, K R (1998). Generalised bilinear regression. Biometrika 85, 689–700.
test_that("biplot model as expected for barley data", {
biplotModel <- gnm(y ~ -1 + instances(Mult(site, variety), 2),
family = wedderburn, data = barley, verbose = FALSE)
expect_snapshot_value(biplotModel, style = "serialize",
ignore_formula_env = TRUE)
# rotate and scale fitted predictors
barleyMatrix <- xtabs(biplotModel$predictors ~ site + variety,
data = barley)
barleySVD <- svd(barleyMatrix)
A <- sweep(barleySVD$u, 2, sqrt(barleySVD$d), "*")[, 1:2]
B <- sweep(barleySVD$v, 2, sqrt(barleySVD$d), "*")[, 1:2]
rownames(A) <- levels(barley$site)
rownames(B) <- levels(barley$variety)
colnames(A) <- colnames(B) <- paste("Component", 1:2)
# compare vs matrices in Gabriel (1998):
# allow for sign change in gnm and in SVD on different systems
# 3rd element in fit is 1.425 vs 1.42 in paper
expect_equal(round(abs(A), 2),
matrix(abs(c(-4.19, -2.76, -1.43, -1.85, -1.27,
-1.16, -1.02, -0.65, 0.15,
-0.39, -0.34, -0.05, 0.33, 0.16,
0.4, 0.73, 1.46, 2.13)), nrow = 9),
ignore_attr = TRUE)
expect_equal(round(abs(B), 2),
matrix(abs(c(2.07, 3.06, 2.96, 1.81, 1.56,
1.89, 1.18, 0.85, 0.97, 0.60,
-0.97, -0.51, -0.33, -0.50, -0.08,
1.08, 0.41, 1.15, 1.27, 1.40)), nrow = 10),
ignore_attr = TRUE)
expect_equal(sign(tcrossprod(A, B)), sign(unclass(barleyMatrix)),
ignore_attr = TRUE)
# chi-square statistic approx equal to that reported
expect_equal(round(sum(residuals(biplotModel, type = "pearson")^2)), 54)
expect_equal(df.residual(biplotModel), 56)
})
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.