R说lm.fit想要一个矩阵

时间:2014-02-26 14:28:55

标签: r types lm

我在课程的上下文中学习R,我收到一条我不理解的错误信息。我从教师提供的文件中加载数据,以获取xy

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

现在我尝试适应OLS,但失败了:

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

我不确定x是什么。 class告诉我它是“数字”并且打印其前十个值看起来像这样:

> 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

谷歌搜索此错误消息没有出现任何问题。

2 个答案:

答案 0 :(得分: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)

答案 1 :(得分:0)

你总是可以使用lm.fit lm.fit(矩阵(X,长度(X),1),y)的 有时人们更喜欢调用lm.fit来提高性能。因为lm在内部调用lm.fit并且它会执行一些额外的jon,如果你想多次运行lm,这可能会非常耗时。