--- /dev/null
+#' @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))
+ }
+ )
+)