2013-07-22 26 views
24

我打算使用神經網絡進行預測。terms.formula(公式)中的錯誤:'。'在公式和沒有'數據'的參數

創建一些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) 

而現在,我在terms.formula遇到錯誤

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

誤差(公式): ''在公式中沒有'數據' 自變量

例如,在lm(線性模型)中,這起作用。

+4

'neuralnet'通過非導出函數'neuralnet ::: generate.initial.variables'做了很多操作。該函數有一個錯誤。我建議你聯繫維護人員並向他們發送這個例子或鏈接。 –

回答

37

正如我的評論所述,這看起來像是非導出函數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 
+0

謝謝,這是很好的解決方案! – luckyi

+0

對不起,但我無法理解。爲什麼錯誤值如此之大?所以我做了,但得到了不變的預測值。你可以幫我嗎? – luckyi

+0

@luckyi這可能是一個統計問題,不適合[so]嘗試詢問[stats.se]。 –

0

提供給前面的回答更簡單的替代方法,可以使用reformulate()創建的dt名稱的公式:

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

reformulate()不需要使用paste(),並自動添加的條款一起。