CRAN Package Check Results for Package mboost

Last updated on 2026-07-15 17:51:09 CEST.

Flavor Version Tinstall Tcheck Ttotal Status Flags
r-devel-linux-x86_64-debian-clang 2.9-11 14.81 278.58 293.39 NOTE
r-devel-linux-x86_64-debian-gcc 2.9-11 9.68 196.24 205.92 NOTE
r-devel-linux-x86_64-fedora-clang 2.9-11 25.00 418.19 443.19 NOTE
r-devel-linux-x86_64-fedora-gcc 2.9-12 11.00 363.33 374.33 OK
r-devel-windows-x86_64 2.9-11 18.00 163.00 181.00 OK --no-vignettes
r-patched-linux-x86_64 2.9-11 17.12 262.45 279.57 OK
r-release-linux-x86_64 2.9-11 14.09 265.99 280.08 OK
r-release-macos-arm64 2.9-12 5.00 98.00 103.00 ERROR
r-release-macos-x86_64 2.9-12 13.00 844.00 857.00 OK
r-release-windows-x86_64 2.9-11 19.00 170.00 189.00 OK --no-vignettes
r-oldrel-macos-arm64 2.9-12 OK
r-oldrel-macos-x86_64 2.9-12 13.00 771.00 784.00 OK
r-oldrel-windows-x86_64 2.9-11 25.00 188.00 213.00 OK --no-vignettes

Additional issues

linux-arm64 M1mac

Check Details

