【问题标题】:Right way to use lm in R在 R 中使用 lm 的正确方法
【发布时间】:2013-11-20 04:35:16
【问题描述】:

我不太清楚如何使用要求公式和 data.frame 的函数,如 lm()。 在网络上我对不同的方法很感兴趣,但有时 R 会给我们警告和其他东西

假设一个线性模型,其中输出向量 y 由矩阵 X 解释。

我认为最好的方法是使用 data.frame(特别是如果我们稍后要使用 predict 函数)。

在 X 是矩阵的情况下,这是使用 lm 的最佳方式吗?

n=100
p=20
n_new=50

X=matrix(rnorm(n*p),n,p)
Y=rnorm(n)
data=list("x"=X,"y"=Y)
l=lm(y~x,data)  

X_new=matrix(rnorm(n_new*p),n_new,p)
pred=predict(l,as.data.frame(X_new))

【问题讨论】:

    标签: r lm


    【解决方案1】:

    怎么样:

    l <- lm(y~.,data=data.frame(X,y=Y))
    pred <- predict(l,data.frame(X_new))
    

    在这种情况下,R 会自动构造列名 (X1 ... X20),但是当您使用 y~. 语法时,您不需要知道它们。

    或者,如果您总是要基于矩阵拟合线性回归,您可以使用 lm.fit() 并使用矩阵乘法自己计算预测:您必须使用 cbind(1,.) 添加截距列。

    fit <- lm.fit(cbind(1,X),Y)
    all(coef(l)==fit$coefficients)  ## TRUE
    pred <- cbind(1,X_new) %*% fit$coefficients
    

    (您也可以使用cbind(1,X_new) %*% coef(l)。)这很有效,但它会跳过很多错误检查步骤,因此请谨慎使用...

    【讨论】:

    • 好的,谢谢,这很好用。这看起来很奇怪,但我没有找到任何关于如何使用 ml 和类似东西的快速解释。
    • 你在哪里看的?大多数将 lm 与预先存在的矩阵一起使用的人使用 lm.fit,但像 predict 这样的便利函数需要一个数据框。
    【解决方案2】:

    在您描述的这种情况下,您没有理由不将矩阵转换为数据框。试试:

    myData <- as.data.frame(cbind(Y, X))
    l      <- lm(Y~., data=myData)
    

    【讨论】:

      猜你喜欢
      • 2020-08-22
      • 1970-01-01
      • 2012-06-11
      • 1970-01-01
      • 1970-01-01
      • 2013-06-27
      • 2021-12-20
      相关资源
      最近更新 更多