DESCRIPTION now lists the project page
(URL) and the issue tracker (BugReports), so
bug reports can be filed from the CRAN page.nnmaxheap_C(), the projection onto non-negative,
non-increasing vectors, returned wrong values in the 0.1.0 release (#12,
reported by @D4EM3ON). Any single-element block
overwrote the first value of the next block, and a negative final value
was not clipped at 0. For example,
nnmaxheap_C(c(5, 3, 3, 1)) returned 5 5 5 1
instead of 5 3 3 1, and
nnmaxheap_C(c(3, 1, 2, -1)) returned 3 3 3 -1
instead of 3 1.5 1.5 0. The output was still
non-increasing, but its values were inflated, so this changes numerical
results wherever the projection is applied: predict() on
survival fits (survival = TRUE) and the scores used by
cv_orthoMTL(survival = TRUE), hence its model selection.
Regression and classification fits are not affected. Results produced
with 0.1.0 on survival data should be recomputed. The projection used in
the earlier internal versions of the code behind the published analyses
was correct and is not affected. The function is now tested against an
isotonic-regression oracle (stats::isoreg).orthopen to orthoMTLThis release represents a major refactor and scope expansion of the
orthopen package
(https://github.com/kevinVervier/orthopen).
survival and
censored.mat arguments in orthoMTL() enable
censored time-to-event data.alpha mixing
parameter in [0, 1] blending the orthogonality penalty
(alpha = 0) with L1/Lasso (alpha = 1).create_longitudinal_labels(),
create_indicator_matrix(),
create_constraint_matrix().cv_orthoMTL() with
parallel grid search over lambda, step size, diagonal value, and
elastic-net mixing.bootstrap_orthoMTL() compares real coefficient variability
against null-model permutations.cindex_mtl() for
multi-task concordance index.plot_heatmap(),
plot_correlation(), plot_prediction(),
plot_bootstrap().orthopenorthopen() →
orthoMTL().$W → $B.disjoint changed from TRUE to
FALSE.alpha mixing
parameter in [0, 1] (replacing the
enet/lambda1 pair). The penalty is
lambda * [(1-alpha)/2 * Omega_K(W)^2 + alpha * ||W||_1],
ported from orthopen v1.1.0. This fixes the previous inconsistent mixing
(L2 ≈ 0.25lambda vs L1 = 0.5lambda1).Iso package dependency removed; replaced by internal
nnmaxheap_C().T (masking base::TRUE) renamed to
numTasks.X, Y,
lambda, alpha.max_iter is reached without
convergence.y = -1.max(-z,0) + log1p(exp(-|z|)) and exponent
clipping in the gradient.testthat runner,
inst/CITATION, GitHub Actions CI.The solver already supported regression
(logistic = FALSE, survival = FALSE) and
classification (logistic = TRUE); these are now first-class
end-to-end with matching evaluation, tuning, and simulation scaffolding
(previously survival-only):
rmse_mtl(),
r2_mtl() (regression) and accuracy_mtl(),
auc_mtl() (classification), complementing the survival
cindex_mtl() (unchanged).cv_orthoMTL() gains logistic and
metric arguments. The scoring metric now defaults by mode —
cindex for survival, auc for logistic,
rmse otherwise — and selection honours each metric’s
optimisation direction.predict() type argument:
"link" (default, unchanged), "response"
(sigmoid probabilities for logistic fits), and "class"
(predicted {-1, +1} labels for logistic fits).simulate_mtl(mode = ...) now generates
"regression" and "classification" responses in
addition to "survival" (the default).schedule argument to orthoMTL()). The
previously hardcoded sqrt(i) decay is now
schedule = "sqrt" (the default, reproducing prior results
exactly); "log", "const", and
"linear" are also available. An A/B study
(validation/ab_s02_gradient_schedule.R) found
"log"/"const" reach the same optimum ~12–17x
faster than "sqrt", while "linear" can stall.
Changing the schedule changes the optimisation path and the exact
coefficients, so the default is unchanged. cv_orthoMTL()
and bootstrap_orthoMTL() gained a matching
schedule argument (passed to every fit), so grid search and
bootstrap can use the faster schedules too.cv_orthoMTL(survival = FALSE) previously scored every
fold with the survival C-index regardless of the data; it now defaults
to RMSE for plain regression (and AUC when
logistic = TRUE). Pass metric = "cindex" to
restore the old scoring.