Шаг регрессии не работает: обзор - PullRequest
0 голосов
/ 26 июня 2018

Код ниже является воспроизводимым примером.Когда я комментирую функцию step, блеск работает хорошо.Но когда я использую функцию step, «блестящий» выдает ошибку «объект 'tmp.data' not found»

У кого-нибудь есть идеи, как сделать «tmp.data» видимым для функции step?Спасибо!

indicators <- mtcars[,c(-1,-6)]
input = list(y='mpg')
tmp.model <- function(){
  tmp.data = cbind(mtcars[input$y], indicators)
  biggest = as.formula(lm(paste(input$y,"~."), tmp.data))
  tmp.model = lm(paste(input$y,"~disp"), tmp.data)
  tmp.model = step(tmp.model, direction="forward", scope=biggest, k=log(nrow(mtcars))) # tmp.data not found
  tmp.model
}
summary(tmp.model())

Ответы [ 2 ]

0 голосов
/ 26 июня 2018

Немного более чёткая версия того, что, я думаю, вы пытаетесь решить:

model_fun <- function(df, resp_var, pred_vars) {
  biggest <- as.formula(paste0(resp_var, " ~ ", paste(pred_vars, collapse = " + ")))
  lm_fit <- lm(biggest, data = df)
  step_fit <- step(lm_fit, direction = "forward", scope = biggest, k = log(nrow(df)))
  step_fit
}
model_fun(mtcars, "mpg", c("cyl", "disp", "hp", "drat", "qsec", "vs", "am", "gear", "carb"))
0 голосов
/ 26 июня 2018

Ну, я нашел очень очень грязное решение, чтобы решить его прямо сейчас, но я все еще надеюсь, что кто-то может дать мне более изящный способ решения этой проблемы с областью действия.

indicators <- mtcars[,c(-1,-6)]
input = list(y='mpg')
tmp.model <- function(){
  # directly write into global environment.....
  .GlobalEnv$tmp.data = cbind(mtcars[input$y], indicators)
  biggest = as.formula(lm(paste(input$y,"~."), tmp.data))
  tmp.model = lm(paste(input$y,"~disp"), tmp.data)
  tmp.model = step(tmp.model, direction="forward", scope=biggest, k=log(nrow(mtcars))) # tmp.data not found
  tmp.model
}
summary(tmp.model())

Обновление: Благодаря ответу mhammer , теперь у нас есть чистое решение

model_fun <- function(df, resp_var, must_include, maybe_include) {
  begin <- as.formula(paste0(resp_var, " ~ ", paste(must_include, collapse = " + ")))
  biggest <- as.formula(paste0(resp_var, " ~ ", paste(c(must_include, maybe_include), collapse = " + ")))
  lm_fit <- lm(begin, data = df)
  step_fit <- step(lm_fit, direction = "forward", scope = biggest, k = log(nrow(df)))
  step_fit
}
model_fun(mtcars, "mpg", "disp", c("cyl", "hp", "drat", "qsec", "vs", "am", "gear", "carb"))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...