Create a GDF Distribution

Description

The GDF (gamlss2 Distribution Family) is a unified class with corresponding methods that represent all distributional families supported by the gamlss2 package. It enables seamless integration with the distributions3 workflow and provides a consistent interface for model fitting and distributional computations.

Usage

GDF(family, parameters)

Arguments

family character. Name of a gamlss2.family or a family provided by the gamlss.dist package, e.g, NO or BI for the normal or binomial distribution, respectively.
parameters numeric, matrix, list or data frame, see the examples.

Details

The S3 class GDF is a slightly more general implementation of the S3 class GAMLSS tailored for gamlss2. For details please see the documentation of GAMLSS

Value

A GDF object, inheriting from distribution.

References

Zeileis A, Lang MN, Hayes A (2022). “distributions3: From Basic Probability to Probabilistic Regression.” Presented at useR! 2022 - The R User Conference. Slides, video, vignette, code at https://www.zeileis.org/news/user2022/.

See Also

gamlss2.family

Examples

library("gamlss2")


## package and random seed
library("distributions3")
set.seed(6020)

## one normal distribution
X <- GDF("NO", c(mu = 1, sigma = 2))
X
[1] "GDF NO(mu = 1, sigma = 2)"
## two normal distributions
X <- GDF("NO", cbind(c(1, 1.5), c(0.6, 1.2)))
X
[1] "GDF NO(mu = 1.0, sigma = 0.6)" "GDF NO(mu = 1.5, sigma = 1.2)"
## three Weibull distributions
X <- GDF("WEI", list(mu = c(1, 1, 2), sigma = c(1, 2, 2)))
X
[1] "GDF WEI(mu = 1, sigma = 1)" "GDF WEI(mu = 1, sigma = 2)"
[3] "GDF WEI(mu = 2, sigma = 2)"
## see ?gamlss.dist::GAMLSS for the remainder of this example

## example using gamlss2
data("abdom", package = "gamlss.data")

## estimate model
b <- gamlss2(y ~ s(x) | . | . | ., data = abdom, family = GA)
GAMLSS-RS iteration  1: Global Deviance = 4800.5126 eps = 0.387466     
GAMLSS-RS iteration  2: Global Deviance = 4800.4943 eps = 0.000003     
## extract, also works with newdata
d <- data.frame(
  "mean" = mean(b),
  "median" = median(b),
  "q95" = quantile(b, probs = 0.95),
  "variance" = variance(b),
  "pdf" = pdf(b),
  "cdf" = cdf(b)
)
print(head(d))
      mean   median      q95 variance        pdf        cdf
1 63.03101 62.92911 70.42168 19.27293 0.06247206 0.18004390
2 63.03101 62.92911 70.42168 19.27293 0.08732991 0.59591648
3 63.03101 62.92911 70.42168 19.27293 0.02555157 0.05030819
4 64.38737 64.28358 71.92613 20.05429 0.06987507 0.22758918
5 67.18714 67.07945 75.03091 21.71261 0.02853713 0.92483010
6 67.18714 67.07945 75.03091 21.71261 0.02659749 0.05730756