X-Git-Url: https://git.auder.net/assets/current/gitweb.js?a=blobdiff_plain;f=pkg%2FR%2Fm_GeneralizedAdditive.R;fp=pkg%2FR%2Fm_GeneralizedAdditive.R;h=5baf60b96f09a4e3fd7f9e8ef08008e8235ecd62;hb=357b8be00388d07c04c10d4bf7f503fd947185d2;hp=0000000000000000000000000000000000000000;hpb=a961f8a15492bf4b18d24bc117358d1f412dd078;p=aggexp.git diff --git a/pkg/R/m_GeneralizedAdditive.R b/pkg/R/m_GeneralizedAdditive.R new file mode 100644 index 0000000..5baf60b --- /dev/null +++ b/pkg/R/m_GeneralizedAdditive.R @@ -0,0 +1,42 @@ +#' @include b_Algorithm.R + +#' @title Generalized Additive Model +#' +#' @description Generalized Additive Model using the \code{gam} package. +#' Inherits \code{\link{Algorithm}} +#' +#' @field family Family of the distribution to be used. Default: gaussian(). +#' +GeneralizedAdditive = setRefClass( + Class = "GeneralizedAdditive", + + fields = c( + "family" #class "family" + ), + + contains = "Algorithm", + + methods = list( + initialize = function(...) + { + callSuper(...) + if (class(family) == "uninitializedField") + family <<- gaussian() + }, + predict_noNA = function(XY, x) + { + #GAM need some data to provide reliable results + if (nrow(XY) < 30) + { + X = XY[,names(XY) != "Measure"] + Y = XY[,"Measure"] + weight = ridgeSolve(X, Y, LAMBDA) + return (matricize(x) %*% weight) + } + + suppressPackageStartupMessages( require(gam) ) + g = gam(Measure ~ ., data=XY, family=family) + return (stats::predict(g, x)) + } + ) +)