r - 使用线性模型进行预测和 data.frame 的重要性
问题描述
我写信是想问为什么我们应该添加 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))))
解决方案
当你调用predict
一个lm
对象时,调用的函数是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
推荐阅读
- python-3.x - 在行标签上对数据框中的值求和
- javascript - 使用 setTimeOut 和 Promise 等待来自异步函数的值
- python - RuntimeError:输入必须有 3 个维度,得到 2
- html - Bootstrap 4-整页,两列+可见页脚
- arrays - 指向二维指针数组的指针
- javascript - Javascript Promise 未按预期工作
- javascript - beforeunload 事件处理程序未写入 localStorage
- gis - 在 TIGERLINE Shapefile 中找不到 GEOID
- button - 按esc时如何修改lc_swith按钮位置?
- python - 1 小时前重建时间序列索引