r-使用线性模型的预测和数据帧的重要性



我写这篇文章是想问我们为什么要添加data.frame((来使用lm 进行预测

第一个代码块被认为是错误的,而第二个代码块则被认为是正确的。

dim(iris)
model_1<-lm(Sepal.Length~Sepal.Width, data=iris)
summary(model_1)
print(predict(model_1, Sepal.Width=c(1,3,4,5)))

dim(iris)
model_1<-lm(Sepal.Length~Sepal.Width, data=iris)
summary(model_1)
print(predict(model_1,data.frame(Sepal.Width=c(1,3,4,5))))

lm对象上调用predict时,调用的函数为predict.lm

predict(model_1, Sepal.Width=c(1,3,4,5))

您要做的是为c(1,3,4,5)提供一个参数或Sepal.Width的参数,predict.lm会忽略此参数,因为此函数不存在此参数。

当没有新的输入数据时,您正在运行predict.lm(model_1),并返回拟合值:

table(predict(model_1) == predict(model_1, Sepal.Width=c(1,3,4,5)))
TRUE 
150

在这种情况下,您用公式拟合模型,predict.lm函数需要您的数据帧来重建独立或外生矩阵,矩阵与系数相乘,并返回预测值。

以下是predict.lm正在做的事情:

newdata = data.frame(Sepal.Width=c(1,3,4,5))
Terms = delete.response(terms(model_1))
X = model.matrix(Terms,newdata)
X
(Intercept) Sepal.Width
1           1           1
2           1           3
3           1           4
4           1           5
X %*% coefficients(model_1)
[,1]
1 6.302861
2 5.856139
3 5.632778
4 5.409417
predict(model_1,newdata)
1        2        3        4 
6.302861 5.856139 5.632778 5.409417

最新更新