我试图弄清楚如何从插入符::训练线性模型中获取置信区间。
我的第一次尝试只是使用通常的 lm 置信区间参数来运行预测:
m <- caret::train(mpg ~ poly(hp,2), data=mtcars, method="lm")
predict(m, newdata=mtcars, interval="confidence", level=0.95)
Run Code Online (Sandbox Code Playgroud)
但看起来从 caret::train 返回的对象没有实现这个。
我的第二次尝试是提取最终模型并对此进行预测:
m <- caret::train(mpg ~ poly(hp,2), data=mtcars, method="lm")
fm <- m$finalModel
predict(fm, newdata=mtcars, interval="confidence", level=0.95)
Run Code Online (Sandbox Code Playgroud)
但我得到了错误
Error in eval(predvars, data, env) : object 'poly(hp, 2)1' not found
Run Code Online (Sandbox Code Playgroud)
深入挖掘,最终模型似乎对公式有一些奇怪的表示,并且正在我的新数据中搜索“poly(hp, 2)1”列,而不是评估公式。m$finalModel 看起来像这样:
Call:
lm(formula = .outcome ~ ., data = dat)
Coefficients:
(Intercept) `poly(hp, 2)1` `poly(hp, 2)2`
20.09 -26.05 13.15
Run Code Online (Sandbox Code Playgroud)
我应该补充一点,我不只是使用lm,因为我使用插入符号通过交叉验证来拟合模型。
如何通过 caret::train 从线性模型拟合中获取置信区间?