2014-02-26 80 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,可能会耗费大量时间。