2013-07-22 15 views
24

私は予測のためにneuralnetを使用しています。terms.formula(公式)のエラー: '。'式の中で 'data'という引数はありません

いくつかのXを作成します。

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

は、Yを作成します。

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

はdata.frameを作成し、それらに名前

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

を与える:

dt <- data.frame(x, y) 
を3210

そして今、私は(式)terms.formulaに

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

エラー

エラーを得ました: ''式の中で 'データなし' 引数

たとえば、lm(線形モデル)ではこれが実行されます。

+4

'neuralnet'は、エクスポートされていない関数' neuralnet ::: generate.initial.variables'を使用して数式を大量に処理しています。その機能にバグがあります。メンテナに連絡して、この例や質問へのリンクを送付することをお勧めします。 –

答えて

37

私のコメントでは、これはエクスポートされていない関数neuralnet:::generate.initial.variablesのバグのようです。回避策として、を除いて、dtの名前から長い式を作成してください。前の回答にシンプルな代替手段を提供

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

ありがとう、これは素晴らしいソリューションです! – luckyi

+0

申し訳ありませんが、私は理解できません。なぜエラー値が大きいのですか?だから私はしましたが、一定の予測値を得ました。手伝って頂けますか? – luckyi

+0

@luckyiそれはおそらく統計的な質問であり、それには適していません[so] [stats.se]に質問してみてください。 –

0

、あなたはreformulate()を使用してdtの名前から式を作成することができます。

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

reformulate()paste()の使用を必要としないと、自動的に一緒に用語を追加します。