我不清楚如何使用像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))
答案 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)