Используя линейную регрессию (lm) в карете R, как мне заставить точку пересечения через 0?

Я пытаюсь использовать R Caret для перекрестной проверки моих моделей линейной регрессии. В некоторых случаях я хочу заставить перехват через 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 

person Sarah M    schedule 18.01.2017    source источник
comment
Я полагаю, вы хотите, чтобы формула y ~ -1 + x явно исключала перехват.   -  person aichao    schedule 19.01.2017
comment
@aichao Оба они работают в большинстве функций, но реализация caret затрудняет работу без редактирования исходного кода.   -  person Chrisss    schedule 19.01.2017
comment
@Chrisss: спасибо! приятно знать.   -  person aichao    schedule 19.01.2017
comment
Возможно, это поможет: stackoverflow. ком/вопросы/12394855/   -  person Raad    schedule 19.01.2017
comment
Если вы scale все свои данные, ваш перехват станет [фактически] нулевым.   -  person alistaire    schedule 19.01.2017


Ответы (1)


Вы можете воспользоваться параметром 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, но увы.

person Chrisss    schedule 18.01.2017
comment
Кажется, это работает. Спасибо. (Я также пытался использовать «трассировку» для изменения формулы, но безуспешно - заголовок stackoverflow.com/questions/12394855/) - person Sarah M; 19.01.2017
comment
@SarahM Я считаю, что исходный код caret изменился с тех пор, как был сделан ответ на трассировку, поэтому он больше не подходит. - person Chrisss; 19.01.2017
comment
@SarahM Вы должны принять это как ответ. хорошо хоть в карете v6.0.76 - person ; 29.05.2017