在R中使用lm的正确方法

时间:2013-11-19 15:42:29

标签: r lm

我不清楚如何使用像lm()这样的函数来询问公式和data.frame。 在网络上我对不同的方法有所了解,但有时R会给我们警告和其他东西

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

我认为最好的方法是使用data.frame(特别是如果我们稍后要使用预测功能)。

在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))

2 个答案:

答案 0 :(得分:7)

怎么样:

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)。)这是有效的,但它会跳过很多错误检查步骤,所以请谨慎使用...

答案 1 :(得分:1)

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

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