boost-R/FDboost

predict fails for interaction of bsignal baselearners

fabian-s opened this issue · 1 comments

library(FDboost)
#> Loading required package: mboost
#> Loading required package: parallel
#> Loading required package: stabs
#> This is mboost 2.9-1. See 'package?mboost' and 'news(package  = "mboost")'
#> for a complete list of changes.
#> This is FDboost 0.3-2.

######## Example for scalar-on-function-regression with bsignal()  
data("fuelSubset", package = "FDboost")

## center the functional covariates per observed wavelength
fuelSubset$UVVIS <- scale(fuelSubset$UVVIS, scale = FALSE)
fuelSubset$NIR <- scale(fuelSubset$NIR, scale = FALSE)

## to make mboost:::df2lambda() happy (all design matrix entries < 10)
## reduce range of argvals to [0,1] to get smaller integration weights
fuelSubset$uvvis.lambda <- with(fuelSubset, (uvvis.lambda - min(uvvis.lambda)) /
                                  (max(uvvis.lambda) - min(uvvis.lambda) ))
fuelSubset$nir.lambda <- with(fuelSubset, (nir.lambda - min(nir.lambda)) /
                                (max(nir.lambda) - min(nir.lambda) ))

mod_int <- FDboost(heatan ~  
                  bsignal(UVVIS, uvvis.lambda, knots = 10, df = 4, check.ident = FALSE) %X%
                  bsignal(NIR, nir.lambda, knots = 10, df=4, check.ident = FALSE), 
                timeformula = NULL, data = fuelSubset)
#> Warning in df2lambda(X, df = args$df, lambda = args$lambda, dmat =
#> K, weights = w, : estimated degrees of freedom differ from 'df' by
#> -0.00387383609195169

predict(mod_int, fuelSubset)
#> Error in predict.FDboost(mod_int, fuelSubset): Can only predict effect of one functional effect in %X% or %Xc%.

Created on 2019-03-26 by the reprex package (v0.2.1)

why?

the code of predict.FDboost() was not meant to work for interaction effects of two functional covariates if you use newdata. I adapted it now.