Package 'midnight'

Title: A 'tidymodels' Engine and Other Extensions for the 'midr' Package
Description: Provides a 'parsnip' engine for the 'midr' package, enabling users to fit, tune, and evaluate Maximum Interpretation Decomposition (MID) models within the 'tidymodels' framework. Developed through research by the Moonlight Seminar 2025, a study group of actuaries from the Institute of Actuaries of Japan, to enhance practical applications of interpretable modeling. Detailed methodology is available in Asashiba et al. (2025) <doi:10.48550/arXiv.2506.08338>.
Authors: Ryoichi Asashiba [aut, cre] (ORCID: <https://orcid.org/0009-0001-9532-7000>)
Maintainer: Ryoichi Asashiba <[email protected]>
License: MIT + file LICENSE
Version: 0.2.0
Built: 2026-06-03 06:54:56 UTC
Source: https://github.com/ryo-asashi/midnight

Help Index


Fit Multivariate Linear Models

Description

fastLmMatrix() estimates the linear model for multivariate response using one of several methods implemented using the Eigen linear algebra library.

Usage

fastLmMatrix(x, ...)

## Default S3 method:
fastLmMatrix(x, y, tol = 1e-07, method = 0L, ...)

## S3 method for class 'formula'
fastLmMatrix(formula, data = list(), method = 0L, ...)

Arguments

x

a model matrix XX.

...

optional parameters passed to methods.

y

the response matrix YY.

tol

tolerance for the rank calculation.

method

an integer with value 0 for the column-pivoted QR decomposition, 1 for the unpivoted QR decomposition, 2 for the LLT Cholesky, 3 for the LDLT Cholesky, and 4 for the Jacobi singular value decomposition (SVD). Default is zero.

formula

an object of class "formula" (or one that can be coerced to that class): a symbolic description of the model to be fitted.

data

an optional data frame, list or environment (or object coercible by as.data.frame to a data frame) containing the variables in the model.

Details

fastLmMatrix() is a performance-optimized version of the standard lm.fit() function. Unlike RcppEigen::fastLm(), it is specifically designed to handle multivariate responses (YY as a matrix). It leverages the Eigen C++ template library for high-performance linear algebra, providing several decomposition methods with different trade-offs between speed and numerical stability.

Value

fastLmMatrix() returns a list with the following components:

coefficients

p×kp \times k matrix of coefficients.

fitted.values

n×kn \times k matrix of fitted values.

residuals

n×kn \times k matrix of residuals.

rank

an integer giving the numeric rank of the model matrix XX.

See Also

lm.fit, fastLm


Plot MID Importance with ggplot2

Description

The midnight package extends midr::ggmid() to provide modern distribution plots for MID feature importance. Added types include sina, beeswarm, and violin plots.

Usage

## S3 method for class 'midimp'
ggmid(object, type = NULL, theme = NULL, terms = NULL, max.nterms = 30, ...)

Arguments

object

a "midimp" object to be visualized.

type

the plotting style. In addition to standard types ("barplot", "boxplot", "dotchart", "heatmap"), this extended method supports "violinplot", "sinaplot", and "beeswarm".

theme

a character string or object defining the color theme. See color.theme for details.

terms

an optional character vector specifying which terms to display.

max.nterms

an integer specifying the maximum number of terms to display. Defaults to 30.

...

optional parameters passed on to the layers.

Details

This is an S3 method for the midr::ggmid() generic for "midimp" objects created by midr::mid.importance(). This method replaces the primary layer with modern distribution geoms when type is one of the extended options.

Value

ggmid.midimp() returns a "ggplot" object.

Note

This S3 method is NOT registered automatically when the midnight package is loaded, and activated when nightfall() is explicitly called.

See Also

nightfall, mid.importance


Transition into and out of Midnight

Description

nightfall() activates the extended features provided by the midnight package. It overrides specific S3 methods (such as ggmid.midimp), switches the underlying solvers to highly optimized Eigen-based routines via global options, and applies midnight-themed color palettes.

daybreak() reverses these changes, restoring the default behavior, solvers, and themes of the midr package.

Usage

nightfall(methods = TRUE, solvers = TRUE, themes = TRUE)

daybreak(methods = TRUE, solvers = TRUE, themes = TRUE)

Arguments

methods

logical. If TRUE, overrides (or restores) the ggmid.midimp S3 method.

solvers

logical. If TRUE, sets (or restores) calculation solvers via options() (e.g., midr.solver.qr, midr.solver.svd). These optimized solvers can be utilized by specifying the corresponding method in interpret() (e.g., method = "qr").

themes

logical. If TRUE, applies (or restores) color themes by setting options() for midr.qualitative, midr.sequential, and midr.diverging.

Value

nightfall() and daybreak() return an invisible list containing the previous options for solvers and themes.


Perspective Plot of MID Effects

Description

Visualizes the combined effect of two variables from a "mid" object using a 3D perspective plot.

Usage

## S3 method for class 'mid'
persp(object, xvar, yvar = NULL, ..., xval = NULL, yval = NULL)

Arguments

object

a "mid" object, typically the result of midr::interpret().

xvar

a character string with the name of the variable for the x-axis. Alternatively, a single string in the format xvar:yvar can be provided, in which case yvar can be omitted.

yvar

a character string with the name of the variable for the y-axis.

...

additional arguments passed on to graphics:::persp.default(). Used to customize the plot's appearance, such as view angles (theta, phi) or color (col).

xval

a numeric or character vector specifying the sequence of values for the x-axis.

yval

a numeric or character vector specifying the sequence of values for the y-axis.

Details

This is an S3 method for the persp() generic that calculates the sum of the main effects of xvar and yvar and their interaction effect (xvar:yvar). The resulting sum is plotted as the height on the z-axis.

Value

persp.mid() invisibly returns the viewing transformation matrix, see persp for details. This function is primarily called for its side effect of creating a plot.

See Also

persp

Examples

mid <- midr::interpret(mpg ~ wt * hp + factor(am), data = mtcars, lambda = .5)

# Create a basic perspective plot
persp(mid, xvar = "wt", yvar = "hp")

# Customize the plot by passing arguments to graphics:::persp.default()
persp(mid, "wt", "hp", theta = 210, phi = 20, col = "lightblue", shade = .5)
persp(mid, "factor(am):wt", theta = 210, shade = .2)