R 在插入符号中拟合无截距模型
在R中,我指定了一个没有截距的模型,如下所示:R 在插入符号中拟合无截距模型,r,regression,intercept,r-caret,R,Regression,Intercept,R Caret,在R中,我指定了一个没有截距的模型,如下所示: data(iris) lmFit <- lm(Sepal.Length ~ 0 + Petal.Length + Petal.Width, data=iris) > round(coef(lmFit),2) Petal.Length Petal.Width 2.86 -4.48 数据(iris) lmFit圆形(coef(lmFit),2) 花瓣。长度。花瓣。宽度 2.86 -4.48
data(iris)
lmFit <- lm(Sepal.Length ~ 0 + Petal.Length + Petal.Width, data=iris)
> round(coef(lmFit),2)
Petal.Length Petal.Width
2.86 -4.48
数据(iris)
lmFit圆形(coef(lmFit),2)
花瓣。长度。花瓣。宽度
2.86 -4.48
但是,如果使用插入符号拟合同一模型,则生成的模型包含一个截距:
library(caret)
caret_lmFit <- train(Sepal.Length~0+Petal.Length+Petal.Width, data=iris, "lm")
> round(coef(caret_lmFit$finalModel),2)
(Intercept) Petal.Length Petal.Width
4.19 0.54 -0.32
库(插入符号)
插入符号轮(coef(插入符号$finalModel),2)
(截距)花瓣长度花瓣宽度
4.19 0.54 -0.32
如何告诉插入符号::train排除截取项?@rcs已经告诉您需要更改哪一行的哪一个函数 只需使用
trace
修改该函数即可:
trace(caret::createModel,
quote(modFormula <- as.formula(".outcome ~ .-1")), at=5, print=FALSE)
caret_lmFit <- train(Sepal.Length~0+Petal.Length+Petal.Width, data=iris, "lm")
round(coef(caret_lmFit$finalModel),2)
#Petal.Length Petal.Width
# 2.86 -4.48
untrace(caret::createModel)
跟踪(插入符号::createModel,
quote(modFormula正如在链接的SO问题中所讨论的,这在插入符号v6.0.76中有效(上面的跟踪答案似乎不再适用于插入符号中的代码重构):
caret\u lmFit caret\u lmFit$finalModel
电话:
lm(公式=结果0+,数据=数据)
系数:
花瓣。长度。花瓣。宽度
2.856 -4.479
如果不更改源代码,这是不可能的。请参阅createModel.R
第25行:modFormula我不知道您可以使用跟踪修改函数。太好了!谢谢。
caret_lmFit <- train(Sepal.Length~0+Petal.Length+Petal.Width, data=iris, "lm",
tuneGrid = expand.grid(intercept = FALSE))
> caret_lmFit$finalModel
Call:
lm(formula = .outcome ~ 0 + ., data = dat)
Coefficients:
Petal.Length Petal.Width
2.856 -4.479