在 R 插入符号中使用线性回归 (lm),如何强制截距通过 0?
Using linear regression (lm) in R caret, how do I force the intercept through 0?
我正在尝试使用 R 插入符号对我的线性回归模型执行交叉验证。在某些情况下,我想通过 0 强制拦截。我使用标准 lm 语法尝试了以下操作:
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 `
此语法似乎适用于标准 'lm' 函数,但不适用于 caret 包。有什么建议吗?
test <- lm(y ~ 0 + x,
data = myData)
Call:
lm(formula = y ~ 0 + x, data = myData)
Coefficients:
x
0.003079
您可以利用 caret::train
中的 tuneGrid
参数。
regressControl <- trainControl(method="repeatedcv",
number = 4,
repeats = 5
)
regress <- train(mpg ~ hp,
data = mtcars,
method = "lm",
trControl = regressControl,
tuneGrid = expand.grid(intercept = FALSE))
使用 getModelInfo("lm", regex = TRUE)[[1]]$param
查看您可以在 tuneGrid
中调整的所有内容(在 lm 案例中,唯一的调整参数是截距)。不能简单地依赖 formula
语法是愚蠢的,但是唉。
我正在尝试使用 R 插入符号对我的线性回归模型执行交叉验证。在某些情况下,我想通过 0 强制拦截。我使用标准 lm 语法尝试了以下操作:
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 `
此语法似乎适用于标准 'lm' 函数,但不适用于 caret 包。有什么建议吗?
test <- lm(y ~ 0 + x,
data = myData)
Call:
lm(formula = y ~ 0 + x, data = myData)
Coefficients:
x
0.003079
您可以利用 caret::train
中的 tuneGrid
参数。
regressControl <- trainControl(method="repeatedcv",
number = 4,
repeats = 5
)
regress <- train(mpg ~ hp,
data = mtcars,
method = "lm",
trControl = regressControl,
tuneGrid = expand.grid(intercept = FALSE))
使用 getModelInfo("lm", regex = TRUE)[[1]]$param
查看您可以在 tuneGrid
中调整的所有内容(在 lm 案例中,唯一的调整参数是截距)。不能简单地依赖 formula
语法是愚蠢的,但是唉。