Bert-toolkit - очень хороший пакет для вызова функций R из Excel. См .: https://bert-toolkit.com/
Я использовал набор инструментов bert для вызова встроенного нейра lnet (avN Nnet с кареткой) в функции оболочки в R из Excel VBA. Это работает отлично. Это код для загрузки модели в функции оболочки в bert-toolkit:
load("D:/my_model_avNNet.rda")
neuraln <- function(x1,x2,x3){
xx <- data.frame(x1,x2,x3)
z <- predict(my_model_avNNET, xx)
z
}
В настоящее время я пытался сделать это с помощью встроенного GAM (с пакетом mgcv). Хотя у меня ничего не получится. Если я вызываю установленную GAM из Excel VBA, это дает ошибку 2015. Если я вызываю установленную GAM из ячейки, это дает #VALUE! В то же время правильный результат расчета показан в консоли bert!
Это код для загрузки модели в функцию оболочки в bert-toolkit:
library(mgcv)
load("D:/gam_y_model.rda")
testfunction <- function(k1,k2){
z <- predict(gam_y, data.frame(x = k1, x2 = k2))
print (z)
}
Разница между avN Nnet -моделью (Caret) и GAM-моделью (mgcv) заключается в том, что avN Nnet -model НЕ требуется загрузка библиотеки Caret для генерации прогноза, в то время как GAM-модель НЕ ДОЛЖНА загружаемая библиотека mgcv.
Кажется, что недостаточно загрузить библиотеку mgv c в сценарии с помощью GAM-модели, которая загружает GAM-модель в функцию-обертку в bert-toolkit , как я сделал в коде выше. Хотя правильный вывод модели показан на консоли bert. Это не дает правильного результата в Excel. Интересно, как это возможно и может быть решено. Мне кажется, что, может быть, в bert-toolkit есть два экземпляра R.
Как загрузить библиотеку mgcv таким образом, чтобы она могла использоваться GAM-моделью в функции вызывается из Excel? Ниже приведен пример кода для подгонки GAM с mgcv и сохранения в модель (после запуска этого кода модель можно загрузить в bert-toolkit с кодом выше):
library(mgcv)
# construct some sample data:
x <- seq(0, pi * 2, 0.1)
x2 <- seq(0, pi * 20, 1)
sin_x <- sin(x)
tan_x2 <- tan(x2)
y <- sin_x + rnorm(n = length(x), mean = 0, sd = sd(sin_x / 2))
Sample_data <- data.frame(y,x,x2)
# fit gam:
gam_y <- gam(y ~ s(x) + s(x2), method = "REML")
# Make predictions with the fitted model:
x_new <- seq(0, max(x), length.out = 100)
x2_new <- seq(0, max(x2), length.out = 100)
y_pred <- predict(gam_y, data.frame(x = x_new, x2 = x2_new))
# save model, to load it later in bert-toolkit:
setwd("D:/")
save(gam_y, file = "gam_y_model.rda")