我正在尝试使用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”函数,但不在插入符号包中。有什么建议吗?
test <- lm(y ~ 0 + x,
data = myData)
Call:
lm(formula = y ~ 0 + x, data = myData)
Coefficients:
x
0.003079
答案 0 :(得分:2)
您可以利用tuneGrid
中的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))
使用getModelInfo("lm", regex = TRUE)[[1]]$param
查看您可以在tuneGrid
中调整的所有内容(在lm情况下,唯一的调整参数是截距)。愚蠢的是,你不能简单地依赖formula
语法,但唉。