2014-02-26 73 views
2

我在課程的上下文中學習R,並收到一條我不明白的錯誤消息。我從一個文件由導師給加載數據得到xyR說lm.fit想要一個矩陣

> load("7.R.RData") 
> ls() 
[1] "x" "y" 

現在我儘量合身OLS,但失敗:

> lm.fit(y ~ x) 
Error in lm.fit(y ~ x) : 'x' must be a matrix 

我真的不知道什麼是xclass告訴我,它的「數字」並打印其前十位的值是這樣的:

> class(x) 
[1] "numeric" 
> x[1:10] 
[1] 140.1638 140.4303 140.9321 141.7705 140.0042 141.7460 141.8617 141.1520 

天真,我試着轉換x一個矩陣,但這不會改變任何東西:

> x = matrix(x) 
> lm.fit(y ~ x) 
Error in lm.fit(y ~ x) : 'x' must be a matrix 

谷歌搜索對於這個錯誤消息沒有任何東西。

回答

3

好的,在輸入問題時找到它。習慣了scikit-learn,statsmodels和其他Python工具,我很困惑lmlm.fit。後者是一個低級別的擬合程序與調用約定

lm.fit (x, y, offset = NULL, method = "qr", tol = 1e-7, 
     singular.ok = TRUE, ...) 

因此,錯誤消息抱怨的第一個參數,公式,不是我x。我應該用

lm(y ~ x) 
+2

如果有疑問,請查閱文檔:'help(「lm.fit」)'。順便說一句,'lm.fit(x,y)'不同於'lm(y〜x)'。前者不包括攔截,後者則包含攔截。要包含一個攔截,你需要'lm.fit(cbind(1,x),y)'。 – Roland

+0

@Roland:刪除了'lm.fit'的最後一個註釋,謝謝你的支持。 –

0

您可以隨時使用lm.fit lm.fit(矩陣(X,長度(X),1),Y) 有時人喜歡叫lm.fit爲performance.Because lm在內部調用lm.fit,並且它會執行一些額外的jon,如果要運行多次lm,可能會耗費大量時間。