Да, используйте подход грубой силы для создания формулы, соединив вместе имена ковариатов со строками 's('
и ')'
, а затем свернув все это с помощью ' + '
. Преобразуйте результирующую строку в формулу и передайте ее в gam()
. Возможно, вам придется исправить проблемы со средой формулы, если gam()
не может найти переменную, которую вы называете, поскольку она собирается выполнить некоторый NSE в формуле, чтобы определить, какие члены нуждаются в сглаживающей оценке и, следовательно, должны быть заменены расширением базы.
library(mgcv)
set.seed(2) ## simulate some data...
df <- gamSim(1, n=400, dist = "normal", scale = 2)
> names(df)
[1] "y" "x0" "x1" "x2" "x3" "f" "f0" "f1" "f2" "f3"
Мы проигнорируем последние 5 из этих столбцов для целей этого примера.
df <- df[1:5]
Сделайте формулу
fm <- paste('s(', names(df[ -1 ]), ')', sep = "", collapse = ' + ')
fm <- as.formula(paste('y ~', fm))
Теперь подогнать модель
m <- gam(fm, data = df)
> m
Family: gaussian
Link function: identity
Formula:
y ~ s(x0) + s(x1) + s(x2) + s(x3)
Estimated degrees of freedom:
2.5 2.4 7.7 1.0 total = 14.6
GCV score: 4.050519
Однако вы должны быть осторожны при установке GAM таким образом; параллелизм (нелинейный аналог мультиколинеарности в линейных моделях) может привести к катастрофически плохим оценкам гладких функций.
person
Gavin Simpson
schedule
20.09.2017