2017-01-18 13 views
2

Я пытаюсь использовать R caret для выполнения перекрестной проверки моих моделей линейной регрессии. В некоторых случаях, я хочу, чтобы заставить перехватывать через 0. Я попытался следующий, используя стандартный синтаксис ого:Использование линейной регрессии (lm) в R-каретке, как заставить перехват через 0?

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 ` 

Этого синтаксис, кажется, работает со стандартной функцией «ой», но не в пакете каретки. Какие-либо предложения?

test <- lm(y ~ 0 + x, 
     data = myData) 


Call: 
lm(formula = y ~ 0 + x, data = myData) 

Coefficients: 
x 
0.003079 
+1

Я считаю, что вы хотите, чтобы формула 'y ~ -1 + x' явно исключала перехват. – aichao

+0

@aichao Обе эти функции работают в большинстве функций, но реализация «caret» затрудняет работу без редактирования исходного кода. – Chrisss

+0

@Chrisss: спасибо! приятно знать. – aichao

ответ

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 (в случае лм, единственным параметром настройки является перехват). Глупо, что вы не можете просто полагаться на синтаксис formula, но, увы.

+0

Это похоже на работу. Спасибо. (Я также пытался использовать «трассировку» для изменения формулы, но без каких-либо успехов - http://stackoverflow.com/questions/12394855/fit-a-no-intercept-model-in-caret) –

+0

@SarahM Я считаю, что Исходный код «caret» изменился с момента получения ответа на трассировку, поэтому он больше не подходит. – Chrisss

+0

@SarahM Вы должны принять это как ответ. это хорошо, по крайней мере, в карете v6.0.76 –

 Смежные вопросы

  • Нет связанных вопросов^_^