Подтвердить что ты не робот

Ошибка в terms.formula(formula): '.' в формуле и аргументе 'data'

Я пытаюсь использовать neuralnet для прогнозирования.

Создайте X:

x <- cbind(seq(1, 50, 1), seq(51, 100, 1))

Создать Y:

y <- x[,1]*x[,2]

Дайте им имена

colnames(x) <- c('x1', 'x2')
names(y) <- 'y'

Сделать data.frame:

dt <- data.frame(x, y)

И теперь я получил ошибку

model <- neuralnet(y~., dt, hidden=10, threshold=0.01)

ошибка в terms.formula(formula): '.' в формуле и без 'данных' Аргумент

Например, в lm (линейная модель) это работает.

4b9b3361

Ответ 1

Как говорится в моем комментарии, это выглядит как ошибка в неэкспортируемой функции neuralnet:::generate.initial.variables. Как работа, просто создайте длинную формулу из имен dt, исключая y, например.

n <- names(dt)
f <- as.formula(paste("y ~", paste(n[!n %in% "y"], collapse = " + ")))
f

## gives
> f
y ~ x1 + x2

## fit model using `f`
model <- neuralnet(f, data = dt, hidden=10, threshold=0.01)

> model
Call: neuralnet(formula = f, data = dt, hidden = 10, threshold = 0.01)

1 repetition was calculated.

        Error Reached Threshold Steps
1 53975276.25     0.00857558698  1967

Ответ 2

Предлагая более простую альтернативу предыдущему ответу, вы можете создать формулу из имен dt с помощью reformulate():

f <- reformulate(setdiff(colnames(dt), "y"), response="y")

reformulate() не требует использования paste() и автоматически добавляет термины вместе.