Zach - 1 year ago 109

R Question

In R, I specify a model with no intercept as follows:

`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

However, if I fit the same model with caret, the resulting model includes an intercept:

`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

How do I tell

`caret::train`

Answer Source

@rcs already told you which line in which function you need to change.

Just use `trace`

to modify that function:

```
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)
```

However, I don't use caret. There might be unforeseen consequences. It's also often not a good idea to exclude the intercept from the model.