Как использовать map_df для запуска регрессий каждого ряда таблицы? - PullRequest
0 голосов
/ 10 марта 2020
WageA3 <- Wage %>% select(-c(logwage,region))

Я создал эту функцию для сравнения моделей прогнозирования

y_name <- c("wage")
X_names <- c("age","health")


subset_error_rates<-function(X_names,y_name,data=WageA3, train_pop){

  reg_form <-as.formula(paste(y_name,"~", 
                             paste(X_names, collapse = " + ")))

  traincut<-round(train_pop*nrow(data))

  train_data<-data[1:traincut,]
  test_data<-data[(traincut+1):nrow(data),]

  model1<-lm(reg_form, data = train_data)
  train_data<- train_data %>%
    mutate(pred_traindat=predict(model1))
  test_data<- test_data %>%
    mutate(pred_testdat=predict(model1,newdata=test_data))

  train_data<- train_data%>%
    mutate(err_pred_train=((pred_traindat-train_data[[y_name]])^2))
  Training_err<-mean(train_data$err_pred_train)

  test_data<-test_data %>%
    mutate(err_pred_test=((pred_testdat-test_data[[y_name]])^2))
  Test_err<-mean(test_data$err_pred_test)
Names_of_x<-list(X_names)

  Length<-length(X_names)
  return(tibble(Training_err,Test_err,Length,Names_of_x))

}

WageA3

subset_error_rates(X_names, y_name, WageA3, .75)


Затем я использую этот код для создания списка всех возможных моделей:

regMat <- expand.grid(c(TRUE,FALSE), c(TRUE,FALSE),
                      c(TRUE,FALSE), c(TRUE,FALSE), c(TRUE,FALSE),c(TRUE,FALSE),c(TRUE,FALSE),c(TRUE,FALSE))

regMat <- regMat[-(dim(regMat)[1]),]
names(regMat) <- c("year","age","maritl","race","education","jobclass","health","health_ins")

regressors <- c("year","age","maritl","race","education","jobclass","health","health_ins")


allModelsList <- apply(regMat, 1, function(x) as.formula(
                       paste(c("wage ~ 1", regressors[x]),
                             collapse=" + ")) )
data=Wage
allModelsResults <- lapply(allModelsList,
                           function(x) lm(x, data=data))

Наконец, я хочу использовать функцию map_df вместе с функцией subset_error_rates, которую я только что создал, чтобы составить таблицу с одной строкой для каждой комбинации фоновых переменных, и вот что я пытаюсь:


allModelsList %>% map_df(subset_error_rates(y_name="wage",data=Wage,train_pop=.80))

Однако я не знаю, как сказать R использовать в качестве аргумента для X_names, то есть в качестве вектора регрессоров переменные, перечисленные в каждой строке `` `` allModelsResults `` `список.

Заранее благодарим за помощь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...