Using linear regression (lm) in R caret, how do I force the intercept through 0? [duplicate]

I'm trying to use R caret to perform cross-validation of my linear regression models. In some cases I want to force the intercept through 0. I have tried the following, using the standard lm syntax:

```
regressControl <- trainControl(method="repeatedcv",
number = 4,
repeats = 5
)
regress <- train(y ~ 0 + x,
data = myData,
method = "lm",
trControl = regressControl)
Call:
lm(formula = .outcome ~ ., data = dat)
Coefficients:
(Intercept) x
-0.0009585 0.0033794 `
```

This syntax seems to work with the standard 'lm' function but not within the caret package. Any suggestions?

```
test <- lm(y ~ 0 + x,
data = myData)
Call:
lm(formula = y ~ 0 + x, data = myData)
Coefficients:
x
0.003079
```

Answer #1:

You can take advantage of the `tuneGrid`

parameter in `caret::train`

.

```
regressControl <- trainControl(method="repeatedcv",
number = 4,
repeats = 5
)
regress <- train(mpg ~ hp,
data = mtcars,
method = "lm",
trControl = regressControl,
tuneGrid = expand.grid(intercept = FALSE))
```

Use `getModelInfo("lm", regex = TRUE)[[1]]$param`

to see all the things you could have tweaked in `tuneGrid`

(in the lm case, the only tuning parameter is the intercept). It's silly that you can't simply rely on `formula`

syntax, but alas.

The answers/resolutions are collected from stackoverflow, are licensed under cc by-sa 2.5 , cc by-sa 3.0 and cc by-sa 4.0 .

# More Articles