2013-07-22 55 views
24

Sto provando ad usare neuralnet per la previsione.Errore in terms.formula (formula): '.' in formula e nessun argomento 'dati'

Crea qualche X:

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

Crea Y:

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

dare loro un nome

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

Marchio data.frame:

dt <- data.frame(x, y) 

E ora, ho ottenuto l'errore

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

errore nella terms.formula (formula): '' in formula e senza 'dati' argomento

Ad esempio, in lm (modello lineare) viene eseguito.

+4

'neuralnet' sta facendo molto casino con la formula tramite la funzione non esportata' neuralnet ::: generate.initial.variables'. C'è un bug in quella funzione. Ti suggerisco di contattare il manutentore e inviare loro questo esempio o un link alla domanda. –

risposta

37

Come il mio commento afferma, questo sembra un bug nella funzione non esportata neuralnet:::generate.initial.variables. Per risolvere il problema, è sufficiente creare una formula lunga con i nomi di dt, escluso , ad es.

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 
+0

grazie, questa è una bella soluzione! – luckyi

+0

scusa, ma non riesco a capire. Perché il valore dell'errore è così grande? Così ho fatto, ma ho ottenuto un valore previsto costante. Mi potete aiutare? – luckyi

+0

@luckyi Probabilmente è una domanda statistica e non è adatta a [così] Prova a chiedere su [stats.se]. –

0

Offrendo un'alternativa più semplice alla risposta precedente, è possibile creare una formula da nomi di dt usando reformulate():

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

reformulate() non richiede l'uso di paste() e aggiunge automaticamente i termini insieme .