Version: 2.9-11
Check: running R code from vignettes
Result: NOTE ‘SurvivalEnsembles.Rnw’... [21s/26s] OK ‘mboost.Rnw’... [13s/18s] NOTE differences from ‘mboost.Rout.save’ 11,12d10 < Warning in structure(c(3.74633735312306, 5.02946541353383, 3.80586309523809, : < Replacing special names '.Dim', '.Dimnames' is deprecated; use 'dim', 'dimnames' instead. ‘mboost_illustrations.Rnw’... [10s/13s] OK ‘mboost_tutorial.Rnw’ using ‘UTF-8’... [12s/12s] OK Flavor: r-devel-linux-x86_64-debian-clang

Version: 2.9-11
Check: running R code from vignettes
Result: NOTE ‘SurvivalEnsembles.Rnw’... [13s/14s] OK ‘mboost.Rnw’... [8s/11s] NOTE differences from ‘mboost.Rout.save’ 11,12d10 < Warning in structure(c(3.74633735312306, 5.02946541353383, 3.80586309523809, : < Replacing special names '.Dim', '.Dimnames' is deprecated; use 'dim', 'dimnames' instead. ‘mboost_illustrations.Rnw’... [9s/12s] OK ‘mboost_tutorial.Rnw’ using ‘UTF-8’... [9s/10s] OK Flavor: r-devel-linux-x86_64-debian-gcc

Version: 2.9-11
Check: running R code from vignettes
Result: NOTE ‘SurvivalEnsembles.Rnw’... [33s/54s] OK ‘mboost.Rnw’... [21s/28s] NOTE differences from ‘mboost.Rout.save’ 11,12d10 < Warning in structure(c(3.74633735312306, 5.02946541353383, 3.80586309523809, : < Replacing special names '.Dim', '.Dimnames' is deprecated; use 'dim', 'dimnames' instead. ‘mboost_illustrations.Rnw’... [17s/25s] OK ‘mboost_tutorial.Rnw’ using ‘UTF-8’... [20s/21s] OK Flavor: r-devel-linux-x86_64-fedora-clang

Version: 2.9-12
Check: tests
Result: ERROR Running ‘birds_Biometrics.R’ [4s/4s] Comparing ‘birds_Biometrics.Rout’ to ‘birds_Biometrics.Rout.save’ ... OK Running ‘bugfixes.R’ [13s/13s] Comparing ‘bugfixes.Rout’ to ‘bugfixes.Rout.save’ ... OK Running ‘regtest-baselearner.R’ [2s/2s] Running the tests in ‘tests/regtest-baselearner.R’ failed. Complete output: > > options(digits = 3) > > .all.equal <- function(...) isTRUE(all.equal(..., check.environment = FALSE)) > > library("mboost") Loading required package: parallel Loading required package: stabs > attach(asNamespace("mboost")) The following objects are masked from package:mboost: %+%, %O%, %X%, AUC, AdaExp, Binomial, Cindex, CoxPH, ExpectReg, FP, Family, GammaReg, GaussClass, GaussReg, Gaussian, Gehan, Huber, Hurdle, IPCweights, Laplace, Loglog, Lognormal, Multinomial, NBinomial, Poisson, PropOdds, QuantReg, RCG, Weibull, as.data.frame.varimp, bbs, bkernel, blackboost, bmono, bmrf, bns, bols, boost_control, brad, brandom, bspatial, bss, btree, buser, confint.glmboost, confint.mboost, cv, cvrisk, downstream.test, extract, fitted.mboost, gamboost, glmboost, lines.mboost, lines.mboost.ci, mboost, mboost_fit, mboost_intern, mstop, mstop<-, nuisance, plot.cvrisk, plot.glmboost, plot.mboost, plot.mboost.ci, plot.varimp, predict.glmboost, predict.mboost, print.glmboost.ci, risk, selected.mboost, stabsel.mboost, stabsel_parameters.mboost, survFit, varimp > library("MASS") > library("Matrix") > > set.seed(290875) > > ### dgp > n <- 20000 > xn <- round(runif(n), 3) > xn[sample(1:n)[1:(n / 100)]] <- NA > xf <- gl(4, n / 4) > xf[sample(1:n)[1:(n / 100)]] <- NA > z1 <- sample(gl(2, n / 2)) > z1[sample(1:n)[1:(n / 100)]] <- NA > z2 <- round(runif(n), 3) > z2[sample(1:n)[1:(n / 100)]] <- NA > w <- rpois(n, lambda = 2) > y <- 2 * xn + rnorm(n) > y[is.na(y)] <- rnorm(sum(is.na(y))) > > testfun <- function(m1, m2) { + ret <- c(max(abs(coef(m1) - coef(m2))), + max(abs(fitted(m1) - fitted(m2)()), na.rm = TRUE)) + if (any(ret > sqrt(.Machine$double.eps))) + return(ret) + } > > ### numeric x with intercept > m1 <- lm(y ~ xn, weights = w, na.action = na.exclude) > m2 <- fit(dpp(bols(xn), w), y) Warning message: In bols(xn) : base-learner contains missing values; missing values are excluded per base-learner, i.e., base-learners may depend on different numbers of observations. > testfun(m1, m2) > > ### numeric x without intercept > m1 <- lm(y ~ xn - 1, weights = w, na.action = na.exclude) > m2 <- fit(dpp(bols(xn, intercept = FALSE), w), y) Warning messages: 1: In bols(xn, intercept = FALSE) : covariates should be (mean-) centered if 'intercept = FALSE' 2: In bols(xn, intercept = FALSE) : base-learner contains missing values; missing values are excluded per base-learner, i.e., base-learners may depend on different numbers of observations. > testfun(m1, m2) > > ### factor x with intercept > m1 <- lm(y ~ xf, weights = w, na.action = na.exclude) > m2 <- fit(dpp(bols(xf), w), y) Warning message: In bols(xf) : base-learner contains missing values; missing values are excluded per base-learner, i.e., base-learners may depend on different numbers of observations. > testfun(m1, m2) > > ### factor x without intercept > tmp <- model.matrix(~ xf)[,-1] ## build model matrix without first row > mm <- matrix(NA, ncol = ncol(tmp), nrow = length(y)) > mm[!is.na(xf),] <- tmp ## build model matrix with missings > m1 <- lm(y ~ mm - 1, weights = w, na.action = na.exclude) > m2 <- fit(dpp(bols(xf, intercept = FALSE), w), y) Warning message: In bols(xf, intercept = FALSE) : base-learner contains missing values; missing values are excluded per base-learner, i.e., base-learners may depend on different numbers of observations. > testfun(m1, m2) > > ### factor x with "contr.dummy" > m1 <- lm(y ~ xf - 1, weights = w, na.action = na.exclude) > m2 <- fit(dpp(bols(xf, contrasts.arg = "contr.dummy"), w), y) Warning message: In bols(xf, contrasts.arg = "contr.dummy") : base-learner contains missing values; missing values are excluded per base-learner, i.e., base-learners may depend on different numbers of observations. > testfun(m1, m2) > > ### contrasts > m1 <- lm(y ~ xf, weights = w, contrasts = list(xf = "contr.sum"), na.action = na.exclude) > m2 <- fit(dpp(bols(xf, contrasts.arg = list(xf = "contr.sum")), w), y) Warning message: In bols(xf, contrasts.arg = list(xf = "contr.sum")) : base-learner contains missing values; missing values are excluded per base-learner, i.e., base-learners may depend on different numbers of observations. > testfun(m1, m2) > > ### multiple x > m1 <- lm(y ~ xn + xf, weights = w, na.action = na.exclude) > m2 <- fit(dpp(bols(xn, xf), w), y) Warning message: In bols(xn, xf) : base-learner contains missing values; missing values are excluded per base-learner, i.e., base-learners may depend on different numbers of observations. > testfun(m1, m2) > > ### interaction with binary factor > xtmp <- (z1 == "2") * xn > m1 <- lm(y ~ xtmp - 1, weights = w, na.action = na.exclude) > m2 <- fit(dpp(bols(xn, by = z1, intercept = FALSE), w), y) Warning messages: 1: In bols(xn, by = z1, intercept = FALSE) : covariates should be (mean-) centered if 'intercept = FALSE' 2: In bols(xn, by = z1, intercept = FALSE) : base-learner contains missing values; missing values are excluded per base-learner, i.e., base-learners may depend on different numbers of observations. > testfun(m1, m2) > > ### interaction with numeric variable > m1 <- lm(y ~ z2:xn - 1, weights = w, na.action = na.exclude) > m2 <- fit(dpp(bols(z2, by = xn, intercept = FALSE), w), y) Warning messages: 1: In bols(z2, by = xn, intercept = FALSE) : covariates should be (mean-) centered if 'intercept = FALSE' 2: In bols(z2, by = xn, intercept = FALSE) : base-learner contains missing values; missing values are excluded per base-learner, i.e., base-learners may depend on different numbers of observations. > testfun(m1, m2) > > ### ridge > one <- rep(1, n) > cf1 <- coef(lm.ridge(y ~ one + xn - 1, lambda = 2)) > cf2 <- coef(fit(dpp(bols(one, xn, lambda = 2, intercept = FALSE), rep(1, n)), y)) Warning message: In bols(one, xn, lambda = 2, intercept = FALSE) : base-learner contains missing values; missing values are excluded per base-learner, i.e., base-learners may depend on different numbers of observations. > max(abs(cf1 - cf2)) [1] 0.00162 > cf1 <- coef(lm.ridge(y ~ xf - 1, lambda = 2)) > cf2 <- coef(fit(dpp(bols(xf, lambda = 2, intercept = FALSE), rep(1, n)), y)) Warning message: In bols(xf, lambda = 2, intercept = FALSE) : base-learner contains missing values; missing values are excluded per base-learner, i.e., base-learners may depend on different numbers of observations. > max(abs(cf1 - cf2)) [1] 0.0432 Warning message: In cf1 - cf2 : longer object length is not a multiple of shorter object length > > ### matrix (here with missing values) > cf1 <- coef(mod <- lm(y ~ xn + xf * z1 - 1, weights = w, y = TRUE, x = TRUE)) > tX <- mod$x > tw <- mod$weights > ty <- mod$y > cf2 <- coef(fit(dpp(bols(tX), weights = tw), ty)) > stopifnot(max(abs(cf1 - cf2)) < sqrt(.Machine$double.eps)) > > ### ridge again with matrix interface > tX <- matrix(runif(1000), ncol = 10) > ty <- rnorm(100) > tw <- rep(1, 100) > > ### compute & check df > op <- options(mboost_dftraceS = TRUE) > la <- df2lambda(tX, df = 2, dmat = diag(ncol(tX)), weights = tw)["lambda"] > truedf <- sum(diag(tX %*% solve(crossprod(tX * tw, tX) + la * diag(ncol(tX))) %*% t(tX * tw))) > stopifnot(abs(truedf - 2) < sqrt(.Machine$double.eps)) > > one <- rep(1, ncol(tX)) > cf1 <- coef(lm.ridge(ty ~ . - 1, data = as.data.frame(tX), lambda = la)) > cf2 <- coef(fit(dpp(bols(tX, df = 2), weights = tw), ty)) > max(abs(cf1 - cf2)) [1] 0.115 > # I think bols is better and thus right > sum((ty - tX %*% cf1)^2) + la * sum(cf1^2) lambda 106 > sum((ty - tX %*% cf2)^2) + la * sum(cf2^2) lambda 105 > options(op) > > ### now with other df-definition: > op <- options(mboost_dftraceS = FALSE) > la <- df2lambda(tX, df = 2, dmat = diag(ncol(tX)), weights = tw)["lambda"] > H <- tX %*% solve(crossprod(tX * tw, tX) + la * diag(ncol(tX))) %*% t(tX * tw) > truedf <- sum(diag(2*H - tcrossprod(H,H))) > stopifnot(abs(truedf - 2) < sqrt(.Machine$double.eps)) > options(op) > > # check df with weights > op <- options(mboost_dftraceS = TRUE) > tw <- rpois(100, 2) > la <- df2lambda(tX, df = 2, dmat = diag(ncol(tX)), weights = tw)["lambda"] > truedf <- sum(diag(tX %*% solve(crossprod(tX * tw, tX) + la * diag(ncol(tX))) %*% t(tX * tw))) > stopifnot(abs(truedf - 2) < sqrt(.Machine$double.eps)) > > ### check df2lambda for P-splines (Bug spotted by B. Hofner) > set.seed(1907) > x <- runif(100, min = -1, max = 3) > ## extract lambda from base-learner > lambda <- bbs(x, df = 4)$dpp(rep(1, length(x)))$df()["lambda"] > X <- get("X", envir = environment(bbs(x, df = 4)$dpp)) > K <- get("K", envir = environment(bbs(x, df = 4)$dpp)) > truedf <- sum(diag(X %*% solve(crossprod(X,X) + lambda * K) %*% t(X))) > stopifnot(abs(truedf - 4) < sqrt(.Machine$double.eps)) > > ### check accuracy of df2lambda > data("bodyfat", package="TH.data") > diff_df <- matrix(NA, nrow=8, ncol=ncol(bodyfat)) > rownames(diff_df) <- paste("df", 3:10) > colnames(diff_df) <- names(bodyfat) > for (i in 3:10){ + for (j in 1:ncol(bodyfat)){ + lambda <- bbs(bodyfat[[j]], df = i)$dpp(rep(1, nrow(bodyfat)))$df()["lambda"] + diff_df[i-2,j] <- bbs(bodyfat[[j]], lambda = lambda)$dpp(rep(1, nrow(bodyfat)))$df()["df"] - i + } + } > stopifnot(all(diff_df < sqrt(.Machine$double.eps))) > options(op) > > ### check degrees of freedom for design matrices without full rank: > x <- sample(1:3, 100, replace = TRUE) > X <- extract(bbs(x)) > rankMatrix(X) [1] 3 attr(,"method") [1] "tolNorm2" attr(,"useGrad") [1] FALSE attr(,"tol") [1] 2.22e-14 > ## df2lambda: > stopifnot(df2lambda(X, df = NULL, lambda = 0, weights = rep(1, 100))[["df"]] == 3) > (res <- df2lambda(X, df = 4, weights = rep(1, 100))) df lambda 4 0 Warning message: In df2lambda(X, df = 4, weights = rep(1, 100)) : 'df' too large: Degrees of freedom cannot be larger than the rank of the design matrix. Unpenalized base-learner with df = 3 used. Re-consider model specification. > stopifnot(res[["lambda"]] == 0) > > ### componentwise > cf2 <- coef(fit(dpp(bolscw(cbind(1, xn)), weights = w), y)) > cf1 <- coef(lm(y ~ xn - 1, weights = w)) > stopifnot(max(abs(cf1 - max(cf2))) < sqrt(.Machine$double.eps)) > > cf2 <- coef(fit(dpp(bolscw(matrix(xn, nc = 1)), weights = w), y)) > cf1 <- coef(lm(y ~ xn - 1, weights = w)) > stopifnot(max(abs(cf1 - max(cf2))) < sqrt(.Machine$double.eps)) > > ### componentwise with matrix > n <- 200 > m <- 10000 > x <- rnorm(n * m) > x[abs(x) < 2] <- 0 > X <- Matrix(data = x, ncol = m, nrow = n) > beta <- rpois(ncol(X), lambda = 1) > y <- X %*% beta + rnorm(nrow(X)) > w <- rep(1, nrow(X)) ###rpois(nrow(X), lambda = 1) > f1 <- dpp(bolscw(X), weights = w)$fit > f1(y)$model coef xselect p -30.7 951.0 10000.0 > > ### varying coefficients > x1 <- runif(n, max = 2) > x2 <- sort(runif(n, max = 2 * pi)) > y <- sin(x2) * x1 + rnorm(n) > w <- rep(1, n) > > d <- dpp(bbs(x2, by = x1, df = 4), w) > f <- fit(d, y) > f2 <- d$predict(list(f), newdata = data.frame(x1 = 1, x2 = x2)) > > max(abs(sin(x2) - f2)) [1] 0.778 > > ### bols and bbs; matrix interfaces > n <- 10000 > x <- runif(n, min = 0, max = 2*pi) > y <- sin(x) + rnorm(n, sd = 0.1) > w <- rpois(n, lambda = 1) > x[sample(1:n)[1:(n / 100)]] <- NA > h <- hyper_bbs(data.frame(x = x), vary = "") > X <- X_bbs(data.frame(x = x), vary = "", h)$X > f1 <- fit(dpp(bbs(x, df = ncol(X)), w), y) Warning message: In bbs(x, df = ncol(X)) : base-learner contains missing values; missing values are excluded per base-learner, i.e., base-learners may depend on different numbers of observations. > f2 <- fit(dpp(bols(X, df = ncol(X)), w), y) Warning message: In bols(X, df = ncol(X)) : base-learner contains missing values; missing values are excluded per base-learner, i.e., base-learners may depend on different numbers of observations. > stopifnot(max(abs(coef(f1) - coef(f2))) < sqrt(.Machine$double.eps)) > > stopifnot(.all.equal(get_index(data.frame(x, x)), get_index(X))) > stopifnot(.all.equal(get_index(data.frame(x)), get_index(X))) > > ### check handling of missings for cyclic effects > h <- hyper_bbs(data.frame(x = x), vary = "", cyclic = TRUE) > X <- X_bbs(data.frame(x = x), vary = "", h)$X > stopifnot(all(is.na(X[is.na(x),]))) > stopifnot(all(!is.na(X[!is.na(x),]))) > > ### combinations and tensor products of base-learners > > set.seed(29) > n <- 1000 > x1 <- rnorm(n) > x2 <- rnorm(n) > x3 <- rnorm(n) > f <- gl(4, 25) > y <- rnorm(n) > ndf <- data.frame(x1 = x1[1:10], x2 = x2[1:10], f = f[1:10]) > > ### spatial > m1 <- gamboost(y ~ bbs(x1) %X% bbs(x2)) Warning message: In .qr.rank.def.warn(r) : matrix is structurally rank deficient; using augmented matrix with additional 203 row(s) of zeros > m2 <- gamboost(y ~ bspatial(x1, x2, df = 16)) Warning message: In .qr.rank.def.warn(r) : matrix is structurally rank deficient; using augmented matrix with additional 203 row(s) of zeros > stopifnot(max(abs(predict(m1) - predict(m2))) < sqrt(.Machine$double.eps)) Error: max(abs(predict(m1) - predict(m2))) < sqrt(.Machine$double.eps) is not TRUE Execution halted Flavor: r-release-macos-arm64