在R插入符号中使用线性回归(lm),如何通过0强制拦截?

时间:2017-01-18 22:22:47

标签: r r-caret lm

我正在尝试使用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 

1 个答案:

答案 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语法,但唉。