I am trying to test out several mgcv::gam models in a scalar-on-function regression analysis.
The following is the 'hierarchy' of models I would like to test: (1) Y_i = a + integral[ X_i(t)*Beta(t) dt ] (2) Y_i = a + integral[ F{X_i(t)}*Beta(t) dt ] (3) Y_i = a + integral[ F{X_i(t),t} dt ] equivalents for discrete data might be: 1) Y_i = a + sum_t[ L_t * X_it * Beta_t ] (2) Y_i = a + sum_t[ L_t * F{X_it} * Beta_t ] (3) Y_i = a + sum_t[ L_t * F{X_it,t} ] where Y_i are scalar outcomes for the i-th subject, and X_i(t) is a functional covariate observed at times t in [0,1,...T], and L are the quadrature weights. Beta() and/or F{} are the functions to be estimated. Intuitively, model 1 is a linear functional model with a (potentially non-linear) time-dependent regression coefficient (beta()) for the covariate. Model 2 allows for a non-linear function of the covariate (F{}), but which is constant over time. Model 3 is the full 'functional GAM' that allows for a fully flexible non-linear covariate- and time- dependent function. In my mind at least these would seem to form a natural step-by-step approach of increasing complexity for exploring this type of regression model. Models 1 (linear functional) and 3 (functional GAM) are relatively straightforward to do with matrix arguments to mgcv::gam. Assume N subjects observed at T time points. Y is the length-N vector of scalar outcomes and X, T, and W are the N*T matrices of the functional predictor data values, their observation times, and trapezoidal quadrature weights, respectively. Models (1) and (3) could be obtained with: m1 = gam(Y ~ s(T, by=I(X*W), bs='ps') m3 = gam(Y ~ te(X, T, by=W), bs='ps') However, I cannot find a way to achieve model (2) where there is a 'simple' product of the smooth functions of X and T. Effectively what I need (I think) is a way of creating a `te()` tensor product smooth but somehow constraining each marginal smooth to be the same for all values of the other variable? Is this possible? ______________________________________________ [hidden email] mailing list -- To UNSUBSCRIBE and more, see https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code. |
I am trying to test out several mgcv::gam models in a scalar-on-function regression analysis.
The following is the 'hierarchy' of models I would like to test: (1) Y_i = a + integral[ X_i(t)*Beta(t) dt ] (2) Y_i = a + integral[ F{X_i(t)}*Beta(t) dt ] (3) Y_i = a + integral[ F{X_i(t),t} dt ] equivalents for discrete data might be: 1) Y_i = a + sum_t[ L_t * X_it * Beta_t ] (2) Y_i = a + sum_t[ L_t * F{X_it} * Beta_t ] (3) Y_i = a + sum_t[ L_t * F{X_it,t} ] where Y_i are scalar outcomes for the i-th subject, and X_i(t) is a functional covariate observed at times t in [0,1,...T], and L are the quadrature weights. Beta() and/or F{} are the functions to be estimated. Intuitively, model 1 is a linear functional model with a (potentially non-linear) time-dependent regression coefficient (beta()) for the covariate. Model 2 allows for a non-linear function of the covariate (F{}), but which is constant over time. Model 3 is the full 'functional GAM' that allows for a fully flexible non-linear covariate- and time- dependent function. In my mind at least these would seem to form a natural step-by-step approach of increasing complexity for exploring this type of regression model. Models 1 (linear functional) and 3 (functional GAM) are relatively straightforward to do with matrix arguments to mgcv::gam. Assume N subjects observed at T time points. Y is the length-N vector of scalar outcomes and X, T, and W are the N*T matrices of the functional predictor data values, their observation times, and trapezoidal quadrature weights, respectively. Models (1) and (3) could be obtained with: m1 = gam(Y ~ s(T, by=I(X*W), bs='ps') m3 = gam(Y ~ te(X, T, by=W), bs='ps') However, I cannot find a way to achieve model (2) where there is a 'simple' product of the smooth functions of X and T. Effectively what I need (I think) is a way of creating a `te()` tensor product smooth but somehow constraining each marginal smooth to be the same for all values of the other variable? Is this possible? ______________________________________________ [hidden email] mailing list -- To UNSUBSCRIBE and more, see https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code. |
Free forum by Nabble | Edit this page |