## ------------- custom Normal distribution (MyNormal) ----------------
## -------------------------- using cdf -------------------------------
## Constructor function for new 'MyNormal' distribution
MyNormal <- function(mu, sigma) {
d <- data.frame(mu = mu, sigma = sigma)
class(d) <- c("MyNormal", "distribution")
return(d)
}
## Additionally required S3 methods (borrowed from class Normal)
registerS3method("cdf", "MyNormal",
getS3method("cdf", class = "Normal"))
registerS3method("is_discrete", "MyNormal",
getS3method("is_discrete", class = "Normal"))
registerS3method("support", "MyNormal",
getS3method("support", class = "Normal"))
## Creating 3 distributions
dn <- MyNormal(mu = 1:3, sigma = 1:3 / 3)
dn <- setNames(dn, LETTERS[1:3])
## Calculating central moments
cbind(mean = distribution_calculate_moments(dn, 1L),
variance = distribution_calculate_moments(dn, 2L),
skewness = distribution_calculate_moments(dn, 3L),
kurtosis = distribution_calculate_moments(dn, 4L))
## ------------- custom Poisson distribution (MyPoisson) --------------
## -------------------------- using pdf -------------------------------
## Custom constructor function for the 'MyPoisson' distribution
MyPoisson <- function(lambda) {
d <- data.frame(lambda = lambda)
class(d) <- c("MyPoisson", "distribution")
return(d)
}
## Additionally required S3 methods (borrowed from class Poisson)
registerS3method("pdf", "MyPoisson",
getS3method("pdf", class = "Poisson"))
registerS3method("is_discrete", "MyPoisson",
getS3method("is_discrete", class = "Poisson"))
registerS3method("support", "MyPoisson",
getS3method("support", class = "Poisson"))
## Creating 3 distributions
dp <- MyPoisson(lambda = 1:3)
dp <- setNames(dp, LETTERS[4:6])
## Calculating central moments
cbind(mean = distribution_calculate_moments(dp, 1L),
variance = distribution_calculate_moments(dp, 2L),
skewness = distribution_calculate_moments(dp, 3L),
kurtosis = distribution_calculate_moments(dp, 4L))
Run the code above in your browser using DataLab